/** * 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(); }
private static int sizeOfPrimitive(final Encoding encoding) { return encoding.primitiveType().size(); }
private void generateOptionalInitPrimitive( final StringBuilder sb, final String varName, final Token token) { final Encoding encoding = token.encoding(); // Optional items get initialized to their NullValue sb.append(String.format( "\t%1$s = %2$s\n", varName, generateNullValueLiteral(encoding.primitiveType(), encoding))); }
private void captureEncodings(final List<Token> tokens) { for (final Token token : tokens) { switch (token.name()) { case BLOCK_LENGTH: blockLengthType = token.encoding().primitiveType(); break; case TEMPLATE_ID: templateIdType = token.encoding().primitiveType(); break; case SCHEMA_ID: schemaIdType = token.encoding().primitiveType(); break; case SCHEMA_VERSION: schemaVersionType = token.encoding().primitiveType(); break; } } }
private static Token findPrimitiveTokenByTokenName(final List<Token> tokens, final String targetName) { for (final Token token : tokens) { if (targetName.equalsIgnoreCase(token.name()) && token.encoding() != null && token.encoding().primitiveType() != null) { return token; } } throw new IllegalStateException(format("%s not specified for group", targetName)); }
private CharSequence generateChoiceClear(final String bitSetClassName, final Token token) { final StringBuilder sb = new StringBuilder(); final Encoding encoding = token.encoding(); final String literalValue = generateLiteral(encoding.primitiveType(), "0"); final String byteOrderStr = byteOrderString(encoding); sb.append(String.format("\n" + " public %s clear()\n" + " {\n" + " %s;\n" + " return this;\n" + " }\n", bitSetClassName, generatePut(encoding.primitiveType(), "offset", literalValue, byteOrderStr))); return sb; }
private static String primitiveTypeName(final Token token) { return javaTypeName(token.encoding().primitiveType()); }
private static PrimitiveType findPrimitiveByTokenName(final List<Token> tokens, final String targetName) { return findPrimitiveTokenByTokenName(tokens, targetName).encoding().primitiveType(); }
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 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 CharSequence generateFieldNotPresentCondition( final boolean inComposite, final int sinceVersion, final Encoding encoding, final String indent) { if (inComposite || 0 == sinceVersion) { return ""; } return String.format( indent + " if (parentMessage.actingVersion < %d)\n" + indent + " {\n" + indent + " return %s;\n" + indent + " }\n\n", sinceVersion, generateLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString())); }
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 void generateBitSet(final List<Token> tokens) throws IOException { final Token enumToken = tokens.get(0); final String enumName = CSharpUtil.formatClassName(enumToken.applicableTypeName()); try (Writer out = outputManager.createOutput(enumName)) { out.append(generateFileHeader(ir.applicableNamespace())); final String enumPrimitiveType = cSharpTypeName(enumToken.encoding().primitiveType()); out.append(generateEnumDeclaration(enumName, enumPrimitiveType, true)); out.append(generateChoices(tokens.subList(1, tokens.size() - 1))); out.append(INDENT + "}\n"); out.append("}\n"); } }
private void generateEnum(final List<Token> tokens) throws IOException { final Token enumToken = tokens.get(0); final String enumName = CSharpUtil.formatClassName(enumToken.applicableTypeName()); try (Writer out = outputManager.createOutput(enumName)) { out.append(generateFileHeader(ir.applicableNamespace())); final String enumPrimitiveType = cSharpTypeName(enumToken.encoding().primitiveType()); out.append(generateEnumDeclaration(enumName, enumPrimitiveType, false)); out.append(generateEnumValues(tokens.subList(1, tokens.size() - 1), enumToken)); out.append(INDENT + "}\n"); out.append("}\n"); } }
private CharSequence generateFieldNotPresentCondition( final int sinceVersion, final Encoding encoding, final String indent) { if (0 == sinceVersion) { return ""; } final String literal; if (sinceVersion > 0) { literal = generateLiteral(encoding.primitiveType(), encoding.applicableNullValue().toString()); } else { literal = "(byte)0"; } return String.format( indent + INDENT + INDENT + "if (_actingVersion < %1$d) return %2$s;\n\n", sinceVersion, literal); }
private CharSequence generatePrimitivePropertyEncode( final String containingClassName, final String propertyName, final Token token, final String indent) { final Encoding encoding = token.encoding(); final String javaTypeName = javaTypeName(encoding.primitiveType()); final int offset = token.offset(); final String byteOrderStr = byteOrderString(encoding); return String.format( "\n" + indent + " public %s %s(final %s value)\n" + indent + " {\n" + indent + " %s;\n" + indent + " return this;\n" + indent + " }\n\n", formatClassName(containingClassName), formatPropertyName(propertyName), javaTypeName, generatePut(encoding.primitiveType(), "offset + " + offset, "value", byteOrderStr)); }
private CharSequence generatePrimitivePropertyDecode( final boolean inComposite, final String propertyName, final Token propertyToken, final Token encodingToken, final String indent) { final Encoding encoding = encodingToken.encoding(); final String javaTypeName = javaTypeName(encoding.primitiveType()); final int offset = encodingToken.offset(); final String byteOrderStr = byteOrderString(encoding); return String.format( "\n" + indent + " public %s %s()\n" + indent + " {\n" + "%s" + indent + " return %s;\n" + indent + " }\n\n", javaTypeName, formatPropertyName(propertyName), generateFieldNotPresentCondition(inComposite, propertyToken.version(), encoding, indent), generateGet(encoding.primitiveType(), "offset + " + offset, byteOrderStr)); }
private CharSequence generateEnumEncoder( final String containingClassName, final String propertyName, final Token token, final String indent) { if (token.isConstantEncoding()) { return ""; } final String enumName = formatClassName(token.applicableTypeName()); final Encoding encoding = token.encoding(); final int offset = token.offset(); return String.format("\n" + indent + " public %s %s(final %s value)\n" + indent + " {\n" + indent + " %s;\n" + indent + " return this;\n" + indent + " }\n", formatClassName(containingClassName), propertyName, enumName, generatePut(encoding.primitiveType(), "offset + " + offset, "value.value()", byteOrderString(encoding))); }
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 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())); }