예제 #1
0
        internal static RangeSeries <TKey, TValue, TCursor> Range <TKey, TValue, TCursor>(
            this RangeSeries <TKey, TValue, TCursor> series,
            Opt <TKey> startKey, Opt <TKey> endKey, bool startInclusive = true, bool endInclusive = true)
            where TCursor : ICursor <TKey, TValue>
        {
            // adjust range to efficiently nest range series, e.g. After(x).Before(y)

            var newStartKey = Opt <TKey> .LargerOrMissing(series.StartKey, startKey, series.Comparer);

            var newStartInclusive = newStartKey.Equals(startKey) ? startInclusive : series.StartInclusive;

            var newEndKey = Opt <TKey> .SmallerOrMissing(series.EndKey, endKey, series.Comparer);

            var newEndInclusive = newEndKey.Equals(endKey) ? endInclusive : series.EndInclusive;

            return(new RangeSeries <TKey, TValue, TCursor>(series,
                                                           newStartKey, newEndKey, newStartInclusive, newEndInclusive));
        }
예제 #2
0
        internal static Series <TKey, TValue, Range <TKey, TValue, TCursor> > Range <TKey, TValue, TCursor>(
            this Series <TKey, TValue, Range <TKey, TValue, TCursor> > series,
            Opt <TKey> startKey, Opt <TKey> endKey, bool startInclusive = true, bool endInclusive = true)
            where TCursor : ISpecializedCursor <TKey, TValue, TCursor>
        {
            // adjust range to efficiently nest range series, e.g. After(x).Before(y)

            var newStartKey = Opt <TKey> .LargerOrMissing(series._cursor.StartKey, startKey, series.Comparer);

            var newStartInclusive = newStartKey.Equals(startKey) ? startInclusive : series._cursor.StartInclusive;

            var newEndKey = Opt <TKey> .SmallerOrMissing(series._cursor.EndKey, endKey, series.Comparer);

            var newEndInclusive = newEndKey.Equals(endKey) ? endInclusive : series._cursor.EndInclusive;

            var cursor = new Range <TKey, TValue, TCursor>(
                series._cursor._cursor, newStartKey, newEndKey, newStartInclusive, newEndInclusive);

            return(cursor.Source);
        }