forked from json-iterator/java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathArrayAny.java
More file actions
130 lines (110 loc) · 2.83 KB
/
ArrayAny.java
File metadata and controls
130 lines (110 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.jsoniter.any;
import com.jsoniter.ValueType;
import com.jsoniter.output.JsonStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class ArrayAny extends Any {
private final List<Any> val;
public ArrayAny(List<Any> val) {
this.val = val;
}
@Override
public ValueType valueType() {
return ValueType.ARRAY;
}
@Override
public Object object() {
return val;
}
@Override
public void writeTo(JsonStream stream) throws IOException {
stream.writeArrayStart();
Iterator<Any> iter = val.iterator();
if (!iter.hasNext()) {
stream.writeArrayEnd();
return;
}
iter.next().writeTo(stream);
while (iter.hasNext()) {
stream.writeMore();
iter.next().writeTo(stream);
}
stream.writeArrayEnd();
}
@Override
public int size() {
return val.size();
}
@Override
public Iterator<Any> iterator() {
return val.iterator();
}
@Override
public Any get(int index) {
try {
return val.get(index);
} catch (IndexOutOfBoundsException e) {
return new NotFoundAny(index, object());
}
}
@Override
public Any get(Object[] keys, int idx) {
if (idx == keys.length) {
return this;
}
Object key = keys[idx];
if (isWildcard(key)) {
ArrayList<Any> result = new ArrayList<Any>();
for (Any element : val) {
Any mapped = element.get(keys, idx + 1);
if (mapped.valueType() != ValueType.INVALID) {
result.add(mapped);
}
}
return Any.rewrap(result);
}
try {
return val.get((Integer) key).get(keys, idx + 1);
} catch (IndexOutOfBoundsException e) {
return new NotFoundAny(keys, idx, object());
} catch (ClassCastException e) {
return new NotFoundAny(keys, idx, object());
}
}
@Override
public String toString() {
return JsonStream.serialize(this);
}
@Override
public boolean toBoolean() {
return !val.isEmpty();
}
@Override
public int toInt() {
return val.size();
}
@Override
public long toLong() {
return val.size();
}
@Override
public float toFloat() {
return val.size();
}
@Override
public double toDouble() {
return val.size();
}
@Override
public BigInteger toBigInteger() {
return BigInteger.valueOf(val.size());
}
@Override
public BigDecimal toBigDecimal() {
return BigDecimal.valueOf(val.size());
}
}