@@ -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