Skip to content

Commit 3c35f10

Browse files
committed
[CPP]: Added static methods to get header size for groups and var data. Issue aeron-io#92
1 parent 8d9fcff commit 3c35f10

File tree

3 files changed

+145
-47
lines changed

3 files changed

+145
-47
lines changed

main/cpp/uk_co_real_logic_sbe_ir_generated/FrameCodec.hpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@ class FrameCodec
300300
return "";
301301
}
302302

303+
static int packageNameHeaderSize()
304+
{
305+
return 1;
306+
}
307+
303308
sbe_int64_t packageNameLength(void) const
304309
{
305310
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -368,6 +373,11 @@ class FrameCodec
368373
return "";
369374
}
370375

376+
static int namespaceNameHeaderSize()
377+
{
378+
return 1;
379+
}
380+
371381
sbe_int64_t namespaceNameLength(void) const
372382
{
373383
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -436,6 +446,11 @@ class FrameCodec
436446
return "";
437447
}
438448

449+
static int semanticVersionHeaderSize()
450+
{
451+
return 1;
452+
}
453+
439454
sbe_int64_t semanticVersionLength(void) const
440455
{
441456
return (*((sbe_uint8_t *)(buffer_ + position())));

main/cpp/uk_co_real_logic_sbe_ir_generated/TokenCodec.hpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,11 @@ class TokenCodec
510510
return "";
511511
}
512512

513+
static int nameHeaderSize()
514+
{
515+
return 1;
516+
}
517+
513518
sbe_int64_t nameLength(void) const
514519
{
515520
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -578,6 +583,11 @@ class TokenCodec
578583
return "";
579584
}
580585

586+
static int constValueHeaderSize()
587+
{
588+
return 1;
589+
}
590+
581591
sbe_int64_t constValueLength(void) const
582592
{
583593
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -646,6 +656,11 @@ class TokenCodec
646656
return "";
647657
}
648658

659+
static int minValueHeaderSize()
660+
{
661+
return 1;
662+
}
663+
649664
sbe_int64_t minValueLength(void) const
650665
{
651666
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -714,6 +729,11 @@ class TokenCodec
714729
return "";
715730
}
716731

732+
static int maxValueHeaderSize()
733+
{
734+
return 1;
735+
}
736+
717737
sbe_int64_t maxValueLength(void) const
718738
{
719739
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -782,6 +802,11 @@ class TokenCodec
782802
return "";
783803
}
784804

805+
static int nullValueHeaderSize()
806+
{
807+
return 1;
808+
}
809+
785810
sbe_int64_t nullValueLength(void) const
786811
{
787812
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -850,6 +875,11 @@ class TokenCodec
850875
return "";
851876
}
852877

878+
static int characterEncodingHeaderSize()
879+
{
880+
return 1;
881+
}
882+
853883
sbe_int64_t characterEncodingLength(void) const
854884
{
855885
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -918,6 +948,11 @@ class TokenCodec
918948
return "";
919949
}
920950

951+
static int epochHeaderSize()
952+
{
953+
return 1;
954+
}
955+
921956
sbe_int64_t epochLength(void) const
922957
{
923958
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -986,6 +1021,11 @@ class TokenCodec
9861021
return "";
9871022
}
9881023

1024+
static int timeUnitHeaderSize()
1025+
{
1026+
return 1;
1027+
}
1028+
9891029
sbe_int64_t timeUnitLength(void) const
9901030
{
9911031
return (*((sbe_uint8_t *)(buffer_ + position())));
@@ -1054,6 +1094,11 @@ class TokenCodec
10541094
return "";
10551095
}
10561096

1097+
static int semanticTypeHeaderSize()
1098+
{
1099+
return 1;
1100+
}
1101+
10571102
sbe_int64_t semanticTypeLength(void) const
10581103
{
10591104
return (*((sbe_uint8_t *)(buffer_ + position())));

main/java/uk/co/real_logic/sbe/generation/cpp98/Cpp98Generator.java

Lines changed: 85 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.ArrayList;
3030
import java.util.List;
3131

32+
import static uk.co.real_logic.sbe.codec.java.JavaUtil.toLowerFirstChar;
3233
import static uk.co.real_logic.sbe.generation.cpp98.Cpp98Util.*;
3334

3435
public class Cpp98Generator implements CodeGenerator
@@ -256,6 +257,22 @@ private void generateGroupClassHeader(final StringBuilder sb,
256257
cpp98TypeForNumInGroup, cpp98TypeForBlockLength, blockLength, dimensionHeaderSize
257258
));
258259

