Example #1
0
        internal static OrderByEnumerable <TItem, TKey, TEnumerable, TEnumerator, SingleComparerAscending <TItem, TKey> > OrderByImpl <TItem, TKey, TEnumerable, TEnumerator>(ref TEnumerable source, Func <TItem, TKey> keySelector, IComparer <TKey> comparer)
            where TEnumerable : struct, IStructEnumerable <TItem, TEnumerator>
            where TEnumerator : struct, IStructEnumerator <TItem>
        {
            comparer = comparer ?? Comparer <TKey> .Default;
            var bridge = new SingleComparerAscending <TItem, TKey>(keySelector, comparer);

            return(new OrderByEnumerable <TItem, TKey, TEnumerable, TEnumerator, SingleComparerAscending <TItem, TKey> >(ref source, ref bridge));
        }
Example #2
0
            > ThenByImpl <TItem, TFirstKey, TComparer, TOuterEnumerable, TOuterEnumerator, TInnerEnumerable, TInnerEnumerator, TSecondKey>(
            ref TOuterEnumerable source,
            Func <TItem, TSecondKey> keySelector,
            IComparer <TSecondKey> comparer
            )
            where TOuterEnumerable : struct, IStructEnumerable <TItem, TOuterEnumerator>, IHasComparer <TItem, TFirstKey, TComparer, TInnerEnumerable, TInnerEnumerator>
            where TOuterEnumerator : struct, IStructEnumerator <TItem>
            where TInnerEnumerable : struct, IStructEnumerable <TItem, TInnerEnumerator>
            where TInnerEnumerator : struct, IStructEnumerator <TItem>
            where TComparer : struct, IStructComparer <TItem, TFirstKey>
        {
            var leftComparer  = source.GetComparer();
            var rightComparer = new SingleComparerAscending <TItem, TSecondKey>(keySelector, comparer ?? Comparer <TSecondKey> .Default);
            var newComparer   = new CompoundComparer <TItem, TFirstKey, TComparer, TSecondKey, SingleComparerAscending <TItem, TSecondKey> >(ref leftComparer, ref rightComparer);

            var inner = source.GetInnerEnumerable();

            return(new OrderByEnumerable <TItem, CompoundKey <TFirstKey, TSecondKey>, TInnerEnumerable, TInnerEnumerator, CompoundComparer <TItem, TFirstKey, TComparer, TSecondKey, SingleComparerAscending <TItem, TSecondKey> > >(ref inner, ref newComparer));
        }