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(); }
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> > >(); } }
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); }
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); } }
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!"); }
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; }