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)); }
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); }