20
20
21
21
package com .arangodb .velocypack ;
22
22
23
- import java .io .UnsupportedEncodingException ;
24
23
import java .math .BigDecimal ;
25
24
import java .math .BigInteger ;
26
25
import java .nio .charset .StandardCharsets ;
27
26
import java .sql .Timestamp ;
28
27
import java .util .ArrayList ;
29
28
import java .util .Arrays ;
30
29
import java .util .Collection ;
31
- import java .util .Collections ;
32
30
import java .util .Comparator ;
33
31
import java .util .Date ;
34
- import java .util .HashMap ;
35
32
import java .util .List ;
36
- import java .util .Map ;
37
33
38
34
import com .arangodb .velocypack .exception .VPackBuilderException ;
39
35
import com .arangodb .velocypack .exception .VPackBuilderKeyAlreadyWrittenException ;
47
43
import com .arangodb .velocypack .internal .DefaultVPackBuilderOptions ;
48
44
import com .arangodb .velocypack .internal .Value ;
49
45
import com .arangodb .velocypack .internal .util .NumberUtil ;
50
- import com .fasterxml .jackson .core .io .CharTypes ;
51
46
52
47
/**
53
48
* @author Mark Vollmary
@@ -59,7 +54,7 @@ public class VPackBuilder {
59
54
private static final int LONG_BYTES = Long .SIZE / Byte .SIZE ;
60
55
private static final int DOUBLE_BYTES = Double .SIZE / Byte .SIZE ;
61
56
62
- public static interface BuilderOptions {
57
+ public interface BuilderOptions {
63
58
boolean isBuildUnindexedArrays ();
64
59
65
60
void setBuildUnindexedArrays (boolean buildUnindexedArrays );
@@ -69,7 +64,7 @@ public static interface BuilderOptions {
69
64
void setBuildUnindexedObjects (boolean buildUnindexedObjects );
70
65
}
71
66
72
- public static interface Appender <T > {
67
+ public interface Appender <T > {
73
68
void append (VPackBuilder builder , T value ) throws VPackBuilderException ;
74
69
}
75
70
@@ -218,7 +213,7 @@ public void append(final VPackBuilder builder, final VPackSlice value) throws VP
218
213
private int size ;
219
214
private final List <Integer > stack ; // Start positions of open
220
215
// objects/arrays
221
- private List <List <Integer >> index ; // Indices for starts
216
+ private final List <List <Integer >> index ; // Indices for starts
222
217
// of
223
218
// subindex
224
219
private boolean keyWritten ; // indicates that in the current object the key
@@ -234,8 +229,8 @@ public VPackBuilder(final BuilderOptions options) {
234
229
this .options = options ;
235
230
size = 0 ;
236
231
buffer = new byte [10 ];
237
- stack = new ArrayList <Integer >();
238
- index = new ArrayList <List < Integer > >(4 );
232
+ stack = new ArrayList <>();
233
+ index = new ArrayList <>(4 );
239
234
}
240
235
241
236
public BuilderOptions getOptions () {
@@ -473,8 +468,8 @@ private <T> VPackBuilder addInternal(final String attribute, final Appender<T> a
473
468
if (translate != null ) {
474
469
final byte [] trValue = translate .getRawVPack ();
475
470
ensureCapacity (size + trValue .length );
476
- for (int i = 0 ; i < trValue . length ; i ++ ) {
477
- addUnchecked (trValue [ i ] );
471
+ for (byte b : trValue ) {
472
+ addUnchecked (b );
478
473
}
479
474
keyWritten = true ;
480
475
if (value == null ) {
@@ -590,7 +585,7 @@ private void appendSmallInt(final long value) {
590
585
591
586
private void appendUInt (final BigInteger value ) {
592
587
add ((byte ) 0x2f );
593
- append (value , LONG_BYTES );
588
+ append (value );
594
589
}
595
590
596
591
private void append (final long value , final int length ) {
@@ -600,10 +595,10 @@ private void append(final long value, final int length) {
600
595
}
601
596
}
602
597
603
- private void append (final BigInteger value , final int length ) {
604
- ensureCapacity (size + length );
605
- for (int i = length - 1 ; i >= 0 ; i --) {
606
- addUnchecked (value .shiftRight (length - i - 1 << 3 ).byteValue ());
598
+ private void append (final BigInteger value ) {
599
+ ensureCapacity (size + VPackBuilder . LONG_BYTES );
600
+ for (int i = VPackBuilder . LONG_BYTES - 1 ; i >= 0 ; i --) {
601
+ addUnchecked (value .shiftRight (VPackBuilder . LONG_BYTES - i - 1 << 3 ).byteValue ());
607
602
}
608
603
}
609
604
@@ -692,9 +687,7 @@ private void cleanupAdd() {
692
687
public VPackBuilder close () throws VPackBuilderException {
693
688
try {
694
689
return close (true );
695
- } catch (final VPackKeyTypeException e ) {
696
- throw new VPackBuilderException (e );
697
- } catch (final VPackNeedAttributeTranslatorException e ) {
690
+ } catch (final VPackKeyTypeException | VPackNeedAttributeTranslatorException e ) {
698
691
throw new VPackBuilderException (e );
699
692
}
700
693
}
@@ -739,10 +732,8 @@ protected VPackBuilder close(final boolean sort)
739
732
offsetSize = 1 ;
740
733
} else if ((size - tos ) + 2 * in .size () <= 0xffff ) {
741
734
offsetSize = 2 ;
742
- } else if (((size - tos ) / 2 ) + 4 * in .size () / 2 <= Integer .MAX_VALUE /* 0xffffffffu */ ) {
743
- offsetSize = 4 ;
744
735
} else {
745
- offsetSize = 8 ;
736
+ offsetSize = 4 ;
746
737
}
747
738
// Maybe we need to move down data
748
739
if (offsetSize == 1 ) {
@@ -768,8 +759,7 @@ protected VPackBuilder close(final boolean sort)
768
759
sortObjectIndex (tos , in );
769
760
}
770
761
// final int tableBase = size;
771
- for (int i = 0 ; i < in .size (); i ++) {
772
- long x = in .get (i );
762
+ for (long x : in ) {
773
763
ensureCapacity (size + offsetSize );
774
764
for (int j = 0 ; j < offsetSize ; j ++) {
775
765
addUnchecked (/* tableBase + offsetSize * i + j, */ (byte ) (x & 0xff ));
@@ -780,11 +770,8 @@ protected VPackBuilder close(final boolean sort)
780
770
if (offsetSize > 1 ) {
781
771
if (offsetSize == 2 ) {
782
772
buffer [tos ] = (byte ) (buffer [tos ] + 1 );
783
- } else if ( offsetSize == 4 ) {
773
+ } else {
784
774
buffer [tos ] = (byte ) (buffer [tos ] + 2 );
785
- } else { // offsetSize == 8
786
- buffer [tos ] = (byte ) (buffer [tos ] + 3 );
787
- appendLength (in .size ());
788
775
}
789
776
}
790
777
// Fix the byte length in the beginning
@@ -794,12 +781,10 @@ protected VPackBuilder close(final boolean sort)
794
781
x >>= 8 ;
795
782
}
796
783
// set the number of items in the beginning
797
- if (offsetSize < 8 ) {
798
- x = in .size ();
799
- for (int i = offsetSize + 1 ; i <= 2 * offsetSize ; i ++) {
800
- buffer [tos + i ] = (byte ) (x & 0xff );
801
- x >>= 8 ;
802
- }
784
+ x = in .size ();
785
+ for (int i = offsetSize + 1 ; i <= 2 * offsetSize ; i ++) {
786
+ buffer [tos + i ] = (byte ) (x & 0xff );
787
+ x >>= 8 ;
803
788
}
804
789
stack .remove (stack .size () - 1 );
805
790
return this ;
@@ -915,10 +900,8 @@ private VPackBuilder closeArray(final int tos, final List<Integer> in) {
915
900
offsetSize = 1 ;
916
901
} else if ((size - tos ) + (needIndexTable ? 2 * n : 0 ) <= 0xffff ) {
917
902
offsetSize = 2 ;
918
- } else if (((size - tos ) / 2 ) + ((needIndexTable ? 4 * n : 0 ) / 2 ) <= Integer .MAX_VALUE /* 0xffffffffu */ ) {
919
- offsetSize = 4 ;
920
903
} else {
921
- offsetSize = 8 ;
904
+ offsetSize = 4 ;
922
905
}
923
906
// Maybe we need to move down data
924
907
if (offsetSize == 1 ) {
@@ -945,8 +928,7 @@ private VPackBuilder closeArray(final int tos, final List<Integer> in) {
945
928
// Now build the table:
946
929
if (needIndexTable ) {
947
930
// final int tableBase = size;
948
- for (int i = 0 ; i < n ; i ++) {
949
- long x = in .get (i );
931
+ for (long x : in ) {
950
932
ensureCapacity (size + offsetSize );
951
933
for (int j = 0 ; j < offsetSize ; j ++) {
952
934
addUnchecked (/* tableBase + offsetSize * i + j, */ (byte ) (x & 0xff ));
@@ -960,13 +942,8 @@ private VPackBuilder closeArray(final int tos, final List<Integer> in) {
960
942
if (offsetSize > 1 ) {
961
943
if (offsetSize == 2 ) {
962
944
buffer [tos ] = (byte ) (buffer [tos ] + 1 );
963
- } else if ( offsetSize == 4 ) {
945
+ } else {
964
946
buffer [tos ] = (byte ) (buffer [tos ] + 2 );
965
- } else { // offsetSize == 8
966
- buffer [tos ] = (byte ) (buffer [tos ] + 3 );
967
- if (needNrSubs ) {
968
- appendLength (n );
969
- }
970
947
}
971
948
}
972
949
// Fix the byte length in the beginning
@@ -976,7 +953,7 @@ private VPackBuilder closeArray(final int tos, final List<Integer> in) {
976
953
x >>= 8 ;
977
954
}
978
955
// set the number of items in the beginning
979
- if (offsetSize < 8 && needNrSubs ) {
956
+ if (needNrSubs ) {
980
957
x = n ;
981
958
for (int i = offsetSize + 1 ; i <= 2 * offsetSize ; i ++) {
982
959
buffer [tos + i ] = (byte ) (x & 0xff );
0 commit comments