Beispiel #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StreamEnumerable{T}"/> class.
 /// </summary>
 /// <param name="stream">Stream to enumerate.</param>
 /// <param name="predicate">Predicate (filter) function.</param>
 public StreamEnumerable(IProducer <T> stream, Func <T, bool> predicate = null)
 {
     this.enumerator = new StreamEnumerator(predicate ?? (_ => true));
     stream.Do(x =>
     {
         this.enumerator.Queue.Enqueue(x);
         this.enumerator.Enqueued.Set();
     });
 }
Beispiel #2
0
            /// <summary>
            /// Initializes a new instance of the <see cref="StreamEnumerable{T}"/> class.
            /// </summary>
            /// <param name="source">The source stream to enumerate.</param>
            /// <param name="predicate">Predicate (filter) function.</param>
            /// <param name="deliveryPolicy">An optional delivery policy.</param>
            public StreamEnumerable(IProducer <T> source, Func <T, bool> predicate = null, DeliveryPolicy deliveryPolicy = null)
            {
                this.enumerator = new StreamEnumerator(predicate ?? (_ => true));

                var processor = new Processor <T, T>(
                    source.Out.Pipeline,
                    (d, e, s) =>
                {
                    this.enumerator.Queue.Enqueue(d);
                    this.enumerator.Update.Set();
                });

                source.PipeTo(processor, deliveryPolicy);
                processor.In.Unsubscribed += _ => this.enumerator.Update.Set();
            }
Beispiel #3
0
            /// <summary>
            /// Initializes a new instance of the <see cref="StreamEnumerable{T}"/> class.
            /// </summary>
            /// <param name="source">The source stream to enumerate.</param>
            /// <param name="predicate">Predicate (filter) function.</param>
            /// <param name="deliveryPolicy">An optional delivery policy.</param>
            /// <param name="name">An optional name for this operator.</param>
            public StreamEnumerable(IProducer <T> source, Func <T, bool> predicate = null, DeliveryPolicy <T> deliveryPolicy = null, string name = nameof(StreamEnumerable <T>))
            {
                this.enumerator = new StreamEnumerator(predicate ?? (_ => true));

                var processor = new Processor <T, T>(
                    source.Out.Pipeline,
                    (d, e, s) =>
                {
                    this.enumerator.Queue.Enqueue(d.DeepClone());
                    this.enumerator.Enqueued.Set();
                },
                    name: name);

                source.PipeTo(processor, deliveryPolicy);
                processor.In.Unsubscribed += _ => this.enumerator.Closed.Set();
            }