diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java index aee24d877c..d293b826df 100755 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java @@ -822,29 +822,32 @@ private CharSequence generateChoices(final String bitsetClassName, final List { final String choiceName = formatPropertyName(token.name()); - final String typeName = cppTypeName(token.encoding().primitiveType()); + final PrimitiveType type = token.encoding().primitiveType(); + final String typeName = cppTypeName(type); final String choiceBitPosition = token.encoding().constValue().toString(); - final String byteOrderStr = formatByteOrderEncoding( - token.encoding().byteOrder(), token.encoding().primitiveType()); + final String byteOrderStr = formatByteOrderEncoding(token.encoding().byteOrder(), type); + final CharSequence constantOne = generateLiteral(type, "1"); new Formatter(sb).format("\n" + " static bool %1$s(const %2$s bits)\n" + " {\n" + - " return (bits & (1u << %3$su)) != 0;\n" + + " return (bits & (%4$s << %3$su)) != 0;\n" + " }\n", choiceName, typeName, - choiceBitPosition); + choiceBitPosition, + constantOne); new Formatter(sb).format("\n" + " static %2$s %1$s(const %2$s bits, const bool value)\n" + " {\n" + " return value ?" + - " static_cast<%2$s>(bits | (1u << %3$su)) : static_cast<%2$s>(bits & ~(1u << %3$su));\n" + + " static_cast<%2$s>(bits | (%4$s << %3$su)) : static_cast<%2$s>(bits & ~(%4$s << %3$su));\n" + " }\n", choiceName, typeName, - choiceBitPosition); + choiceBitPosition, + constantOne); new Formatter(sb).format("\n" + " SBE_NODISCARD bool %1$s() const\n" + @@ -852,13 +855,14 @@ private CharSequence generateChoices(final String bitsetClassName, final List(%4$s(bits) | (1u << %5$su)) " + - ": static_cast<%3$s>(%4$s(bits) & ~(1u << %5$su)));\n" + + " static_cast<%3$s>(%4$s(bits) | (%6$s << %5$su)) " + + ": static_cast<%3$s>(%4$s(bits) & ~(%6$s << %5$su)));\n" + " std::memcpy(m_buffer + m_offset, &bits, sizeof(%3$s));\n" + " return *this;\n" + " }\n", @@ -875,7 +879,8 @@ private CharSequence generateChoices(final String bitsetClassName, final List + + + + 0 + 35 + + + + + + + + + + + +