Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 /// <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;
 }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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;
        }
Esempio n. 6
0
        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;
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        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;
        }
Esempio n. 9
0
 public void Updated(RelativeAccessByEventNIndex iStreamRelativeAccess, EventBean[] newData)
 {
     ProcUpdated.Invoke(iStreamRelativeAccess, newData);
 }
 public ExprPriorEvalStrategyRelativeAccess(RelativeAccessByEventNIndex relativeAccess)
 {
     _relativeAccess = relativeAccess;
 }