2 * Copyright (c) 2003-2005 The BISON Project
\r
4 * This program is free software; you can redistribute it and/or modify
\r
5 * it under the terms of the GNU Lesser General Public License version 2 as
\r
6 * published by the Free Software Foundation.
\r
8 * This program is distributed in the hope that it will be useful,
\r
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
11 * GNU Lesser General Public License for more details.
\r
13 * You should have received a copy of the GNU Lesser General Public License
\r
14 * along with this program; if not, write to the Free Software
\r
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\r
18 package peersim.config;
\r
20 import org.lsmp.djep.groupJep.groups.*;
\r
21 import org.lsmp.djep.groupJep.interfaces.*;
\r
24 * This class implements the <code>Group</code> interface of JEP,
\r
25 * enabling the configuration system to read integers with arbitrary
\r
28 public class Operators extends Group implements IntegralDomainI,HasDivI,
\r
29 OrderedSetI,HasModI,HasPowerI {
\r
33 * Operations on the reals (Implemented as BigInteger).
\r
35 public Operators() {
\r
38 public Number getZERO() {
\r
39 return BigInteger.ZERO;
\r
42 public Number getONE() {
\r
43 return BigInteger.ONE;
\r
46 public Number getInverse(Number num) {
\r
47 if (num instanceof BigInteger) {
\r
48 BigInteger a = (BigInteger) num;
\r
51 return -num.doubleValue();
\r
55 public Number add(Number num1, Number num2) {
\r
56 if (num1 instanceof Double || num2 instanceof Double) {
\r
58 return num1.doubleValue() + num2.doubleValue();
\r
61 BigInteger a = (BigInteger) num1;
\r
62 BigInteger b = (BigInteger) num2;
\r
67 public Number sub(Number num1, Number num2) {
\r
68 if (num1 instanceof Double || num2 instanceof Double) {
\r
70 return num1.doubleValue() - num2.doubleValue();
\r
73 BigInteger a = (BigInteger) num1;
\r
74 BigInteger b = (BigInteger) num2;
\r
75 return a.subtract(b);
\r
79 public Number mul(Number num1, Number num2) {
\r
80 if (num1 instanceof Double || num2 instanceof Double) {
\r
82 return num1.doubleValue() * num2.doubleValue();
\r
85 BigInteger a = (BigInteger) num1;
\r
86 BigInteger b = (BigInteger) num2;
\r
87 return a.multiply(b);
\r
91 public Number div(Number num1, Number num2) {
\r
92 if (num1 instanceof Double || num2 instanceof Double) {
\r
94 return num1.doubleValue() / num2.doubleValue();
\r
97 BigInteger a = (BigInteger) num1;
\r
98 BigInteger b = (BigInteger) num2;
\r
104 public Number mod(Number num1, Number num2) {
\r
105 if (num1 instanceof Double || num2 instanceof Double) {
\r
107 return num1.doubleValue() % num2.doubleValue();
\r
110 BigInteger a = (BigInteger) num1;
\r
111 BigInteger b = (BigInteger) num2;
\r
112 return a.remainder(b);
\r
116 public Number pow(Number num1, Number num2) {
\r
117 if (num1 instanceof Double || num2 instanceof Double) {
\r
119 return Math.pow(num1.doubleValue(), num2.doubleValue());
\r
122 BigInteger a = (BigInteger) num1;
\r
123 BigInteger b = (BigInteger) num2;
\r
124 return a.pow(b.intValue());
\r
128 public boolean equals(Number num1, Number num2) {
\r
129 if (num1 instanceof Double || num2 instanceof Double) {
\r
131 return num1.doubleValue() == num2.doubleValue();
\r
134 BigInteger a = (BigInteger) num1;
\r
135 BigInteger b = (BigInteger) num2;
\r
136 return a.equals(b);
\r
140 public int compare(Number num1,Number num2) {
\r
141 if (num1 instanceof Double || num2 instanceof Double) {
\r
143 double n1 = num1.doubleValue();
\r
144 double n2 = num2.doubleValue();
\r
145 return (n1 < n2 ? -1 : (n1 == n2 ? 0 : 1));
\r
148 BigInteger a = (BigInteger) num1;
\r
149 BigInteger b = (BigInteger) num2;
\r
150 return a.compareTo(b);
\r
154 public Number valueOf(String str) {
\r
156 return new BigInteger(str);
\r
157 } catch (NumberFormatException e) {
\r
158 return new Double(str);
\r
162 public String toString() { return ""; }
\r