private CharSequence generateEnumValues(final List<Token> tokens, final Token encodingToken) { final StringBuilder sb = new StringBuilder(); final Encoding encoding = encodingToken.encoding(); for (final Token token : tokens) { sb.append(INDENT).append(INDENT).append(token.name()).append(" = ") .append(token.encoding().constValue()).append(",\n"); } final PrimitiveValue nullVal = encoding.applicableNullValue(); sb.append(INDENT).append(INDENT).append("NULL_VALUE = ").append(nullVal).append("\n"); return sb; }
private CharSequence generateChoices(final List<Token> tokens) { final StringBuilder sb = new StringBuilder(); for (final Token token : tokens) { if (token.signal() == Signal.CHOICE) { final String choiceName = toUpperFirstChar(token.applicableTypeName()); final String choiceBitPosition = token.encoding().constValue().toString(); final int choiceValue = (int)Math.pow(2, Integer.parseInt(choiceBitPosition)); sb.append(String.format(INDENT + INDENT + "%s = %s,\n", choiceName, choiceValue)); } } return sb; }
public void onBitSet( final Token fieldToken, final DirectBuffer buffer, final int bufferIndex, final List<Token> tokens, final int beginIndex, final int endIndex, final int actingVersion) { final Token typeToken = tokens.get(beginIndex + 1); final long encodedValue = readEncodingAsLong(buffer, bufferIndex, typeToken, actingVersion); printScope(); out.append(determineName(0, fieldToken, tokens, beginIndex)).append(':'); for (int i = beginIndex + 1; i < endIndex; i++) { out.append(' ').append(tokens.get(i).name()).append('='); final long bitPosition = tokens.get(i).encoding().constValue().longValue(); final boolean flag = (encodedValue & (1L << bitPosition)) != 0; out.append(Boolean.toString(flag)); } out.println(); }
private CharSequence generateEnumValues(final List<Token> tokens) { final StringBuilder sb = new StringBuilder(); for (final Token token : tokens) { final Encoding encoding = token.encoding(); final CharSequence constVal = generateLiteral(encoding.primitiveType(), encoding.constValue().toString()); sb.append(generateTypeJavadoc(INDENT, token)); sb.append(INDENT).append(token.name()).append('(').append(constVal).append("),\n\n"); } final Token token = tokens.get(0); final Encoding encoding = token.encoding(); final CharSequence nullVal = generateLiteral( encoding.primitiveType(), encoding.applicableNullValue().toString()); if (shouldDecodeUnknownEnumValues) { sb.append(INDENT).append("/**\n"); sb.append(INDENT).append(" * To be used to represent a not known value from a later version.\n"); sb.append(INDENT).append(" */\n"); sb.append(INDENT).append("SBE_UNKNOWN").append('(').append(nullVal).append("),\n\n"); } sb.append(INDENT).append("/**\n"); sb.append(INDENT).append(" * To be used to represent not present or null.\n"); sb.append(INDENT).append(" */\n"); sb.append(INDENT).append("NULL_VAL").append('(').append(nullVal).append(");\n\n"); return sb; }
if (encoding.constValue().size() > 1) "\tcopy(%1$s[:], \"%2$s\")\n", varName, encoding.constValue())); "\t%1$s[0] = %2$s\n", varName, encoding.constValue())); "\t%1$s = %2$s\n", varName, generateLiteral(encoding.primitiveType(), encoding.constValue().toString())));
public void onBitSet( final Token fieldToken, final DirectBuffer buffer, final int bufferIndex, final List<Token> tokens, final int fromIndex, final int toIndex, final int actingVersion) { final Token typeToken = tokens.get(fromIndex + 1); final long encodedValue = readEncodingAsLong(buffer, bufferIndex, typeToken, actingVersion); property(determineName(0, fieldToken, tokens, fromIndex)); output.append("{ "); for (int i = fromIndex + 1; i < toIndex; i++) { output.append('"').append(tokens.get(i).name()).append("\": "); final long bitPosition = tokens.get(i).encoding().constValue().longValue(); final boolean flag = (encodedValue & (1L << bitPosition)) != 0; output.append(flag); if (i < (toIndex - 1)) { output.append(", "); } } output.append(" }"); next(); }
private CharSequence generateEnumValues(final List<Token> tokens, final Token encodingToken) { final StringBuilder sb = new StringBuilder(); final Encoding encoding = encodingToken.encoding(); sb.append( " enum Value \n" + " {\n"); for (final Token token : tokens) { final CharSequence constVal = generateLiteral( token.encoding().primitiveType(), token.encoding().constValue().toString()); sb.append(" ").append(token.name()).append(" = ").append(constVal).append(",\n"); } sb.append(String.format( " NULL_VALUE = %1$s", generateLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString()))); sb.append("\n };\n\n"); return sb; }
private static void generateEnum(final List<Token> enumTokens, final OutputManager outputManager) throws IOException { final String originalEnumName = enumTokens.get(0).applicableTypeName(); final String enumRustName = formatTypeName(originalEnumName); try (Writer writer = outputManager.createOutput("Enum " + enumRustName)) { final List<Token> messageBody = getMessageBody(enumTokens); if (messageBody.isEmpty()) { throw new IllegalArgumentException("No valid values provided for enum " + originalEnumName); } writer.append("#[derive(Clone,Copy,Debug,PartialEq,Eq,PartialOrd,Ord,Hash)]").append("\n"); final String rustReprTypeName = rustTypeName(messageBody.get(0).encoding().primitiveType()); writer.append(format("#[repr(%s)]", rustReprTypeName)).append("\n"); writer.append("pub enum ").append(enumRustName).append(" {\n"); for (final Token token : messageBody) { final Encoding encoding = token.encoding(); final String literal = generateRustLiteral(encoding.primitiveType(), encoding.constValue().toString()); indent(writer, 1).append(token.name()) .append(" = ") .append(literal) .append(",\n"); } writer.append("}\n"); } }
if (fieldToken.isConstantEncoding()) final String refValue = fieldToken.encoding().constValue().toString(); final int indexOfDot = refValue.indexOf('.'); value = -1 == indexOfDot ? refValue : refValue.substring(indexOfDot + 1); if (encodedValue == tokens.get(i).encoding().constValue().longValue())
token.encoding().constValue().toString(), token.name()));
private static CharSequence generateEnumLookupMethod(final List<Token> tokens, final Token encodingToken) { final String enumName = formatClassName(encodingToken.applicableTypeName()); final StringBuilder sb = new StringBuilder(); sb.append(String.format( " static %1$s::Value get(const %2$s value)\n" + " {\n" + " switch (value)\n" + " {\n", enumName, cppTypeName(tokens.get(0).encoding().primitiveType()))); for (final Token token : tokens) { sb.append(String.format( " case %1$s: return %2$s;\n", token.encoding().constValue().toString(), token.name())); } sb.append(String.format( " case %1$s: return NULL_VALUE;\n" + " }\n\n" + " throw std::runtime_error(\"unknown value for enum %2$s [E103]\");\n" + " }\n", encodingToken.encoding().applicableNullValue().toString(), enumName)); return sb; }
if (fieldToken.isConstantEncoding()) final String refValue = fieldToken.encoding().constValue().toString(); final int indexOfDot = refValue.indexOf('.'); value = -1 == indexOfDot ? refValue : refValue.substring(indexOfDot + 1); if (encodedValue == tokens.get(i).encoding().constValue().longValue())
private static PrimitiveValue constOrNotPresentValue(final Token token, final int actingVersion) { final Encoding encoding = token.encoding(); if (token.isConstantEncoding()) { return encoding.constValue(); } else if (token.isOptionalEncoding() && actingVersion < token.version()) { return encoding.applicableNullValue(); } return null; }
private static PrimitiveValue constOrNotPresentValue(final Token token, final int actingVersion) { if (token.isConstantEncoding()) { return token.encoding().constValue(); } else if (token.isOptionalEncoding() && actingVersion < token.version()) { return token.encoding().applicableNullValue(); } return null; }
enumName, propertyName, fieldToken.encoding().constValue().toString());
final String choiceBitIndex = encoding.constValue().toString();
private CharSequence generateChoiceDecoders(final List<Token> tokens) { return concatTokens( tokens, Signal.CHOICE, (token) -> { final String choiceName = formatPropertyName(token.name()); final Encoding encoding = token.encoding(); final String choiceBitIndex = encoding.constValue().toString(); final String byteOrderStr = byteOrderString(encoding); final PrimitiveType primitiveType = encoding.primitiveType(); final String argType = bitsetArgType(primitiveType); return String.format("\n" + "%1$s" + " public boolean %2$s()\n" + " {\n" + " return %3$s;\n" + " }\n\n" + " public static boolean %2$s(final %4$s value)\n" + " {\n" + " return %5$s;\n" + " }\n", generateOptionDecodeJavadoc(INDENT, token), choiceName, generateChoiceGet(primitiveType, choiceBitIndex, byteOrderStr), argType, generateStaticChoiceGet(primitiveType, choiceBitIndex)); }); }
final String choiceBitIndex = encoding.constValue().toString(); final String byteOrderStr = byteOrderString(encoding); final PrimitiveType primitiveType = encoding.primitiveType();
private void assertEqual(final Token lhs, final Token rhs) { assertThat(lhs.name(), is(rhs.name())); assertThat(lhs.version(), is(rhs.version())); assertThat(lhs.offset(), is(rhs.offset())); assertThat((long)lhs.id(), is((long)rhs.id())); assertThat(lhs.signal(), is(rhs.signal())); assertThat(lhs.encodedLength(), is(rhs.encodedLength())); assertThat(lhs.encoding().byteOrder(), is(rhs.encoding().byteOrder())); assertThat(lhs.encoding().primitiveType(), is(rhs.encoding().primitiveType())); assertThat(lhs.encoding().presence(), is(rhs.encoding().presence())); assertThat(lhs.encoding().constValue(), is(rhs.encoding().constValue())); assertThat(lhs.encoding().minValue(), is(rhs.encoding().minValue())); assertThat(lhs.encoding().maxValue(), is(rhs.encoding().maxValue())); assertThat(lhs.encoding().nullValue(), is(rhs.encoding().nullValue())); assertThat(lhs.encoding().characterEncoding(), is(rhs.encoding().characterEncoding())); assertThat(lhs.encoding().epoch(), is(rhs.encoding().epoch())); assertThat(lhs.encoding().timeUnit(), is(rhs.encoding().timeUnit())); assertThat(lhs.encoding().semanticType(), is(rhs.encoding().semanticType())); }
tokenEncoder.putName(nameBytes, 0, nameBytes.length); tokenEncoder.putConstValue(valArray, 0, put(valBuffer, encoding.constValue(), type)); tokenEncoder.putMinValue(valArray, 0, put(valBuffer, encoding.minValue(), type)); tokenEncoder.putMaxValue(valArray, 0, put(valBuffer, encoding.maxValue(), type));