internal static Consumable <U> PushTransform <T, U>(IEnumerable <T> e, ITransmutation <T, U> transform) { switch (e) { case Consumable <T> consumable: return(consumable.AddTail(transform)); default: return(CreateConsumable(e, transform)); } }
internal static Consumable <U> CreateConsumable <T, U>(IEnumerable <T> e, ITransmutation <T, U> transform) { switch (e) { case T[] array: return(new ConsumableArray <T, T, U>(array, IdentityTransform <T> .Instance, transform)); case List <T> list: return(new ConsumableList <T, T, U>(list, IdentityTransform <T> .Instance, transform)); default: return(new ConsumableEnumerable <T, T, U>(e, IdentityTransform <T> .Instance, transform)); } }
public ConsumableArrayEnumerator(T[] array, ITransmutation <T, TResult> factory) { this.array = array; activity = factory.Compose(this); }
public ConsumableArray(T[] array, ITransmutation <T, U> first, ITransmutation <U, V> second) : base(first, second) => this.array = array;
public ConsumableList(List <T> list, ITransmutation <T, U> first, ITransmutation <U, V> second) : base(first, second) => this.list = list;
public abstract Consumable <U> AddTail <U>(ITransmutation <T, U> transform);
public ConsumableEnumerableEnumerator(IEnumerable <T> enumerable, ITransmutation <T, TResult> factory) { this.enumerable = enumerable; activity = factory.Compose(this);; }
public abstract Consumable <V> ReplaceTail <U, V>(ITransmutation <U, V> selectImpl);
public ConsumableListEnumerator(List <T> list, ITransmutation <T, TResult> factory) { this.list = list; activity = factory.Compose(this); }
public ConsumableSelectMany(Consumable <IEnumerable <T> > enumerable, ITransmutation <T, U> first, ITransmutation <U, V> second) : base(first, second) => this.consumableEnumerable = enumerable;
public static ITransmutation <T, V> Combine <T, U, V>(ITransmutation <T, U> first, ITransmutation <U, V> second) => new CompositionTransform <T, U, V>(first, second);
protected ConsumableWithComposition(ITransmutation <T, U> first, ITransmutation <U, V> second) => (this.first, this.second) = (first, second);
public ConsumableEnumerable(IEnumerable <T> enumerable, ITransmutation <T, U> first, ITransmutation <U, V> second) : base(first, second) => this.enumerable = enumerable;