package jscl.math.function; import jscl.math.Variable; import jscl.math.function.hyperbolic.*; import jscl.math.function.trigonometric.*; import org.solovyev.common.math.AbstractMathRegistry; import javax.annotation.Nonnull; /** * User: serso * Date: 10/29/11 * Time: 12:54 PM */ public class FunctionsRegistry extends AbstractMathRegistry<Function> { private final static FunctionsRegistry instance = new FunctionsRegistry(); static { instance.add(new Deg(null)); instance.add(new Rad(null, null, null)); instance.add(new Dms(null, null, null)); instance.add(new Sin(null)); instance.add(new Cos(null)); instance.add(new Tan(null)); instance.add(new Cot(null)); instance.add(new Asin(null)); instance.add(new Acos(null)); instance.add(new Atan(null)); instance.add(new Acot(null)); instance.add(new Ln(null)); instance.add(new Lg(null)); instance.add(new Exp(null)); instance.add(new Sqrt(null)); instance.add(new Cubic(null)); instance.add(new Sinh(null)); instance.add(new Cosh(null)); instance.add(new Tanh(null)); instance.add(new Coth(null)); instance.add(new Asinh(null)); instance.add(new Acosh(null)); instance.add(new Atanh(null)); instance.add(new Acoth(null)); instance.add(new Abs(null)); instance.add(new Sgn(null)); instance.add(new Conjugate(null)); for (String name : Comparison.names) { instance.add(new Comparison(name, null, null)); } } @Nonnull public static FunctionsRegistry getInstance() { return instance; } @Nonnull public static <T extends Variable> T copy(@Nonnull T variable) { final T result = (T) variable.newInstance(); if (variable.isIdDefined()) { result.setId(variable.getId()); } result.setSystem(variable.isSystem()); return result; } @Override public Function get(@Nonnull String name) { final Function function = super.get(name); return function == null ? null : copy(function); } }