1 cananian 1.1.2.1 // INMath.java, created Sat Jan 29 23:01:14 2000 by cananian
  2 cananian 1.1.2.1 // Copyright (C) 2000 C. Scott Ananian <cananian@alumni.princeton.edu>
  3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
  4 cananian 1.1.2.1 package harpoon.Interpret.Quads;
  5 cananian 1.1.2.1 
  6 cananian 1.1.2.1 import harpoon.ClassFile.HClass;
  7 cananian 1.1.2.1 import harpoon.ClassFile.HField;
  8 cananian 1.1.2.1 import harpoon.ClassFile.HMethod;
  9 cananian 1.1.2.1 
 10 cananian 1.1.2.1 /**
 11 cananian 1.1.2.1  * <code>INMath</code> provides implementations for (some of) the native
 12 cananian 1.1.2.1  * methods in <code>java.lang.Math</code>.
 13 cananian 1.1.2.1  * 
 14 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
 15 cananian 1.2      * @version $Id: INMath.java,v 1.2 2002/02/25 21:05:46 cananian Exp $
 16 cananian 1.1.2.1  */
 17 cananian 1.1.2.1 public class INMath {
 18 cananian 1.1.2.1     static final void register(StaticState ss) {
 19 cananian 1.1.2.1         ss.register(acos(ss));
 20 cananian 1.1.2.1         ss.register(asin(ss));
 21 cananian 1.1.2.1         ss.register(atan2(ss));
 22 cananian 1.1.2.1         ss.register(atan(ss));
 23 cananian 1.1.2.1         ss.register(ceil(ss));
 24 cananian 1.1.2.1         ss.register(cos(ss));
 25 cananian 1.1.2.1         ss.register(exp(ss));
 26 cananian 1.1.2.1         ss.register(floor(ss));
 27 cananian 1.1.2.1         ss.register(IEEEremainder(ss));
 28 cananian 1.1.2.1         ss.register(log(ss));
 29 cananian 1.1.2.1         ss.register(pow(ss));
 30 cananian 1.1.2.1         ss.register(rint(ss));
 31 cananian 1.1.2.1         ss.register(sin(ss));
 32 cananian 1.1.2.1         ss.register(sqrt(ss));
 33 cananian 1.1.2.1         ss.register(tan(ss));
 34 cananian 1.1.2.1     }
 35 cananian 1.1.2.1 
 36 cananian 1.1.2.1     private static final NativeMethod acos(StaticState ss0) {
 37 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("acos","(D)D");
 38 cananian 1.1.2.1         return new NativeMethod() {
 39 cananian 1.1.2.1             HMethod getMethod() { return hm; }
 40 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
 41 cananian 1.1.2.1                 Double d = (Double) params[0];
 42 cananian 1.1.2.1                 return new Double(Math.acos(d.doubleValue()));
 43 cananian 1.1.2.1             }
 44 cananian 1.1.2.1         };
 45 cananian 1.1.2.1     }
 46 cananian 1.1.2.1     private static final NativeMethod asin(StaticState ss0) {
 47 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("asin","(D)D");
 48 cananian 1.1.2.1         return new NativeMethod() {
 49 cananian 1.1.2.1             HMethod getMethod() { return hm; }
 50 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
 51 cananian 1.1.2.1                 Double d = (Double) params[0];
 52 cananian 1.1.2.1                 return new Double(Math.asin(d.doubleValue()));
 53 cananian 1.1.2.1             }
 54 cananian 1.1.2.1         };
 55 cananian 1.1.2.1     }
 56 cananian 1.1.2.1     private static final NativeMethod atan2(StaticState ss0) {
 57 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("atan2","(DD)D");
 58 cananian 1.1.2.1         return new NativeMethod() {
 59 cananian 1.1.2.1             HMethod getMethod() { return hm; }
 60 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
 61 cananian 1.1.2.1                 double a = ((Double) params[0]).doubleValue();
 62 cananian 1.1.2.1                 double b = ((Double) params[1]).doubleValue();
 63 cananian 1.1.2.1                 return new Double(Math.atan2(a,b));
 64 cananian 1.1.2.1             }
 65 cananian 1.1.2.1         };
 66 cananian 1.1.2.1     }
 67 cananian 1.1.2.1     private static final NativeMethod atan(StaticState ss0) {
 68 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("atan","(D)D");
 69 cananian 1.1.2.1         return new NativeMethod() {
 70 cananian 1.1.2.1             HMethod getMethod() { return hm; }
 71 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
 72 cananian 1.1.2.1                 Double d = (Double) params[0];
 73 cananian 1.1.2.1                 return new Double(Math.atan(d.doubleValue()));
 74 cananian 1.1.2.1             }
 75 cananian 1.1.2.1         };
 76 cananian 1.1.2.1     }
 77 cananian 1.1.2.1     private static final NativeMethod ceil(StaticState ss0) {
 78 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("ceil","(D)D");
 79 cananian 1.1.2.1         return new NativeMethod() {
 80 cananian 1.1.2.1             HMethod getMethod() { return hm; }
 81 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
 82 cananian 1.1.2.1                 Double d = (Double) params[0];
 83 cananian 1.1.2.1                 return new Double(Math.ceil(d.doubleValue()));
 84 cananian 1.1.2.1             }
 85 cananian 1.1.2.1         };
 86 cananian 1.1.2.1     }
 87 cananian 1.1.2.1     private static final NativeMethod cos(StaticState ss0) {
 88 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("cos","(D)D");
 89 cananian 1.1.2.1         return new NativeMethod() {
 90 cananian 1.1.2.1             HMethod getMethod() { return hm; }
 91 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
 92 cananian 1.1.2.1                 Double d = (Double) params[0];
 93 cananian 1.1.2.1                 return new Double(Math.cos(d.doubleValue()));
 94 cananian 1.1.2.1             }
 95 cananian 1.1.2.1         };
 96 cananian 1.1.2.1     }
 97 cananian 1.1.2.1     private static final NativeMethod exp(StaticState ss0) {
 98 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("exp","(D)D");
 99 cananian 1.1.2.1         return new NativeMethod() {
100 cananian 1.1.2.1             HMethod getMethod() { return hm; }
101 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
102 cananian 1.1.2.1                 Double d = (Double) params[0];
103 cananian 1.1.2.1                 return new Double(Math.exp(d.doubleValue()));
104 cananian 1.1.2.1             }
105 cananian 1.1.2.1         };
106 cananian 1.1.2.1     }
107 cananian 1.1.2.1     private static final NativeMethod floor(StaticState ss0) {
108 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("floor","(D)D");
109 cananian 1.1.2.1         return new NativeMethod() {
110 cananian 1.1.2.1             HMethod getMethod() { return hm; }
111 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
112 cananian 1.1.2.1                 Double d = (Double) params[0];
113 cananian 1.1.2.1                 return new Double(Math.floor(d.doubleValue()));
114 cananian 1.1.2.1             }
115 cananian 1.1.2.1         };
116 cananian 1.1.2.1     }
117 cananian 1.1.2.1     private static final NativeMethod IEEEremainder(StaticState ss0) {
118 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("IEEEremainder","(DD)D");
119 cananian 1.1.2.1         return new NativeMethod() {
120 cananian 1.1.2.1             HMethod getMethod() { return hm; }
121 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
122 cananian 1.1.2.1                 double a = ((Double) params[0]).doubleValue();
123 cananian 1.1.2.1                 double b = ((Double) params[1]).doubleValue();
124 cananian 1.1.2.1                 return new Double(Math.IEEEremainder(a,b));
125 cananian 1.1.2.1             }
126 cananian 1.1.2.1         };
127 cananian 1.1.2.1     }
128 cananian 1.1.2.1     private static final NativeMethod log(StaticState ss0) {
129 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("log","(D)D");
130 cananian 1.1.2.1         return new NativeMethod() {
131 cananian 1.1.2.1             HMethod getMethod() { return hm; }
132 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
133 cananian 1.1.2.1                 Double d = (Double) params[0];
134 cananian 1.1.2.1                 return new Double(Math.log(d.doubleValue()));
135 cananian 1.1.2.1             }
136 cananian 1.1.2.1         };
137 cananian 1.1.2.1     }
138 cananian 1.1.2.1     private static final NativeMethod pow(StaticState ss0) {
139 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("pow","(DD)D");
140 cananian 1.1.2.1         return new NativeMethod() {
141 cananian 1.1.2.1             HMethod getMethod() { return hm; }
142 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
143 cananian 1.1.2.1                 double a = ((Double) params[0]).doubleValue();
144 cananian 1.1.2.1                 double b = ((Double) params[1]).doubleValue();
145 cananian 1.1.2.1                 return new Double(Math.pow(a,b));
146 cananian 1.1.2.1             }
147 cananian 1.1.2.1         };
148 cananian 1.1.2.1     }
149 cananian 1.1.2.1     private static final NativeMethod rint(StaticState ss0) {
150 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("rint","(D)D");
151 cananian 1.1.2.1         return new NativeMethod() {
152 cananian 1.1.2.1             HMethod getMethod() { return hm; }
153 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
154 cananian 1.1.2.1                 Double d = (Double) params[0];
155 cananian 1.1.2.1                 return new Double(Math.rint(d.doubleValue()));
156 cananian 1.1.2.1             }
157 cananian 1.1.2.1         };
158 cananian 1.1.2.1     }
159 cananian 1.1.2.1     private static final NativeMethod sin(StaticState ss0) {
160 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("sin","(D)D");
161 cananian 1.1.2.1         return new NativeMethod() {
162 cananian 1.1.2.1             HMethod getMethod() { return hm; }
163 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
164 cananian 1.1.2.1                 Double d = (Double) params[0];
165 cananian 1.1.2.1                 return new Double(Math.sin(d.doubleValue()));
166 cananian 1.1.2.1             }
167 cananian 1.1.2.1         };
168 cananian 1.1.2.1     }
169 cananian 1.1.2.1     private static final NativeMethod sqrt(StaticState ss0) {
170 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("sqrt","(D)D");
171 cananian 1.1.2.1         return new NativeMethod() {
172 cananian 1.1.2.1             HMethod getMethod() { return hm; }
173 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
174 cananian 1.1.2.1                 Double d = (Double) params[0];
175 cananian 1.1.2.1                 return new Double(Math.sqrt(d.doubleValue()));
176 cananian 1.1.2.1             }
177 cananian 1.1.2.1         };
178 cananian 1.1.2.1     }
179 cananian 1.1.2.1     private static final NativeMethod tan(StaticState ss0) {
180 cananian 1.1.2.1         final HMethod hm = ss0.HCmath.getMethod("tan","(D)D");
181 cananian 1.1.2.1         return new NativeMethod() {
182 cananian 1.1.2.1             HMethod getMethod() { return hm; }
183 cananian 1.1.2.1             Object invoke(StaticState ss, Object[] params) {
184 cananian 1.1.2.1                 Double d = (Double) params[0];
185 cananian 1.1.2.1                 return new Double(Math.tan(d.doubleValue()));
186 cananian 1.1.2.1             }
187 cananian 1.1.2.1         };
188 cananian 1.1.2.1     }
189 cananian 1.2     }