1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 }