2003/11/13 05:04:22
[org.ibex.core.git] / src / org / xwt / js / JSMath.java
diff --git a/src/org/xwt/js/JSMath.java b/src/org/xwt/js/JSMath.java
new file mode 100644 (file)
index 0000000..5a2ea4b
--- /dev/null
@@ -0,0 +1,66 @@
+// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL] 
+
+package org.xwt.js; 
+import org.xwt.util.*; 
+import java.io.*;
+import java.util.*;
+
+/** The JavaScript Math object */
+public class JSMath extends JSObj {
+
+    public static JSMath singleton = new JSMath();
+
+    public Object call(Object method, JSArray args) {
+        if (method == null) throw new JS.Exn("you cannot call this object");
+        //#switch(method)
+        case "ceil": return new Long((long)java.lang.Math.ceil(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "floor": return new Long((long)java.lang.Math.floor(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "round": return new Long((long)java.lang.Math.round(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "min": return new Double(java.lang.Math.min(JS.toNumber(args.elementAt(0)).doubleValue(),
+                                                         JS.toNumber(args.elementAt(1)).doubleValue()));
+        case "max": return new Double(java.lang.Math.max(JS.toNumber(args.elementAt(0)).doubleValue(),
+                                                         JS.toNumber(args.elementAt(1)).doubleValue()));
+        case "pow": return new Double(java.lang.Math.pow(JS.toNumber(args.elementAt(0)).doubleValue(),
+                                                         JS.toNumber(args.elementAt(1)).doubleValue()));
+        case "atan2": return new Double(java.lang.Math.atan2(JS.toNumber(args.elementAt(0)).doubleValue(),
+                                                             JS.toNumber(args.elementAt(1)).doubleValue()));
+        case "abs": return new Double(java.lang.Math.abs(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "sin": return new Double(java.lang.Math.sin(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "cos": return new Double(java.lang.Math.cos(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "tan": return new Double(java.lang.Math.tan(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "asin": return new Double(java.lang.Math.asin(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "acos": return new Double(java.lang.Math.acos(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "atan": return new Double(java.lang.Math.atan(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "sqrt": return new Double(java.lang.Math.sqrt(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "exp": return new Double(java.lang.Math.exp(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "log": return new Double(java.lang.Math.log(JS.toNumber(args.elementAt(0)).doubleValue()));
+        case "random": return new Double(java.lang.Math.random());
+        //#end
+        return null;
+    }
+
+    private static final Double E       = new Double(java.lang.Math.E);
+    private static final Double PI      = new Double(java.lang.Math.PI);
+    private static final Double LN10    = new Double(java.lang.Math.log(10));
+    private static final Double LN2     = new Double(java.lang.Math.log(2));
+    private static final Double LOG10E  = new Double(1/java.lang.Math.log(10));
+    private static final Double LOG2E   = new Double(1/java.lang.Math.log(2));
+    private static final Double SQRT1_2 = new Double(1/java.lang.Math.sqrt(2));
+    private static final Double SQRT2   = new Double(java.lang.Math.sqrt(2));
+
+    public void put(Object key, Object val) { return; }
+
+    public Object get(Object key, Object val) {
+        //#switch(key)
+        case "E": return E;
+        case "LN10": return LN10;
+        case "LN2": return LN2;
+        case "LOG10E": return LOG10E;
+        case "LOG2E": return LOG2E;
+        case "PI": return PI;
+        case "SQRT1_2": return SQRT1_2;
+        case "SQRT2": return SQRT2;
+        //#end
+        return null;
+    }
+}