8000 vpack: performance · anderick/arangodb-java-driver@c7d7331 · GitHub
[go: up one dir, main page]

Skip to content

Commit c7d7331

Browse files
author
Mark
committed
vpack: performance
1 parent 20e45b1 commit c7d7331

20 files changed

+63
-75
lines changed

src/main/java/com/arangodb/velocypack/util/ArrayIterator.java renamed to src/main/java/com/arangodb/velocypack/ArrayIterator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package com.arangodb.velocypack.util;
1+
package com.arangodb.velocypack;
22

33
import java.util.NoSuchElementException;
44

5-
import com.arangodb.velocypack.VPackSlice;
65
import com.arangodb.velocypack.exception.VPackValueTypeException;
76

87
/**

src/main/java/com/arangodb/velocypack/util/ObjectIterator.java renamed to src/main/java/com/arangodb/velocypack/ObjectIterator.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package com.arangodb.velocypack.util;
1+
package com.arangodb.velocypack;
22

33
import java.util.NoSuchElementException;
44

5-
import com.arangodb.velocypack.VPackSlice;
65
import com.arangodb.velocypack.exception.VPackValueTypeException;
76

87
/**
@@ -21,15 +20,15 @@ public ObjectIterator(final VPackSlice slice) throws VPackValueTypeException {
2120
throw new VPackValueTypeException(ValueType.OBJECT);
2221
}
2322
if (size > 0) {
24-
current = slice.keyAt(0).getStart();
23+
final byte head = slice.head();
24+
if (head == 0x14) {
25+
current = slice.keyAt(0).getStart();
26+
} else {
27+
current = slice.getStart() + slice.findDataOffset();
28+
}
2529
}
2630
}
2731

28-
/*
29-
* (non-Javadoc)
30-
*
31-
* @see java.util.Iterator#next()
32-
*/
3332
@Override
3433
public VPackSlice next() {
3534
if (position++ > 0) {

src/main/java/com/arangodb/velocypack/util/SliceIterator.java renamed to src/main/java/com/arangodb/velocypack/SliceIterator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
package com.arangodb.velocypack.util;
1+
package com.arangodb.velocypack;
22

33
import java.util.Iterator;
44

5-
import com.arangodb.velocypack.VPackSlice;
65
import com.arangodb.velocypack.exception.VPackValueTypeException;
76

87
/**

src/main/java/com/arangodb/velocypack/VPack.java

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626
import com.arangodb.velocypack.internal.VPackInstanceCreators;
2727
import com.arangodb.velocypack.internal.VPackOptionsImpl;
2828
import com.arangodb.velocypack.internal.VPackSerializers;
29-
import com.arangodb.velocypack.util.Value;
30-
import com.arangodb.velocypack.util.ValueType;
3129

3230
/**
3331
* @author Mark - mark@arangodb.com
@@ -201,20 +199,20 @@ private <T> T createInstance(final Class<T> type) throws InstantiationException,
201199

202200
private void deserializeFields(final Object entity, final VPackSlice vpack) throws NoSuchMethodException,
203201
IllegalAccessException, InvocationTargetException, InstantiationException, VPackException {
204-
final Map<Field, FieldInfo> fields = getDeclaredFields(entity);
205-
for (final Entry<Field, FieldInfo> field : fields.entrySet()) {
206-
if (field.getValue().isDeserialize()) {
207-
deserializeField(vpack, entity, field);
202+
final Map<String, FieldInfo> fields = cache.getFields(entity.getClass());
203+
for (final FieldInfo fieldInfo : fields.values()) {
204+
if (fieldInfo.isDeserialize()) {
205+
deserializeField(vpack, entity, fieldInfo);
208206
}
209207
}
210208
}
211209

212-
private void deserializeField(final VPackSlice vpack, final Object entity, final Entry<Field, FieldInfo> fieldEntry)
210+
private void deserializeField(final VPackSlice vpack, final Object entity, final FieldInfo fieldInfo)
213211
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException,
214212
VPackException {
215-
final VPackSlice attr = vpack.get(fieldEntry.getValue().getFieldName());
213+
final VPackSlice attr = vpack.get(fieldInfo.getFieldName());
216214
if (!attr.isNone()) {
217-
final Field field = fieldEntry.getKey();
215+
final Field field = fieldInfo.getField();
218216
final Object value = getValue(attr, field, field.getType());
219217
field.set(entity, value);
220218
}
@@ -366,26 +364,19 @@ private void serializeObject(final String name, final Object entity, final VPack
366364

367365
private void serializeFields(final Object entity, final VPackBuilder builder)
368366
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, VPackException {
369-
final Map<Field, FieldInfo> fields = getDeclaredFields(entity);
370-
for (final Entry<Field, FieldInfo> field : fields.entrySet()) {
371-
if (field.getValue().isSerialize()) {
372-
serializeField(entity, builder, field);
367+
final Map<String, FieldInfo> fields = cache.getFields(entity.getClass());
368+
for (final FieldInfo fieldInfo : fields.values()) {
369+
if (fieldInfo.isSerialize()) {
370+
serializeField(entity, builder, fieldInfo);
373371
}
374372
}
375373
}
376374

377-
private Map<Field, FieldInfo> getDeclaredFields(final Object entity) {
378-
return cache.getFields(entity.getClass());
379-
}
380-
381-
private void serializeField(
382-
final Object entity,
383-
final VPackBuilder builder,
384-
final Entry<Field, FieldInfo> fieldEntry)
375+
private void serializeField(final Object entity, final VPackBuilder builder, final FieldInfo fieldInfo)
385376
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, VPackException {
386377

387-
final String fieldName = fieldEntry.getValue().getFieldName();
388-
final Field field = fieldEntry.getKey();
378+
final String fieldName = fieldInfo.getFieldName();
379+
final Field field = fieldInfo.getField();
389380
final Class<?> type = field.getType();
390381
final Object value = field.get(entity);
391382
addValue(field, fieldName, type, value, builder);

src/main/java/com/arangodb/velocypack/VPackBuilder.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
import com.arangodb.velocypack.exception.VPackNeedAttributeTranslatorException;
2424
import com.arangodb.velocypack.internal.VPackOptionsImpl;
2525
import com.arangodb.velocypack.internal.util.NumberUtil;
26-
import com.arangodb.velocypack.util.Value;
27-
import com.arangodb.velocypack.util.ValueType;
2826

2927
/**
3028
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/VPackSlice.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@
1818
import com.arangodb.velocypack.internal.util.StringUtil;
1919
import com.arangodb.velocypack.internal.util.ValueLengthUtil;
2020
import com.arangodb.velocypack.internal.util.ValueTypeUtil;
21-
import com.arangodb.velocypack.util.ArrayIterator;
22-
import com.arangodb.velocypack.util.ObjectIterator;
23-
import com.arangodb.velocypack.util.ValueType;
2421

2522
/**
2623
* @author Mark - mark@arangodb.com
@@ -341,7 +338,7 @@ public long getLength() {
341338
/**
342339
* Must be called for a nonempty array or object at start():
343340
*/
344-
private int findDataOffset() {
341+
protected int findDataOffset() {
345342
final int fsm = ObjectArrayUtil.getFirstSubMap(head());
346343
final int offset;
347344
if (fsm <= 2 && vpack[start + 2] != 0) {
@@ -488,7 +485,7 @@ public VPackSlice get(final String attribute) throws VPackException {
488485
/**
489486
* translates an integer key into a string, without checks
490487
*/
491-
private VPackSlice translateUnchecked() {
488+
protected VPackSlice translateUnchecked() {
492489
final VPackSlice result = attributeTranslator.translate(getAsInt());
493490
return result != null ? result : new VPackSlice();
494491
}
@@ -626,8 +623,7 @@ public VPackSlice valueAt(final int index) {
626623
}
627624

628625
private VPackSlice getNthKey(final int index) {
629-
final VPackSlice slice = new VPackSlice(vpack, start + getNthOffset(index));
630-
return slice;
626+
return new VPackSlice(vpack, start + getNthOffset(index));
631627
}
632628

633629
private VPackSlice getNth(final int index) {

src/main/java/com/arangodb/velocypack/util/Value.java renamed to src/main/java/com/arangodb/velocypack/Value.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.arangodb.velocypack.util;
1+
package com.arangodb.velocypack;
22

33
import java.math.BigDecimal;
44
import java.math.BigInteger;

src/main/java/com/arangodb/velocypack/util/ValueType.java renamed to src/main/java/com/arangodb/velocypack/ValueType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.arangodb.velocypack.util;
1+
package com.arangodb.velocypack;
22

33
/**
44
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/exception/VPackBuilderNumberOutOfRangeException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.arangodb.velocypack.exception;
22

3-
import com.arangodb.velocypack.util.ValueType;
3+
import com.arangodb.velocypack.ValueType;
44

55
/**
66
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/exception/VPackBuilderUnexpectedValueException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.arangodb.velocypack.exception;
22

3-
import com.arangodb.velocypack.util.ValueType;
3+
import com.arangodb.velocypack.ValueType;
44

55
/**
66
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/exception/VPackValueTypeException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.arangodb.velocypack.exception;
22

3-
import com.arangodb.velocypack.util.ValueType;
3+
import com.arangodb.velocypack.ValueType;
44

55
/**
66
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/internal/VPackAttributeTranslatorImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import com.arangodb.velocypack.VPackAttributeTranslator;
77
import com.arangodb.velocypack.VPackBuilder;
88
import com.arangodb.velocypack.VPackSlice;
9+
import com.arangodb.velocypack.Value;
10+
import com.arangodb.velocypack.ValueType;
911
import com.arangodb.velocypack.exception.VPackException;
10-
import com.arangodb.velocypack.util.Value;
11-
import com.arangodb.velocypack.util.ValueType;
1212

1313
/**
1414
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/internal/VPackCache.java

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@ public class VPackCache {
2424

2525
public static class FieldInfo {
2626
private final String fieldName;
27+
private final Field field;
2728
private final boolean serialize;
2829
private final boolean deserialize;
2930

30-
public FieldInfo(final String fieldName, final boolean serialize, final boolean deserialize) {
31+
private FieldInfo(final String fieldName, final Field field, final boolean serialize,
32+
final boolean deserialize) {
3133
super();
3234
this.fieldName = fieldName;
35+
this.field = field;
3336
this.serialize = serialize;
3437
this.deserialize = deserialize;
3538
}
@@ -38,6 +41,10 @@ public String getFieldName() {
3841
return fieldName;
3942
}
4043

44+
public Field getField() {
45+
return field;
46+
}
47+
4148
public boolean isSerialize() {
4249
return serialize;
4350
}
@@ -47,16 +54,16 @@ public boolean isDeserialize() {
4754
}
4855
}
4956

50-
private final Map<Class<?>, Map<Field, FieldInfo>> cache;
51-
private final Comparator<Entry<Field, FieldInfo>> fieldComparator;
57+
private final Map<Class<?>, Map<String, FieldInfo>> cache;
58+
private final Comparator<Entry<String, FieldInfo>> fieldComparator;
5259

5360
public VPackCache() {
5461
super();
55-
cache = new ConcurrentHashMap<Class<?>, Map<Field, FieldInfo>>();
56-
fieldComparator = new Comparator<Entry<Field, FieldInfo>>() {
62+
cache = new ConcurrentHashMap<Class<?>, Map<String, FieldInfo>>();
63+
fieldComparator = new Comparator<Map.Entry<String, FieldInfo>>() {
5764
@Override
58-
public int compare(final Entry<Field, FieldInfo> o1, final Entry<Field, FieldInfo> o2) {
59-
return o1.getValue().getFieldName().compareTo(o2.getValue().getFieldName());
65+
public int compare(final Entry<String, FieldInfo> o1, final Entry<String, FieldInfo> o2) {
66+
return o1.getKey().compareTo(o2.getKey());
6067
}
6168
};
6269
}
@@ -65,17 +72,18 @@ public FieldInfo getFieldInfo(final Class<?> entityClass, final Field field) {
6572
return getFields(entityClass).get(field);
6673
}
6774

68-
public Map<Field, FieldInfo> getFields(final Class<?> entityClass) {
69-
Map<Field, FieldInfo> fields = cache.get(entityClass);
75+
public Map<String, FieldInfo> getFields(final Class<?> entityClass) {
76+
Map<String, FieldInfo> fields = cache.get(entityClass);
7077
if (fields == null) {
71-
fields = new HashMap<Field, VPackCache.FieldInfo>();
78+
fields = new HashMap<String, VPackCache.FieldInfo>();
7279
Class<?> tmp = entityClass;
7380
while (tmp != null && tmp != Object.class) {
7481
final Field[] declaredFields = tmp.getDeclaredFields();
7582
for (final Field field : declaredFields) {
7683
if (!field.isSynthetic() && !Modifier.isStatic(field.getModifiers())) {
7784
field.setAccessible(true);
78-
fields.put(field, createFieldInfo(field));
85+
final FieldInfo fieldInfo = createFieldInfo(field);
86+
fields.put(fieldInfo.getFieldName(), fieldInfo);
7987
}
8088
}
8189
tmp = tmp.getSuperclass();
@@ -86,11 +94,11 @@ public Map<Field, FieldInfo> getFields(final Class<?> entityClass) {
8694
return fields;
8795
}
8896

89-
private Map<Field, FieldInfo> sort(final Set<Entry<Field, FieldInfo>> entrySet) {
90-
final Map<Field, FieldInfo> sorted = new LinkedHashMap<Field, VPackCache.FieldInfo>();
91-
final List<Entry<Field, FieldInfo>> tmp = new ArrayList<Entry<Field, FieldInfo>>(entrySet);
97+
private Map<String, FieldInfo> sort(final Set<Entry<String, FieldInfo>> entrySet) {
98+
final Map<String, FieldInfo> sorted = new LinkedHashMap<String, VPackCache.FieldInfo>();
99+
final List<Entry<String, FieldInfo>> tmp = new ArrayList<Entry<String, FieldInfo>>(entrySet);
92100
Collections.sort(tmp, fieldComparator);
93-
for (final Entry<Field, FieldInfo> entry : tmp) {
101+
for (final Entry<String, FieldInfo> entry : tmp) {
94102
sorted.put(entry.getKey(), entry.getValue());
95103
}
96104
return sorted;
@@ -102,7 +110,7 @@ private FieldInfo createFieldInfo(final Field field) {
102110
final Expose expose = field.getAnnotation(Expose.class);
103111
final boolean serialize = expose != null ? expose.serialize() : true;
104112
final boolean deserialize = expose != null ? expose.deserialize() : true;
105-
return new FieldInfo(fieldName, serialize, deserialize);
113+
return new FieldInfo(fieldName, field, serialize, deserialize);
106114
}
107115

108116
}

src/main/java/com/arangodb/velocypack/internal/VPackSerializers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import com.arangodb.velocypack.VPackBuilder;
77
import com.arangodb.velocypack.VPackSerializationContext;
88
import com.arangodb.velocypack.VPackSerializer;
9+
import com.arangodb.velocypack.Value;
910
import com.arangodb.velocypack.exception.VPackException;
10-
import com.arangodb.velocypack.util.Value;
1111

1212
/**
1313
* @author Mark - mark@arangodb.com

src/main/java/com/arangodb/velocypack/internal/util/ValueTypeUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.HashMap;
44
import java.util.Map;
55

6-
import com.arangodb.velocypack.util.ValueType;
6+
import com.arangodb.velocypack.ValueType;
77

88
/**
99
* @author Mark - mark@arangodb.com

src/test/java/com/arangodb/velocypack/VPackBuilderTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import com.arangodb.velocypack.exception.VPackBuilderNumberOutOfRangeException;
1111
import com.arangodb.velocypack.exception.VPackBuilderUnexpectedValueException;
1212
import com.arangodb.velocypack.exception.VPackException;
13-
import com.arangodb.velocypack.util.Value;
14-
import com.arangodb.velocypack.util.ValueType;
1513

1614
/**
1715
* @author Mark - mark@arangodb.com

src/test/java/com/arangodb/velocypack/VPackParserTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import org.junit.Test;
77

88
import com.arangodb.velocypack.exception.VPackException;
9-
import com.arangodb.velocypack.util.Value;
10-
import com.arangodb.velocypack.util.ValueType;
119

1210
/**
1311
* @author Mark - mark@arangodb.com

src/test/java/com/arangodb/velocypack/VPackSerializeDeserializeTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import com.arangodb.velocypack.annotations.Expose;
2222
import com.arangodb.velocypack.annotations.SerializedName;
2323
import com.arangodb.velocypack.exception.VPackException;
24-
import com.arangodb.velocypack.util.Value;
25-
import com.arangodb.velocypack.util.ValueType;
2624

2725
/**
2826
* @author Mark - mark@arangodb.com

src/test/java/com/arangodb/velocypack/util/SliceIteratorTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.junit.Assert;
66
import org.junit.Test;
77

8+
import com.arangodb.velocypack.ArrayIterator;
9+
import com.arangodb.velocypack.ObjectIterator;
810
import com.arangodb.velocypack.VPackSlice;
911
import com.arangodb.velocypack.exception.VPackValueTypeException;
1012

src/test/java/com/arangodb/velocypack/util/ValueTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
import org.junit.Test;
66

7+
import com.arangodb.velocypack.Value;
8+
import com.arangodb.velocypack.ValueType;
79
import com.arangodb.velocypack.exception.VPackValueTypeException;
810

911
/**

0 commit comments

Comments
 (0)
0