Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Energy, onHostDestruction: ensured ptr existence
[simgrid.git] / contrib / psg / src / peersim / config / Operators.java
1 /*\r
2  * Copyright (c) 2003-2005 The BISON Project\r
3  *\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
7  *\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
12  *\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
16  *\r
17  */\r
18 package peersim.config;\r
19 import java.math.*;\r
20 import org.lsmp.djep.groupJep.groups.*;\r
21 import org.lsmp.djep.groupJep.interfaces.*;\r
22 \r
23 /**\r
24  * This class implements the <code>Group</code> interface of JEP,\r
25  * enabling the configuration system to read integers with arbitrary \r
26  * length. \r
27  */\r
28 public class Operators extends Group implements IntegralDomainI,HasDivI,\r
29         OrderedSetI,HasModI,HasPowerI {\r
30         \r
31 \r
32         /**\r
33          * Operations on the reals (Implemented as BigInteger).\r
34          */\r
35         public Operators() {\r
36         }\r
37 \r
38         public Number getZERO() {\r
39                 return BigInteger.ZERO;\r
40         }\r
41 \r
42         public Number getONE() {\r
43                 return BigInteger.ONE;\r
44         }\r
45 \r
46         public Number getInverse(Number num) {\r
47                 if (num instanceof BigInteger) {\r
48                         BigInteger a = (BigInteger) num;\r
49                         return a.negate();\r
50                 } else {\r
51                         return -num.doubleValue();\r
52                 }\r
53         }\r
54 \r
55         public Number add(Number num1, Number num2) {\r
56                 if (num1 instanceof Double || num2 instanceof Double) {\r
57                         // One is double\r
58                         return num1.doubleValue() + num2.doubleValue();\r
59                 } else {\r
60                         // Both integer\r
61                         BigInteger a = (BigInteger) num1;\r
62                         BigInteger b = (BigInteger) num2;\r
63                         return a.add(b);\r
64                 }\r
65         }\r
66 \r
67         public Number sub(Number num1, Number num2) {\r
68                 if (num1 instanceof Double || num2 instanceof Double) {\r
69                         // One is double\r
70                         return num1.doubleValue() - num2.doubleValue();\r
71                 } else {\r
72                         // Both integer\r
73                         BigInteger a = (BigInteger) num1;\r
74                         BigInteger b = (BigInteger) num2;\r
75                         return a.subtract(b);\r
76                 }\r
77         }\r
78 \r
79         public Number mul(Number num1, Number num2) {\r
80                 if (num1 instanceof Double || num2 instanceof Double) {\r
81                         // One is double\r
82                         return num1.doubleValue() * num2.doubleValue();\r
83                 } else {\r
84                         // Both integer\r
85                         BigInteger a = (BigInteger) num1;\r
86                         BigInteger b = (BigInteger) num2;\r
87                         return a.multiply(b);\r
88                 }\r
89         }\r
90 \r
91         public Number div(Number num1, Number num2) {\r
92                 if (num1 instanceof Double || num2 instanceof Double) {\r
93                         // One is double\r
94                         return num1.doubleValue() / num2.doubleValue();\r
95                 } else {\r
96                         // Both integer\r
97                         BigInteger a = (BigInteger) num1;\r
98                         BigInteger b = (BigInteger) num2;\r
99                         return a.divide(b);\r
100                 }\r
101         }\r
102 \r
103          \r
104         public Number mod(Number num1, Number num2) {\r
105                 if (num1 instanceof Double || num2 instanceof Double) {\r
106                         // One is double\r
107                         return num1.doubleValue() % num2.doubleValue();\r
108                 } else {\r
109                         // Both integer\r
110                         BigInteger a = (BigInteger) num1;\r
111                         BigInteger b = (BigInteger) num2;\r
112                         return a.remainder(b);\r
113                 }\r
114         }\r
115         \r
116         public Number pow(Number num1, Number num2) {\r
117                 if (num1 instanceof Double || num2 instanceof Double) {\r
118                         // One is double\r
119                         return Math.pow(num1.doubleValue(), num2.doubleValue());\r
120                 } else {\r
121                         // Both integer\r
122                         BigInteger a = (BigInteger) num1;\r
123                         BigInteger b = (BigInteger) num2;\r
124                         return a.pow(b.intValue());\r
125                 }\r
126         }\r
127         \r
128         public boolean equals(Number num1, Number num2) {\r
129                 if (num1 instanceof Double || num2 instanceof Double) {\r
130                         // One is double\r
131                         return num1.doubleValue() == num2.doubleValue();\r
132                 } else {\r
133                         // Both integer\r
134                         BigInteger a = (BigInteger) num1;\r
135                         BigInteger b = (BigInteger) num2;\r
136                         return a.equals(b);\r
137                 }\r
138         }\r
139         \r
140         public int compare(Number num1,Number num2)     {\r
141                 if (num1 instanceof Double || num2 instanceof Double) {\r
142                         // One is double\r
143                         double n1 = num1.doubleValue();\r
144                         double n2 = num2.doubleValue();\r
145                         return (n1 < n2 ? -1 : (n1 == n2 ? 0 : 1));\r
146                 } else {\r
147                         // Both integer\r
148                         BigInteger a = (BigInteger) num1;\r
149                         BigInteger b = (BigInteger) num2;\r
150                         return a.compareTo(b);\r
151                 }\r
152         }\r
153 \r
154         public Number valueOf(String str) {\r
155                 try {\r
156                         return new BigInteger(str);\r
157                 } catch (NumberFormatException e) {\r
158                         return new Double(str);\r
159                 }\r
160         }\r
161         \r
162         public String toString() { return ""; }\r
163 }\r