// Copyright 2000-2005 the Contributors, as shown in the revision logs. // Licensed under the Apache Public Source License 2.0 ("the License"). // You may not use this file except in compliance with the License. package org.ibex.js; /** The JavaScript Math object */ public class JSMath extends JS.Immutable { private static final JS.Method METHOD = new JS.Method(); private static final JS E = JSU.N(java.lang.Math.E); private static final JS PI = JSU.N(java.lang.Math.PI); private static final JS LN10 = JSU.N(java.lang.Math.log(10)); private static final JS LN2 = JSU.N(java.lang.Math.log(2)); private static final JS LOG10E = JSU.N(1/java.lang.Math.log(10)); private static final JS LOG2E = JSU.N(1/java.lang.Math.log(2)); private static final JS SQRT1_2 = JSU.N(1/java.lang.Math.sqrt(2)); private static final JS SQRT2 = JSU.N(java.lang.Math.sqrt(2)); public JS call(JS method, JS[] args) throws JSExn { switch(args.length) { case 0: { //#switch(JSU.toString(method)) case "random": return JSU.N(java.lang.Math.random()); //#end break; } case 1: { //#switch(JSU.toString(method)) case "ceil": return JSU.N((long)java.lang.Math.ceil(JSU.toDouble(args[0]))); case "floor": return JSU.N((long)java.lang.Math.floor(JSU.toDouble(args[0]))); case "round": return JSU.N((long)java.lang.Math.round(JSU.toDouble(args[0]))); case "abs": return JSU.N(java.lang.Math.abs(JSU.toDouble(args[0]))); case "sin": return JSU.N(java.lang.Math.sin(JSU.toDouble(args[0]))); case "cos": return JSU.N(java.lang.Math.cos(JSU.toDouble(args[0]))); case "tan": return JSU.N(java.lang.Math.tan(JSU.toDouble(args[0]))); case "asin": return JSU.N(java.lang.Math.asin(JSU.toDouble(args[0]))); case "acos": return JSU.N(java.lang.Math.acos(JSU.toDouble(args[0]))); case "atan": return JSU.N(java.lang.Math.atan(JSU.toDouble(args[0]))); case "sqrt": return JSU.N(java.lang.Math.sqrt(JSU.toDouble(args[0]))); case "exp": return JSU.N(java.lang.Math.exp(JSU.toDouble(args[0]))); case "log": return JSU.N(java.lang.Math.log(JSU.toDouble(args[0]))); //#end break; } case 2: { //#switch(JSU.toString(method)) case "min": return JSU.N(java.lang.Math.min(JSU.toDouble(args[0]), JSU.toDouble(args[1]))); case "max": return JSU.N(java.lang.Math.max(JSU.toDouble(args[0]), JSU.toDouble(args[1]))); case "pow": return JSU.N(java.lang.Math.pow(JSU.toDouble(args[0]), JSU.toDouble(args[1]))); case "atan2": return JSU.N(java.lang.Math.atan2(JSU.toDouble(args[0]), JSU.toDouble(args[1]))); //#end break; } } return super.call(method, args); } public JS get(JS key) throws JSExn { //#switch(JSU.toString(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; case "ceil": return METHOD; case "floor": return METHOD; case "round": return METHOD; case "min": return METHOD; case "max": return METHOD; case "pow": return METHOD; case "atan2": return METHOD; case "abs": return METHOD; case "sin": return METHOD; case "cos": return METHOD; case "tan": return METHOD; case "asin": return METHOD; case "acos": return METHOD; case "atan": return METHOD; case "sqrt": return METHOD; case "exp": return METHOD; case "log": return METHOD; case "random": return METHOD; //#end return super.get(key); } }