@@ -342,6 +342,7 @@ private void generateGroupDecoderClassHeader(
342
342
final String indent )
343
343
{
344
344
final Token groupToken = tokens .get (index );
345
+ final String className = formatClassName (groupName );
345
346
final int dimensionHeaderLen = tokens .get (index + 1 ).encodedLength ();
346
347
347
348
final Token blockLengthToken = Generators .findFirst ("blockLength" , tokens , index );
@@ -372,14 +373,27 @@ private void generateGroupDecoderClassHeader(
372
373
.append (indent ).append (" if (buffer != this.buffer)\n " )
373
374
.append (indent ).append (" {\n " )
374
375
.append (indent ).append (" this.buffer = buffer;\n " )
375
- .append (indent ).append (" }\n " )
376
- .append (indent ).append (" index = -1 ;\n " )
376
+ .append (indent ).append (" }\n \n " )
377
+ .append (indent ).append (" index = 0 ;\n " )
377
378
.append (indent ).append (" final int limit = parentMessage.limit();\n " )
378
379
.append (indent ).append (" parentMessage.limit(limit + HEADER_SIZE);\n " )
379
380
.append (indent ).append (" blockLength = (int)" ).append (blockLengthGet ).append (";\n " )
380
381
.append (indent ).append (" count = (int)" ).append (numInGroupGet ).append (";\n " )
381
382
.append (indent ).append (" }\n " );
382
383
384
+ sb .append ("\n " )
385
+ .append (indent ).append (" public " ).append (className ).append (" next()\n " )
386
+ .append (indent ).append (" {\n " )
387
+ .append (indent ).append (" if (index >= count)\n " )
388
+ .append (indent ).append (" {\n " )
389
+ .append (indent ).append (" throw new java.util.NoSuchElementException();\n " )
390
+ .append (indent ).append (" }\n \n " )
391
+ .append (indent ).append (" offset = parentMessage.limit();\n " )
392
+ .append (indent ).append (" parentMessage.limit(offset + blockLength);\n " )
393
+ .append (indent ).append (" ++index;\n \n " )
394
+ .append (indent ).append (" return this;\n " )
395
+ .append (indent ).append (" }\n " );
396
+
383
397
sb .append ("\n " )
384
398
.append (indent ).append (" public static int sbeHeaderSize()\n " )
385
399
.append (indent ).append (" {\n " )
@@ -392,7 +406,6 @@ private void generateGroupDecoderClassHeader(
392
406
.append (indent ).append (" return " ).append (tokens .get (index ).encodedLength ()).append (";\n " )
393
407
.append (indent ).append (" }\n " );
394
408
395
- final String className = formatClassName (groupName );
396
409
sb .append ("\n " )
397
410
.append (indent ).append (" public int actingBlockLength()\n " )
398
411
.append (indent ).append (" {\n " )
@@ -412,20 +425,7 @@ private void generateGroupDecoderClassHeader(
412
425
.append (indent ).append (" }\n \n " )
413
426
.append (indent ).append (" public boolean hasNext()\n " )
414
427
.append (indent ).append (" {\n " )
415
- .append (indent ).append (" return (index + 1) < count;\n " )
416
- .append (indent ).append (" }\n " );
417
-
418
- sb .append ("\n " )
419
- .append (indent ).append (" public " ).append (className ).append (" next()\n " )
420
- .append (indent ).append (" {\n " )
421
- .append (indent ).append (" if (index + 1 >= count)\n " )
422
- .append (indent ).append (" {\n " )
423
- .append (indent ).append (" throw new java.util.NoSuchElementException();\n " )
424
- .append (indent ).append (" }\n \n " )
425
- .append (indent ).append (" offset = parentMessage.limit();\n " )
426
- .append (indent ).append (" parentMessage.limit(offset + blockLength);\n " )
427
- .append (indent ).append (" ++index;\n \n " )
428
- .append (indent ).append (" return this;\n " )
428
+ .append (indent ).append (" return index < count;\n " )
429
429
.append (indent ).append (" }\n " );
430
430
}
431
431
@@ -477,35 +477,25 @@ private void generateGroupEncoderClassHeader(
477
477
ind + " {\n " +
478
478
ind + " this.buffer = buffer;\n " +
479
479
ind + " }\n \n " +
480
- ind + " index = -1 ;\n " +
480
+ ind + " index = 0 ;\n " +
481
481
ind + " this.count = count;\n " +
482
482
ind + " final int limit = parentMessage.limit();\n " +
483
+ ind + " initialLimit = limit;\n " +
483
484
ind + " parentMessage.limit(limit + HEADER_SIZE);\n " +
484
485
ind + " %5$s;\n " +
485
486
ind + " %6$s;\n " +
486
- ind + " }\n \n " ,
487
+ ind + " }\n " ,
487
488
parentMessageClassName ,
488
489
mutableBuffer ,
489
490
numInGroupToken .encoding ().applicableMinValue ().longValue (),
490
491
numInGroupToken .encoding ().applicableMaxValue ().longValue (),
491
492
blockLengthPut ,
492
493
numInGroupPut );
493
494
494
- sb .append (ind ).append (" public static int sbeHeaderSize()\n " )
495
- .append (ind ).append (" {\n " )
496
- .append (ind ).append (" return HEADER_SIZE;\n " )
497
- .append (ind ).append (" }\n " );
498
-
499
- sb .append ("\n " )
500
- .append (ind ).append (" public static int sbeBlockLength()\n " )
501
- .append (ind ).append (" {\n " )
502
- .append (ind ).append (" return " ).append (blockLength ).append (";\n " )
503
- .append (ind ).append (" }\n " );
504
-
505
495
sb .append ("\n " )
506
496
.append (ind ).append (" public " ).append (encoderName (groupName )).append (" next()\n " )
507
497
.append (ind ).append (" {\n " )
508
- .append (ind ).append (" if (index + 1 >= count)\n " )
498
+ .append (ind ).append (" if (index >= count)\n " )
509
499
.append (ind ).append (" {\n " )
510
500
.append (ind ).append (" throw new java.util.NoSuchElementException();\n " )
511
501
.append (ind ).append (" }\n \n " )
@@ -514,6 +504,30 @@ private void generateGroupEncoderClassHeader(
514
504
.append (ind ).append (" ++index;\n \n " )
515
505
.append (ind ).append (" return this;\n " )
516
506
.append (ind ).append (" }\n " );
507
+
508
+ final String countOffset = "initialLimit + " + numInGroupToken .offset ();
509
+ final String resetCountPut = generatePut (
510
+ numInGroupType , countOffset , numInGroupValue , byteOrderString (numInGroupToken .encoding ()));
511
+
512
+ sb .append ("\n " )
513
+ .append (ind ).append (" public int resetCountToIndex()\n " )
514
+ .append (ind ).append (" {\n " )
515
+ .append (ind ).append (" count = index;\n " )
516
+ .append (ind ).append (" " ).append (resetCountPut ).append (";\n \n " )
517
+ .append (ind ).append (" return count;\n " )
518
+ .append (ind ).append (" }\n " );
519
+
520
+ sb .append ("\n " )
521
+ .append (ind ).append (" public static int sbeHeaderSize()\n " )
522
+ .append (ind ).append (" {\n " )
523
+ .append (ind ).append (" return HEADER_SIZE;\n " )
524
+ .append (ind ).append (" }\n " );
525
+
526
+ sb .append ("\n " )
527
+ .append (ind ).append (" public static int sbeBlockLength()\n " )
528
+ .append (ind ).append (" {\n " )
529
+ .append (ind ).append (" return " ).append (blockLength ).append (";\n " )
530
+ .append (ind ).append (" }\n " );
517
531
}
518
532
519
533
private static String primitiveTypeName (final Token token )
@@ -595,7 +609,8 @@ private void generateGroupEncoderClassDeclaration(
595
609
indent + " private %4$s buffer;\n " +
596
610
indent + " private int count;\n " +
597
611
indent + " private int index;\n " +
598
- indent + " private int offset;\n " ,
612
+ indent + " private int offset;\n " +
613
+ indent + " private int initialLimit;\n " ,
599
614
className ,
600
615
dimensionHeaderSize ,
601
616
parentMessageClassName ,
0 commit comments