Example #1
0
        public PartitionedSnapshotWindowHoppingPipe(
            SnapshotWindowStreamable <TKey, TInput, TState, TOutput> stream,
            IStreamObserver <TKey, TOutput> observer)
            : base(stream, observer)
        {
            this.aggregate         = stream.Aggregate;
            this.initialStateExpr  = this.aggregate.InitialState();
            this.initialState      = this.initialStateExpr.Compile();
            this.accumulateExpr    = this.aggregate.Accumulate();
            this.accumulate        = this.accumulateExpr.Compile();
            this.deaccumulateExpr  = this.aggregate.Deaccumulate();
            this.deaccumulate      = this.deaccumulateExpr.Compile();
            this.differenceExpr    = this.aggregate.Difference();
            this.difference        = this.differenceExpr.Compile();
            this.computeResultExpr = this.aggregate.ComputeResult();
            this.computeResult     = this.computeResultExpr.Compile();

            var comparer = stream.Properties.KeyEqualityComparer;

            this.keyComparerEqualsExpr      = comparer.GetEqualsExpr();
            this.keyComparerEquals          = this.keyComparerEqualsExpr.Compile();
            this.keyComparerGetHashCodeExpr = comparer.GetGetHashCodeExpr();
            this.keyComparerGetHashCode     = this.keyComparerGetHashCodeExpr.Compile();

            this.errorMessages = stream.ErrorMessages;
            this.pool          = MemoryManager.GetMemoryPool <TKey, TOutput>(false);
            this.pool.Get(out this.batch);
            this.batch.Allocate();

            this.aggregateByKey = comparer.CreateFastDictionary2Generator <TKey, HeldState <TState> >(1, this.keyComparerEquals, this.keyComparerGetHashCode, stream.Properties.QueryContainer).Invoke();
            var stateDictGenerator = comparer.CreateFastDictionaryGenerator <TKey, StateAndActive <TState> >(1, this.keyComparerEquals, this.keyComparerGetHashCode, stream.Properties.QueryContainer);

            this.ecqEntryPool    = new DataStructurePool <FastDictionary <TKey, StateAndActive <TState> > >(() => stateDictGenerator.Invoke());
            this.hopsPerDuration = (int)(stream.Source.Properties.ConstantDurationLength.Value / stream.Source.Properties.ConstantHopLength) + 1;
        }
        public StitchAggregatePipe(StitchAggregateStreamable <TKey, TPayload, TState, TResult> stream,
                                   IStreamObserver <TKey, TResult> observer)
            : base(stream, observer)
        {
            this.errorMessages = stream.ErrorMessages;
            this.pool          = MemoryManager.GetMemoryPool <TKey, TResult>(stream.Properties.IsColumnar);
            this.pool.Get(out this.batch);
            this.batch.Allocate();

            this.aggregate     = stream.aggregate;
            this.initialState  = this.aggregate.InitialState().Compile();
            this.accumulate    = this.aggregate.Accumulate().Compile();
            this.computeResult = this.aggregate.ComputeResult().Compile();

            var khpcomparer = EqualityComparerExtensions.GetEqualityComparerExpression <KHP, TKey>(
                e => e.Key, stream.Properties.KeyEqualityComparer);
            var equals      = khpcomparer.GetEqualsExpr().Compile();
            var getHashCode = khpcomparer.GetGetHashCodeExpr().Compile();
            var generator   = khpcomparer.CreateFastDictionary2Generator <KHP, List <ActiveEvent> >(1, equals, getHashCode, stream.Properties.QueryContainer);

            this.dictPool    = new DataStructurePool <FastDictionary2 <KHP, List <ActiveEvent> > >(() => generator.Invoke());
            this.outputCount = 0;
            this.CurrentTimeOpenEventBuffer = khpcomparer.CreateFastDictionary2Generator <KHP, int>(1, equals, getHashCode, stream.Properties.QueryContainer).Invoke();
            this.OpenEvents = khpcomparer.CreateFastDictionary2Generator <KHP, List <ActiveEventExt> >(1, equals, getHashCode, stream.Properties.QueryContainer).Invoke();
        }
