Skip to content

Commit 6314e29

Browse files
committed
[C++] Don't generate id methods when in a composite. Issue #640.
1 parent c60ac3f commit 6314e29

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public void generate() throws IOException
132132
collectVarData(messageBody, i, varData);
133133

134134
final StringBuilder sb = new StringBuilder();
135-
out.append(generateFields(className, fields, BASE_INDENT));
135+
out.append(generateFields(className, fields, BASE_INDENT, false));
136136
generateGroups(sb, groups, BASE_INDENT);
137137
out.append(sb);
138138
out.append(generateVarData(className, varData, BASE_INDENT));
@@ -164,7 +164,7 @@ private void generateGroups(final StringBuilder sb, final List<Token> tokens, fi
164164

165165
final List<Token> fields = new ArrayList<>();
166166
i = collectFields(tokens, i, fields);
167-
sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT));
167+
sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT, false));
168168

169169
final List<Token> groups = new ArrayList<>();
170170
i = collectGroups(tokens, i, groups);
@@ -976,7 +976,7 @@ private CharSequence generateCompositePropertyElements(
976976
final String propertyName = formatPropertyName(fieldToken.name());
977977

978978
generateFieldMetaAttributeMethod(sb, fieldToken, indent);
979-
generateFieldCommonMethods(indent, sb, fieldToken, fieldToken, propertyName);
979+
generateFieldCommonMethods(indent, sb, fieldToken, fieldToken, propertyName, true);
980980

981981
switch (fieldToken.signal())
982982
{
@@ -1669,7 +1669,8 @@ private CharSequence generateMessageFlyweightCode(final String className, final
16691669
generateConstructorsAndOperators(className));
16701670
}
16711671

1672-
private CharSequence generateFields(final String containingClassName, final List<Token> tokens, final String indent)
1672+
private CharSequence generateFields(
1673+
final String containingClassName, final List<Token> tokens, final String indent, final boolean inComposite)
16731674
{
16741675
final StringBuilder sb = new StringBuilder();
16751676

@@ -1682,7 +1683,7 @@ private CharSequence generateFields(final String containingClassName, final List
16821683
final String propertyName = formatPropertyName(signalToken.name());
16831684

16841685
generateFieldMetaAttributeMethod(sb, signalToken, indent);
1685-
generateFieldCommonMethods(indent, sb, signalToken, encodingToken, propertyName);
1686+
generateFieldCommonMethods(indent, sb, signalToken, encodingToken, propertyName, inComposite);
16861687

16871688
switch (encodingToken.signal())
16881689
{
@@ -1714,15 +1715,19 @@ private void generateFieldCommonMethods(
17141715
final StringBuilder sb,
17151716
final Token fieldToken,
17161717
final Token encodingToken,
1717-
final String propertyName)
1718+
final String propertyName,
1719+
final boolean inComposite)
17181720
{
1719-
sb.append(String.format("\n" +
1720-
indent + " static SBE_CONSTEXPR std::uint16_t %1$sId() SBE_NOEXCEPT\n" +
1721-
indent + " {\n" +
1722-
indent + " return %2$d;\n" +
1723-
indent + " }\n",
1724-
propertyName,
1725-
fieldToken.id()));
1721+
if (!inComposite)
1722+
{
1723+
sb.append(String.format("\n" +
1724+
indent + " static SBE_CONSTEXPR std::uint16_t %1$sId() SBE_NOEXCEPT\n" +
1725+
indent + " {\n" +
1726+
indent + " return %2$d;\n" +
1727+
indent + " }\n",
1728+
propertyName,
1729+
fieldToken.id()));
1730+
}
17261731

17271732
sb.append(String.format("\n" +
17281733
indent + " static SBE_CONSTEXPR std::uint64_t %1$sSinceVersion() SBE_NOEXCEPT\n" +

0 commit comments

Comments
 (0)