namespace MemoryPools.Collections.Linq { public static partial class PoolingEnumerable { // public static IPoolingEnumerable Join( // this IPoolingEnumerable outer, // IPoolingEnumerable inner, // Func outerKeySelector, // Func innerKeySelector, // Func resultSelector) // { // if (outer == null!) // { // throw new ArgumentNullException(nameof(outer)); // } // // if (inner == null!) // { // throw new ArgumentNullException(nameof(inner)); // } // // if (outerKeySelector == null!) // { // throw new ArgumentNullException(nameof(outerKeySelector)); // } // // if (innerKeySelector == null!) // { // throw new ArgumentNullException(nameof(innerKeySelector)); // } // // if (resultSelector == null!) // { // throw new ArgumentNullException(nameof(resultSelector)); // } // // return JoinIterator(outer, inner, outerKeySelector, innerKeySelector, resultSelector, null); // } // // public static IPoolingEnumerable Join( // this IEnumerable outer, // IEnumerable inner, // Func outerKeySelector, // Func innerKeySelector, // Func resultSelector, // IEqualityComparer comparer) // { // if (outer == null!) // { // throw new ArgumentNullException(nameof(outer)); // } // // if (inner == null!) // { // throw new ArgumentNullException(nameof(inner)); // } // // if (outerKeySelector == null!) // { // throw new ArgumentNullException(nameof(outerKeySelector)); // } // // if (innerKeySelector == null!) // { // throw new ArgumentNullException(nameof(innerKeySelector)); // } // // if (resultSelector == null!) // { // throw new ArgumentNullException(nameof(resultSelector)); // } // // return JoinIterator(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer); // } // private static IPoolingEnumerable JoinIterator( // IPoolingEnumerable outer, // IEnumerable inner, // Func outerKeySelector, // Func innerKeySelector, // Func resultSelector, // IEqualityComparer comparer) // { // using (var e = outer.GetEnumerator()) // { // var dict = InternalPool>.Get(); // if (e.MoveNext()) // { // Lookup lookup = Lookup.CreateForJoin(inner, innerKeySelector, comparer); // if (lookup.Count != 0) // { // do // { // TOuter item = e.Current; // Grouping g = lookup.GetGrouping(outerKeySelector(item), create: false); // if (g != null!) // { // int count = g._count; // TInner[] elements = g._elements; // for (int i = 0; i != count; ++i) // { // yield return resultSelector(item, elements[i]); // } // } // } // while (e.MoveNext()); // } // } // } // } } }