• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 /**
11  * Numeric node that contains simple 64-bit integer values.
12  */
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     /*
25     /**********************************************************
26     /* Construction
27     /**********************************************************
28      */
29 
BigIntegerNode(BigInteger v)30     public BigIntegerNode(BigInteger v) { _value = v; }
31 
valueOf(BigInteger v)32     public static BigIntegerNode valueOf(BigInteger v) { return new BigIntegerNode(v); }
33 
34     /*
35     /**********************************************************
36     /* Overrridden JsonNode methods
37     /**********************************************************
38      */
39 
40     @Override
asToken()41     public JsonToken asToken() { return JsonToken.VALUE_NUMBER_INT; }
42 
43     @Override
numberType()44     public JsonParser.NumberType numberType() { return JsonParser.NumberType.BIG_INTEGER; }
45 
46     @Override
isIntegralNumber()47     public boolean isIntegralNumber() { return true; }
48 
49     @Override
isBigInteger()50     public boolean isBigInteger() { return true; }
51 
canConvertToInt()52     @Override public boolean canConvertToInt() {
53         return (_value.compareTo(MIN_INTEGER) >= 0) && (_value.compareTo(MAX_INTEGER) <= 0);
54     }
canConvertToLong()55     @Override public boolean canConvertToLong() {
56         return (_value.compareTo(MIN_LONG) >= 0) && (_value.compareTo(MAX_LONG) <= 0);
57     }
58 
59     @Override
numberValue()60     public Number numberValue() {
61         return _value;
62     }
63 
64     @Override
shortValue()65     public short shortValue() { return _value.shortValue(); }
66 
67     @Override
intValue()68     public int intValue() { return _value.intValue(); }
69 
70     @Override
longValue()71     public long longValue() { return _value.longValue(); }
72 
73     @Override
bigIntegerValue()74     public BigInteger bigIntegerValue() { return _value; }
75 
76     @Override
floatValue()77     public float floatValue() { return _value.floatValue(); }
78 
79     @Override
doubleValue()80     public double doubleValue() { return _value.doubleValue(); }
81 
82     @Override
decimalValue()83     public BigDecimal decimalValue() { return new BigDecimal(_value); }
84 
85     /*
86     /**********************************************************
87     /* General type coercions
88     /**********************************************************
89      */
90 
91     @Override
asText()92     public String asText() {
93         return _value.toString();
94     }
95 
96     @Override
asBoolean(boolean defaultValue)97     public boolean asBoolean(boolean defaultValue) {
98         return !BigInteger.ZERO.equals(_value);
99     }
100 
101     @Override
serialize(JsonGenerator jg, SerializerProvider provider)102     public final void serialize(JsonGenerator jg, SerializerProvider provider)
103         throws IOException, JsonProcessingException
104     {
105         jg.writeNumber(_value);
106     }
107 
108     @Override
equals(Object o)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
hashCode()120     public int hashCode() {
121         return _value.hashCode();
122     }
123 }
124