Skip to content

Commit daf0283

Browse files
committed
[C++] add definitions of constexpr lookup tables
1 parent d3f3bf4 commit daf0283

File tree

1 file changed

+32
-24
lines changed

1 file changed

+32
-24
lines changed

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

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ public void generate() throws IOException
243243
generateDisplay(sb, msgToken.name(), fields, groups, varData);
244244
sb.append(generateMessageLength(groups, varData, BASE_INDENT));
245245
sb.append("};\n");
246+
generateLookupTableDefinitions(sb, className, fieldPrecedenceModel);
246247
sb.append(CppUtil.closingBraces(namespaces.length)).append("#endif\n");
247248
out.append(sb);
248249
}
@@ -2975,30 +2976,6 @@ private static CharSequence generateLookupTableDeclarations(final FieldPrecedenc
29752976

29762977
final StringBuilder sb = new StringBuilder();
29772978

2978-
generateLookupTableDefinitions(sb, fieldPrecedenceModel);
2979-
2980-
sb.append(INDENT).append("static std::string codecStateName(CodecState state)\n")
2981-
.append(INDENT).append("{\n")
2982-
.append(TWO_INDENT).append("return STATE_NAME_LOOKUP[static_cast<int>(state)];\n")
2983-
.append(INDENT).append("}\n\n");
2984-
2985-
sb.append(INDENT).append("static std::string codecStateTransitions(CodecState state)\n")
2986-
.append(INDENT).append("{\n")
2987-
.append(TWO_INDENT).append("return STATE_TRANSITIONS_LOOKUP[static_cast<int>(state)];\n")
2988-
.append(INDENT).append("}\n\n");
2989-
2990-
return sb;
2991-
}
2992-
2993-
private static void generateLookupTableDefinitions(
2994-
final StringBuilder sb,
2995-
final FieldPrecedenceModel fieldPrecedenceModel)
2996-
{
2997-
if (null == fieldPrecedenceModel)
2998-
{
2999-
return;
3000-
}
3001-
30022979
sb.append(INDENT).append("static constexpr const char *STATE_NAME_LOOKUP[] =\n")
30032980
.append(INDENT).append("{\n");
30042981
fieldPrecedenceModel.forEachStateOrderedByStateNumber((state) ->
@@ -3031,6 +3008,37 @@ private static void generateLookupTableDefinitions(
30313008
sb.append("\",\n");
30323009
});
30333010
sb.append(INDENT).append("};\n\n");
3011+
3012+
sb.append(INDENT).append("static std::string codecStateName(CodecState state)\n")
3013+
.append(INDENT).append("{\n")
3014+
.append(TWO_INDENT).append("return STATE_NAME_LOOKUP[static_cast<int>(state)];\n")
3015+
.append(INDENT).append("}\n\n");
3016+
3017+
sb.append(INDENT).append("static std::string codecStateTransitions(CodecState state)\n")
3018+
.append(INDENT).append("{\n")
3019+
.append(TWO_INDENT).append("return STATE_TRANSITIONS_LOOKUP[static_cast<int>(state)];\n")
3020+
.append(INDENT).append("}\n\n");
3021+
3022+
return sb;
3023+
}
3024+
3025+
private static void generateLookupTableDefinitions(
3026+
final StringBuilder sb,
3027+
final String className,
3028+
final FieldPrecedenceModel fieldPrecedenceModel)
3029+
{
3030+
if (null == fieldPrecedenceModel)
3031+
{
3032+
return;
3033+
}
3034+
3035+
sb
3036+
.append("\nconstexpr const char *")
3037+
.append(className)
3038+
.append("::STATE_NAME_LOOKUP[];\n")
3039+
.append("constexpr const char *")
3040+
.append(className)
3041+
.append("::STATE_TRANSITIONS_LOOKUP[];\n\n");
30343042
}
30353043

30363044
private static CharSequence qualifiedStateCase(final FieldPrecedenceModel.State state)

0 commit comments

Comments
 (0)