@@ -201,7 +201,7 @@ private void generateGroupClassHeader(
201201 indent  + INDENT  + INDENT  + "_blockLength = _dimensions.BlockLength;\n "  +
202202 indent  + INDENT  + INDENT  + "_count = (int) _dimensions.NumInGroup;\n "  + // cast safety checked above 
203203 indent  + INDENT  + INDENT  + "_actingVersion = actingVersion;\n "  +
204-  indent  + INDENT  + INDENT  + "_index = -1 ;\n "  +
204+  indent  + INDENT  + INDENT  + "_index = 0 ;\n "  +
205205 indent  + INDENT  + INDENT  + "_parentMessage.Limit = parentMessage.Limit + SbeHeaderSize;\n "  +
206206 indent  + INDENT  + "}\n " ,
207207 parentMessageClassName ));
@@ -224,19 +224,18 @@ private void generateGroupClassHeader(
224224 indent  + INDENT  + INDENT  + "_parentMessage = parentMessage;\n "  +
225225 indent  + INDENT  + INDENT  + "_buffer = buffer;\n "  +
226226 indent  + INDENT  + INDENT  + "_dimensions.Wrap(buffer, parentMessage.Limit, _actingVersion);\n "  +
227-  indent  + INDENT  + INDENT  + "_dimensions.BlockLength = (%4$s)%5$d ;\n "  +
228-  indent  + INDENT  + INDENT  + "_dimensions.NumInGroup = (%6 $s)count;\n "  +
229-  indent  + INDENT  + INDENT  + "_index = -1 ;\n "  +
227+  indent  + INDENT  + INDENT  + "_dimensions.BlockLength = SbeBlockLength ;\n "  +
228+  indent  + INDENT  + INDENT  + "_dimensions.NumInGroup = (%5 $s)  count;\n "  +
229+  indent  + INDENT  + INDENT  + "_index = 0 ;\n "  +
230230 indent  + INDENT  + INDENT  + "_count = count;\n "  +
231-  indent  + INDENT  + INDENT  + "_blockLength = %5$d ;\n "  +
231+  indent  + INDENT  + INDENT  + "_blockLength = SbeBlockLength ;\n "  +
232232 indent  + INDENT  + INDENT  + "_actingVersion = SchemaVersion;\n "  +
233233 indent  + INDENT  + INDENT  + "parentMessage.Limit = parentMessage.Limit + SbeHeaderSize;\n "  +
234234 indent  + INDENT  + "}\n " ,
235235 parentMessageClassName ,
236236 numInGroupToken .encoding ().applicableMinValue ().longValue (),
237237 numInGroupToken .encoding ().applicableMaxValue ().longValue (),
238238 typeForBlockLength ,
239-  blockLength ,
240239 typeForNumInGroup ));
241240
242241 sb .append (String .format ("\n "  +
@@ -245,20 +244,33 @@ private void generateGroupClassHeader(
245244 blockLength ,
246245 dimensionHeaderLength ));
247246
248-  generateGroupEnumerator (sb , groupName , indent );
247+  generateGroupEnumerator (sb , groupName , typeForNumInGroup ,  indent );
249248 }
250249
251-  private  void  generateGroupEnumerator (final  StringBuilder  sb , final  String  groupName , final  String  indent )
250+  private  void  generateGroupEnumerator (
251+  final  StringBuilder  sb ,
252+  final  String  groupName ,
253+  final  String  typeForNumInGroup ,
254+  final  String  indent )
252255 {
253256 sb .append (
254257 indent  + INDENT  + "public int ActingBlockLength { get { return _blockLength; } }\n \n "  +
255258 indent  + INDENT  + "public int Count { get { return _count; } }\n \n "  +
256-  indent  + INDENT  + "public bool HasNext { get { return (_index + 1) < _count; } }\n " );
259+  indent  + INDENT  + "public bool HasNext { get { return _index < _count; } }\n " );
260+ 
261+  sb .append (String .format ("\n "  +
262+  indent  + INDENT  + "public int ResetCountToIndex()\n "  +
263+  indent  + INDENT  + "{\n "  +
264+  indent  + INDENT  + INDENT  + "_count = _index;\n "  +
265+  indent  + INDENT  + INDENT  + "_dimensions.NumInGroup = (%s) _count;\n \n "  +
266+  indent  + INDENT  + INDENT  + "return _count;\n "  +
267+  indent  + INDENT  + "}\n " ,
268+  typeForNumInGroup ));
257269
258270 sb .append (String .format ("\n "  +
259271 indent  + INDENT  + "public %sGroup Next()\n "  +
260272 indent  + INDENT  + "{\n "  +
261-  indent  + INDENT  + INDENT  + "if (_index + 1  >= _count)\n "  +
273+  indent  + INDENT  + INDENT  + "if (_index >= _count)\n "  +
262274 indent  + INDENT  + INDENT  + "{\n "  +
263275 indent  + INDENT  + INDENT  + INDENT  + "ThrowHelper.ThrowInvalidOperationException();\n "  +
264276 indent  + INDENT  + INDENT  + "}\n \n "  +
0 commit comments