View Javadoc

1   /*
2    * Copyright (c) 2001, Zoltan Farkas All Rights Reserved.
3    *
4    * This library is free software; you can redistribute it and/or
5    * modify it under the terms of the GNU Lesser General Public
6    * License as published by the Free Software Foundation; either
7    * version 2.1 of the License, or (at your option) any later version.
8    *
9    * This library is distributed in the hope that it will be useful,
10   * but WITHOUT ANY WARRANTY; without even the implied warranty of
11   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   * GNU General Public License for more details.
13   *
14   * You should have received a copy of the GNU Lesser General Public
15   * License along with this program; if not, write to the Free Software
16   * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
17   */
18  package net.sf.zel.nr;
19  
20  import java.math.BigDecimal;
21  import java.math.BigInteger;
22  import javax.annotation.concurrent.Immutable;
23  import net.sf.zel.nr.ExtendedNumber.Type;
24  
25  @Immutable
26  public final class OperableBigInteger extends OperableNumber
27  {
28  
29      private static final long serialVersionUID = -6969840428359421648L;
30  
31      public static final OperableBigInteger ZERO = new OperableBigInteger(BigInteger.valueOf(0L));
32      public static final OperableBigInteger ONE = new OperableBigInteger(BigInteger.valueOf(1L));
33  
34      private final BigInteger number;
35  
36      public OperableBigInteger(final BigInteger n)
37      {
38          number = n;
39      }
40  
41      public OperableBigInteger(final String str)
42      {
43          number = new BigInteger(str);
44      }
45  
46      @Override
47      public OperableNumber zero()
48      {
49          return ZERO;
50      }
51  
52      @Override
53      public OperableNumber add(final OperableNumber addend)
54      {
55          return new OperableBigInteger(number.add(addend.bigIntegerValue()));
56      }
57  
58      @Override
59      public OperableNumber subtract(final OperableNumber subtrahend)
60      {
61          return new OperableBigInteger(number.subtract(subtrahend.bigIntegerValue()));
62      }
63  
64      @Override
65      public OperableNumber multiply(final OperableNumber multiplier)
66      {
67          return new OperableBigInteger(number.multiply(multiplier.bigIntegerValue()));
68      }
69  
70      @Override
71      public OperableNumber divide(final OperableNumber divisor)
72      {
73          return new OperableBigInteger(number.divide(divisor.bigIntegerValue()));
74      }
75  
76      @Override
77      public OperableNumber mod(final OperableNumber divisor)
78      {
79          return new OperableBigInteger(number.mod(divisor.bigIntegerValue()));
80      }
81  
82      @Override
83      public BigDecimal bigDecimalValue()
84      {
85          return new BigDecimal(number);
86      }
87  
88      @Override
89      public BigInteger bigIntegerValue()
90      {
91          return number;
92      }
93  
94      @Override
95      public int compareTo(Object o)
96      {
97          return number.compareTo(((OperableNumber) o).bigIntegerValue());
98      }
99  
100     @Override
101     public Type getType()
102     {
103         return Type.INTEGER;
104     }
105 
106     @Override
107     public OperableGNUBigInteger gnuBigIntegerValue()
108     {
109         return new OperableGNUBigInteger(number.toString());
110     }
111 
112     @Override
113     public int intValue()
114     {
115         return number.intValue();
116     }
117 
118     @Override
119     public long longValue()
120     {
121         return number.longValue();
122     }
123 
124     @Override
125     public float floatValue()
126     {
127         return number.floatValue();
128     }
129 
130     @Override
131     public double doubleValue()
132     {
133         return number.doubleValue();
134     }
135 
136 
137     @Override
138     public String toString()
139     {
140         return number.toString();
141     }
142 
143     @Override
144     public boolean equals(final Object obj)
145     {
146         if (obj == null)
147         {
148             return false;
149         }
150         if (getClass() != obj.getClass())
151         {
152             return false;
153         }
154         final OperableBigInteger other = (OperableBigInteger) obj;
155         if (this.number != other.number && (this.number == null || !this.number.equals(other.number)))
156         {
157             return false;
158         }
159         return true;
160     }
161 
162     @Override
163     public int hashCode()
164     {
165        return number.hashCode();
166     }
167 
168     @Override
169     public OperableGNUBigFloat gnuBigFloatValue()
170     {
171         return new OperableGNUBigFloat(number.toString());
172     }
173 
174     @Override
175     public int getPrecision()
176     {
177         return number.bitCount();
178     }
179 
180     @Override
181     public OperableNumber create(final String val)
182     {
183         return new OperableBigInteger(val);
184     }
185 
186     @Override
187     public ExtendedNumber one()
188     {
189         return ONE;
190     }
191 
192     @Override
193     public OperableNumber convert(ExtendedNumber val)
194     {
195       return new OperableBigInteger(val.bigIntegerValue());
196     }
197 
198 
199 
200 }