out.append(generateFields(className, fields, BASE_INDENT)); generateGroups(sb, groups, BASE_INDENT); out.append(sb);
private void generateGroups(final StringBuilder sb, final List<Token> tokens, final String indent) { for (int i = 0, size = tokens.size(); i < size; i++) { final Token groupToken = tokens.get(i); if (groupToken.signal() != Signal.BEGIN_GROUP) { throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken); } final String groupName = groupToken.name(); final Token numInGroupToken = Generators.findFirst("numInGroup", tokens, i); final String cppTypeForNumInGroup = cppTypeName(numInGroupToken.encoding().primitiveType()); generateGroupClassHeader(sb, groupName, tokens, i, indent + INDENT); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(formatClassName(groupName), varData, indent + INDENT)); sb.append(indent).append(" };\n"); sb.append(generateGroupProperty(groupName, groupToken, cppTypeForNumInGroup, indent)); } }
out.append(generateFields(className, fields, BASE_INDENT, false)); generateGroups(sb, groups, BASE_INDENT); out.append(sb);
out.append(generateFields(className, fields, BASE_INDENT, false)); generateGroups(sb, groups, BASE_INDENT); out.append(sb);
private void generateGroups(final StringBuilder sb, final List<Token> tokens, final String indent) { for (int i = 0, size = tokens.size(); i < size; i++) { final Token groupToken = tokens.get(i); if (groupToken.signal() != Signal.BEGIN_GROUP) { throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken); } final String groupName = groupToken.name(); final Token numInGroupToken = Generators.findFirst("numInGroup", tokens, i); final String cppTypeForNumInGroup = cppTypeName(numInGroupToken.encoding().primitiveType()); generateGroupClassHeader(sb, groupName, tokens, i, indent + INDENT); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT, false)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(formatClassName(groupName), varData, indent + INDENT)); sb.append(indent).append(" };\n"); sb.append(generateGroupProperty(groupName, groupToken, cppTypeForNumInGroup, indent)); } }
private void generateGroups(final StringBuilder sb, final List<Token> tokens, final String indent) { for (int i = 0, size = tokens.size(); i < size; i++) { final Token groupToken = tokens.get(i); if (groupToken.signal() != Signal.BEGIN_GROUP) { throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken); } final String groupName = groupToken.name(); final Token numInGroupToken = Generators.findFirst("numInGroup", tokens, i); final String cppTypeForNumInGroup = cppTypeName(numInGroupToken.encoding().primitiveType()); generateGroupClassHeader(sb, groupName, tokens, i, indent + INDENT); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT, false)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(formatClassName(groupName), varData, indent + INDENT)); sb.append(indent).append(" };\n"); sb.append(generateGroupProperty(groupName, groupToken, cppTypeForNumInGroup, indent)); } }