Skip to content

Commit 09fb4bb

Browse files
split out var data encoding
1 parent fb7d39c commit 09fb4bb

File tree

2 files changed

+78
-14
lines changed

2 files changed

+78
-14
lines changed

main/java/uk/co/real_logic/sbe/generation/java/JavaGenerator.java

Lines changed: 76 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,9 @@ private void generateEncoder(final List<Token> groups,
170170

171171
final StringBuilder sb = new StringBuilder();
172172
generateGroups(sb, className, groups, 0, BASE_INDENT);
173-
174-
out.append(generateVarData(varData));
175173
out.append(sb);
174+
175+
out.append(generateVarDataEncoders(varData));
176176
out.append("}\n");
177177
}
178178
}
@@ -198,6 +198,7 @@ private void generateDecoder(final List<Token> groups,
198198
199199
out.append(sb);*/
200200

201+
out.append(generateVarDataDecoders(varData));
201202
out.append("}\n");
202203
}
203204
}
@@ -463,7 +464,7 @@ private CharSequence generateGroupProperty(final String groupName, final Token t
463464
return sb;
464465
}
465466

466-
private CharSequence generateVarData(final List<Token> tokens)
467+
private CharSequence generateVarDataDecoders(final List<Token> tokens)
467468
{
468469
final StringBuilder sb = new StringBuilder();
469470

@@ -515,40 +516,65 @@ private CharSequence generateVarData(final List<Token> tokens)
515516
byteOrderStr
516517
));
517518

518-
generateVarDataAccessMethods(
519-
sb, token, propertyName, sizeOfLengthField, lengthJavaType, lengthTypePrefix, byteOrderStr, characterEncoding);
519+
generateVarDataDecodeMethods(
520+
sb, token, propertyName, sizeOfLengthField, lengthTypePrefix, byteOrderStr, characterEncoding);
520521
}
521522

522523
return sb;
523524
}
524525

525-
private void generateVarDataAccessMethods(
526+
private CharSequence generateVarDataEncoders(final List<Token> tokens)
527+
{
528+
final StringBuilder sb = new StringBuilder();
529+
530+
for (int i = 0, size = tokens.size(); i < size; i++)
531+
{
532+
final Token token = tokens.get(i);
533+
if (token.signal() != Signal.BEGIN_VAR_DATA)
534+
{
535+
continue;
536+
}
537+
538+
final String characterEncoding = tokens.get(i + 3).encoding().characterEncoding();
539+
final String propertyName = toUpperFirstChar(token.name());
540+
final Token lengthToken = tokens.get(i + 2);
541+
final int sizeOfLengthField = lengthToken.size();
542+
final Encoding lengthEncoding = lengthToken.encoding();
543+
final String lengthJavaType = javaTypeName(lengthEncoding.primitiveType());
544+
final String lengthTypePrefix = lengthEncoding.primitiveType().primitiveName();
545+
final String byteOrderStr = byteOrderString(lengthEncoding);
546+
547+
generateVarDataEncodeMethods(
548+
sb, propertyName, sizeOfLengthField, lengthJavaType, lengthTypePrefix, byteOrderStr, characterEncoding);
549+
}
550+
551+
return sb;
552+
}
553+
554+
private void generateVarDataDecodeMethods(
526555
final StringBuilder sb,
527556
final Token token,
528557
final String propertyName,
529558
final int sizeOfLengthField,
530-
final String lengthJavaType,
531559
final String lengthTypePrefix,
532560
final String byteOrderStr,
533561
final String characterEncoding)
534562
{
535-
generateVarDataTypedAccessors(
563+
generateVarDataTypedDecoder(
536564
sb,
537565
token,
538566
propertyName,
539567
sizeOfLengthField,
540568
fullMutableBufferImplementation,
541-
lengthJavaType,
542569
lengthTypePrefix,
543570
byteOrderStr);
544571

545-
generateVarDataTypedAccessors(
572+
generateVarDataTypedDecoder(
546573
sb,
547574
token,
548575
propertyName,
549576
sizeOfLengthField,
550577
"byte[]",
551-
lengthJavaType,
552578
lengthTypePrefix,
553579
byteOrderStr);
554580

@@ -582,6 +608,34 @@ private void generateVarDataAccessMethods(
582608
byteOrderStr,
583609
characterEncoding
584610
));
611+
}
612+
613+
private void generateVarDataEncodeMethods(
614+
final StringBuilder sb,
615+
final String propertyName,
616+
final int sizeOfLengthField,
617+
final String lengthJavaType,
618+
final String lengthTypePrefix,
619+
final String byteOrderStr,
620+
final String characterEncoding)
621+
{
622+
generateVarDataTypedEncoder(
623+
sb,
624+
propertyName,
625+
sizeOfLengthField,
626+
fullMutableBufferImplementation,
627+
lengthJavaType,
628+
lengthTypePrefix,
629+
byteOrderStr);
630+
631+
generateVarDataTypedEncoder(
632+
sb,
633+
propertyName,
634+
sizeOfLengthField,
635+
"byte[]",
636+
lengthJavaType,
637+
lengthTypePrefix,
638+
byteOrderStr);
585639

586640
sb.append(String.format(
587641
"\n" +
@@ -612,13 +666,12 @@ private void generateVarDataAccessMethods(
612666
));
613667
}
614668

615-
private void generateVarDataTypedAccessors(
669+
private void generateVarDataTypedDecoder(
616670
final StringBuilder sb,
617671
final Token token,
618672
final String propertyName,
619673
final int sizeOfLengthField,
620674
final String exchangeType,
621-
final String lengthJavaType,
622675
final String lengthTypePrefix,
623676
final String byteOrderStr)
624677
{
@@ -643,7 +696,17 @@ private void generateVarDataTypedAccessors(
643696
lengthTypePrefix,
644697
byteOrderStr
645698
));
699+
}
646700

701+
private void generateVarDataTypedEncoder(
702+
final StringBuilder sb,
703+
final String propertyName,
704+
final int sizeOfLengthField,
705+
final String exchangeType,
706+
final String lengthJavaType,
707+
final String lengthTypePrefix,
708+
final String byteOrderStr)
709+
{
647710
sb.append(String.format(
648711
"\n" +
649712
" public int put%s(final %s src, final int srcOffset, final int length)\n" +

test/java/uk/co/real_logic/sbe/generation/java/JavaGeneratorTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ private Class<?> compileCar() throws Exception
306306
private void wrapForEncode(final UnsafeBuffer buffer,
307307
final Object msgFlyweight) throws Exception
308308
{
309-
msgFlyweight.getClass()
309+
msgFlyweight
310+
.getClass()
310311
.getDeclaredMethod("wrapForEncode", BUFFER_CLASS, int.class)
311312
.invoke(msgFlyweight, buffer, 0);
312313
}

0 commit comments

Comments
 (0)