protected override IStream <Correlated <TOut> > CreateOutputStream(WithPreviousCorrelatedArgs <TIn, TOut> args) { var obs = args.Stream.Observable .Scan <Correlated <TIn>, (FixedQueue <Correlated <TIn> > Queue, TIn[] Items, HashSet <Guid> CorrelationKeys)>((new FixedQueue <Correlated <TIn> >(args.Count), new TIn[] { }, new HashSet <Guid>()), (a, v) => { a.Queue.Enqueue(v); return( a.Queue, a.Queue.ToArray().Reverse().Select(i => i.Row).ToArray(), a.Queue.ToArray().SelectMany(i => i.CorrelationKeys).ToHashSet()); }) .Map(i => new Correlated <TOut> { Row = args.GetResult(i.Items), CorrelationKeys = i.CorrelationKeys }); return(base.CreateUnsortedStream(obs)); }
public WithPreviousCorrelatedStreamNode(string name, WithPreviousCorrelatedArgs <TIn, TOut> args) : base(name, args) { }