public void Updated(RelativeAccessByEventNIndex iStreamRelativeAccess, EventBean[] newData) { // remove data posted from the last update EventBean[] lastNewData = _eventsByAccessor.Get(iStreamRelativeAccess); if (lastNewData != null) { for (int i = 0; i < lastNewData.Length; i++) { _accessorByEvent.Remove(lastNewData[i]); } } if (newData == null) { return; } // hold accessor per event for querying for (int i = 0; i < newData.Length; i++) { _accessorByEvent.Put(newData[i], iStreamRelativeAccess); } // save new data for access to later removal _eventsByAccessor.Put(iStreamRelativeAccess, newData); }
/// <summary> /// Ctor. /// </summary> /// <param name="buffer">is the buffer to acces</param> /// <param name="relativeIndex">is the index to pull out</param> public PriorEventViewRelAccess( RelativeAccessByEventNIndex buffer, int relativeIndex) { this.buffer = buffer; this.relativeIndex = relativeIndex; }
/// <summary> /// Returns the access into window contents given an event. /// </summary> /// <param name="theEvent">to which the method returns relative access from</param> /// <returns>buffer</returns> public RelativeAccessByEventNIndex GetAccessor(EventBean theEvent) { RelativeAccessByEventNIndex iStreamRelativeAccess = _accessorByEvent.Get(theEvent); if (iStreamRelativeAccess == null) { return(null); } return(iStreamRelativeAccess); }
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(RelativeAccessByEventNIndex iStreamRelativeAccess, EventBean[] newData) { ProcUpdated.Invoke(iStreamRelativeAccess, newData); }
public ExprPriorEvalStrategyRelativeAccess(RelativeAccessByEventNIndex relativeAccess) { _relativeAccess = relativeAccess; }