private void generateCharacterEncoding( final StringBuilder sb, final String typeName, final String propertyName, final Token token) { if (token.encoding().primitiveType() == CHAR && token.arrayLength() > 1) { sb.append(String.format( "\nfunc (%1$s *%2$s) %3$sCharacterEncoding() string {\n" + "\treturn \"%4$s\"\n" + "}\n", Character.toLowerCase(typeName.charAt(0)), typeName, propertyName, token.encoding().characterEncoding())); } }
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; }
blockLengthType = token.encoding().primitiveType(); blockLengthByteOrder = token.encoding().byteOrder(); break; templateIdType = token.encoding().primitiveType(); templateIdByteOrder = token.encoding().byteOrder(); break; schemaIdType = token.encoding().primitiveType(); schemaIdByteOrder = token.encoding().byteOrder(); break; schemaVersionType = token.encoding().primitiveType(); schemaVersionByteOrder = token.encoding().byteOrder(); break;
final String epoch = encoding.epoch() == null ? "" : encoding.epoch(); final String timeUnit = encoding.timeUnit() == null ? "" : encoding.timeUnit(); final String semanticType = encoding.semanticType() == null ? "" : encoding.semanticType(); final String presence = encoding.presence() == null ? "" : encoding.presence().toString().toLowerCase();
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 generateFieldNotPresentCondition( final int sinceVersion, final Encoding encoding, final String indent) { if (0 == sinceVersion) { return ""; } return String.format( indent + " if (m_actingVersion < %1$d)\n" + indent + " {\n" + indent + " return %2$s;\n" + indent + " }\n\n", sinceVersion, generateLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString())); }
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())); }
private void generateFieldMetaAttributeMethod(final StringBuilder sb, final Token token, final String indent) { final Encoding encoding = token.encoding(); final String epoch = encoding.epoch() == null ? "" : encoding.epoch(); final String timeUnit = encoding.timeUnit() == null ? "" : encoding.timeUnit(); final String semanticType = encoding.semanticType() == null ? "" : encoding.semanticType(); sb.append(String.format( "\n" + indent + " @staticmethod\n" + indent + " def %sMetaAttribute(meta):\n" + indent + " return \"???\"\n", token.name(), epoch, timeUnit, semanticType )); }
final Token lengthToken = Generators.findFirst("length", tokens, i); final Token varDataToken = Generators.findFirst("varData", tokens, i); final String characterEncoding = varDataToken.encoding().characterEncoding(); final int lengthOfLengthField = lengthToken.encodedLength(); final String lengthCppType = cppTypeName(lengthToken.encoding().primitiveType()); final String lengthByteOrderStr = formatByteOrderEncoding( lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()); lengthCppType, lengthByteOrderStr, lengthToken.encoding().applicableMaxValue().longValue()));
private CharSequence generatePrimitiveFieldMetaData( final String propertyName, final Token token, final String indent) { final PrimitiveType primitiveType = token.encoding().primitiveType(); final String typeName = cSharpTypeName(primitiveType); return String.format( "\n" + indent + "public const %1$s %2$sNullValue = %3$s;\n" + indent + "public const %1$s %2$sMinValue = %4$s;\n" + indent + "public const %1$s %2$sMaxValue = %5$s;\n", typeName, toUpperFirstChar(propertyName), generateLiteral(primitiveType, token.encoding().applicableNullValue().toString()), generateLiteral(primitiveType, token.encoding().applicableMinValue().toString()), generateLiteral(primitiveType, token.encoding().applicableMaxValue().toString())); }
private CharSequence generateNullValueLiteral(final PrimitiveType primitiveType, final Encoding encoding) if (null == encoding.nullValue()) return generateLiteral(primitiveType, encoding.applicableNullValue().toString());
final String typeName = cppTypeName(token.encoding().primitiveType()); final String choiceBitPosition = token.encoding().constValue().toString(); final String byteOrderStr = formatByteOrderEncoding( token.encoding().byteOrder(), token.encoding().primitiveType());
final String characterEncoding = varDataToken.encoding().characterEncoding(); generateCharacterEncodingMethod(sb, token.name(), characterEncoding, indent); generateFieldMetaAttributeMethod(sb, token, indent); final int sizeOfLengthField = lengthToken.encodedLength(); final Encoding lengthEncoding = lengthToken.encoding(); final String lengthCSharpType = cSharpTypeName(lengthEncoding.primitiveType()); final String lengthTypePrefix = toUpperFirstChar(lengthEncoding.primitiveType().primitiveName()); final ByteOrder byteOrder = lengthEncoding.byteOrder(); final String byteOrderStr = generateByteOrder(byteOrder, lengthEncoding.primitiveType().size());
final String characterEncoding = varDataToken.encoding().characterEncoding(); generateCharacterEncodingMethod(sb, token.name(), characterEncoding, indent); generateFieldMetaAttributeMethod(sb, token, indent); final int sizeOfLengthField = lengthToken.encodedLength(); final Encoding lengthEncoding = lengthToken.encoding(); final int maxLengthValue = (int)lengthEncoding.applicableMaxValue().longValue(); final String byteOrderStr = byteOrderString(lengthEncoding); sizeOfLengthField, maxLengthValue, lengthEncoding.primitiveType(), byteOrderStr, characterEncoding,
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"); } }
/** * The number of encoded primitives in this type. * * @return number of encoded primitives in this type. */ public int arrayLength() { if (null == encoding.primitiveType() || 0 == encodedLength) { return 0; } return encodedLength / encoding.primitiveType().size(); }
final Token token) final String characterEncoding = token.encoding().characterEncoding(); switch (token.encoding().characterEncoding())
private CharSequence generateMinValueLiteral(final PrimitiveType primitiveType, final Encoding encoding) if (null == encoding.maxValue()) return generateLiteral(primitiveType, encoding.applicableMinValue().toString());
private CharSequence generateMaxValueLiteral(final PrimitiveType primitiveType, final Encoding encoding) if (null == encoding.maxValue()) return generateLiteral(primitiveType, encoding.applicableMaxValue().toString());
public boolean isOptionalEncoding() { return encoding.presence() == OPTIONAL; }