@@ -749,7 +749,7 @@ private void generateDataDecodeMethods(
749749 final String characterEncoding ,
750750 final String indent )
751751 {
752- generateDataTypedDecoder (
752+ generateVarDataTypedDecoder (
753753 sb ,
754754 token ,
755755 propertyName ,
@@ -759,7 +759,7 @@ private void generateDataDecodeMethods(
759759 byteOrderStr ,
760760 indent );
761761
762- generateDataTypedDecoder (
762+ generateVarDataTypedDecoder (
763763 sb ,
764764 token ,
765765 propertyName ,
@@ -769,19 +769,7 @@ private void generateDataDecodeMethods(
769769 byteOrderStr ,
770770 indent );
771771
772- sb .append (String .format ("\n " +
773- indent + " public void wrap%s(final %s wrapBuffer)\n " +
774- indent + " {\n " +
775- indent + " final int headerLength = %d;\n " +
776- indent + " final int limit = parentMessage.limit();\n " +
777- indent + " final int dataLength = (int)%s;\n " +
778- indent + " parentMessage.limit(limit + headerLength + dataLength);\n " +
779- indent + " wrapBuffer.wrap(buffer, limit + headerLength, dataLength);\n " +
780- indent + " }\n " ,
781- propertyName ,
782- readOnlyBuffer ,
783- sizeOfLengthField ,
784- generateGet (lengthType , "limit" , byteOrderStr )));
772+ generateVarDataWrapDecoder (sb , token , propertyName , sizeOfLengthField , lengthType , byteOrderStr , indent );
785773
786774 if (null != characterEncoding )
787775 {
@@ -849,6 +837,32 @@ private void generateDataDecodeMethods(
849837 }
850838 }
851839
840+ private void generateVarDataWrapDecoder (
841+ final StringBuilder sb ,
842+ final Token token ,
843+ final String propertyName ,
844+ final int sizeOfLengthField ,
845+ final PrimitiveType lengthType ,
846+ final String byteOrderStr ,
847+ final String indent )
848+ {
849+ sb .append (String .format ("\n " +
850+ indent + " public void wrap%s(final %s wrapBuffer)\n " +
851+ indent + " {\n " +
852+ "%s" +
853+ indent + " final int headerLength = %d;\n " +
854+ indent + " final int limit = parentMessage.limit();\n " +
855+ indent + " final int dataLength = (int)%s;\n " +
856+ indent + " parentMessage.limit(limit + headerLength + dataLength);\n " +
857+ indent + " wrapBuffer.wrap(buffer, limit + headerLength, dataLength);\n " +
858+ indent + " }\n " ,
859+ propertyName ,
860+ readOnlyBuffer ,
861+ generateVarWrapFieldNotPresentCondition (token .version (), indent ),
862+ sizeOfLengthField ,
863+ generateGet (lengthType , "limit" , byteOrderStr )));
864+ }
865+
852866 private void generateDataEncodeMethods (
853867 final StringBuilder sb ,
854868 final String propertyName ,
@@ -993,7 +1007,7 @@ private void generateCharArrayEncodeMethods(
9931007 }
9941008 }
9951009
996- private void generateDataTypedDecoder (
1010+ private void generateVarDataTypedDecoder (
9971011 final StringBuilder sb ,
9981012 final Token token ,
9991013 final String propertyName ,
@@ -1721,6 +1735,21 @@ private CharSequence generatePrimitivePropertyEncode(
17211735 generatePut (encoding .primitiveType (), "offset + " + offset , "value" , byteOrderStr ));
17221736 }
17231737
1738+ private CharSequence generateVarWrapFieldNotPresentCondition (final int sinceVersion , final String indent )
1739+ {
1740+ if (0 == sinceVersion )
1741+ {
1742+ return "" ;
1743+ }
1744+
1745+ return String .format (
1746+ indent + " if (parentMessage.actingVersion < %d)\n " +
1747+ indent + " {\n " +
1748+ indent + " wrapBuffer.wrap(buffer, offset, 0);\n " +
1749+ indent + " }\n \n " ,
1750+ sinceVersion );
1751+ }
1752+
17241753 private CharSequence generateFieldNotPresentCondition (
17251754 final boolean inComposite , final int sinceVersion , final Encoding encoding , final String indent )
17261755 {
0 commit comments