@@ -536,6 +536,18 @@ private static void generateAccessOrderException(
536
536
.append (fieldPrecedenceModel .generatedRepresentationClassName ()).append (".\" );\n " );
537
537
}
538
538
539
+ private static void generateAccessOrderException (
540
+ final StringBuilder sb ,
541
+ final String indent ,
542
+ final String action )
543
+ {
544
+ sb .append (indent ).append ("throw AccessOrderError(" )
545
+ .append ("std::string(\" Illegal access. \" ) + \n " )
546
+ .append (indent ).append (INDENT )
547
+ .append ("\" Cannot call \\ \" " ).append (action )
548
+ .append ("()\\ \" in state: \" + codecStateName(codecState()));\n " );
549
+ }
550
+
539
551
private static void generateAccessOrderListenerMethodForNextGroupElement (
540
552
final StringBuilder sb ,
541
553
final FieldPrecedenceModel fieldPrecedenceModel ,
@@ -3027,6 +3039,7 @@ private CharSequence generateMessageFlyweightCode(
3027
3039
3028
3040
" SBE_NODISCARD std::uint64_t decodeLength() const\n " +
3029
3041
" {\n " +
3042
+ "%22$s" +
3030
3043
" %10$s skipper(m_buffer, m_offset, m_bufferLength, m_actingBlockLength, m_actingVersion);\n " +
3031
3044
" skipper.skip();\n " +
3032
3045
" return skipper.encodedLength();\n " +
@@ -3071,7 +3084,8 @@ private CharSequence generateMessageFlyweightCode(
3071
3084
generateCodecStateTransitionForWrappingLatestVersion (fieldPrecedenceModel ),
3072
3085
generateOnWrappedListener (fieldPrecedenceModel ),
3073
3086
generateCodecStateTransitionForWrapping (fieldPrecedenceModel ),
3074
- generateHiddenCopyConstructor (" " , className ));
3087
+ generateHiddenCopyConstructor (" " , className ),
3088
+ generateCheckForNotWrappedState ("decodeLength" , fieldPrecedenceModel ));
3075
3089
}
3076
3090
3077
3091
private CharSequence generateAccessOrderErrorType (final FieldPrecedenceModel fieldPrecedenceModel )
@@ -3311,6 +3325,31 @@ private CharSequence generateCodecStateTransitionForWrapping(final FieldPreceden
3311
3325
return generateAccessOrderListenerCall (fieldPrecedenceModel , TWO_INDENT , "onWrapped" , "actingVersion" );
3312
3326
}
3313
3327
3328
+ private CharSequence generateCheckForNotWrappedState (
3329
+ final String action ,
3330
+ final FieldPrecedenceModel fieldPrecedenceModel )
3331
+ {
3332
+ if (null == fieldPrecedenceModel )
3333
+ {
3334
+ return "" ;
3335
+ }
3336
+
3337
+ final StringBuilder sb = new StringBuilder ();
3338
+ sb .append ("#if defined(" ).append (precedenceChecksFlagName ).append (")\n " )
3339
+ .append (TWO_INDENT )
3340
+ .append ("if (codecState() == " )
3341
+ .append (qualifiedStateCase (fieldPrecedenceModel .notWrappedState ()))
3342
+ .append (")\n " )
3343
+ .append (TWO_INDENT ).append ("{\n " );
3344
+
3345
+ generateAccessOrderException (sb , THREE_INDENT , action );
3346
+
3347
+ sb .append (TWO_INDENT ).append ("}\n " )
3348
+ .append ("#endif\n " );
3349
+
3350
+ return sb ;
3351
+ }
3352
+
3314
3353
private CharSequence generateCodecStateTransitionForWrappingLatestVersion (
3315
3354
final FieldPrecedenceModel fieldPrecedenceModel
3316
3355
)
0 commit comments