@@ -822,60 +822,65 @@ private CharSequence generateChoices(final String bitsetClassName, final List<To
822822 .forEach ((token ) ->
823823 {
824824 final String choiceName = formatPropertyName (token .name ());
825- final String typeName = cppTypeName (token .encoding ().primitiveType ());
825+ final PrimitiveType type = token .encoding ().primitiveType ();
826+ final String typeName = cppTypeName (type );
826827 final String choiceBitPosition = token .encoding ().constValue ().toString ();
827- final String byteOrderStr = formatByteOrderEncoding (
828- token . encoding (). byteOrder (), token . encoding (). primitiveType () );
828+ final String byteOrderStr = formatByteOrderEncoding (token . encoding (). byteOrder (), type );
829+ final CharSequence constantOne = generateLiteral ( type , "1" );
829830
830831 new Formatter (sb ).format ("\n " +
831832 " static bool %1$s(const %2$s bits)\n " +
832833 " {\n " +
833- " return (bits & (1u << %3$su)) != 0;\n " +
834+ " return (bits & (%4$s << %3$su)) != 0;\n " +
834835 " }\n " ,
835836 choiceName ,
836837 typeName ,
837- choiceBitPosition );
838+ choiceBitPosition ,
839+ constantOne );
838840
839841 new Formatter (sb ).format ("\n " +
840842 " static %2$s %1$s(const %2$s bits, const bool value)\n " +
841843 " {\n " +
842844 " return value ?" +
843- " static_cast<%2$s>(bits | (1u << %3$su)) : static_cast<%2$s>(bits & ~(1u << %3$su));\n " +
845+ " static_cast<%2$s>(bits | (%4$s << %3$su)) : static_cast<%2$s>(bits & ~(%4$s << %3$su));\n " +
844846 " }\n " ,
845847 choiceName ,
846848 typeName ,
847- choiceBitPosition );
849+ choiceBitPosition ,
850+ constantOne );
848851
849852 new Formatter (sb ).format ("\n " +
850853 " SBE_NODISCARD bool %1$s() const\n " +
851854 " {\n " +
852855 "%2$s" +
853856 " %4$s val;\n " +
854857 " std::memcpy(&val, m_buffer + m_offset, sizeof(%4$s));\n " +
855- " return (%3$s(val) & (1u << %5$su)) != 0;\n " +
858+ " return (%3$s(val) & (%6$s << %5$su)) != 0;\n " +
856859 " }\n " ,
857860 choiceName ,
858861 generateChoiceNotPresentCondition (token .version ()),
859862 byteOrderStr ,
860863 typeName ,
861- choiceBitPosition );
864+ choiceBitPosition ,
865+ constantOne );
862866
863867 new Formatter (sb ).format ("\n " +
864868 " %1$s &%2$s(const bool value)\n " +
865869 " {\n " +
866870 " %3$s bits;\n " +
867871 " std::memcpy(&bits, m_buffer + m_offset, sizeof(%3$s));\n " +
868872 " bits = %4$s(value ?" +
869- " static_cast<%3$s>(%4$s(bits) | (1u << %5$su)) " +
870- ": static_cast<%3$s>(%4$s(bits) & ~(1u << %5$su)));\n " +
873+ " static_cast<%3$s>(%4$s(bits) | (%6$s << %5$su)) " +
874+ ": static_cast<%3$s>(%4$s(bits) & ~(%6$s << %5$su)));\n " +
871875 " std::memcpy(m_buffer + m_offset, &bits, sizeof(%3$s));\n " +
872876 " return *this;\n " +
873877 " }\n " ,
874878 bitsetClassName ,
875879 choiceName ,
876880 typeName ,
877881 byteOrderStr ,
878- choiceBitPosition );
882+ choiceBitPosition ,
883+ constantOne );
879884 });
880885
881886 return sb ;
0 commit comments