private int[] GetOrderedIndexArray(EnumerableSorted <TSource, TKey> orderCriteriaHead)
            {
                //@todo: re-implement List<> as lightweight, make Sort() a utility method
                //@todo: write own utilities for Enumerable.Range remove reliance to Linq utilities
                List <int> map = new List <int>(Enumerable.Range(0, sourceList.Count));

                map.Sort(orderCriteriaHead);
                return(map.ToArray());
            }
        public EnumerableOrderBy(IEnumerable <TSource> source, Func <TSource, TKey> keySelector, bool decending, IComparer <TKey> comparer)
        {
            if (source == null)
            {
                throw new ArgumentNullException("'source' can't be null");
            }

            this.source = source;
            orderRule   = new EnumerableSorted <TSource, TKey>(keySelector, decending, comparer, this);
        }