Skip to content

Commit 6f01504

Browse files
authored
Merge pull request aeron-io#658 from denizevrenci/c_and_cpp_fixes
Various fixes to C and C++ generators
2 parents 978ae0a + cc7aeca commit 6f01504

File tree

4 files changed

+43
-42
lines changed

4 files changed

+43
-42
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/c/CGenerator.java

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -555,9 +555,11 @@ private CharSequence generateVarData(
555555
" if (!%5$s_set_sbe_position(\n" +
556556
" codec, %5$s_sbe_position(codec) + %3$d + length_field_value))\n" +
557557
" {\n" +
558-
" return {NULL, 0};\n" +
558+
" struct %6$s_string_view ret = {NULL, 0};\n" +
559+
" return ret;\n" +
559560
" }\n" +
560-
" return {field_ptr, length_field_value};\n" +
561+
" struct %6$s_string_view ret = {field_ptr, length_field_value};\n" +
562+
" return ret;\n" +
561563
"}\n",
562564
propertyName,
563565
generateStringViewNotPresentCondition(token.version()),
@@ -679,27 +681,6 @@ private void generateChoiceSet(final CharSequence[] scope, final List<Token> tok
679681
final String bitSetName = formatScopedName(scope, bitsetToken.applicableTypeName());
680682
out.append(generateFileHeader(bitSetName, null));
681683
out.append(generateFixedFlyweightStruct(bitSetName));
682-
out.append(String.format("\n" +
683-
"enum %1$s_meta_attribute\n" +
684-
"{\n" +
685-
" %1$s_meta_attribute_EPOCH,\n" +
686-
" %1$s_meta_attribute_TIME_UNIT,\n" +
687-
" %1$s_meta_attribute_SEMANTIC_TYPE,\n" +
688-
" %1$s_meta_attribute_PRESENCE\n" +
689-
"};\n\n" +
690-
691-
"union %1$s_float_as_uint\n" +
692-
"{\n" +
693-
" float fp_value;\n" +
694-
" uint32_t uint_value;\n" +
695-
"};\n\n" +
696-
697-
"union %1$s_double_as_uint\n" +
698-
"{\n" +
699-
" double fp_value;\n" +
700-
" uint64_t uint_value;\n" +
701-
"};\n",
702-
bitSetName));
703684
out.append(generateFixedFlyweightCodeFunctions(bitSetName, bitsetToken.encodedLength()));
704685

705686
out.append(String.format("\n" +
@@ -2231,7 +2212,7 @@ private static void generateBitsetPropertyFunctions(
22312212
final int offset = token.offset();
22322213

22332214
sb.append(String.format("\n" +
2234-
"struct %1$s *%4$s_%2$s(struct %4$s *const codec, struct %1$s *const bitset)\n" +
2215+
"SBE_ONE_DEF struct %1$s *%4$s_%2$s(struct %4$s *const codec, struct %1$s *const bitset)\n" +
22352216
"{\n" +
22362217
" return %1$s_wrap(\n" +
22372218
" bitset,\n" +
@@ -2246,10 +2227,11 @@ private static void generateBitsetPropertyFunctions(
22462227
containingStructName));
22472228

22482229
sb.append(String.format("\n" +
2249-
"SBE_ONE_DEF size_t %1$s_encoding_length(void)\n" +
2230+
"SBE_ONE_DEF size_t %s_%s_encoding_length(void)\n" +
22502231
"{\n" +
2251-
" return %2$d;\n" +
2232+
" return %d;\n" +
22522233
"}\n",
2234+
containingStructName,
22532235
propertyName,
22542236
token.encoding().primitiveType().size()));
22552237
}

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private static void generateGroupClassHeader(
212212
indent + "public:\n",
213213
formatClassName(groupName), dimensionsClassName));
214214

215-
sb.append(String.format("\n" +
215+
sb.append(String.format(
216216
indent + " inline void wrapForDecode(char *buffer, std::uint64_t *pos," +
217217
" const std::uint64_t actingVersion, const std::uint64_t bufferLength)\n" +
218218
indent + " {\n" +
@@ -356,7 +356,7 @@ private static CharSequence generateGroupProperty(
356356
className,
357357
propertyName));
358358

359-
sb.append(String.format("\n" +
359+
sb.append(String.format(
360360
indent + " static SBE_CONSTEXPR std::uint16_t %1$sId() SBE_NOEXCEPT\n" +
361361
indent + " {\n" +
362362
indent + " return %2$d;\n" +
@@ -640,7 +640,7 @@ private void generateChoiceSet(final List<Token> tokens) throws IOException
640640
out.append(generateClassDeclaration(bitSetName));
641641
out.append(generateFixedFlyweightCode(bitSetName, tokens.get(0).encodedLength()));
642642

643-
out.append(String.format(
643+
out.append(String.format("\n" +
644644
" %1$s &clear()\n" +
645645
" {\n" +
646646
" %2$s zero = 0;\n" +
@@ -679,8 +679,8 @@ private void generateEnum(final List<Token> tokens) throws IOException
679679

680680
out.append(generateEnumLookupMethod(tokens.subList(1, tokens.size() - 1), enumToken));
681681

682-
out.append("};\n");
683-
out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n");
682+
out.append("};\n\n");
683+
out.append(CppUtil.closingBraces(ir.namespaces().length)).append("\n#endif\n");
684684
}
685685
}
686686

@@ -698,8 +698,8 @@ private void generateComposite(final List<Token> tokens) throws IOException
698698
out.append(generateCompositePropertyElements(
699699
compositeName, tokens.subList(1, tokens.size() - 1), BASE_INDENT));
700700

701-
out.append("};\n");
702-
out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n");
701+
out.append("};\n\n");
702+
out.append(CppUtil.closingBraces(ir.namespaces().length)).append("\n#endif\n");
703703
}
704704
}
705705

@@ -793,7 +793,7 @@ private CharSequence generateEnumValues(final List<Token> tokens, final Token en
793793
final Encoding encoding = encodingToken.encoding();
794794

795795
sb.append(
796-
" enum Value \n" +
796+
" enum Value\n" +
797797
" {\n");
798798

799799
for (final Token token : tokens)
@@ -1040,7 +1040,7 @@ private static CharSequence generateClassDeclaration(final String className)
10401040

10411041
private static CharSequence generateEnumDeclaration(final String name)
10421042
{
1043-
return "class " + name + "\n{\npublic:\n\n";
1043+
return "class " + name + "\n{\npublic:\n";
10441044
}
10451045

10461046
private CharSequence generateCompositePropertyElements(
@@ -1322,7 +1322,7 @@ private CharSequence generateArrayProperty(
13221322
indent);
13231323

13241324
sb.append(String.format("\n" +
1325-
indent + " %1$s %2$s(std::uint64_t index) const\n" +
1325+
indent + " %1$s %2$s(const std::uint64_t index) const\n" +
13261326
indent + " {\n" +
13271327
indent + " if (index >= %3$d)\n" +
13281328
indent + " {\n" +
@@ -1344,7 +1344,7 @@ private CharSequence generateArrayProperty(
13441344
indent);
13451345

13461346
sb.append(String.format("\n" +
1347-
indent + " %1$s %2$s(std::uint64_t index, %3$s value)\n" +
1347+
indent + " %1$s &%2$s(const std::uint64_t index, const %3$s value)\n" +
13481348
indent + " {\n" +
13491349
indent + " if (index >= %4$d)\n" +
13501350
indent + " {\n" +
@@ -1361,7 +1361,7 @@ private CharSequence generateArrayProperty(
13611361
storeValue));
13621362

13631363
sb.append(String.format("\n" +
1364-
indent + " std::uint64_t get%1$s(char *dst, std::uint64_t length) const\n" +
1364+
indent + " std::uint64_t get%1$s(char *const dst, const std::uint64_t length) const\n" +
13651365
indent + " {\n" +
13661366
indent + " if (length > %2$d)\n" +
13671367
indent + " {\n" +
@@ -1379,7 +1379,7 @@ private CharSequence generateArrayProperty(
13791379
cppTypeName));
13801380

13811381
sb.append(String.format("\n" +
1382-
indent + " %1$s &put%2$s(const char *src) SBE_NOEXCEPT\n" +
1382+
indent + " %1$s &put%2$s(const char *const src) SBE_NOEXCEPT\n" +
13831383
indent + " {\n" +
13841384
indent + " std::memcpy(m_buffer + m_offset + %3$d, src, sizeof(%4$s) * %5$d);\n" +
13851385
indent + " return *this;\n" +
@@ -1426,7 +1426,7 @@ private CharSequence generateArrayProperty(
14261426

14271427
sb.append(String.format("\n" +
14281428
indent + " #if __cplusplus >= 201703L\n" +
1429-
indent + " %1$s &put%2$s(std::string_view str)\n" +
1429+
indent + " %1$s &put%2$s(const std::string_view str)\n" +
14301430
indent + " {\n" +
14311431
indent + " const size_t srcLength = str.length();\n" +
14321432
indent + " if (srcLength > %4$d)\n" +
@@ -2085,7 +2085,7 @@ private static Object generateBitsetProperty(final String propertyName, final To
20852085
bitsetName,
20862086
propertyName));
20872087

2088-
sb.append(String.format("\n" +
2088+
sb.append(String.format(
20892089
indent + " %1$s &%2$s()\n" +
20902090
indent + " {\n" +
20912091
indent + " m_%2$s.wrap(m_buffer, m_offset + %3$d, m_actingVersion, m_bufferLength);\n" +
@@ -2121,7 +2121,7 @@ private static Object generateCompositeProperty(final String propertyName, final
21212121
compositeName,
21222122
propertyName));
21232123

2124-
sb.append(String.format("\n" +
2124+
sb.append(String.format(
21252125
indent + " %1$s &%2$s()\n" +
21262126
indent + " {\n" +
21272127
indent + " m_%2$s.wrap(m_buffer, m_offset + %3$d, m_actingVersion, m_bufferLength);\n" +
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include <code_generation_test/car.h>
2+
#include <code_generation_test/messageHeader.h>
3+
4+
#include <group_with_data/testMessage1.h>
5+
#include <group_with_data/testMessage2.h>
6+
#include <group_with_data/testMessage3.h>
7+
#include <group_with_data/testMessage4.h>
8+
9+
int main() {
10+
}

sbe-tool/src/test/c/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,12 @@ add_custom_target(c_codecs DEPENDS ${GENERATED_CODECS})
5555
sbe_test(BoundsCheckTest c_codecs)
5656
sbe_test(CodeGenTest c_codecs)
5757
sbe_test(GroupWithDataTest c_codecs)
58+
59+
# Compile a dummy C source to test C compliance of generated headers.
60+
add_executable(CComplianceTest CComplianceTest.c)
61+
62+
target_include_directories(CComplianceTest
63+
PRIVATE ${C_CODEC_TARGET_DIR}
64+
)
65+
66+
add_dependencies(CComplianceTest c_codecs)

0 commit comments

Comments
 (0)