Example #3
0
        public PartitionedSnapshotWindowStartEdgePipe(
            SnapshotWindowStreamable <TKey, TInput, TState, TOutput> stream,
            IStreamObserver <TKey, TOutput> observer)
            : base(stream, observer)
        {
            this.aggregate         = stream.Aggregate;
            this.initialStateExpr  = this.aggregate.InitialState();
            this.initialState      = this.initialStateExpr.Compile();
            this.accumulateExpr    = this.aggregate.Accumulate();
            this.accumulate        = this.accumulateExpr.Compile();
            this.computeResultExpr = this.aggregate.ComputeResult();
            this.computeResult     = this.computeResultExpr.Compile();

            var comparer = stream.Properties.KeyEqualityComparer;

            this.keyComparerEqualsExpr      = comparer.GetEqualsExpr();
            this.keyComparerEquals          = this.keyComparerEqualsExpr.Compile();
            this.keyComparerGetHashCodeExpr = comparer.GetGetHashCodeExpr();
            this.keyComparerGetHashCode     = this.keyComparerGetHashCodeExpr.Compile();

            this.errorMessages = stream.ErrorMessages;
            this.pool          = MemoryManager.GetMemoryPool <TKey, TOutput>(false);
            this.pool.Get(out this.batch);
            this.batch.Allocate();

            var generator = comparer.CreateFastDictionary2Generator <TKey, HeldState <TState> >(1, this.keyComparerEquals, this.keyComparerGetHashCode, stream.Properties.QueryContainer);

            this.aggregateByKey = generator.Invoke();
        }
 public CompiledPartitionedAfaPipe_SingleEvent(Streamable <TKey, TRegister> stream, IStreamObserver <TKey, TRegister> observer, object afa, long maxDuration)
     : base(stream, observer, afa, maxDuration)
 {
     if (!this.IsSyncTimeSimultaneityFree)
     {
         var comparer        = stream.Properties.KeyEqualityComparer;
         var equalsFunc      = comparer.GetEqualsExpr().Compile();
         var getHashCodeFunc = comparer.GetGetHashCodeExpr().Compile();
         this.seenEvent       = comparer.CreateFastDictionary2Generator <TKey, byte>(10, equalsFunc, getHashCodeFunc, stream.Properties.QueryContainer).Invoke();
         this.tentativeOutput = new FastDictionary2 <TPartitionKey, FastMap <OutputEvent <TKey, TRegister> > >();
     }
 }
Example #5
0
        private static ActiveEvent RemoveOne(FastDictionary2 <KHP, List <ActiveEvent> > events, KHP key)
        {
            if (!events.Lookup(key, out int indx))
            {
                throw new InvalidOperationException("Can't remove if it's not already there!");
            }

            var lst = events.entries[indx].value;
            var rv  = lst[0];

            lst.RemoveAt(0);
            return(rv);
        }
Example #6
0
        private static void InsertOrAppend <K, V>(FastDictionary2 <K, List <V> > events, K key, V value)
        {
            List <V> lst;

            if (events.Lookup(key, out int indx))
            {
                lst = events.entries[indx].value;
                lst.Add(value);
            }
            else
            {
                lst = new List <V>();
                events.Insert(key, lst);
                lst.Add(value);
            }
        }
Example #7
0
        private static ActiveEventExt RemoveOne(FastDictionary2 <KHP, List <ActiveEventExt> > events, KHP key, long startMatch)
        {
            if (!events.Lookup(key, out int indx))
            {
                throw new InvalidOperationException("Can't remove if it's not already there!");
            }

            var lst       = events.entries[indx].value;
            var itemIndex = lst.FindIndex(s => s.Start == startMatch);

            if (itemIndex > -1)
            {
                var item = lst[itemIndex];
                lst.RemoveAt(itemIndex);
                return(item);
            }
            throw new InvalidOperationException("Can't remove if it's not in the item list!");
        }
Example #8
0
        public GroupedWindowPipe(
            GroupedWindowStreamable <TKey, TInput, TState, TOutput, TResult> stream,
            IStreamObserver <Empty, TResult> observer)
            : base(stream, observer)
        {
            this.aggregate         = stream.Aggregate;
            this.initialStateExpr  = this.aggregate.InitialState();
            this.initialState      = this.initialStateExpr.Compile();
            this.accumulateExpr    = this.aggregate.Accumulate();
            this.accumulate        = this.accumulateExpr.Compile();
            this.deaccumulateExpr  = this.aggregate.Deaccumulate();
            this.deaccumulate      = this.deaccumulateExpr.Compile();
            this.computeResultExpr = this.aggregate.ComputeResult();
            this.computeResult     = this.computeResultExpr.Compile();

            var comparer = EqualityComparerExpression <TKey> .Default;

            this.keyComparerEqualsExpr      = comparer.GetEqualsExpr();
            this.keyComparerEquals          = EqualityComparerExpression <TKey> .DefaultEqualsFunction;
            this.keyComparerGetHashCodeExpr = comparer.GetGetHashCodeExpr();
            this.keyComparerGetHashCode     = EqualityComparerExpression <TKey> .DefaultGetHashCodeFunction;

            this.keySelectorExpr         = stream.KeySelector;
            this.keySelector             = this.keySelectorExpr.Compile();
            this.finalResultSelectorExpr = stream.ResultSelector;
            this.finalResultSelector     = this.finalResultSelectorExpr.Compile();

            this.pool = MemoryManager.GetMemoryPool <Empty, TResult>(false);
            this.pool.Get(out this.batch);
            this.batch.Allocate();

            this.aggregateByKey = comparer.CreateFastDictionary2Generator <TKey, HeldState <TState> >(1, this.keyComparerEquals, this.keyComparerGetHashCode, stream.Properties.QueryContainer).Invoke();
            this.heldAggregates = comparer.CreateFastDictionaryGenerator <TKey, HeldState <TState> >(1, this.keyComparerEquals, this.keyComparerGetHashCode, stream.Properties.QueryContainer).Invoke();

            this.isUngrouped   = typeof(TKey) == typeof(Empty);
            this.errorMessages = stream.ErrorMessages;
        }