2929import java .util .ArrayList ;
3030import java .util .List ;
3131
32+ import static uk .co .real_logic .sbe .codec .java .JavaUtil .toLowerFirstChar ;
3233import static uk .co .real_logic .sbe .generation .cpp98 .Cpp98Util .*;
3334
3435public 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