@@ -436,7 +436,7 @@ public TokenBuffer deserialize(JsonParser p, DeserializationContext ctxt) throws
436
436
copyCurrentStructure (p );
437
437
return this ;
438
438
}
439
- /* 28-Oct-2014, tatu: As per #592, need to support a special case of starting from
439
+ /* 28-Oct-2014, tatu: As per [databind #592] , need to support a special case of starting from
440
440
* FIELD_NAME, which is taken to mean that we are missing START_OBJECT, but need
441
441
* to assume one did exist.
442
442
*/
@@ -669,7 +669,7 @@ public void writeString(String text) throws IOException {
669
669
if (text == null ) {
670
670
writeNull ();
671
671
} else {
672
- _append (JsonToken .VALUE_STRING , text );
672
+ _appendValue (JsonToken .VALUE_STRING , text );
673
673
}
674
674
}
675
675
@@ -683,7 +683,7 @@ public void writeString(SerializableString text) throws IOException {
683
683
if (text == null ) {
684
684
writeNull ();
685
685
} else {
686
- _append (JsonToken .VALUE_STRING , text );
686
+ _appendValue (JsonToken .VALUE_STRING , text );
687
687
}
688
688
}
689
689
@@ -728,20 +728,20 @@ public void writeRaw(char c) throws IOException {
728
728
729
729
@ Override
730
730
public void writeRawValue (String text ) throws IOException {
731
- _append (JsonToken .VALUE_EMBEDDED_OBJECT , new RawValue (text ));
731
+ _appendValue (JsonToken .VALUE_EMBEDDED_OBJECT , new RawValue (text ));
732
732
}
733
733
734
734
@ Override
735
735
public void writeRawValue (String text , int offset , int len ) throws IOException {
736
736
if (offset > 0 || len != text .length ()) {
737
737
text = text .substring (offset , offset +len );
738
738
}
739
- _append (JsonToken .VALUE_EMBEDDED_OBJECT , new RawValue (text ));
739
+ _appendValue (JsonToken .VALUE_EMBEDDED_OBJECT , new RawValue (text ));
740
740
}
741
741
742
742
@ Override
743
743
public void writeRawValue (char [] text , int offset , int len ) throws IOException {
744
- _append (JsonToken .VALUE_EMBEDDED_OBJECT , new String (text , offset , len ));
744
+ _appendValue (JsonToken .VALUE_EMBEDDED_OBJECT , new String (text , offset , len ));
745
745
}
746
746
747
747
/*
@@ -752,35 +752,35 @@ public void writeRawValue(char[] text, int offset, int len) throws IOException {
752
752
753
753
@ Override
754
754
public void writeNumber (short i ) throws IOException {
755
- _append (JsonToken .VALUE_NUMBER_INT , Short .valueOf (i ));
755
+ _appendValue (JsonToken .VALUE_NUMBER_INT , Short .valueOf (i ));
756
756
}
757
757
758
758
@ Override
759
759
public void writeNumber (int i ) throws IOException {
760
- _append (JsonToken .VALUE_NUMBER_INT , Integer .valueOf (i ));
760
+ _appendValue (JsonToken .VALUE_NUMBER_INT , Integer .valueOf (i ));
761
761
}
762
762
763
763
@ Override
764
764
public void writeNumber (long l ) throws IOException {
765
- _append (JsonToken .VALUE_NUMBER_INT , Long .valueOf (l ));
765
+ _appendValue (JsonToken .VALUE_NUMBER_INT , Long .valueOf (l ));
766
766
}
767
767
768
768
@ Override
769
769
public void writeNumber (double d ) throws IOException {
770
- _append (JsonToken .VALUE_NUMBER_FLOAT , Double .valueOf (d ));
770
+ _appendValue (JsonToken .VALUE_NUMBER_FLOAT , Double .valueOf (d ));
771
771
}
772
772
773
773
@ Override
774
774
public void writeNumber (float f ) throws IOException {
775
- _append (JsonToken .VALUE_NUMBER_FLOAT , Float .valueOf (f ));
775
+ _appendValue (JsonToken .VALUE_NUMBER_FLOAT , Float .valueOf (f ));
776
776
}
777
777
778
778
@ Override
779
779
public void writeNumber (BigDecimal dec ) throws IOException {
780
780
if (dec == null ) {
781
781
writeNull ();
782
782
} else {
783
- _append (JsonToken .VALUE_NUMBER_FLOAT , dec );
783
+ _appendValue (JsonToken .VALUE_NUMBER_FLOAT , dec );
784
784
}
785
785
}
786
786
@@ -789,7 +789,7 @@ public void writeNumber(BigInteger v) throws IOException {
789
789
if (v == null ) {
790
790
writeNull ();
791
791
} else {
792
- _append (JsonToken .VALUE_NUMBER_INT , v );
792
+ _appendValue (JsonToken .VALUE_NUMBER_INT , v );
793
793
}
794
794
}
795
795
@@ -798,17 +798,17 @@ public void writeNumber(String encodedValue) throws IOException {
798
798
/* 03-Dec-2010, tatu: related to [JACKSON-423], should try to keep as numeric
799
799
* identity as long as possible
800
800
*/
801
- _append (JsonToken .VALUE_NUMBER_FLOAT , encodedValue );
801
+ _appendValue (JsonToken .VALUE_NUMBER_FLOAT , encodedValue );
802
802
}
803
803
804
804
@ Override
805
805
public void writeBoolean (boolean state ) throws IOException {
806
- _append (state ? JsonToken .VALUE_TRUE : JsonToken .VALUE_FALSE );
806
+ _appendValue (state ? JsonToken .VALUE_TRUE : JsonToken .VALUE_FALSE );
807
807
}
808
808
809
809
@ Override
810
810
public void writeNull () throws IOException {
811
- _append (JsonToken .VALUE_NULL );
811
+ _appendValue (JsonToken .VALUE_NULL );
812
812
}
813
813
814
814
/*
@@ -826,15 +826,15 @@ public void writeObject(Object value) throws IOException
826
826
}
827
827
Class <?> raw = value .getClass ();
828
828
if (raw == byte [].class || (value instanceof RawValue )) {
829
- _append (JsonToken .VALUE_EMBEDDED_OBJECT , value );
829
+ _appendValue (JsonToken .VALUE_EMBEDDED_OBJECT , value );
830
830
return ;
831
831
}
832
832
if (_objectCodec == null ) {
833
833
/* 28-May-2014, tatu: Tricky choice here; if no codec, should we
834
834
* err out, or just embed? For now, do latter.
835
835
*/
836
836
// throw new JsonMappingException("No ObjectCodec configured for TokenBuffer, writeObject() called");
837
- _append (JsonToken .VALUE_EMBEDDED_OBJECT , value );
837
+ _appendValue (JsonToken .VALUE_EMBEDDED_OBJECT , value );
838
838
} else {
839
839
_objectCodec .writeValue (this , value );
840
840
}
@@ -850,7 +850,7 @@ public void writeTree(TreeNode node) throws IOException
850
850
851
851
if (_objectCodec == null ) {
852
852
// as with 'writeObject()', is codec optional?
853
- _append (JsonToken .VALUE_EMBEDDED_OBJECT , node );
853
+ _appendValue (JsonToken .VALUE_EMBEDDED_OBJECT , node );
854
854
} else {
855
855
_objectCodec .writeTree (this , node );
856
856
}
@@ -1082,6 +1082,46 @@ protected final void _append(JsonToken type, Object value)
1082
1082
}
1083
1083
}
1084
1084
1085
+ /**
1086
+ * Similar to {@link #_append(JsonToken)} but also updates context with
1087
+ * knowledge that a scalar value was written
1088
+ *
1089
+ * @since 2.6.4
1090
+ */
1091
+ protected final void _appendValue (JsonToken type )
1092
+ {
1093
+ _writeContext .writeValue ();
1094
+ Segment next = _hasNativeId
1095
+ ? _last .append (_appendAt , type , _objectId , _typeId )
1096
+ : _last .append (_appendAt , type );
1097
+ if (next == null ) {
1098
+ ++_appendAt ;
1099
+ } else {
1100
+ _last = next ;
1101
+ _appendAt = 1 ; // since we added first at 0
1102
+ }
1103
+ }
1104
+
1105
+ /**
1106
+ * Similar to {@link #_append(JsonToken,Object)} but also updates context with
1107
+ * knowledge that a scalar value was written
1108
+ *
1109
+ * @since 2.6.4
1110
+ */
1111
+ protected final void _appendValue (JsonToken type , Object value )
1112
+ {
1113
+ _writeContext .writeValue ();
1114
+ Segment next = _hasNativeId
1115
+ ? _last .append (_appendAt , type , value , _objectId , _typeId )
1116
+ : _last .append (_appendAt , type , value );
1117
+ if (next == null ) {
1118
+ ++_appendAt ;
1119
+ } else {
1120
+ _last = next ;
1121
+ _appendAt = 1 ;
1122
+ }
1123
+ }
1124
+
1085
1125
protected final void _appendRaw (int rawType , Object value )
1086
1126
{
1087
1127
Segment next = _hasNativeId
0 commit comments