/**************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
**************************************************************************************/
package com.espertech.esper.filter;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.epl.expression.ExprEvaluatorContext;
import com.espertech.esper.epl.expression.ExprNode;
import com.espertech.esper.epl.variable.VariableService;
/**
* Adapter for use by {@link FilterParamIndexBooleanExpr} to evaluate boolean expressions, providing
* events per stream to expression nodes. Generated by @{link FilterSpecParamExprNode} for
* boolean expression filter parameters.
*/
public class ExprNodeAdapterMultiStream extends ExprNodeAdapterBaseVariables
{
protected final EventBean[] prototypeArray;
private final ThreadLocal<EventBean[]> arrayPerThread;
public ExprNodeAdapterMultiStream(String statementName, ExprNode exprNode, ExprEvaluatorContext evaluatorContext, VariableService variableService, EventBean[] prototype) {
super(statementName, exprNode, evaluatorContext, variableService);
this.prototypeArray = prototype;
arrayPerThread = new ThreadLocal<EventBean[]>()
{
protected synchronized EventBean[] initialValue()
{
EventBean[] eventsPerStream = new EventBean[prototypeArray.length];
System.arraycopy(prototypeArray, 0, eventsPerStream, 0, prototypeArray.length);
return eventsPerStream;
}
};
}
@Override
public boolean evaluate(EventBean theEvent)
{
if (variableService != null)
{
variableService.setLocalVersion();
}
EventBean[] eventsPerStream = arrayPerThread.get();
eventsPerStream[0] = theEvent;
return evaluatePerStream(eventsPerStream);
}
}