package hep.aida.ref.tuple;
import gnu.jel.CompiledExpression;
import hep.aida.ITuple;
import hep.aida.ref.jel.JELLibraryFactory;
/**
*
* @author The FreeHEP team @ SLAC
*/
class JELExpression {
private String expression;
private Object[] context;
private CompiledExpression compExpression;
/**
* Default contructor.
* @param expression The expression to evaluate.
*
*/
protected JELExpression(String expression) {
this.expression = expression;
}
protected String expression() {
return expression;
}
protected double evaluateDouble() {
try {
return compExpression.evaluate_double(context);
} catch (Throwable t) {
throw new RuntimeException("Runtime JEL Evaluation Problems!", t);
}
}
protected boolean evaluateBoolean() {
try {
return compExpression.evaluate_boolean(context);
} catch (Throwable t) {
throw new RuntimeException("Runtime JEL Evaluation Problems!", t);
}
}
protected void compile(Class type, ITuple tuple) {
JELTupleProvider tupleProvider = new JELTupleProvider(tuple);
context = new Object[]{tupleProvider};
compExpression = JELLibraryFactory.compile(tupleProvider, tupleProvider.getClass(), expression, type);
}
}