diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java index 65d6a627e..e1ae7e16f 100755 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java @@ -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); } @@ -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(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(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) -> @@ -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(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(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)