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 OperableShort extends OperableNumber
27  {
28  
29      private static final long serialVersionUID = 8823260187940615839L;
30      public static final OperableShort ZERO = new OperableShort(new Short((short) 0));
31      public static final OperableShort ONE = new OperableShort(new Short((short) 1));
32  
33      private final short number;
34  
35      public OperableShort(final short n)
36      {
37          number = n;
38      }
39  
40      public OperableShort(final String val)
41      {
42          number = Short.parseShort(val);
43      }
44  
45      @Override
46      public OperableNumber zero()
47      {
48          return ZERO;
49      }
50  
51      @Override
52      public OperableNumber add(OperableNumber addend)
53      {
54          return new OperableInteger((int) (number + addend.intValue()));
55      }
56  
57      @Override
58      public OperableNumber subtract(OperableNumber subtrahend)
59      {
60          return new OperableInteger(number - subtrahend.intValue());
61      }
62  
63      @Override
64      public OperableNumber multiply(OperableNumber multiplier)
65      {
66          return new OperableInteger(number * multiplier.intValue());
67      }
68  
69      @Override
70      public OperableNumber divide(OperableNumber divisor)
71      {
72          return new OperableInteger(number / divisor.intValue());
73      }
74  
75      @Override
76      public OperableNumber mod(OperableNumber divisor)
77      {
78          return new OperableInteger(number % divisor.intValue());
79      }
80  
81      public int compareTo(OperableNumber o)
82      {
83          return number - o.shortValue();
84      }
85  
86      @Override
87      public BigDecimal bigDecimalValue()
88      {
89          return BigDecimal.valueOf(number);
90      }
91  
92      @Override
93      public BigInteger bigIntegerValue()
94      {
95          return BigInteger.valueOf(number);
96      }
97  
98      @Override
99      public Type getType()
100     {
101         return Type.INTEGER;
102     }
103 
104     @Override
105     public OperableGNUBigInteger gnuBigIntegerValue() {
106         return new OperableGNUBigInteger(toString());
107     }
108 
109     @Override
110     public int intValue()
111     {
112         return number;
113     }
114 
115     @Override
116     public long longValue()
117     {
118         return (long) number;
119     }
120 
121     @Override
122     public float floatValue()
123     {
124         return (float) number;
125     }
126 
127     @Override
128     public double doubleValue()
129     {
130         return (double) number;
131     }
132 
133     public int compareTo(Object o)
134     {
135         return number - ((OperableNumber) o).shortValue();
136     }
137 
138     @Override
139     public String toString()
140     {
141         return Short.toString(number);
142     }
143 
144     @Override
145     public boolean equals(Object obj)
146     {
147         if (obj == null)
148         {
149             return false;
150         }
151         if (getClass() != obj.getClass())
152         {
153             return false;
154         }
155         final OperableShort other = (OperableShort) obj;
156         if (this.number != other.number)
157         {
158             return false;
159         }
160         return true;
161     }
162 
163     @Override
164     public int hashCode()
165     {
166         return number;
167     }
168 
169     @Override
170     public OperableGNUBigFloat gnuBigFloatValue()
171     {
172         return new OperableGNUBigFloat(toString());
173     }
174 
175     @Override
176     public int getPrecision()
177     {
178         return 16;
179     }
180 
181     @Override
182     public OperableNumber create(String val)
183     {
184         if ("0".equals(val))
185             return ZERO;
186         else
187             return new OperableShort(val);
188     }
189 
190     @Override
191     public ExtendedNumber one()
192     {
193         return ONE;
194     }
195 
196     @Override
197     public OperableNumber convert(ExtendedNumber val)
198     {
199         return new OperableShort(val.shortValue());
200     }
201 
202 }