@@ -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 {\n public:\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