All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.congrace.exp4j.FunctionToken Maven / Gradle / Ivy

package de.congrace.exp4j;

import java.util.Map;
import java.util.Stack;

class FunctionToken extends CalculationToken {

	final String functionName;

	final CustomFunction function;

	FunctionToken(String value, CustomFunction function) throws UnknownFunctionException {
		super(value);
		if (value == null) {
			throw new UnknownFunctionException(value);
		}
		try {
			this.functionName = function.name;
			this.function = function;
		} catch (IllegalArgumentException e) {
			throw new UnknownFunctionException(value);
		}
	}

	String getName() {
		return functionName;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof FunctionToken) {
			return functionName.equals(((FunctionToken) obj).functionName);

		}
		return false;
	}

	@Override
	public int hashCode() {
		return functionName.hashCode();
	}

	@Override
	void mutateStackForCalculation(Stack stack, Map variableValues) {
		double[] args = new double[function.argc];
		for (int i = 0; i < function.argc; i++) {
			args[i] = stack.pop();
		}
		stack.push(this.function.applyFunction(ArrayUtil.reverse(args)));
	}

	@Override
	void mutateStackForInfixTranslation(Stack operatorStack, StringBuilder output) {
		operatorStack.push(this);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy