@@ -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