91a8a9ecc8c3c0b98c5cf03ed0dbda645d5ad320
[org.ibex.core.git] / src / org / xwt / js / JSMath.java
1 // Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL] 
2
3 package org.xwt.js; 
4 import org.xwt.util.*; 
5 import java.io.*;
6 import java.util.*;
7
8 /** The JavaScript Math object */
9 public class JSMath extends JSCallable {
10
11     public static JSMath singleton = new JSMath();
12
13     public Object call(Object method, JSArray args) {
14         if (method == null) throw new JS.Exn("you cannot call this object");
15         //#switch(method)
16         case "ceil": return new Long((long)java.lang.Math.ceil(JS.toNumber(args.elementAt(0)).doubleValue()));
17         case "floor": return new Long((long)java.lang.Math.floor(JS.toNumber(args.elementAt(0)).doubleValue()));
18         case "round": return new Long((long)java.lang.Math.round(JS.toNumber(args.elementAt(0)).doubleValue()));
19         case "min": return new Double(java.lang.Math.min(JS.toNumber(args.elementAt(0)).doubleValue(),
20                                                          JS.toNumber(args.elementAt(1)).doubleValue()));
21         case "max": return new Double(java.lang.Math.max(JS.toNumber(args.elementAt(0)).doubleValue(),
22                                                          JS.toNumber(args.elementAt(1)).doubleValue()));
23         case "pow": return new Double(java.lang.Math.pow(JS.toNumber(args.elementAt(0)).doubleValue(),
24                                                          JS.toNumber(args.elementAt(1)).doubleValue()));
25         case "atan2": return new Double(java.lang.Math.atan2(JS.toNumber(args.elementAt(0)).doubleValue(),
26                                                              JS.toNumber(args.elementAt(1)).doubleValue()));
27         case "abs": return new Double(java.lang.Math.abs(JS.toNumber(args.elementAt(0)).doubleValue()));
28         case "sin": return new Double(java.lang.Math.sin(JS.toNumber(args.elementAt(0)).doubleValue()));
29         case "cos": return new Double(java.lang.Math.cos(JS.toNumber(args.elementAt(0)).doubleValue()));
30         case "tan": return new Double(java.lang.Math.tan(JS.toNumber(args.elementAt(0)).doubleValue()));
31         case "asin": return new Double(java.lang.Math.asin(JS.toNumber(args.elementAt(0)).doubleValue()));
32         case "acos": return new Double(java.lang.Math.acos(JS.toNumber(args.elementAt(0)).doubleValue()));
33         case "atan": return new Double(java.lang.Math.atan(JS.toNumber(args.elementAt(0)).doubleValue()));
34         case "sqrt": return new Double(java.lang.Math.sqrt(JS.toNumber(args.elementAt(0)).doubleValue()));
35         case "exp": return new Double(java.lang.Math.exp(JS.toNumber(args.elementAt(0)).doubleValue()));
36         case "log": return new Double(java.lang.Math.log(JS.toNumber(args.elementAt(0)).doubleValue()));
37         case "random": return new Double(java.lang.Math.random());
38         //#end
39         return null;
40     }
41
42     private static final Double E       = new Double(java.lang.Math.E);
43     private static final Double PI      = new Double(java.lang.Math.PI);
44     private static final Double LN10    = new Double(java.lang.Math.log(10));
45     private static final Double LN2     = new Double(java.lang.Math.log(2));
46     private static final Double LOG10E  = new Double(1/java.lang.Math.log(10));
47     private static final Double LOG2E   = new Double(1/java.lang.Math.log(2));
48     private static final Double SQRT1_2 = new Double(1/java.lang.Math.sqrt(2));
49     private static final Double SQRT2   = new Double(java.lang.Math.sqrt(2));
50
51     public void put(Object key, Object val) { return; }
52
53     public Object get(Object key, Object val) {
54         //#switch(key)
55         case "E": return E;
56         case "LN10": return LN10;
57         case "LN2": return LN2;
58         case "LOG10E": return LOG10E;
59         case "LOG2E": return LOG2E;
60         case "PI": return PI;
61         case "SQRT1_2": return SQRT1_2;
62         case "SQRT2": return SQRT2;
63         //#end
64         return null;
65     }
66 }