Skip to content

Commit

Permalink
[C++] add definitions of constexpr lookup tables
Browse files Browse the repository at this point in the history
  • Loading branch information
nbradac committed Dec 10, 2024
1 parent d3f3bf4 commit daf0283
Showing 1 changed file with 32 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ public void generate() throws IOException
generateDisplay(sb, msgToken.name(), fields, groups, varData);
sb.append(generateMessageLength(groups, varData, BASE_INDENT));
sb.append("};\n");
generateLookupTableDefinitions(sb, className, fieldPrecedenceModel);
sb.append(CppUtil.closingBraces(namespaces.length)).append("#endif\n");
out.append(sb);
}
Expand Down Expand Up @@ -2975,30 +2976,6 @@ private static CharSequence generateLookupTableDeclarations(final FieldPrecedenc

final StringBuilder sb = new StringBuilder();

generateLookupTableDefinitions(sb, fieldPrecedenceModel);

sb.append(INDENT).append("static std::string codecStateName(CodecState state)\n")
.append(INDENT).append("{\n")
.append(TWO_INDENT).append("return STATE_NAME_LOOKUP[static_cast<int>(state)];\n")
.append(INDENT).append("}\n\n");

sb.append(INDENT).append("static std::string codecStateTransitions(CodecState state)\n")
.append(INDENT).append("{\n")
.append(TWO_INDENT).append("return STATE_TRANSITIONS_LOOKUP[static_cast<int>(state)];\n")
.append(INDENT).append("}\n\n");

return sb;
}

private static void generateLookupTableDefinitions(
final StringBuilder sb,
final FieldPrecedenceModel fieldPrecedenceModel)
{
if (null == fieldPrecedenceModel)
{
return;
}

sb.append(INDENT).append("static constexpr const char *STATE_NAME_LOOKUP[] =\n")
.append(INDENT).append("{\n");
fieldPrecedenceModel.forEachStateOrderedByStateNumber((state) ->
Expand Down Expand Up @@ -3031,6 +3008,37 @@ private static void generateLookupTableDefinitions(
sb.append("\",\n");
});
sb.append(INDENT).append("};\n\n");

sb.append(INDENT).append("static std::string codecStateName(CodecState state)\n")
.append(INDENT).append("{\n")
.append(TWO_INDENT).append("return STATE_NAME_LOOKUP[static_cast<int>(state)];\n")
.append(INDENT).append("}\n\n");

sb.append(INDENT).append("static std::string codecStateTransitions(CodecState state)\n")
.append(INDENT).append("{\n")
.append(TWO_INDENT).append("return STATE_TRANSITIONS_LOOKUP[static_cast<int>(state)];\n")
.append(INDENT).append("}\n\n");

return sb;
}

private static void generateLookupTableDefinitions(
final StringBuilder sb,
final String className,
final FieldPrecedenceModel fieldPrecedenceModel)
{
if (null == fieldPrecedenceModel)
{
return;
}

sb
.append("\nconstexpr const char *")
.append(className)
.append("::STATE_NAME_LOOKUP[];\n")
.append("constexpr const char *")
.append(className)
.append("::STATE_TRANSITIONS_LOOKUP[];\n\n");
}

private static CharSequence qualifiedStateCase(final FieldPrecedenceModel.State state)
Expand Down

0 comments on commit daf0283

Please sign in to comment.