Skip to content

Commit e9957fb

Browse files
committed
[C++] Use initializer lists and remove reset methods.
1 parent b47b2cc commit e9957fb

File tree

1 file changed

+54
-59
lines changed

1 file changed

+54
-59
lines changed

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

Lines changed: 54 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -273,13 +273,17 @@ private static void generateGroupClassHeader(
273273
indent + " {\n" +
274274
indent + " return *m_positionPtr;\n" +
275275
indent + " }\n\n" +
276-
indent + " void sbePosition(const std::uint64_t position)\n" +
276+
indent + " std::uint64_t sbeCheckPosition(const std::uint64_t position)\n" +
277277
indent + " {\n" +
278278
indent + " if (SBE_BOUNDS_CHECK_EXPECT((position > m_bufferLength), false))\n" +
279279
indent + " {\n" +
280-
indent + " throw std::runtime_error(\"buffer too short [E100]\");\n" +
280+
indent + " throw std::runtime_error(\"buffer too short [E100]\");\n" +
281281
indent + " }\n" +
282-
indent + " *m_positionPtr = position;\n" +
282+
indent + " return position;\n" +
283+
indent + " }\n\n" +
284+
indent + " void sbePosition(const std::uint64_t position)\n" +
285+
indent + " {\n" +
286+
indent + " *m_positionPtr = sbeCheckPosition(position);\n" +
283287
indent + " }\n\n" +
284288
indent + " inline std::uint64_t count() const SBE_NOEXCEPT\n" +
285289
indent + " {\n" +
@@ -1518,18 +1522,6 @@ private CharSequence generateFixedFlyweightCode(final String className, final in
15181522
" std::uint64_t m_bufferLength;\n" +
15191523
" std::uint64_t m_offset = 0;\n" +
15201524
" std::uint64_t m_actingVersion;\n\n" +
1521-
" inline void reset(char *buffer, const std::uint64_t offset, const std::uint64_t bufferLength," +
1522-
" const std::uint64_t actingVersion)\n" +
1523-
" {\n" +
1524-
" if (SBE_BOUNDS_CHECK_EXPECT(((offset + %2$s) > bufferLength), false))\n" +
1525-
" {\n" +
1526-
" throw std::runtime_error(\"buffer too short for flyweight [E107]\");\n" +
1527-
" }\n\n" +
1528-
" m_buffer = buffer;\n" +
1529-
" m_bufferLength = bufferLength;\n" +
1530-
" m_offset = offset;\n" +
1531-
" m_actingVersion = actingVersion;\n" +
1532-
" }\n\n" +
15331525
"public:\n" +
15341526
" enum MetaAttribute\n" +
15351527
" {\n" +
@@ -1546,15 +1538,32 @@ private CharSequence generateFixedFlyweightCode(final String className, final in
15461538
" std::uint64_t uint_value;\n" +
15471539
" };\n\n" +
15481540
" %1$s() = default;\n\n" +
1549-
" %1$s(char *buffer, const std::uint64_t bufferLength, const std::uint64_t actingVersion)\n" +
1541+
" %1$s(\n" +
1542+
" char *buffer,\n" +
1543+
" const std::uint64_t offset,\n" +
1544+
" const std::uint64_t bufferLength,\n" +
1545+
" const std::uint64_t actingVersion) :\n" +
1546+
" m_buffer(buffer),\n" +
1547+
" m_bufferLength(bufferLength),\n" +
1548+
" m_offset(offset),\n" +
1549+
" m_actingVersion(actingVersion)\n" +
1550+
" {\n" +
1551+
" if (SBE_BOUNDS_CHECK_EXPECT(((m_offset + %2$s) > m_bufferLength), false))\n" +
1552+
" {\n" +
1553+
" throw std::runtime_error(\"buffer too short for flyweight [E107]\");\n" +
1554+
" }\n" +
1555+
" }\n\n" +
1556+
" %1$s(\n" +
1557+
" char *buffer,\n" +
1558+
" const std::uint64_t bufferLength,\n" +
1559+
" const std::uint64_t actingVersion) :\n" +
1560+
" %1$s(buffer, 0, bufferLength, actingVersion)\n" +
15501561
" {\n" +
1551-
" reset(buffer, 0, bufferLength, actingVersion);\n" +
15521562
" }\n\n" +
15531563
" %1$s &wrap(char *buffer, const std::uint64_t offset, const std::uint64_t actingVersion," +
15541564
" const std::uint64_t bufferLength)\n" +
15551565
" {\n" +
1556-
" reset(buffer, offset, bufferLength, actingVersion);\n" +
1557-
" return *this;\n" +
1566+
" return *this = %1$s(buffer, offset, bufferLength, actingVersion);\n" +
15581567
" }\n\n" +
15591568
" static SBE_CONSTEXPR std::uint64_t encodedLength() SBE_NOEXCEPT\n" +
15601569
" {\n" +
@@ -1596,23 +1605,28 @@ private static CharSequence generateConstructorsAndOperators(final String classN
15961605
{
15971606
return String.format(
15981607
" %1$s() = default;\n\n" +
1599-
" %1$s(char *buffer, const std::uint64_t bufferLength)\n" +
1600-
" {\n" +
1601-
" reset(buffer, 0, bufferLength, sbeBlockLength(), sbeSchemaVersion());\n" +
1602-
" }\n\n" +
1603-
" %1$s(char *buffer, const std::uint64_t bufferLength, const std::uint64_t actingBlockLength," +
1604-
" const std::uint64_t actingVersion)\n" +
1608+
" %1$s(\n" +
1609+
" char *buffer,\n" +
1610+
" const std::uint64_t offset,\n" +
1611+
" const std::uint64_t bufferLength,\n" +
1612+
" const std::uint64_t actingBlockLength,\n" +
1613+
" const std::uint64_t actingVersion) :\n" +
1614+
" m_buffer(buffer),\n" +
1615+
" m_bufferLength(bufferLength),\n" +
1616+
" m_offset(offset),\n" +
1617+
" m_position(sbeCheckPosition(offset + actingBlockLength)),\n" +
1618+
" m_actingBlockLength(actingBlockLength),\n" +
1619+
" m_actingVersion(actingVersion)\n" +
16051620
" {\n" +
1606-
" reset(buffer, 0, bufferLength, actingBlockLength, actingVersion);\n" +
16071621
" }\n\n" +
1608-
" %1$s(const %1$s& codec) SBE_NOEXCEPT\n" +
1622+
" %1$s(char *buffer, const std::uint64_t bufferLength) :\n" +
1623+
" %1$s(buffer, 0, bufferLength, sbeBlockLength(), sbeSchemaVersion())\n" +
16091624
" {\n" +
1610-
" reset(codec);\n" +
16111625
" }\n\n" +
1612-
" %1$s& operator=(const %1$s& codec) SBE_NOEXCEPT\n" +
1626+
" %1$s(char *buffer, const std::uint64_t bufferLength, const std::uint64_t actingBlockLength," +
1627+
" const std::uint64_t actingVersion) :\n" +
1628+
" %1$s(buffer, 0, bufferLength, actingBlockLength, actingVersion)\n" +
16131629
" {\n" +
1614-
" reset(codec);\n" +
1615-
" return *this;\n" +
16161630
" }\n\n",
16171631
className);
16181632
}
@@ -1633,26 +1647,6 @@ private CharSequence generateMessageFlyweightCode(final String className, final
16331647
" std::uint64_t m_position;\n" +
16341648
" std::uint64_t m_actingBlockLength;\n" +
16351649
" std::uint64_t m_actingVersion;\n\n" +
1636-
" inline void reset(\n" +
1637-
" char *buffer, const std::uint64_t offset, const std::uint64_t bufferLength,\n" +
1638-
" const std::uint64_t actingBlockLength, const std::uint64_t actingVersion)\n" +
1639-
" {\n" +
1640-
" m_buffer = buffer;\n" +
1641-
" m_offset = offset;\n" +
1642-
" m_bufferLength = bufferLength;\n" +
1643-
" m_actingBlockLength = actingBlockLength;\n" +
1644-
" m_actingVersion = actingVersion;\n" +
1645-
" sbePosition(offset + m_actingBlockLength);\n" +
1646-
" }\n\n" +
1647-
" inline void reset(const %10$s& codec) SBE_NOEXCEPT\n" +
1648-
" {\n" +
1649-
" m_buffer = codec.m_buffer;\n" +
1650-
" m_offset = codec.m_offset;\n" +
1651-
" m_bufferLength = codec.m_bufferLength;\n" +
1652-
" m_actingBlockLength = codec.m_actingBlockLength;\n" +
1653-
" m_actingVersion = codec.m_actingVersion;\n" +
1654-
" m_position = codec.m_position;\n" +
1655-
" }\n\n" +
16561650
" inline std::uint64_t *sbePositionPtr() SBE_NOEXCEPT\n" +
16571651
" {\n" +
16581652
" return &m_position;\n" +
@@ -1699,8 +1693,7 @@ private CharSequence generateMessageFlyweightCode(final String className, final
16991693
" }\n\n" +
17001694
" %10$s &wrapForEncode(char *buffer, const std::uint64_t offset, const std::uint64_t bufferLength)\n" +
17011695
" {\n" +
1702-
" reset(buffer, offset, bufferLength, sbeBlockLength(), sbeSchemaVersion());\n" +
1703-
" return *this;\n" +
1696+
" return *this = %10$s(buffer, offset, bufferLength, sbeBlockLength(), sbeSchemaVersion());\n" +
17041697
" }\n\n" +
17051698
" %10$s &wrapAndApplyHeader(" +
17061699
"char *buffer, const std::uint64_t offset, const std::uint64_t bufferLength)\n" +
@@ -1711,32 +1704,34 @@ private CharSequence generateMessageFlyweightCode(final String className, final
17111704
" .templateId(sbeTemplateId())\n" +
17121705
" .schemaId(sbeSchemaId())\n" +
17131706
" .version(sbeSchemaVersion());\n\n" +
1714-
" reset(\n" +
1707+
" return *this = %10$s(\n" +
17151708
" buffer + offset + MessageHeader::encodedLength(),\n" +
17161709
" 0,\n" +
17171710
" bufferLength - MessageHeader::encodedLength(),\n" +
17181711
" sbeBlockLength()\n," +
17191712
" sbeSchemaVersion());\n" +
1720-
" return *this;\n" +
17211713
" }\n\n" +
17221714
" %10$s &wrapForDecode(\n" +
17231715
" char *buffer, const std::uint64_t offset, const std::uint64_t actingBlockLength,\n" +
17241716
" const std::uint64_t actingVersion, const std::uint64_t bufferLength)\n" +
17251717
" {\n" +
1726-
" reset(buffer, offset, bufferLength, actingBlockLength, actingVersion);\n" +
1727-
" return *this;\n" +
1718+
" return *this = %10$s(buffer, offset, bufferLength, actingBlockLength, actingVersion);\n" +
17281719
" }\n\n" +
17291720
" std::uint64_t sbePosition() const SBE_NOEXCEPT\n" +
17301721
" {\n" +
17311722
" return m_position;\n" +
17321723
" }\n\n" +
1733-
" void sbePosition(const std::uint64_t position)\n" +
1724+
" std::uint64_t sbeCheckPosition(const std::uint64_t position)\n" +
17341725
" {\n" +
17351726
" if (SBE_BOUNDS_CHECK_EXPECT((position > m_bufferLength), false))\n" +
17361727
" {\n" +
17371728
" throw std::runtime_error(\"buffer too short [E100]\");\n" +
17381729
" }\n" +
1739-
" m_position = position;\n" +
1730+
" return position;\n" +
1731+
" }\n\n" +
1732+
" void sbePosition(const std::uint64_t position)\n" +
1733+
" {\n" +
1734+
" m_position = sbeCheckPosition(position);\n" +
17401735
" }\n\n" +
17411736
" std::uint64_t encodedLength() const SBE_NOEXCEPT\n" +
17421737
" {\n" +

0 commit comments

Comments
 (0)