Skip to content

Commit 1e6c84f

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

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

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

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,6 @@ 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" +
205204
indent + INDENT + INDENT + "_parentMessage.Limit = parentMessage.Limit + SbeHeaderSize;\n" +
206205
indent + INDENT + "}\n",
207206
parentMessageClassName));
@@ -224,19 +223,17 @@ private void generateGroupClassHeader(
224223
indent + INDENT + INDENT + "_parentMessage = parentMessage;\n" +
225224
indent + INDENT + INDENT + "_buffer = buffer;\n" +
226225
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" +
226+
indent + INDENT + INDENT + "_dimensions.BlockLength = SbeBlockLength;\n" +
227+
indent + INDENT + INDENT + "_dimensions.NumInGroup = (%5$s) count;\n" +
230228
indent + INDENT + INDENT + "_count = count;\n" +
231-
indent + INDENT + INDENT + "_blockLength = %5$d;\n" +
229+
indent + INDENT + INDENT + "_blockLength = SbeBlockLength;\n" +
232230
indent + INDENT + INDENT + "_actingVersion = SchemaVersion;\n" +
233231
indent + INDENT + INDENT + "parentMessage.Limit = parentMessage.Limit + SbeHeaderSize;\n" +
234232
indent + INDENT + "}\n",
235233
parentMessageClassName,
236234
numInGroupToken.encoding().applicableMinValue().longValue(),
237235
numInGroupToken.encoding().applicableMaxValue().longValue(),
238236
typeForBlockLength,
239-
blockLength,
240237
typeForNumInGroup));
241238

242239
sb.append(String.format("\n" +
@@ -245,20 +242,33 @@ private void generateGroupClassHeader(
245242
blockLength,
246243
dimensionHeaderLength));
247244

248-
generateGroupEnumerator(sb, groupName, indent);
245+
generateGroupEnumerator(sb, groupName, indent, typeForNumInGroup);
249246
}
250247

251-
private void generateGroupEnumerator(final StringBuilder sb, final String groupName, final String indent)
248+
private void generateGroupEnumerator(
249+
final StringBuilder sb,
250+
final String groupName,
251+
final String indent,
252+
final String typeForNumInGroup)
252253
{
253254
sb.append(
254255
indent + INDENT + "public int ActingBlockLength { get { return _blockLength; } }\n\n" +
255256
indent + INDENT + "public int Count { get { return _count; } }\n\n" +
256-
indent + INDENT + "public bool HasNext { get { return (_index + 1) < _count; } }\n");
257+
indent + INDENT + "public bool HasNext { get { return _index < _count; } }\n");
258+
259+
sb.append(String.format("\n" +
260+
indent + INDENT + "public int ResetCountToIndex()\n" +
261+
indent + INDENT + "{\n" +
262+
indent + INDENT + INDENT + "_count = _index;\n" +
263+
indent + INDENT + INDENT + "_dimensions.NumInGroup = (%s) _count;\n\n" +
264+
indent + INDENT + INDENT + "return _count;\n" +
265+
indent + INDENT + "}\n",
266+
typeForNumInGroup));
257267

258268
sb.append(String.format("\n" +
259269
indent + INDENT + "public %sGroup Next()\n" +
260270
indent + INDENT + "{\n" +
261-
indent + INDENT + INDENT + "if (_index + 1 >= _count)\n" +
271+
indent + INDENT + INDENT + "if (_index >= _count)\n" +
262272
indent + INDENT + INDENT + "{\n" +
263273
indent + INDENT + INDENT + INDENT + "ThrowHelper.ThrowInvalidOperationException();\n" +
264274
indent + INDENT + INDENT + "}\n\n" +

0 commit comments

Comments
 (0)