Skip to content

Commit 30c6a43

Browse files
committed
[C#] Support resetting group count to current index to allow for streaming operations.
1 parent 9e67177 commit 30c6a43

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

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

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)