content: package edu.stanford.rsl.conrad.numerics.mathexpressions;
  
  import java.util.Map;
  
  import edu.stanford.rsl.conrad.geometry.General;
  import edu.stanford.rsl.conrad.utils.CONRAD;
  
  /**
   * A wrapper class for functions
   * @author Rotimi X Ojo
   */
  public class FunctionExpression extends AbstractMathExpression{
  	private String function;
  	private AbstractMathExpression valueExp;
  
  	public FunctionExpression(String functionName, AbstractMathExpression valueExp){
  		this.function = functionName.toLowerCase().trim();
  		this.valueExp = valueExp;
  	}	
  	
  	
  	@Override
  	public double evaluate(Map<String, Double> variablesMap){
  		double input = valueExp.evaluate(variablesMap);
  		if(function.equals("sin")){
  			return Math.sin(input);
  		}else if(function.equals("cos")){
  			return Math.cos(input);
  		}else if(function.equals("tan")){
  			return Math.tan(input);
  		}else if(function.equals("sind")){
  			return Math.sin(General.toRadians(input));
  		}else if(function.equals("cosd")){
  			return Math.cos(General.toRadians(input));
  		}else if(function.equals("tand")){
  			return Math.tan(General.toRadians(input));
  		}else if(function.equals("sqrt")){
  			return Math.sqrt(input);
  		}else{
  			throw new UnsupportedOperationException("Function is not currently supported");
  		}
  	}
  	@Override
  	public String toString(){
  		return function + "(" + valueExp.toString() + ")";
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Rotimi X Ojo
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */