Skip to content

Commit 5fef479

Browse files
author
Egor Seredin
committed
[C++] add skip() to walkthrough whole message
1 parent a7e800a commit 5fef479

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2915,6 +2915,7 @@ private CharSequence generateMessageLength(
29152915
final String indent)
29162916
{
29172917
final StringBuilder sbEncode = new StringBuilder();
2918+
final StringBuilder sbSkip = new StringBuilder();
29182919

29192920
for (int i = 0, size = groups.size(); i < size; i++)
29202921
{
@@ -2979,6 +2980,15 @@ private CharSequence generateMessageLength(
29792980
generateMessageLengthCallPre17Helper(thisGroup));
29802981
}
29812982

2983+
new Formatter(sbSkip).format(
2984+
indent + " %2$s().forEach([](%1$s e)" +
2985+
indent + " {\n" +
2986+
indent + " e.skip();\n" +
2987+
indent + " });\n",
2988+
formatClassName(groupToken.name()),
2989+
formatPropertyName(groupToken.name()),
2990+
groupToken.name());
2991+
29822992
i = endSignal;
29832993
}
29842994

@@ -2991,6 +3001,7 @@ private CharSequence generateMessageLength(
29913001
throw new IllegalStateException("tokens must begin with BEGIN_VAR_DATA: token=" + varDataToken);
29923002
}
29933003

3004+
final String propertyName = toUpperFirstChar(varDataToken.name());
29943005
final Token lengthToken = Generators.findFirst("length", varData, i);
29953006

29963007
new Formatter(sbEncode).format("\n" +
@@ -3003,12 +3014,21 @@ private CharSequence generateMessageLength(
30033014
varDataToken.name(),
30043015
lengthToken.encoding().applicableMaxValue().longValue());
30053016

3017+
new Formatter(sbSkip).format(
3018+
indent + " skip%1$s();\n",
3019+
propertyName);
3020+
30063021
i += varDataToken.componentTokenCount();
30073022
}
30083023

30093024
final StringBuilder sb = new StringBuilder();
30103025

30113026
new Formatter(sb).format("\n" +
3027+
indent + "void skip()\n" +
3028+
indent + "{\n" +
3029+
"%3$s" +
3030+
indent + "}\n\n" +
3031+
30123032
indent + "SBE_NODISCARD static SBE_CONSTEXPR bool isConstLength() SBE_NOEXCEPT\n" +
30133033
indent + "{\n" +
30143034
indent + " return " + ((groups.isEmpty() && varData.isEmpty()) ? "true" : "false") + ";\n" +
@@ -3028,7 +3048,8 @@ private CharSequence generateMessageLength(
30283048
"#endif\n" +
30293049
indent + "}\n",
30303050
generateMessageLengthArgs(fields, groups, varData, indent + INDENT, true)[0],
3031-
sbEncode.toString());
3051+
sbEncode.toString(),
3052+
sbSkip.toString());
30323053

30333054
return sb;
30343055
}

0 commit comments

Comments
 (0)