forked from json-iterator/java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDecoder.java
More file actions
157 lines (131 loc) · 5.09 KB
/
Decoder.java
File metadata and controls
157 lines (131 loc) · 5.09 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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package com.jsoniter.spi;
import com.jsoniter.CodegenAccess;
import com.jsoniter.JsonIterator;
import java.io.IOException;
public interface Decoder {
/**
* Customized decoder to read values from iterator
*
* @param iter the iterator instance
* @return the value to set
* @throws IOException when reading from iterator triggered error
*/
Object decode(JsonIterator iter) throws IOException;
abstract class BooleanDecoder implements Decoder {
@Override
public Object decode(JsonIterator iter) throws IOException {
return Boolean.valueOf(decodeBoolean(iter));
}
public abstract boolean decodeBoolean(JsonIterator iter) throws IOException;
}
abstract class ShortDecoder implements Decoder {
@Override
public Object decode(JsonIterator iter) throws IOException {
return Short.valueOf(decodeShort(iter));
}
public abstract short decodeShort(JsonIterator iter) throws IOException;
}
class StringShortDecoder extends ShortDecoder {
@Override
public short decodeShort(JsonIterator iter) throws IOException {
byte c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringShortDecoder", "expect \", but found: " + (char) c);
}
short val = iter.readShort();
c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringShortDecoder", "expect \", but found: " + (char) c);
}
return val;
}
}
abstract class IntDecoder implements Decoder {
@Override
public Object decode(JsonIterator iter) throws IOException {
return Integer.valueOf(decodeInt(iter));
}
public abstract int decodeInt(JsonIterator iter) throws IOException;
}
class StringIntDecoder extends IntDecoder {
@Override
public int decodeInt(JsonIterator iter) throws IOException {
byte c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringIntDecoder", "expect \", but found: " + (char) c);
}
int val = iter.readInt();
c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringIntDecoder", "expect \", but found: " + (char) c);
}
return val;
}
}
abstract class LongDecoder implements Decoder {
@Override
public Object decode(JsonIterator iter) throws IOException {
return Long.valueOf(decodeLong(iter));
}
public abstract long decodeLong(JsonIterator iter) throws IOException;
}
class StringLongDecoder extends LongDecoder {
@Override
public long decodeLong(JsonIterator iter) throws IOException {
byte c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringLongDecoder", "expect \", but found: " + (char) c);
}
long val = iter.readLong();
c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringLongDecoder", "expect \", but found: " + (char) c);
}
return val;
}
}
abstract class FloatDecoder implements Decoder {
@Override
public Object decode(JsonIterator iter) throws IOException {
return Float.valueOf(decodeFloat(iter));
}
public abstract float decodeFloat(JsonIterator iter) throws IOException;
}
class StringFloatDecoder extends FloatDecoder {
@Override
public float decodeFloat(JsonIterator iter) throws IOException {
byte c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringFloatDecoder", "expect \", but found: " + (char) c);
}
float val = iter.readFloat();
c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringFloatDecoder", "expect \", but found: " + (char) c);
}
return val;
}
}
abstract class DoubleDecoder implements Decoder {
@Override
public Object decode(JsonIterator iter) throws IOException {
return Double.valueOf(decodeDouble(iter));
}
public abstract double decodeDouble(JsonIterator iter) throws IOException;
}
class StringDoubleDecoder extends DoubleDecoder {
@Override
public double decodeDouble(JsonIterator iter) throws IOException {
byte c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringDoubleDecoder", "expect \", but found: " + (char) c);
}
double val = iter.readDouble();
c = CodegenAccess.nextToken(iter);
if (c != '"') {
throw iter.reportError("StringDoubleDecoder", "expect \", but found: " + (char) c);
}
return val;
}
}
}