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

org.unlaxer.tinyexpression.PreConstructedCalculator Maven / Gradle / Ivy

package org.unlaxer.tinyexpression;

import java.util.Random;
import java.util.function.Function;
import java.util.function.UnaryOperator;

import org.unlaxer.Parsed;
import org.unlaxer.StringSource;
import org.unlaxer.Token;
import org.unlaxer.context.ParseContext;

public abstract class PreConstructedCalculator implements Function , Calculator{
	
	public final String name;
	public final String formula;
	public final Token rootToken;
	
	public PreConstructedCalculator(String formula ) {
		this(formula , "_CalculatorClass"  + Math.abs(new Random().nextLong()));
	}
	
	public PreConstructedCalculator(String formula ,String name) {
		super();
		this.formula = formula;
		this.name = name;
		
		try(ParseContext parseContext = new ParseContext(new StringSource(formula));){
			Parsed parsed = getParser().parse(parseContext);
			if(false == parsed.isSucceeded()) {
				throw new IllegalArgumentException("failed to parse:"+formula);
			}
			rootToken = tokenReduer().apply(parsed.getRootToken(true));
		}catch (Exception e) {
			throw new IllegalArgumentException("failed to parse:"+formula,e);
		}
	}
	
	@SuppressWarnings("unused")
	private PreConstructedCalculator() {
		super();
		throw new IllegalArgumentException();
	}
	
	public UnaryOperator tokenReduer(){
		return UnaryOperator.identity();
	}

	
	@Override
	public Float apply(CalculationContext calculationContext) {
		return calculate(calculationContext);
	}

	public float calculate(CalculationContext calculationContext) {
		return toFloat(getCalculatorOperator().evaluate(calculationContext,rootToken));
	}
	
	@Override
	public String toString() {
//		String tokenPresentation = TokenPrinter.get(rootToken);
		return formula;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy