private EventBean GetSubstitute(EventBean[] eventsPerStream, ExprEvaluatorContext exprEvaluatorContext) { // Use constant if supplied int?index; if (_isConstantIndex) { index = _constantIndexNumber; } else { // evaluate first child, which returns the index Object indexResult = _indexNode.Evaluate(new EvaluateParams(eventsPerStream, true, exprEvaluatorContext)); if (indexResult == null) { return(null); } index = indexResult.AsInt(); } // access based on index returned EventBean substituteEvent; if (_randomAccessGetter != null) { RandomAccessByIndex randomAccess = _randomAccessGetter.Accessor; if (!_isTail) { substituteEvent = randomAccess.GetNewData(index.Value); } else { substituteEvent = randomAccess.GetNewDataTail(index.Value); } } else { var evalEvent = eventsPerStream[_streamNumber]; var relativeAccess = _relativeAccessGetter.GetAccessor(evalEvent); if (relativeAccess == null) { return(null); } if (!_isTail) { substituteEvent = relativeAccess.GetRelativeToEvent(evalEvent, index.Value); } else { substituteEvent = relativeAccess.GetRelativeToEnd(evalEvent, index.Value); } } return(substituteEvent); }
private EventBean GetSubstitute( EventBean[] eventsPerStream, ExprEvaluatorContext exprEvaluatorContext) { // Use constant if supplied int? index; if (isConstantIndex) { index = constantIndexNumber; } else { // evaluate first child, which returns the index object indexResult = indexNode.Evaluate(eventsPerStream, true, exprEvaluatorContext); if (indexResult == null) { return null; } index = (indexResult).AsInt32(); } // access based on index returned EventBean substituteEvent; if (randomAccessGetter != null) { RandomAccessByIndex randomAccess = randomAccessGetter.Accessor; if (!isTail) { substituteEvent = randomAccess.GetNewData(index.Value); } else { substituteEvent = randomAccess.GetNewDataTail(index.Value); } } else { EventBean evalEvent = eventsPerStream[streamNumber]; RelativeAccessByEventNIndex relativeAccess = relativeAccessGetter.GetAccessor(evalEvent); if (relativeAccess == null) { return null; } if (!isTail) { substituteEvent = relativeAccess.GetRelativeToEvent(evalEvent, index.Value); } else { substituteEvent = relativeAccess.GetRelativeToEnd(index.Value); } } return substituteEvent; }
public ICollection<EventBean> EvaluateGetCollEvents( EventBean[] eventsPerStream, ExprEvaluatorContext context) { ICollection<EventBean> events; if (randomAccessGetter != null) { RandomAccessByIndex randomAccess = randomAccessGetter.Accessor; events = randomAccess.WindowCollectionReadOnly; } else { EventBean evalEvent = eventsPerStream[streamNumber]; RelativeAccessByEventNIndex relativeAccess = relativeAccessGetter.GetAccessor(evalEvent); if (relativeAccess == null) { return null; } events = relativeAccess.WindowToEventCollReadOnly; } return events; }
public object Evaluate( EventBean[] eventsPerStream, ExprEvaluatorContext exprEvaluatorContext) { long size; if (randomAccessGetter != null) { RandomAccessByIndex randomAccess = randomAccessGetter.Accessor; size = randomAccess.WindowCount; } else { EventBean evalEvent = eventsPerStream[streamNumber]; RelativeAccessByEventNIndex relativeAccess = relativeAccessGetter.GetAccessor(evalEvent); if (relativeAccess == null) { return null; } size = relativeAccess.WindowToEventCount; } return size; }
public object Evaluate( EventBean[] eventsPerStream, ExprEvaluatorContext exprEvaluatorContext) { IEnumerator<EventBean> events; int size; if (randomAccessGetter != null) { RandomAccessByIndex randomAccess = randomAccessGetter.Accessor; events = randomAccess.GetWindowEnumerator(); size = (int) randomAccess.WindowCount; } else { EventBean evalEvent = eventsPerStream[streamNumber]; RelativeAccessByEventNIndex relativeAccess = relativeAccessGetter.GetAccessor(evalEvent); if (relativeAccess == null) { return null; } size = relativeAccess.WindowToEventCount; events = relativeAccess.WindowToEvent; } if (size <= 0) { return null; } EventBean originalEvent = eventsPerStream[streamNumber]; Array result = Array.CreateInstance(componentType, size); for (int i = 0; i < size; i++) { events.MoveNext(); eventsPerStream[streamNumber] = events.Current; result.SetValue(evalNode.Evaluate(eventsPerStream, true, exprEvaluatorContext), i); } eventsPerStream[streamNumber] = originalEvent; return result; }
public ICollection<object> EvaluateGetCollScalar( EventBean[] eventsPerStream, ExprEvaluatorContext context) { IEnumerator<EventBean> events; int size; if (randomAccessGetter != null) { RandomAccessByIndex randomAccess = randomAccessGetter.Accessor; events = randomAccess.GetWindowEnumerator(); size = (int) randomAccess.WindowCount; } else { EventBean evalEvent = eventsPerStream[streamNumber]; RelativeAccessByEventNIndex relativeAccess = relativeAccessGetter.GetAccessor(evalEvent); if (relativeAccess == null) { return null; } size = relativeAccess.WindowToEventCount; events = relativeAccess.WindowToEvent; } if (size <= 0) { return Collections.GetEmptyList<object>(); } EventBean originalEvent = eventsPerStream[streamNumber]; Deque<object> deque = new ArrayDeque<object>(size); for (int i = 0; i < size; i++) { events.MoveNext(); eventsPerStream[streamNumber] = events.Current; object evalResult = evalNode.Evaluate(eventsPerStream, true, context); deque.Add(evalResult); } eventsPerStream[streamNumber] = originalEvent; return deque; }
public void Updated(RandomAccessByIndex randomAccessByIndex) { Accessor = randomAccessByIndex; }
public ExprPriorEvalStrategyRandomAccess(RandomAccessByIndex randomAccess) { this._randomAccess = randomAccess; }
/// <summary> /// Callback to indicate an Update /// </summary> /// <param name="randomAccessByIndex">is the collection</param> public void Updated(RandomAccessByIndex randomAccessByIndex) { _randomAccessByIndex = randomAccessByIndex; }
public void Updated(RandomAccessByIndex randomAccessByIndex) { UpdatedFunc.Invoke(randomAccessByIndex); }