/** The JavaScript Math object */
public class Math extends JS.Obj {
public static Math singleton = new Math();
- private Math() { setSeal(true); }
-
- public Object get(Object name) {
- if ("ceil".equals(name)) return new JS.Callable() { public Object call(JS.Array args)
- { if (args.elementAt(0) == null) return null;
- return new Long((long)java.lang.Math.ceil(Double.parseDouble(args.elementAt(0).toString()))); } };
- else if ("floor".equals(name)) return new JS.Callable() { public Object call(JS.Array args)
- { if (args.elementAt(0) == null) return null;
- return new Long((long)java.lang.Math.floor(Double.parseDouble(args.elementAt(0).toString()))); } };
- else if ("round".equals(name)) return new JS.Callable() { public Object call(JS.Array args)
- { if (args.elementAt(0) == null) return null;
- return new Long((long)java.lang.Math.round(Double.parseDouble(args.elementAt(0).toString()))); } };
- else if ("abs".equals(name)) return new JS.Callable() { public Object call(JS.Array args)
- { if (args.elementAt(0) == null) return null;
- return new Long((long)java.lang.Math.abs(Double.parseDouble(args.elementAt(0).toString()))); } };
- else if ("min".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- if (args.length() < 2 || args.elementAt(0) == null || args.elementAt(1) == null) return args.elementAt(0);
- return new Double(java.lang.Math.min(((Number)args.elementAt(0)).doubleValue(),
- ((Number)args.elementAt(1)).doubleValue())); } };
- else if ("max".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- if (args.length() < 2) return args.elementAt(0);
- return new Double(java.lang.Math.max(((Number)args.elementAt(0)).doubleValue(),
- ((Number)args.elementAt(1)).doubleValue())); } };
- else if ("cos".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.cos(((Number)args.elementAt(0)).doubleValue())); } };
- else if ("sin".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.sin(((Number)args.elementAt(0)).doubleValue())); } };
- else if ("tan".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.tan(((Number)args.elementAt(0)).doubleValue())); } };
- else if ("acos".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.acos(((Number)args.elementAt(0)).doubleValue())); } };
- else if ("asin".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.asin(((Number)args.elementAt(0)).doubleValue())); } };
- else if ("atan".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.atan(((Number)args.elementAt(0)).doubleValue())); } };
- else if ("sqrt".equals(name)) return new JS.Callable() { public Object call(JS.Array args) {
- return new Double(java.lang.Math.sqrt(((Number)args.elementAt(0)).doubleValue())); } };
- return null;
+
+ private static final JS.Callable ceil = new JS.Callable() { public Object call(JS.Array args) {
+ return new Long((long)java.lang.Math.ceil(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable floor = new JS.Callable() { public Object call(JS.Array args) {
+ return new Long((long)java.lang.Math.floor(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable round = new JS.Callable() { public Object call(JS.Array args) {
+ return new Long((long)java.lang.Math.round(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable min = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.min(JS.toNumber(args.elementAt(0)).doubleValue(),
+ JS.toNumber(args.elementAt(1)).doubleValue())); } };
+
+ private static final JS.Callable max = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.max(JS.toNumber(args.elementAt(0)).doubleValue(),
+ JS.toNumber(args.elementAt(1)).doubleValue())); } };
+
+ private static final JS.Callable pow = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.pow(JS.toNumber(args.elementAt(0)).doubleValue(),
+ JS.toNumber(args.elementAt(1)).doubleValue())); } };
+
+ private static final JS.Callable atan2 = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.atan2(JS.toNumber(args.elementAt(0)).doubleValue(),
+ JS.toNumber(args.elementAt(1)).doubleValue())); } };
+
+ private static final JS.Callable abs = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.abs(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable sin = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.sin(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable cos = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.cos(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable tan = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.tan(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable asin = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.asin(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable acos = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.acos(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable atan = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.atan(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable sqrt = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.sqrt(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable exp = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.exp(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable log = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.log(JS.toNumber(args.elementAt(0)).doubleValue())); } };
+
+ private static final JS.Callable random = new JS.Callable() { public Object call(JS.Array args) {
+ return new Double(java.lang.Math.random()); } };
+
+ 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));
+
+ protected Math() {
+ put("abs", abs);
+ put("acos", acos);
+ put("asin", asin);
+ put("atan", atan);
+ put("atan2", atan2);
+ put("ceil", ceil);
+ put("cos", cos);
+ put("exp", exp);
+ put("floor", floor);
+ put("log", log);
+ put("max", max);
+ put("min", min);
+ put("pow", pow);
+ put("random", random);
+ put("round",round);
+ put("sin", sin);
+ put("sqrt", sqrt);
+ put("tan", tan);
+
+ put("E", E);
+ put("LN10", LN10);
+ put("LN2", LN2);
+ put("LOG10E", LOG10E);
+ put("LOG2E", LOG2E);
+ put("PI", PI);
+ put("SQRT1_2", SQRT1_2);
+ put("SQRT2", SQRT2);
+
+ setSeal(true);
}
}