public CodeGenerator newInstance(final Ir ir, final String outputDir) { return new CppGenerator(ir, new NamespaceOutputManager(outputDir, ir.applicableNamespace())); } },
lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()); generateFieldMetaAttributeMethod(sb, token, indent); generateVarDataDescriptors( sb, token, propertyName, characterEncoding, lengthToken, lengthOfLengthField, lengthCppType, indent); indent + " }\n", formatPropertyName(propertyName), generateTypeFieldNotPresentCondition(token.version(), BASE_INDENT), lengthOfLengthField, lengthCppType, indent + " }\n", propertyName, generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT), lengthOfLengthField, lengthByteOrderStr, indent + " }\n", propertyName, generateStringNotPresentCondition(token.version(), BASE_INDENT), lengthOfLengthField, lengthByteOrderStr,
private CharSequence generatePrimitivePropertyMethods( final String containingClassName, final String propertyName, final Token token, final String indent) { final int arrayLength = token.arrayLength(); if (arrayLength == 1) { return generateSingleValueProperty(containingClassName, propertyName, token, indent); } else if (arrayLength > 1) { return generateArrayProperty(containingClassName, propertyName, token, indent); } return ""; }
private void generateComposite(final List<Token> tokens) throws IOException { final String compositeName = formatClassName(tokens.get(0).applicableTypeName()); try (Writer out = outputManager.createOutput(compositeName)) { out.append(generateFileHeader(ir.namespaces(), compositeName, generateTypesToIncludes(tokens.subList(1, tokens.size() - 1)))); out.append(generateClassDeclaration(compositeName)); out.append(generateFixedFlyweightCode(compositeName, tokens.get(0).encodedLength())); out.append(generateCompositePropertyElements( compositeName, tokens.subList(1, tokens.size() - 1), BASE_INDENT)); out.append("};\n"); out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n"); } }
private CharSequence generateCompositePropertyElements( final String containingClassName, final List<Token> tokens, final String indent) { final StringBuilder sb = new StringBuilder(); for (int i = 0; i < tokens.size();) { final Token fieldToken = tokens.get(i); final String propertyName = formatPropertyName(fieldToken.name()); generateFieldMetaAttributeMethod(sb, fieldToken, indent); generateFieldCommonMethods(indent, sb, fieldToken, fieldToken, propertyName); switch (fieldToken.signal()) { case ENCODING: sb.append(generatePrimitiveProperty(containingClassName, propertyName, fieldToken, indent)); break; case BEGIN_ENUM: sb.append(generateEnumProperty(containingClassName, fieldToken, propertyName, fieldToken, indent)); break; case BEGIN_SET: sb.append(generateBitsetProperty(propertyName, fieldToken, indent)); break; case BEGIN_COMPOSITE: sb.append(generateCompositeProperty(propertyName, fieldToken, indent)); break; } i += tokens.get(i).componentTokenCount(); } return sb; }
public void generate() throws IOException generateMessageHeaderStub(); final List<String> typesToInclude = generateTypeStubs(); out.append(generateFileHeader(ir.namespaces(), className, typesToInclude)); out.append(generateClassDeclaration(className)); out.append(generateMessageFlyweightCode(className, msgToken)); out.append(generateFields(className, fields, BASE_INDENT)); generateGroups(sb, groups, BASE_INDENT); out.append(sb); out.append(generateVarData(className, varData, BASE_INDENT)); out.append("};\n"); out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n");
indent + " }\n", propertyName, generateTypeFieldNotPresentCondition(token.version(), indent), offset)); indent + " }\n", propertyName, generateTypeFieldNotPresentCondition(token.version(), indent), offset)); final CharSequence loadValue = generateLoadValue( primitiveType, String.format("%d + (index * %d)", offset, primitiveType.size()), propertyName, token.arrayLength(), generateFieldNotPresentCondition(token.version(), token.encoding(), indent), loadValue)); final CharSequence storeValue = generateStoreValue( primitiveType, String.format("%d + (index * %d)", offset, primitiveType.size()), toUpperFirstChar(propertyName), token.arrayLength(), generateArrayFieldNotPresentCondition(token.version(), indent), offset, cppTypeName));
private void generateChoiceSet(final List<Token> tokens) throws IOException { final String bitSetName = formatClassName(tokens.get(0).applicableTypeName()); try (Writer out = outputManager.createOutput(bitSetName)) { out.append(generateFileHeader(ir.namespaces(), bitSetName, null)); out.append(generateClassDeclaration(bitSetName)); out.append(generateFixedFlyweightCode(bitSetName, tokens.get(0).encodedLength())); out.append(String.format( " %1$s &clear()\n" + " {\n" + " %2$s zero = 0;\n" + " std::memcpy(m_buffer + m_offset, &zero, sizeof(%2$s));\n" + " return *this;\n" + " }\n", bitSetName, cppTypeName(tokens.get(0).encoding().primitiveType()))); out.append(String.format("\n" + " bool isEmpty() const\n" + " {\n" + " %1$s val;\n" + " std::memcpy(&val, m_buffer + m_offset, sizeof(%1$s));\n" + " return 0 == val;\n" + " }\n", cppTypeName(tokens.get(0).encoding().primitiveType()))); out.append(generateChoices(bitSetName, tokens.subList(1, tokens.size() - 1))); out.append("};\n"); out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n"); } }
public List<String> generateTypeStubs() throws IOException { final List<String> typesToInclude = new ArrayList<>(); for (final List<Token> tokens : ir.types()) { switch (tokens.get(0).signal()) { case BEGIN_ENUM: generateEnum(tokens); break; case BEGIN_SET: generateChoiceSet(tokens); break; case BEGIN_COMPOSITE: generateComposite(tokens); break; } typesToInclude.add(tokens.get(0).applicableTypeName()); } return typesToInclude; }
public void generateMessageHeaderStub() throws IOException { generateComposite(ir.headerStructure().tokens()); }
indent + " }\n\n", toLowerFirstChar(propertyName), generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT), formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()), lengthCppType));
" }\n", choiceName, generateChoiceNotPresentCondition(token.version(), BASE_INDENT), byteOrderStr, typeName,
final String propertyName = formatPropertyName(signalToken.name()); generateFieldMetaAttributeMethod(sb, signalToken, indent); generateFieldCommonMethods(indent, sb, signalToken, encodingToken, propertyName); sb.append(generatePrimitiveProperty(containingClassName, propertyName, encodingToken, indent)); break; sb.append(generateEnumProperty( containingClassName, signalToken, propertyName, encodingToken, indent)); break; sb.append(generateBitsetProperty(propertyName, encodingToken, indent)); break; sb.append(generateCompositeProperty(propertyName, encodingToken, indent)); break;
public void generate() throws IOException generateMessageHeaderStub(); final List<String> typesToInclude = generateTypeStubs(); out.append(generateFileHeader(ir.namespaces(), className, typesToInclude)); out.append(generateClassDeclaration(className)); out.append(generateMessageFlyweightCode(className, msgToken)); out.append(generateFields(className, fields, BASE_INDENT, false)); generateGroups(sb, groups, BASE_INDENT); out.append(sb); out.append(generateVarData(className, varData, BASE_INDENT)); out.append("};\n"); out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n");
private void generateComposite(final List<Token> tokens) throws IOException { final String compositeName = formatClassName(tokens.get(0).applicableTypeName()); try (Writer out = outputManager.createOutput(compositeName)) { out.append(generateFileHeader(ir.namespaces(), compositeName, generateTypesToIncludes(tokens.subList(1, tokens.size() - 1)))); out.append(generateClassDeclaration(compositeName)); out.append(generateFixedFlyweightCode(compositeName, tokens.get(0).encodedLength())); out.append(generateCompositePropertyElements( compositeName, tokens.subList(1, tokens.size() - 1), BASE_INDENT)); out.append("};\n"); out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n"); } }
indent + " }\n", propertyName, generateTypeFieldNotPresentCondition(token.version(), indent), offset)); indent + " }\n", propertyName, generateTypeFieldNotPresentCondition(token.version(), indent), offset)); final CharSequence loadValue = generateLoadValue( primitiveType, String.format("%d + (index * %d)", offset, primitiveType.size()), propertyName, token.arrayLength(), generateFieldNotPresentCondition(token.version(), token.encoding(), indent), loadValue)); final CharSequence storeValue = generateStoreValue( primitiveType, String.format("%d + (index * %d)", offset, primitiveType.size()), toUpperFirstChar(propertyName), token.arrayLength(), generateArrayFieldNotPresentCondition(token.version(), indent), offset, cppTypeName));
private void generateChoiceSet(final List<Token> tokens) throws IOException { final String bitSetName = formatClassName(tokens.get(0).applicableTypeName()); try (Writer out = outputManager.createOutput(bitSetName)) { out.append(generateFileHeader(ir.namespaces(), bitSetName, null)); out.append(generateClassDeclaration(bitSetName)); out.append(generateFixedFlyweightCode(bitSetName, tokens.get(0).encodedLength())); out.append(String.format( " %1$s &clear()\n" + " {\n" + " %2$s zero = 0;\n" + " std::memcpy(m_buffer + m_offset, &zero, sizeof(%2$s));\n" + " return *this;\n" + " }\n", bitSetName, cppTypeName(tokens.get(0).encoding().primitiveType()))); out.append(String.format("\n" + " bool isEmpty() const\n" + " {\n" + " %1$s val;\n" + " std::memcpy(&val, m_buffer + m_offset, sizeof(%1$s));\n" + " return 0 == val;\n" + " }\n", cppTypeName(tokens.get(0).encoding().primitiveType()))); out.append(generateChoices(bitSetName, tokens.subList(1, tokens.size() - 1))); out.append("};\n"); out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n"); } }
public List<String> generateTypeStubs() throws IOException { final List<String> typesToInclude = new ArrayList<>(); for (final List<Token> tokens : ir.types()) { switch (tokens.get(0).signal()) { case BEGIN_ENUM: generateEnum(tokens); break; case BEGIN_SET: generateChoiceSet(tokens); break; case BEGIN_COMPOSITE: generateComposite(tokens); break; } typesToInclude.add(tokens.get(0).applicableTypeName()); } return typesToInclude; }
public void generateMessageHeaderStub() throws IOException { generateComposite(ir.headerStructure().tokens()); }
indent + " }\n\n", toLowerFirstChar(propertyName), generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT), formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()), lengthCppType));