Skip to content

Commit 2076d25

Browse files
authored
added maximum and minimum meta methods for allowed repeating group count (#834)
1 parent ab94844 commit 2076d25

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,15 @@ private void generateGroupEncoderClassHeader(
483483
blockLengthType, blockLengthOffset, blockLengthValue, byteOrderString(blockLengthToken.encoding()));
484484

485485
final PrimitiveType numInGroupType = numInGroupToken.encoding().primitiveType();
486+
487+
final String javaTypeName = javaTypeName(numInGroupType);
488+
final String minValue = generateLiteral(numInGroupType,
489+
numInGroupToken.encoding().applicableMinValue().toString());
490+
generatePrimitiveFieldMetaMethod(sb, ind, javaTypeName, "count", "Min", minValue);
491+
final String maxValue = generateLiteral(numInGroupType,
492+
numInGroupToken.encoding().applicableMaxValue().toString());
493+
generatePrimitiveFieldMetaMethod(sb, ind, javaTypeName, "count", "Max", maxValue);
494+
486495
final PrimitiveType newInGroupTypeCast = PrimitiveType.UINT32 == numInGroupType ?
487496
PrimitiveType.INT32 : numInGroupType;
488497
final String numInGroupOffset = "limit + " + numInGroupToken.offset();

sbe-tool/src/test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,22 @@ public void shouldGeneratePutCharSequence() throws Exception
442442
assertThat(get(decoder, "vehicleCode"), is("R11R12"));
443443
}
444444

445+
@Test
446+
public void shouldGenerateRepeatingGroupCountLimits() throws Exception
447+
{
448+
generator().generate();
449+
450+
final String className = "CarEncoder$FuelFiguresEncoder";
451+
final String fqClassName = ir.applicableNamespace() + "." + className;
452+
453+
final Class<?> clazz = compile(fqClassName);
454+
final Method minValue = clazz.getMethod("countMinValue");
455+
assertNotNull(minValue);
456+
assertEquals(0, minValue.invoke(null));
457+
final Method maxValue = clazz.getMethod("countMaxValue");
458+
assertNotNull(maxValue);
459+
assertEquals(65534, maxValue.invoke(null));
460+
}
445461

446462
private Class<?> getModelClass(final Object encoder) throws ClassNotFoundException
447463
{

0 commit comments

Comments
 (0)