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