예제 #1
0
                public Terminator <TReduction> Complete(TReduction reduction)
                {
                    var terminator = Next.Complete(reduction);

                    var terminated = CheckTermination(terminator);

                    return(Reduction(terminator.Value, terminated: terminated));
                }
예제 #2
0
        /// <summary>
        /// Pulls values from the supplied TextReader and passes them into the supplied reducer.
        /// </summary>
        /// <typeparam name="TReduction">The type of the reduction.</typeparam>
        /// <param name="reader">The reader.</param>
        /// <param name="reduction">The reduction.</param>
        /// <param name="reducer">The reducer.</param>
        /// <returns>A wrapped reduction.</returns>
        public static Terminator <TReduction> Reduce <TReduction>(
            this TextReader reader,
            TReduction reduction,
            IReducer <TReduction, string> reducer)
        {
            var terminator = Terminator.Reduction(reduction);

            for (var value = reader.ReadLine(); value != null; value = reader.ReadLine())
            {
                terminator = reducer.Invoke(terminator.Value, value);
                if (terminator.IsTerminated)
                {
                    return(terminator);
                }
            }

            return(reducer.Complete(reduction));
        }
예제 #3
0
        /// <summary>
        /// Passes elements from an IEnumerable into the supplied reducer.
        /// </summary>
        /// <typeparam name="TInput">The type of the input.</typeparam>
        /// <typeparam name="TReduction">The type of the reduction.</typeparam>
        /// <param name="input">The input.</param>
        /// <param name="reduction">The reduction.</param>
        /// <param name="reducer">The reducer.</param>
        /// <returns>A terminated reduction.</returns>
        public static Terminator <TReduction> Reduce <TInput, TReduction>(
            this IEnumerable <TInput> input,
            TReduction reduction,
            IReducer <TReduction, TInput> reducer)
        {
            var terminator = Terminator.Reduction(reduction);

            foreach (var value in input)
            {
                terminator = reducer.Invoke(terminator.Value, value);

                if (terminator.IsTerminated)
                {
                    return(terminator);
                }
            }

            return(reducer.Complete(terminator.Value));
        }
예제 #4
0
 public Terminator <Reduction> Complete(Reduction reduction) => next.Complete(reduction);
예제 #5
0
 public Terminator <TReduction> Complete(TReduction reduction) => Next.Complete(reduction);
예제 #6
0
 public Task <Terminator <TReduction> > CompleteAsync(TReduction reduction) =>
 Task.FromResult(Reducer.Complete(reduction));