private static void HandlePrevious(IList <ExprPreviousNode> previousRequests, Object previousNodeGetter, IDictionary <ExprPreviousNode, ExprPreviousEvalStrategy> strategies) { if (previousRequests.IsEmpty()) { return; } RandomAccessByIndexGetter randomAccessGetter = null; RelativeAccessByEventNIndexMap relativeAccessGetter = null; if (previousNodeGetter is RandomAccessByIndexGetter) { randomAccessGetter = (RandomAccessByIndexGetter)previousNodeGetter; } else if (previousNodeGetter is RelativeAccessByEventNIndexMap) { relativeAccessGetter = (RelativeAccessByEventNIndexMap)previousNodeGetter; } else { throw new EPException("Unexpected 'previous' handler: " + previousNodeGetter); } foreach (ExprPreviousNode previousNode in previousRequests) { int streamNumber = previousNode.StreamNumber; ExprPreviousNodePreviousType previousType = previousNode.PreviousType; ExprPreviousEvalStrategy evaluator; if (previousType == ExprPreviousNodePreviousType.PREVWINDOW) { evaluator = new ExprPreviousEvalStrategyWindow(streamNumber, previousNode.ChildNodes[1].ExprEvaluator, previousNode.ReturnType.GetElementType(), randomAccessGetter, relativeAccessGetter); } else if (previousType == ExprPreviousNodePreviousType.PREVCOUNT) { evaluator = new ExprPreviousEvalStrategyCount(streamNumber, randomAccessGetter, relativeAccessGetter); } else { evaluator = new ExprPreviousEvalStrategyPrev(streamNumber, previousNode.ChildNodes[0].ExprEvaluator, previousNode.ChildNodes[1].ExprEvaluator, randomAccessGetter, relativeAccessGetter, previousNode.IsConstantIndex, previousNode.ConstantIndexNumber, previousType == ExprPreviousNodePreviousType.PREVTAIL); } strategies.Put(previousNode, evaluator); } }
public ExprPreviousNode(ExprPreviousNodePreviousType previousType) { _previousType = previousType; }