@Test public void shouldGenerateValueRefToEnum() throws Exception { final MessageSchema schema = parse(getLocalResource("value-ref-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); assertThat(ir.getMessage(1).get(1).encodedLength(), is(8)); assertThat(ir.getMessage(2).get(1).encodedLength(), is(0)); assertThat(ir.getMessage(3).get(1).encodedLength(), is(0)); assertThat(ir.getMessage(4).get(1).encodedLength(), is(0)); assertThat(ir.getMessage(5).get(1).encodedLength(), is(0)); } }
final List<Token> msgTokens = ir.getMessage(templateId);
MSG_ENCODER.sbeSchemaVersion(), MSG_ENCODER.sbeBlockLength(), ir.getMessage(MSG_ENCODER.sbeTemplateId()), mockTokenListener);
final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(50001);
@Test public void shouldGenerateCorrectIrForMessageWithRepeatingGroupWithEmbeddedDimensionsDefaultDimensionType() throws Exception { final MessageSchema schema = parse(getLocalResource( "embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, 9=field, ... */ final int groupIdx = 4; final int dimensionsCompIdx = 5; final int fieldInGroupIdx = 9; final List<Token> tokens = ir.getMessage(1); assertThat(tokens.get(groupIdx).signal(), is(Signal.BEGIN_GROUP)); assertThat(tokens.get(groupIdx).name(), is("ListOrdGrp")); assertThat(valueOf(tokens.get(groupIdx).id()), is(valueOf(73))); assertThat(tokens.get(dimensionsCompIdx).signal(), is(Signal.BEGIN_COMPOSITE)); assertThat(tokens.get(dimensionsCompIdx).name(), is("groupSizeEncoding")); assertThat(tokens.get(fieldInGroupIdx).signal(), is(Signal.BEGIN_FIELD)); assertThat(tokens.get(fieldInGroupIdx).name(), is("ClOrdID")); }
@Test public void shouldGenerateCorrectOffsetsForFieldsWithEmbeddedComposite() throws Exception { final MessageSchema schema = parse(getLocalResource("composite-offsets-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> message2 = ir.getMessage(2); final int fieldOneIndex = 1; assertThat(message2.get(fieldOneIndex).offset(), is(0)); assertThat(message2.get(fieldOneIndex + 1).encodedLength(), is(4)); final int fieldTwoIndex = 4; assertThat(message2.get(fieldTwoIndex).offset(), is(8)); assertThat(message2.get(fieldTwoIndex + 1).encodedLength(), is(16)); assertThat(message2.get(fieldTwoIndex + 2).offset(), is(0)); assertThat(message2.get(fieldTwoIndex + 2).encodedLength(), is(1)); assertThat(message2.get(fieldTwoIndex + 3).offset(), is(8)); assertThat(message2.get(fieldTwoIndex + 3).encodedLength(), is(8)); final int fieldThreeIndex = 10; assertThat(message2.get(fieldThreeIndex).offset(), is(24)); assertThat(message2.get(fieldThreeIndex + 1).encodedLength(), is(8)); assertThat(message2.get(0).encodedLength(), is(32)); } }
@Test public void shouldGenerateCorrectIrForMultipleVarDataInRepeatingGroup() throws Exception { final MessageSchema schema = parse(getLocalResource("group-with-data-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(2); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, ... */ final Token groupToken = tokens.get(4); final Token varDataField1Token = tokens.get(15); final Token varDataField2Token = tokens.get(21); /* assert on the group token */ assertThat(groupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(groupToken.name(), is("Entries")); assertThat(valueOf(groupToken.id()), is(valueOf(2))); assertThat(varDataField1Token.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataField1Token.name(), is("varDataField1")); assertThat(valueOf(varDataField1Token.id()), is(valueOf(5))); assertThat(varDataField2Token.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataField2Token.name(), is("varDataField2")); assertThat(valueOf(varDataField2Token.id()), is(valueOf(6))); }
@Test public void shouldGenerateCorrectIrForOnlyMultipleVarDataInRepeatingGroup() throws Exception { final MessageSchema schema = parse(getLocalResource("group-with-data-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(4); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, ... */ final Token groupToken = tokens.get(4); final Token varDataField1Token = tokens.get(9); final Token varDataField2Token = tokens.get(15); /* assert on the group token */ assertThat(groupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(groupToken.name(), is("Entries")); assertThat(valueOf(groupToken.id()), is(valueOf(2))); assertThat(varDataField1Token.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataField1Token.name(), is("varDataField1")); assertThat(valueOf(varDataField1Token.id()), is(valueOf(5))); assertThat(varDataField2Token.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataField2Token.name(), is("varDataField2")); assertThat(valueOf(varDataField2Token.id()), is(valueOf(6))); } }
@Test public void shouldGenerateCorrectIrForMessageWithVariableLengthFieldWithEmbeddedLength() throws Exception { final MessageSchema schema = parse(getLocalResource( "embedded-length-and-count-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=field, 5=comp, 6=enc, 7=enc, 8=compend, 9=fieldend */ final int lengthFieldIdx = 4; final int lengthEncIdx = 6; final int dataEncIdx = 7; final List<Token> tokens = ir.getMessage(2); /* assert the varDataEncoding field node is formed correctly */ assertThat(tokens.get(lengthFieldIdx).signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(tokens.get(lengthFieldIdx).name(), is("EncryptedPassword")); assertThat(valueOf(tokens.get(lengthFieldIdx).id()), is(valueOf(1402))); /* assert the length node has correct values */ assertThat(tokens.get(lengthEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(lengthEncIdx).encoding().primitiveType(), is(PrimitiveType.UINT8)); /* assert the group node has the right IrId and xRefIrId, etc. */ assertThat(tokens.get(dataEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(dataEncIdx).encoding().primitiveType(), is(PrimitiveType.CHAR)); } }
@Test public void shouldGenerateCorrectIrForVarDataInNestedRepeatingGroup() throws Exception { final MessageSchema schema = parse(getLocalResource("group-with-data-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(3); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, ... */ final Token groupToken = tokens.get(4); final Token nestedGroupToken = tokens.get(12); final Token varDataFieldNestedToken = tokens.get(20); final Token varDataFieldToken = tokens.get(27); assertThat(groupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(groupToken.name(), is("Entries")); assertThat(valueOf(groupToken.id()), is(valueOf(2))); assertThat(nestedGroupToken.signal(), is(Signal.BEGIN_GROUP)); assertThat(nestedGroupToken.name(), is("NestedEntries")); assertThat(valueOf(nestedGroupToken.id()), is(valueOf(4))); assertThat(varDataFieldNestedToken.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataFieldNestedToken.name(), is("varDataFieldNested")); assertThat(valueOf(varDataFieldNestedToken.id()), is(valueOf(6))); assertThat(varDataFieldToken.signal(), is(Signal.BEGIN_VAR_DATA)); assertThat(varDataFieldToken.name(), is("varDataField")); assertThat(valueOf(varDataFieldToken.id()), is(valueOf(7))); }
@Test public void shouldGenerateCorrectIrForMessageWithRepeatingGroupWithEmbeddedDimensions() throws Exception { final MessageSchema schema = parse(getLocalResource( "basic-group-schema.xml"), ParserOptions.DEFAULT); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); /* 0=msg, 1=field, 2=enc, 3=fieldend, 4=group, 5=comp, 6=enc, 7=enc, 8=compend, ... */ final int groupIdx = 4; final int dimensionsCompIdx = 5; final int dimensionsBlEncIdx = 6; final int dimensionsNigEncIdx = 7; final List<Token> tokens = ir.getMessage(1); /* assert on the group token */ assertThat(tokens.get(groupIdx).signal(), is(Signal.BEGIN_GROUP)); assertThat(tokens.get(groupIdx).name(), is("Entries")); assertThat(valueOf(tokens.get(groupIdx).id()), is(valueOf(2))); /* assert on the comp token for dimensions */ assertThat(tokens.get(dimensionsCompIdx).signal(), is(Signal.BEGIN_COMPOSITE)); assertThat(tokens.get(dimensionsCompIdx).name(), is("groupSizeEncoding")); /* assert on the enc token for dimensions blockLength */ assertThat(tokens.get(dimensionsBlEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(dimensionsBlEncIdx).name(), is("blockLength")); /* assert on the enc token for dimensions numInGroup */ assertThat(tokens.get(dimensionsNigEncIdx).signal(), is(Signal.ENCODING)); assertThat(tokens.get(dimensionsNigEncIdx).name(), is("numInGroup")); }
final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(1);
public void print(final StringBuilder output, final UnsafeBuffer buffer, final int bufferOffset) { final int templateId = headerDecoder.getTemplateId(buffer, bufferOffset); final int schemaId = headerDecoder.getSchemaId(buffer, bufferOffset); final int actingVersion = headerDecoder.getSchemaVersion(buffer, bufferOffset); final int blockLength = headerDecoder.getBlockLength(buffer, bufferOffset); validateId(schemaId); validateVersion(schemaId, actingVersion); final int messageOffset = bufferOffset + headerDecoder.encodedLength(); final List<Token> msgTokens = ir.getMessage(templateId); OtfMessageDecoder.decode( buffer, messageOffset, actingVersion, blockLength, msgTokens, new JsonTokenListener(output)); }
for (final List<Token> decodedTokenList : decodedIr.messages()) final List<Token> tokens = ir.getMessage(decodedTokenList.get(0).id());
final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(1);
final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(3);
final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(2);
final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final List<Token> tokens = ir.getMessage(1);
public int decode( final DirectBuffer buffer, final int offset, final int blockLength, final int actingVersion, final int templateId) { final List<Token> tokens = ir.getMessage(templateId); libraryId = NO_LIBRARY_ID; correlationId = NO_CORRELATION_ID; return OtfMessageDecoder.decode( buffer, offset, actingVersion, blockLength, tokens, this); }
public void print(final StringBuilder output, final UnsafeBuffer buffer, final int bufferOffset) { final int templateId = headerDecoder.getTemplateId(buffer, bufferOffset); final int schemaId = headerDecoder.getSchemaId(buffer, bufferOffset); final int actingVersion = headerDecoder.getSchemaVersion(buffer, bufferOffset); final int blockLength = headerDecoder.getBlockLength(buffer, bufferOffset); validateId(schemaId); validateVersion(schemaId, actingVersion); final int messageOffset = bufferOffset + headerDecoder.encodedLength(); final List<Token> msgTokens = ir.getMessage(templateId); OtfMessageDecoder.decode( buffer, messageOffset, actingVersion, blockLength, msgTokens, new JsonTokenListener(output)); }