cSharpTypeName(token.encoding().primitiveType()), toUpperFirstChar(propertyName), generateLiteral(token.encoding().primitiveType(), token.encoding().constValue().toString())); final String javaTypeName = cSharpTypeName(token.encoding().primitiveType()); final byte[] constantValue = token.encoding().constValue().byteArrayValue(token.encoding().primitiveType()); final CharSequence values = generateByteLiteralList( "\n" + indent + INDENT + "public const int %1$sLength = %2$d;\n", toUpperFirstChar(propertyName), constantValue.length)); indent + INDENT + "}\n\n", javaTypeName, toUpperFirstChar(propertyName), propertyName)); indent + INDENT + INDENT + "return bytesCopied;\n" + indent + INDENT + "}\n", toUpperFirstChar(propertyName), constantValue.length, propertyName));
final String className = CSharpUtil.formatClassName(groupName); toLowerFirstChar(groupName), className)); toUpperFirstChar(groupName), token.id())); generateSinceActingDeprecated(sb, indent, toUpperFirstChar(groupName), token); indent + "}\n", className, toUpperFirstChar(groupName), toLowerFirstChar(groupName))); indent + "}\n", className, toUpperFirstChar(groupName), toLowerFirstChar(groupName)));
private void generateCharacterEncodingMethod( final StringBuilder sb, final String propertyName, final String encoding, final String indent) { sb.append(String.format("\n" + indent + "public const string %sCharacterEncoding = \"%s\";\n\n", formatPropertyName(propertyName), encoding)); }
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 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); }
/** * Format a String as a property name. * * @param str to be formatted. * @return the string formatted as a property name. */ public static String formatPropertyName(final String str) { return toUpperFirstChar(str); }
private void generateGroupEnumerator(final StringBuilder sb, final String groupName, final String indent) { sb.append( indent + INDENT + "public int ActingBlockLength { get { return _blockLength; } }\n\n" + indent + INDENT + "public int Count { get { return _count; } }\n\n" + indent + INDENT + "public bool HasNext { get { return (_index + 1) < _count; } }\n"); sb.append(String.format("\n" + indent + INDENT + "public %sGroup Next()\n" + indent + INDENT + "{\n" + indent + INDENT + INDENT + "if (_index + 1 >= _count)\n" + indent + INDENT + INDENT + "{\n" + indent + INDENT + INDENT + INDENT + "throw new InvalidOperationException();\n" + indent + INDENT + INDENT + "}\n\n" + indent + INDENT + INDENT + "_offset = _parentMessage.Limit;\n" + indent + INDENT + INDENT + "_parentMessage.Limit = _offset + _blockLength;\n" + indent + INDENT + INDENT + "++_index;\n\n" + indent + INDENT + INDENT + "return this;\n" + indent + INDENT + "}\n", formatClassName(groupName))); sb.append("\n" + indent + INDENT + "public System.Collections.IEnumerator GetEnumerator()\n" + indent + INDENT + "{\n" + indent + INDENT + INDENT + "while (this.HasNext)\n" + indent + INDENT + INDENT + "{\n" + indent + INDENT + INDENT + INDENT + "yield return this.Next();\n" + indent + INDENT + INDENT + "}\n" + indent + INDENT + "}\n"); }
final String castType = cSharpTypeName(type); switch (type)
final String indent) final String enumName = formatClassName(token.applicableTypeName()); final String typePrefix = toUpperFirstChar(token.encoding().primitiveType().primitiveName()); final String enumUnderlyingType = cSharpTypeName(token.encoding().primitiveType()); final int offset = token.offset(); final ByteOrder byteOrder = token.encoding().byteOrder(); indent + INDENT + "}\n\n", enumName, toUpperFirstChar(propertyName), constValue); indent + INDENT + "}\n\n", enumName, toUpperFirstChar(propertyName), generateEnumFieldNotPresentCondition(token.version(), enumName, indent), enumName,
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"); } }
/** * Format a String as a class name. * * @param str to be formatted. * @return the string formatted as a class name. */ public static String formatClassName(final String str) { return toUpperFirstChar(str); } }
private void generateComposite(final List<Token> tokens) throws IOException { final String compositeName = CSharpUtil.formatClassName(tokens.get(0).applicableTypeName()); try (Writer out = outputManager.createOutput(compositeName)) { out.append(generateFileHeader(ir.applicableNamespace())); out.append(generateClassDeclaration(compositeName)); out.append(generateFixedFlyweightCode(tokens.get(0).encodedLength())); out.append(generateCompositePropertyElements(tokens.subList(1, tokens.size() - 1), BASE_INDENT)); out.append(INDENT + "}\n"); out.append("}\n"); } }
private CharSequence generateMessageFlyweightCode(final String className, final Token token, final String indent) final String blockLengthType = cSharpTypeName(ir.headerStructure().blockLengthType()); final String templateIdType = cSharpTypeName(ir.headerStructure().templateIdType()); final String schemaIdType = cSharpTypeName(ir.headerStructure().schemaIdType()); final String schemaVersionType = cSharpTypeName(ir.headerStructure().schemaVersionType()); final String semanticType = token.encoding().semanticType() == null ? "" : token.encoding().semanticType();
generateFieldMetaAttributeMethod(sb, token, indent); final String propertyName = toUpperFirstChar(token.name()); final Token lengthToken = Generators.findFirst("length", tokens, i); 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());
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 CharSequence generateEnumProperty(final String propertyName, final Token token, final String indent) final String enumName = formatClassName(token.name()); final String typePrefix = toUpperFirstChar(token.encoding().primitiveType().primitiveName()); final String enumUnderlyingType = cSharpTypeName(token.encoding().primitiveType()); final int offset = token.offset(); final ByteOrder byteOrder = token.encoding().byteOrder(); indent + " }\n\n", enumName, toUpperFirstChar(propertyName), generateEnumFieldNotPresentCondition(token.version(), enumName, indent), enumName,
final String indent) final String dimensionsClassName = formatClassName(tokens.get(index + 1).name()); final int dimensionHeaderLength = tokens.get(index + 1).encodedLength(); indent + INDENT + "private int _index;\n" + indent + INDENT + "private int _offset;\n", formatClassName(groupName), dimensionsClassName, parentMessageClassName)); final String typeForBlockLength = cSharpTypeName(tokens.get(index + 2).encoding().primitiveType()); final String typeForNumInGroup = cSharpTypeName(numInGroupToken.encoding().primitiveType());
private CharSequence generateFileHeader(final String packageName) { String[] tokens = packageName.split("\\."); final StringBuilder sb = new StringBuilder(); for (final String t : tokens) { sb.append(toUpperFirstChar(t)).append("."); } if (sb.length() > 0) { sb.setLength(sb.length() - 1); } tokens = sb.toString().split("-"); sb.setLength(0); for (final String t : tokens) { sb.append(toUpperFirstChar(t)); } return String.format( "/* Generated SBE (Simple Binary Encoding) message codec */\n\n" + "#pragma warning disable 1591 // disable warning on missing comments\n" + "using System;\n" + "using Org.SbeTool.Sbe.Dll;\n\n" + "namespace %s\n" + "{\n", sb); }
private void generateFieldIdMethod(final StringBuilder sb, final Token token, final String indent) { sb.append(String.format("\n" + indent + "public const int %sId = %d;\n", CSharpUtil.formatPropertyName(token.name()), token.id())); generateSinceActingDeprecated(sb, indent, CSharpUtil.formatPropertyName(token.name()), token); }
final String className = formatClassName(msgToken.name());