private static void encodeSchema(final ByteBuffer byteBuffer) throws Exception { final Path path = Paths.get("example-schema.xml"); try (InputStream in = new BufferedInputStream(Files.newInputStream(path))) { final MessageSchema schema = XmlSchemaParser.parse(in, ParserOptions.DEFAULT); final Ir ir = new IrGenerator().generate(schema); try (IrEncoder irEncoder = new IrEncoder(byteBuffer, ir)) { irEncoder.encode(); } } }
private void add(final CompositeType type, final int currOffset, final Field field) .semanticType(semanticTypeOf(type, field)) .build(); add((EncodedDataType)elementType, offset); add((EnumType)elementType, offset, null); add((SetType)elementType, offset, null); add((CompositeType)elementType, offset, null);
addFieldSignal(field, Signal.BEGIN_GROUP); add(field.dimensionType(), 0, field); addAllFields(field.groupFields()); addFieldSignal(field, Signal.END_GROUP); addFieldSignal(field, Signal.BEGIN_VAR_DATA); add((CompositeType)type, field.computedOffset(), field); addFieldSignal(field, Signal.END_VAR_DATA); addFieldSignal(field, Signal.BEGIN_FIELD); add((EncodedDataType)type, field.computedOffset(), field); add((CompositeType)type, field.computedOffset(), field); add((EnumType)type, field.computedOffset(), field); add((SetType)type, field.computedOffset(), field); addFieldSignal(field, Signal.END_FIELD);
private List<Token> generateForMessage(final MessageSchema schema, final long messageId) { tokenList.clear(); final Message msg = schema.getMessage(messageId); addMessageSignal(msg, Signal.BEGIN_MESSAGE); addAllFields(msg.fields()); addMessageSignal(msg, Signal.END_MESSAGE); return tokenList; }
/** * Generate a complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. * * @param schema from which the {@link uk.co.real_logic.sbe.ir.Ir} should be generated. * @param namespace for the generated code. * @return complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. */ public Ir generate(final MessageSchema schema, final String namespace) { this.schema = schema; final List<Token> headerTokens = generateForHeader(schema); final Ir ir = new Ir( schema.packageName(), namespace, schema.id(), schema.version(), schema.semanticVersion(), schema.byteOrder(), headerTokens); for (final Message message : schema.messages()) { final long msgId = message.id(); ir.addMessage(msgId, generateForMessage(schema, msgId)); } return ir; }
/** * Generate a complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. * * @param schema from which the {@link uk.co.real_logic.sbe.ir.Ir} should be generated. * @return complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. */ public Ir generate(final MessageSchema schema) { return generate(schema, null); }
private void addFieldSignal(final Field field, final Signal signal) { final Encoding.Builder encodingBuilder = new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .presence(mapPresence(field.presence())) .semanticType(semanticTypeOf(null, field)); if (field.presence() == Presence.CONSTANT && null != field.valueRef()) { final String valueRef = field.valueRef(); final byte[] bytes; bytes = valueRef.getBytes(StandardCharsets.UTF_8); encodingBuilder.constValue(new PrimitiveValue(bytes, "UTF-8", valueRef.length())); encodingBuilder.primitiveType(PrimitiveType.CHAR); } final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .description(field.description()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .deprecated(field.deprecated()) .encoding(encodingBuilder.build()) .build(); tokenList.add(token); }
.primitiveType(type.primitiveType()) .byteOrder(schema.byteOrder()) .semanticType(semanticTypeOf(type, field)) .characterEncoding(type.characterEncoding()) .timeUnit(field.timeUnit()) encodingBuilder .presence(Encoding.Presence.CONSTANT) .constValue(valueRef != null ? lookupValueRef(valueRef) : type.constVal()); break;
private List<Token> generateForHeader(final MessageSchema schema) { tokenList.clear(); add(schema.messageHeader(), 0, null); return tokenList; }
private void addFieldSignal(final Field field, final Signal signal) { final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .encoding(new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .semanticType(semanticTypeOf(null, field)) .build()) .build(); tokenList.add(token); }
private List<Token> generateForMessage(final MessageSchema schema, final long messageId) { tokenList.clear(); final Message msg = schema.getMessage(messageId); addMessageSignal(msg, Signal.BEGIN_MESSAGE); addAllFields(msg.fields()); addMessageSignal(msg, Signal.END_MESSAGE); return tokenList; }
/** * Generate a complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. * * @param schema from which the {@link uk.co.real_logic.sbe.ir.Ir} should be generated. * @param namespace for the generated code. * @return complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. */ public Ir generate(final MessageSchema schema, final String namespace) { final Ir ir = new Ir( schema.packageName(), namespace, schema.id(), schema.version(), schema.semanticVersion(), generateForHeader(schema)); for (final Message message : schema.messages()) { final long msgId = message.id(); ir.addMessage(msgId, generateForMessage(schema, msgId)); } return ir; }
/** * Generate a complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. * * @param schema from which the {@link uk.co.real_logic.sbe.ir.Ir} should be generated. * @return complete {@link uk.co.real_logic.sbe.ir.Ir} for a given schema. */ public Ir generate(final MessageSchema schema) { return generate(schema, null); }
private void addFieldSignal(final Field field, final Signal signal) { final Encoding.Builder encodingBuilder = new Encoding.Builder() .epoch(field.epoch()) .timeUnit(field.timeUnit()) .presence(mapPresence(field.presence())) .semanticType(semanticTypeOf(null, field)); if (field.presence() == Presence.CONSTANT && null != field.valueRef()) { final String valueRef = field.valueRef(); final byte[] bytes; bytes = valueRef.getBytes(StandardCharsets.UTF_8); encodingBuilder.constValue(new PrimitiveValue(bytes, "UTF-8", valueRef.length())); encodingBuilder.primitiveType(PrimitiveType.CHAR); } final Token token = new Token.Builder() .signal(signal) .size(field.computedBlockLength()) .name(field.name()) .description(field.description()) .id(field.id()) .offset(field.computedOffset()) .version(field.sinceVersion()) .deprecated(field.deprecated()) .encoding(encodingBuilder.build()) .build(); tokenList.add(token); }
.primitiveType(type.primitiveType()) .byteOrder(schema.byteOrder()) .semanticType(semanticTypeOf(type, field)) .characterEncoding(type.characterEncoding()) .timeUnit(field.timeUnit()) encodingBuilder .presence(Encoding.Presence.CONSTANT) .constValue(valueRef != null ? lookupValueRef(valueRef) : type.constVal()); break;
private List<Token> generateForHeader(final MessageSchema schema) { tokenList.clear(); add(schema.messageHeader(), 0, null); return tokenList; }
.primitiveType(type.primitiveType()) .byteOrder(byteOrder) .semanticType(semanticTypeOf(type, field)) .characterEncoding(type.characterEncoding());
ir = new IrGenerator().generate(parseSchema(fileName), System.getProperty(TARGET_NAMESPACE));
private void add(final SetType type, final int offset, final Field field) { final PrimitiveType encodingType = type.encodingType(); final Encoding encoding = new Encoding.Builder() .semanticType(semanticTypeOf(type, field)) .primitiveType(encodingType) .build(); final Token.Builder builder = new Token.Builder() .signal(Signal.BEGIN_SET) .name(type.name()) .referencedName(type.referencedName()) .size(encodingType.size()) .offset(offset) .version(type.sinceVersion()) .deprecated(type.deprecated()) .description(type.description()) .encoding(encoding); if (null != field) { builder.version(Math.max(field.sinceVersion(), type.sinceVersion())); } tokenList.add(builder.build()); for (final SetType.Choice choice : type.choices()) { add(choice, encodingType); } builder.signal(Signal.END_SET); tokenList.add(builder.build()); }
addFieldSignal(field, Signal.BEGIN_GROUP); add(field.dimensionType(), 0, field); addAllFields(field.groupFields()); addFieldSignal(field, Signal.END_GROUP); addFieldSignal(field, Signal.BEGIN_VAR_DATA); add((CompositeType)type, field.computedOffset(), field); addFieldSignal(field, Signal.END_VAR_DATA); addFieldSignal(field, Signal.BEGIN_FIELD); add((EncodedDataType)type, field.computedOffset(), field); add((CompositeType)type, field.computedOffset(), field); add((EnumType)type, field.computedOffset(), field); add((SetType)type, field.computedOffset(), field); addFieldSignal(field, Signal.END_FIELD);