private static CharSequence generatePropertyNotPresentCondition( final boolean inComposite, final CodecType codecType, final Token propertyToken, final String enumName, final String indent) { if (inComposite || codecType == ENCODER || 0 == propertyToken.version()) { return ""; } return String.format( indent + " if (parentMessage.actingVersion < %d)\n" + indent + " {\n" + indent + " return %s;\n" + indent + " }\n\n", propertyToken.version(), enumName == null ? "null" : (enumName + ".NULL_VAL")); }
private void generateSinceActingDeprecated( final StringBuilder sb, final String indent, final String propertyName, final Token token) { sb.append(String.format( indent + "public const int %1$sSinceVersion = %2$d;\n" + indent + "public const int %1$sDeprecated = %3$d;\n" + indent + "public bool %1$sInActingVersion()\n" + indent + "{\n" + indent + INDENT + "return _actingVersion >= %1$sSinceVersion;\n" + indent + "}\n", propertyName, token.version(), token.deprecated())); }
private static void generateFieldSinceVersionMethod(final StringBuilder sb, final Token token, final String indent) { sb.append(String.format( "\n" + indent + " public static int %sSinceVersion()\n" + indent + " {\n" + indent + " return %d;\n" + indent + " }\n", formatPropertyName(token.name()), token.version())); }
private void generateSinceActingDeprecated( final StringBuilder sb, final String typeName, final String propertyName, final Token token) { sb.append(String.format( "\nfunc (*%2$s) %3$sSinceVersion() uint16 {\n" + "\treturn %4$s\n" + "}\n" + "\nfunc (%1$s *%2$s) %3$sInActingVersion(actingVersion uint16) bool {\n" + "\treturn actingVersion >= %1$s.%3$sSinceVersion()\n" + "}\n" + "\nfunc (*%2$s) %3$sDeprecated() uint16 {\n" + "\treturn %5$s\n" + "}\n", Character.toLowerCase(typeName.charAt(0)), typeName, propertyName, token.version(), token.deprecated())); }
private void generateVarDataWrapDecoder( final StringBuilder sb, final Token token, final String propertyName, final int sizeOfLengthField, final PrimitiveType lengthType, final String byteOrderStr, final String indent) { sb.append(String.format("\n" + indent + " public void wrap%s(final %s wrapBuffer)\n" + indent + " {\n" + "%s" + indent + " final int headerLength = %d;\n" + indent + " final int limit = parentMessage.limit();\n" + indent + " final int dataLength = (int)%s;\n" + indent + " parentMessage.limit(limit + headerLength + dataLength);\n" + indent + " wrapBuffer.wrap(buffer, limit + headerLength, dataLength);\n" + indent + " }\n", propertyName, readOnlyBuffer, generateVarWrapFieldNotPresentCondition(token.version(), indent), sizeOfLengthField, generateGet(lengthType, "limit", byteOrderStr))); }
indent + " }\n", propertyName, fieldToken.version()));
private void generateVarDataTypedDecoder( final StringBuilder sb, final Token token, final String propertyName, final int sizeOfLengthField, final String exchangeType, final PrimitiveType lengthType, final String byteOrderStr, final String indent) { sb.append(String.format("\n" + indent + " public int get%s(final %s dst, final int dstOffset, final int length)\n" + indent + " {\n" + "%s" + indent + " final int headerLength = %d;\n" + indent + " final int limit = parentMessage.limit();\n" + indent + " final int dataLength = (int)%s;\n" + indent + " final int bytesCopied = Math.min(length, dataLength);\n" + indent + " parentMessage.limit(limit + headerLength + dataLength);\n" + indent + " buffer.getBytes(limit + headerLength, dst, dstOffset, bytesCopied);\n\n" + indent + " return bytesCopied;\n" + indent + " }\n", propertyName, exchangeType, generateArrayFieldNotPresentCondition(token.version(), indent), sizeOfLengthField, generateGet(lengthType, "limit", byteOrderStr))); }
private Object generateCompositeProperty(final String propertyName, final Token token, final String indent) { final String compositeName = CSharpUtil.formatClassName(token.applicableTypeName()); final int offset = token.offset(); final StringBuilder sb = new StringBuilder(); sb.append(String.format("\n" + indent + INDENT + "private readonly %1$s _%2$s = new %3$s();\n", compositeName, toLowerFirstChar(propertyName), compositeName)); sb.append(String.format("\n" + indent + INDENT + "public %1$s %2$s\n" + indent + INDENT + "{\n" + indent + INDENT + INDENT + "get\n" + indent + INDENT + INDENT + "{\n" + "%3$s" + indent + INDENT + INDENT + INDENT + "_%4$s.Wrap(_buffer, _offset + %5$d, _actingVersion);\n" + indent + INDENT + INDENT + INDENT + "return _%4$s;\n" + indent + INDENT + INDENT + "}\n" + indent + INDENT + "}\n", compositeName, toUpperFirstChar(propertyName), generateTypeFieldNotPresentCondition(token.version(), indent), toLowerFirstChar(propertyName), offset)); return sb; }
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; }
cppTypeName, propertyName, generateFieldNotPresentCondition(token.version(), token.encoding(), indent), generateLoadValue(primitiveType, Integer.toString(offset), token.encoding().byteOrder(), indent)));
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; }
indent + " }\n", Generators.toLowerFirstChar(propertyName), generateArrayFieldNotPresentCondition(token.version(), indent), generateGet(lengthType, "limit", byteOrderStr)));
final boolean isPresent = token.version() <= actingVersion;
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)); }
final boolean isPresent = token.version() <= actingVersion;
private CharSequence generateSingleValueProperty( final String propertyName, final Token token, final String indent) { final String typeName = cSharpTypeName(token.encoding().primitiveType()); final String typePrefix = toUpperFirstChar(token.encoding().primitiveType().primitiveName()); final int offset = token.offset(); final ByteOrder byteOrder = token.encoding().byteOrder(); final String byteOrderStr = generateByteOrder(byteOrder, token.encoding().primitiveType().size()); return String.format("\n" + indent + "public %1$s %2$s\n" + indent + "{\n" + indent + INDENT + "get\n" + indent + INDENT + "{\n" + "%3$s" + indent + INDENT + INDENT + "return _buffer.%4$sGet%6$s(_offset + %5$d);\n" + indent + INDENT + "}\n" + indent + INDENT + "set\n" + indent + INDENT + "{\n" + indent + INDENT + INDENT + "_buffer.%4$sPut%6$s(_offset + %5$d, value);\n" + indent + INDENT + "}\n" + indent + "}\n\n", typeName, toUpperFirstChar(propertyName), generateFieldNotPresentCondition(token.version(), token.encoding(), indent), typePrefix, offset, byteOrderStr); }
private String generateBitSetProperty(final String propertyName, final Token token, final String indent) { final String bitSetName = formatClassName(token.applicableTypeName()); final int offset = token.offset(); final String typePrefix = toUpperFirstChar(token.encoding().primitiveType().primitiveName()); final ByteOrder byteOrder = token.encoding().byteOrder(); final String byteOrderStr = generateByteOrder(byteOrder, token.encoding().primitiveType().size()); final String typeName = cSharpTypeName(token.encoding().primitiveType()); return String.format("\n" + indent + INDENT + "public %1$s %2$s\n" + indent + INDENT + "{\n" + indent + INDENT + INDENT + "get\n" + indent + INDENT + INDENT + "{\n" + "%3$s" + indent + INDENT + INDENT + INDENT + "return (%4$s)_buffer.%5$sGet%7$s(_offset + %6$d);\n" + indent + INDENT + INDENT + "}\n" + indent + INDENT + INDENT + "set\n" + indent + INDENT + INDENT + "{\n" + indent + INDENT + INDENT + INDENT + "_buffer.%5$sPut%7$s(_offset + %6$d, (%8$s)value);\n" + indent + INDENT + INDENT + "}\n" + indent + INDENT + "}\n", bitSetName, toUpperFirstChar(propertyName), generateTypeFieldNotPresentCondition(token.version(), indent), bitSetName, typePrefix, offset, byteOrderStr, typeName); }
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())); }
.tokenSize(token.encodedLength()) .fieldId(token.id()) .tokenVersion(token.version()) .componentTokenCount(token.componentTokenCount()) .signal(mapSignal(token.signal()))