Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,9 @@ public void generate() throws IOException
generateGroups(sb, groups, BASE_INDENT);
out.append(sb);
out.append(generateVarData(className, varData, BASE_INDENT));

out.append(CppUtil.closingBraces(ir.namespaces().length) + "}\n#endif\n");
out.append("};\n");
out.append(generateStaticDefinitions(className));
out.append(CppUtil.closingBraces(ir.namespaces().length) + "#endif\n");
}
}
}
Expand Down Expand Up @@ -843,6 +844,11 @@ private static CharSequence generateFileHeader(
"# include <string>\n" +
"# include <cstring>\n" +
"#endif\n\n" +
"#if __cplusplus >= 201103L\n" +
"# define SBE_CONST_KIND constexpr\n" +
"#else\n" +
"# define SBE_CONST_KIND const\n" +
"#endif\n\n" +
"#include <sbe/sbe.h>\n\n",
String.join("_", namespaces).toUpperCase(),
className.toUpperCase()
Expand Down Expand Up @@ -879,6 +885,32 @@ private static CharSequence generateClassDeclaration(final String className)
);
}

private String generateStaticDefinitions(final String className)
{
return
generateStaticDefinition(
className, "SbeBlockLength", cppTypeName(ir.headerStructure().blockLengthType()), false) +
generateStaticDefinition(
className, "SbeTemplateId", cppTypeName(ir.headerStructure().templateIdType()), false) +
generateStaticDefinition(
className, "SbeSchemaId", cppTypeName(ir.headerStructure().schemaIdType()), false) +
generateStaticDefinition(
className, "SbeSchemaVersion", cppTypeName(ir.headerStructure().schemaVersionType()), false) +
generateStaticDefinition(className, "SbeSemanticType", "char", true);
}

private static String generateStaticDefinition(
final String className, final String memberName, final String memberType, boolean isArray)
{
return String.format(
"SBE_CONST_KIND %3$s %1$s::%2$s%4$s;\n",
className,
memberName,
memberType,
(isArray ? "[]" : "")
);
}

private static CharSequence generateEnumDeclaration(final String name)
{
return "class " + name + "\n{\npublic:\n\n";
Expand Down Expand Up @@ -1373,25 +1405,30 @@ private CharSequence generateMessageFlyweightCode(final String className, final
" }\n\n" +
"public:\n\n" +
"%11$s" +
" static SBE_CONST_KIND %1$s SbeBlockLength{%2$s};\n" +
" static const %1$s sbeBlockLength(void)\n" +
" {\n" +
" return %2$s;\n" +
" return SbeBlockLength;\n" +
" }\n\n" +
" static SBE_CONST_KIND %3$s SbeTemplateId{%4$s};\n" +
" static const %3$s sbeTemplateId(void)\n" +
" {\n" +
" return %4$s;\n" +
" return SbeTemplateId;\n" +
" }\n\n" +
" static SBE_CONST_KIND %5$s SbeSchemaId{%6$s};\n" +
" static const %5$s sbeSchemaId(void)\n" +
" {\n" +
" return %6$s;\n" +
" return SbeSchemaId;\n" +
" }\n\n" +
" static SBE_CONST_KIND %7$s SbeSchemaVersion{%8$s};\n" +
" static const %7$s sbeSchemaVersion(void)\n" +
" {\n" +
" return %8$s;\n" +
" return SbeSchemaVersion;\n" +
" }\n\n" +
" static SBE_CONST_KIND char SbeSemanticType[] = \"%9$s\";\n" +
" static const char *sbeSemanticType(void)\n" +
" {\n" +
" return \"%9$s\";\n" +
" return SbeSemanticType;\n" +
" }\n\n" +
" std::uint64_t offset(void) const\n" +
" {\n" +
Expand Down