260+
sb.append(String.format(
261+
indent + " static int sbeHeaderSize()\n" +
262+
indent + " {\n" +
263+
indent + " return %d;\n" +
264+
indent + " }\n\n",
265+
dimensionHeaderSize
266+
));
267+
268+
sb.append(String.format(
269+
indent + " static int sbeBlockLength()\n" +
270+
indent + " {\n" +
271+
indent + " return %d;\n" +
272+
indent + " }\n\n",
273+
blockLength
274+
));
275+
259276
sb.append(String.format(
260277
indent + " int count(void) const\n" +
261278
indent + " {\n" +
@@ -343,53 +360,13 @@ private CharSequence generateVarData(final List<Token> tokens)
343360
{
344361
final String propertyName = toUpperFirstChar(token.name());
345362
final String characterEncoding = tokens.get(i + 3).encoding().characterEncoding();
346-
347-
sb.append(String.format(
348-
"\n" +
349-
" static const char *%1$sCharacterEncoding()\n" +
350-
" {\n" +
351-
" return \"%2$s\";\n" +
352-
" }\n\n",
353-
formatPropertyName(propertyName),
354-
characterEncoding
355-
));
356-
357-
sb.append(String.format(
358-
" static int %1$sSinceVersion(void)\n" +
359-
" {\n" +
360-
" return %2$d;\n" +
361-
" }\n\n" +
362-
" bool %1$sInActingVersion(void)\n" +
363-
" {\n" +
364-
" return (actingVersion_ >= %2$s) ? true : false;\n" +
365-
" }\n\n" +
366-
" static int %1$sId(void)\n" +
367-
" {\n" +
368-
" return %3$d;\n" +
369-
" }\n\n",
370-
formatPropertyName(propertyName),
371-
Long.valueOf(token.version()),
372-
Integer.valueOf(token.id())
373-
));
374-
375-
generateFieldMetaAttributeMethod(sb, token, BASE_INDENT);
376-
377363
final Token lengthToken = tokens.get(i + 2);
378364
final Integer sizeOfLengthField = Integer.valueOf(lengthToken.size());
379-
final String lengthcpp98Type = cpp98TypeName(lengthToken.encoding().primitiveType());
365+
final String lengthCpp98Type = cpp98TypeName(lengthToken.encoding().primitiveType());
380366

381-
sb.append(String.format(
382-
"\n" +
383-
" sbe_int64_t %1$sLength(void) const\n" +
384-
" {\n" +
385-
"%2$s" +
386-
" return %3$s(*((%4$s *)(buffer_ + position())));\n" +
387-
" }\n\n",
388-
formatPropertyName(propertyName),
389-
generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT),
390-
formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()),
391-
lengthcpp98Type
392-
));
367+
generateFieldMetaAttributeMethod(sb, token, BASE_INDENT);
368+
369+
generateVarDataDecriptors(sb, token, propertyName, characterEncoding, lengthToken, sizeOfLengthField, lengthCpp98Type);
393370

394371
sb.append(String.format(
395372
" const char *%1$s(void)\n" +
@@ -402,7 +379,7 @@ private CharSequence generateVarData(final List<Token> tokens)
402379
formatPropertyName(propertyName),
403380
generateTypeFieldNotPresentCondition(token.version(), BASE_INDENT),
404381
sizeOfLengthField,
405-
lengthcpp98Type
382+
lengthCpp98Type
406383
));
407384

408385
sb.append(String.format(
@@ -422,7 +399,7 @@ private CharSequence generateVarData(final List<Token> tokens)
422399
generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT),
423400
sizeOfLengthField,
424401
formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()),
425-
lengthcpp98Type
402+
lengthCpp98Type
426403
));
427404

428405
sb.append(String.format(
@@ -438,7 +415,7 @@ private CharSequence generateVarData(final List<Token> tokens)
438415
" }\n",
439416
propertyName,
440417
sizeOfLengthField,
441-
lengthcpp98Type,
418+
lengthCpp98Type,
442419
formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType())
443420
));
444421
}
@@ -447,6 +424,67 @@ private CharSequence generateVarData(final List<Token> tokens)
447424
return sb;
448425
}
449426

427+
private void generateVarDataDecriptors(final StringBuilder sb,
428+
final Token token,
429+
final String propertyName,
430+
final String characterEncoding,
431+
final Token lengthToken,
432+
final Integer sizeOfLengthField,
433+
final String lengthCpp98Type)
434+
{
435+
sb.append(String.format(
436+
"\n" +
437+
" static const char *%1$sCharacterEncoding()\n" +
438+
" {\n" +
439+
" return \"%2$s\";\n" +
440+
" }\n\n",
441+
formatPropertyName(propertyName),
442+
characterEncoding
443+
));
444+
445+
sb.append(String.format(
446+
" static int %1$sSinceVersion(void)\n" +
447+
" {\n" +
448+
" return %2$d;\n" +
449+
" }\n\n" +
450+
" bool %1$sInActingVersion(void)\n" +
451+
" {\n" +
452+
" return (actingVersion_ >= %2$s) ? true : false;\n" +
453+
" }\n\n" +
454+
" static int %1$sId(void)\n" +
455+
" {\n" +
456+
" return %3$d;\n" +
457+
" }\n\n",
458+
formatPropertyName(propertyName),
459+
Long.valueOf(token.version()),
460+
Integer.valueOf(token.id())
461+
));
462+
463+
464+
sb.append(String.format(
465+
"\n" +
466+
" static int %sHeaderSize()\n" +
467+
" {\n" +
468+
" return %d;\n" +
469+
" }\n",
470+
toLowerFirstChar(propertyName),
471+
sizeOfLengthField
472+
));
473+
474+
sb.append(String.format(
475+
"\n" +
476+
" sbe_int64_t %1$sLength(void) const\n" +
477+
" {\n" +
478+
"%2$s" +
479+
" return %3$s(*((%4$s *)(buffer_ + position())));\n" +
480+
" }\n\n",
481+
formatPropertyName(propertyName),
482+
generateArrayFieldNotPresentCondition(token.version(), BASE_INDENT),
483+
formatByteOrderEncoding(lengthToken.encoding().byteOrder(), lengthToken.encoding().primitiveType()),
484+
lengthCpp98Type
485+
));
486+
}
487+
450488
private void generateChoiceSet(final List<Token> tokens) throws IOException
451489
{
452490
final String bitSetName = formatClassName(tokens.get(0).name());

0 commit comments

Comments
 (0)