Exemplo n.º 1
0
        public static TAcc Transduce <TAcc, TIn, TOut>(this IEnumerable <TIn> source, ITransducer <TIn, TOut> transducer, Func <TAcc, TOut, TAcc> reducer, TAcc seed)
        {
            var sourceEnum = source.GetEnumerator();
            var status     = new ReductionStatus();
            var res        = seed;
            var red        = transducer.Transform(status, reducer);

            while (!status.Complete && sourceEnum.MoveNext())
            {
                res = red(res, sourceEnum.Current);
            }
            return(res);
        }
Exemplo n.º 2
0
        public static IObservable <TAcc> Transduce <TAcc, TIn, TOut>(this IObservable <TIn> source, ITransducer <TIn, TOut> transducer, Func <TAcc, TOut, TAcc> reducer, TAcc seed)
        {
            var status = new ReductionStatus();
            var res    = seed;
            var red    = transducer.Transform(status, reducer);

            return(new AnonymousObservable <TAcc>(observer => source.Subscribe(el => {
                if (status.Complete)
                {
                    observer.OnNext(res);
                    observer.OnCompleted();
                    return;
                }
                res = red(res, el);
            }, observer.OnError, () => { observer.OnNext(res); observer.OnCompleted(); })));
        }
Exemplo n.º 3
0
        public static IObservable <TOut> Transduce <TIn, TOut>(this IObservable <TIn> source, ITransducer <TIn, TOut> transducer)
        {
            var status  = new ReductionStatus();
            var reducer = transducer.Transform <Optional <TOut> >(status, Utils.Enumerator);

            return(new AnonymousObservable <TOut>(observer => source.Subscribe(el => {
                if (status.Complete)
                {
                    observer.OnCompleted();
                    return;
                }
                var res = reducer(new Optional <TOut>(), el);
                if (res.HasValue)
                {
                    observer.OnNext(res.Value);
                }
            }, observer.OnError, observer.OnCompleted)));
        }
Exemplo n.º 4
0
        public static IEnumerable <TOut> Transduce <TIn, TOut>(this IEnumerable <TIn> source, ITransducer <TIn, TOut> transducer)
        {
            var sourceEnum = source.GetEnumerator();
            var status     = new ReductionStatus();
            var red        = transducer.Transform <Optional <TOut> >(status, Utils.Enumerator);

            while (sourceEnum.MoveNext())
            {
                var res = red(new Optional <TOut>(), sourceEnum.Current);
                if (status.Complete)
                {
                    break;
                }
                if (res.HasValue)
                {
                    yield return(res.Value);
                }
            }
        }
Exemplo n.º 5
0
 public Func <TAcc, TIn, TAcc> Transform <TAcc>(ReductionStatus status, Func <TAcc, TOut, TAcc> reducer)
 {
     return(_transducer1.Transform(status, _transducer2.Transform(status, reducer)));
 }