Pipe
.Pipe() concatenates two providers into one that executes both, feeds output of first as input for second. (namespace Avalanche.Utilities.Provider, Avalanche.Utilities.dll)
IProvider<double, double> squareProvider = Providers.Func((double x) => x * x);
IProvider<double, double> squareRootProvider = Providers.Func((double x) => Math.Sqrt(x));
IProvider<double, double> provider = squareProvider.Pipe(squareRootProvider);
WriteLine(provider[10]); // -> "10"
Providers.EnumerablePipe(providers, distintValues, comparer) concatenates results of enumerable providers.
// 0,1,2,3,... provider
IProvider<int, IEnumerable<int>> indicesProvider = Providers.Func<int, IEnumerable<int>>(count => Enumerable.Range(0, count));
// 10,10,10,10,,... provider
IProvider<int, IEnumerable<int>> repeatProvider = Providers.Func<int, IEnumerable<int>>(value => Enumerable.Repeat(value, 5));
//
IProvider<int, IEnumerable<int>>[] providers = { indicesProvider, repeatProvider };
// Decorate to concat results
IProvider<int, IEnumerable<int>> concatProvider = Providers.EnumerablePipe<int, int>(providers, distinctValues: false);
// "0, 1, 2, 3, 3, 3, 3, 3"
WriteLine(string.Join(", ", concatProvider[3]));
Full Example
Full example
using System;
using System.Collections.Generic;
using System.Linq;
using Avalanche.Service;
using Avalanche.Utilities.Provider;
using static System.Console;
class provider_pipe
{
public static void Run()
{
{
// <01>
IProvider<double, double> squareProvider = Providers.Func((double x) => x * x);
IProvider<double, double> squareRootProvider = Providers.Func((double x) => Math.Sqrt(x));
IProvider<double, double> provider = squareProvider.Pipe(squareRootProvider);
WriteLine(provider[10]); // -> "10"
// </01>
}
{
// <02>
// 0,1,2,3,... provider
IProvider<int, IEnumerable<int>> indicesProvider = Providers.Func<int, IEnumerable<int>>(count => Enumerable.Range(0, count));
// 10,10,10,10,,... provider
IProvider<int, IEnumerable<int>> repeatProvider = Providers.Func<int, IEnumerable<int>>(value => Enumerable.Repeat(value, 5));
//
IProvider<int, IEnumerable<int>>[] providers = { indicesProvider, repeatProvider };
// Decorate to concat results
IProvider<int, IEnumerable<int>> concatProvider = Providers.EnumerablePipe<int, int>(providers, distinctValues: false);
// "0, 1, 2, 3, 3, 3, 3, 3"
WriteLine(string.Join(", ", concatProvider[3]));
// </02>
}
}
}