Skip to content

Commit fe16a8c

Browse files
committed
[C++]: Static constexpr fields in CppGenerator
Limited to HeaderStructure data
1 parent 9ed9b77 commit fe16a8c

File tree

1 file changed

+44
-7
lines changed

1 file changed

+44
-7
lines changed

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

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,9 @@ public void generate() throws IOException
145145
generateGroups(sb, groups, BASE_INDENT);
146146
out.append(sb);
147147
out.append(generateVarData(className, varData, BASE_INDENT));
148-
149-
out.append(CppUtil.closingBraces(ir.namespaces().length) + "}\n#endif\n");
148+
out.append("};\n");
149+
out.append(generateStaticDefinitions(className));
150+
out.append(CppUtil.closingBraces(ir.namespaces().length) + "#endif\n");
150151
}
151152
}
152153
}
@@ -843,6 +844,11 @@ private static CharSequence generateFileHeader(
843844
"# include <string>\n" +
844845
"# include <cstring>\n" +
845846
"#endif\n\n" +
847+
"#if __cplusplus >= 201103L\n" +
848+
"# define SBE_CONST_KIND constexpr\n" +
849+
"#else\n" +
850+
"# define SBE_CONST_KIND const\n" +
851+
"#endif\n\n" +
846852
"#include <sbe/sbe.h>\n\n",
847853
String.join("_", namespaces).toUpperCase(),
848854
className.toUpperCase()
@@ -879,6 +885,32 @@ private static CharSequence generateClassDeclaration(final String className)
879885
);
880886
}
881887

888+
private String generateStaticDefinitions(final String className)
889+
{
890+
return
891+
generateStaticDefinition(
892+
className, "SbeBlockLength", cppTypeName(ir.headerStructure().blockLengthType()), false) +
893+
generateStaticDefinition(
894+
className, "SbeTemplateId", cppTypeName(ir.headerStructure().templateIdType()), false) +
895+
generateStaticDefinition(
896+
className, "SbeSchemaId", cppTypeName(ir.headerStructure().schemaIdType()), false) +
897+
generateStaticDefinition(
898+
className, "SbeSchemaVersion", cppTypeName(ir.headerStructure().schemaVersionType()), false) +
899+
generateStaticDefinition(className, "SbeSemanticType", "char", true);
900+
}
901+
902+
private static String generateStaticDefinition(
903+
final String className, final String memberName, final String memberType, boolean isArray)
904+
{
905+
return String.format(
906+
"SBE_CONST_KIND %3$s %1$s::%2$s%4$s;\n",
907+
className,
908+
memberName,
909+
memberType,
910+
(isArray ? "[]" : "")
911+
);
912+
}
913+
882914
private static CharSequence generateEnumDeclaration(final String name)
883915
{
884916
return "class " + name + "\n{\npublic:\n\n";
@@ -1373,25 +1405,30 @@ private CharSequence generateMessageFlyweightCode(final String className, final
13731405
" }\n\n" +
13741406
"public:\n\n" +
13751407
"%11$s" +
1408+
" static SBE_CONST_KIND %1$s SbeBlockLength{%2$s};\n" +
13761409
" static const %1$s sbeBlockLength(void)\n" +
13771410
" {\n" +
1378-
" return %2$s;\n" +
1411+
" return SbeBlockLength;\n" +
13791412
" }\n\n" +
1413+
" static SBE_CONST_KIND %3$s SbeTemplateId{%4$s};\n" +
13801414
" static const %3$s sbeTemplateId(void)\n" +
13811415
" {\n" +
1382-
" return %4$s;\n" +
1416+
" return SbeTemplateId;\n" +
13831417
" }\n\n" +
1418+
" static SBE_CONST_KIND %5$s SbeSchemaId{%6$s};\n" +
13841419
" static const %5$s sbeSchemaId(void)\n" +
13851420
" {\n" +
1386-
" return %6$s;\n" +
1421+
" return SbeSchemaId;\n" +
13871422
" }\n\n" +
1423+
" static SBE_CONST_KIND %7$s SbeSchemaVersion{%8$s};\n" +
13881424
" static const %7$s sbeSchemaVersion(void)\n" +
13891425
" {\n" +
1390-
" return %8$s;\n" +
1426+
" return SbeSchemaVersion;\n" +
13911427
" }\n\n" +
1428+
" static SBE_CONST_KIND char SbeSemanticType[] = \"%9$s\";\n" +
13921429
" static const char *sbeSemanticType(void)\n" +
13931430
" {\n" +
1394-
" return \"%9$s\";\n" +
1431+
" return SbeSemanticType;\n" +
13951432
" }\n\n" +
13961433
" std::uint64_t offset(void) const\n" +
13971434
" {\n" +

0 commit comments

Comments
 (0)