1 package com.fasterxml.jackson.databind.node;
2
3 import java.io.IOException;
4 import java.math.BigDecimal;
5 import java.math.BigInteger;
6
7 import com.fasterxml.jackson.core.*;
8 import com.fasterxml.jackson.databind.SerializerProvider;
9
10
13 @SuppressWarnings("serial")
14 public class BigIntegerNode
15 extends NumericNode
16 {
17 private final static BigInteger MIN_INTEGER = BigInteger.valueOf(Integer.MIN_VALUE);
18 private final static BigInteger MAX_INTEGER = BigInteger.valueOf(Integer.MAX_VALUE);
19 private final static BigInteger MIN_LONG = BigInteger.valueOf(Long.MIN_VALUE);
20 private final static BigInteger MAX_LONG = BigInteger.valueOf(Long.MAX_VALUE);
21
22 final protected BigInteger _value;
23
24
29
30 public BigIntegerNode(BigInteger v) { _value = v; }
31
32 public static BigIntegerNode valueOf(BigInteger v) { return new BigIntegerNode(v); }
33
34
39
40 @Override
41 public JsonToken asToken() { return JsonToken.VALUE_NUMBER_INT; }
42
43 @Override
44 public JsonParser.NumberType numberType() { return JsonParser.NumberType.BIG_INTEGER; }
45
46 @Override
47 public boolean isIntegralNumber() { return true; }
48
49 @Override
50 public boolean isBigInteger() { return true; }
51
52 @Override public boolean canConvertToInt() {
53 return (_value.compareTo(MIN_INTEGER) >= 0) && (_value.compareTo(MAX_INTEGER) <= 0);
54 }
55 @Override public boolean canConvertToLong() {
56 return (_value.compareTo(MIN_LONG) >= 0) && (_value.compareTo(MAX_LONG) <= 0);
57 }
58
59 @Override
60 public Number numberValue() {
61 return _value;
62 }
63
64 @Override
65 public short shortValue() { return _value.shortValue(); }
66
67 @Override
68 public int intValue() { return _value.intValue(); }
69
70 @Override
71 public long longValue() { return _value.longValue(); }
72
73 @Override
74 public BigInteger bigIntegerValue() { return _value; }
75
76 @Override
77 public float floatValue() { return _value.floatValue(); }
78
79 @Override
80 public double doubleValue() { return _value.doubleValue(); }
81
82 @Override
83 public BigDecimal decimalValue() { return new BigDecimal(_value); }
84
85
90
91 @Override
92 public String asText() {
93 return _value.toString();
94 }
95
96 @Override
97 public boolean asBoolean(boolean defaultValue) {
98 return !BigInteger.ZERO.equals(_value);
99 }
100
101 @Override
102 public final void serialize(JsonGenerator jg, SerializerProvider provider)
103 throws IOException, JsonProcessingException
104 {
105 jg.writeNumber(_value);
106 }
107
108 @Override
109 public boolean equals(Object o)
110 {
111 if (o == this) return true;
112 if (o == null) return false;
113 if (!(o instanceof BigIntegerNode)) {
114 return false;
115 }
116 return ((BigIntegerNode) o)._value.equals(_value);
117 }
118
119 @Override
120 public int hashCode() {
121 return _value.hashCode();
122 }
123 }
124