public bool HasIntersection(

            #region T4-dont-replace
            Range <T> other
            #endregion

            ) =>
        ContainingRange.HasIntersection(other) &&
        SubRanges.Any(r => r.HasIntersection(other));
        public CompositeRange <T> MakeInclusive(
            [NotNull, InstantHandle] Func <T, T> fromValueSelector,
            [NotNull, InstantHandle] Func <T, T> toValueSelector)
        {
            if (IsEmpty)
            {
                return(this);
            }

            return(SubRanges
                   .Select(r => r.MakeInclusive(fromValueSelector, toValueSelector))
                   .ToCompositeRange());
        }
Exemple #3
0
        public CompositeRange <T, TKey> MakeExclusive(
            [InstantHandle] Func <T, T> fromValueSelector,
            [InstantHandle] Func <T, T> toValueSelector)
        {
            if (IsEmpty)
            {
                return(this);
            }

            return(SubRanges
                   .Select(r => r.MakeExclusive(fromValueSelector, toValueSelector))
                   .Where(r => r.IsNotEmpty)
                   .ToCompositeRange());
        }
        public CompositeRange <T> ExtendTo(RangeBoundaryTo <T> to)
        {
            if (IsEmpty || to.IsEmpty || to <= ContainingRange.To)
            {
                return(this);
            }

            var ranges = SubRanges.ToArray();

            for (var i = ranges.Length - 1; i >= 0; i--)
            {
                if (ranges[i].To != ContainingRange.To)
                {
                    break;
                }

                ranges[i] = ranges[i].ExtendTo(to);
            }
            return(new CompositeRange <T>(ranges, UnsafeOverload.RangesAlreadySorted));
        }
        public CompositeRange <T> ExtendFrom(RangeBoundaryFrom <T> from)
        {
            if (IsEmpty || from.IsEmpty || from >= ContainingRange.From)
            {
                return(this);
            }

            var ranges = SubRanges.ToArray();

            for (var i = 0; i < ranges.Length; i++)
            {
                if (ranges[i].From != ContainingRange.From)
                {
                    break;
                }

                ranges[i] = ranges[i].ExtendFrom(from);
            }
            return(new CompositeRange <T>(ranges, UnsafeOverload.RangesAlreadySorted));
        }
Exemple #6
0
        public CompositeRange <T, TKey> Merge()
        {
            if (IsMerged)
            {
                return(this);
            }

            var groups = SubRanges.GroupBy(r => r.Key).ToArray();

            if (groups.Length == 1)
            {
                return(new CompositeRange <T, TKey>(
                           MergeRangesCore(groups[0]),
                           UnsafeOverload.NoEmptyRangesAlreadySortedAndMerged));
            }

            // ReSharper disable once ConvertClosureToMethodGroup
            return(new CompositeRange <T, TKey>(
                       groups.SelectMany(group => MergeRangesCore(group)),
                       UnsafeOverload.NoEmptyRanges));
        }
 public CompositeRange <T, TKey2> WithKeys <TKey2>(TKey2 key) =>
 IsEmpty
                         ? CompositeRange <T, TKey2> .Empty
                         : SubRanges.Select(s => s.WithKey(key)).ToCompositeRange();
Exemple #8
0
 internal IEnumerable <Range <T> > GetMergedRanges() => _hasRangesToMerge
                 ? MergeRangesNoKeyCore(SubRanges)
                 : SubRanges.Select(r => r.WithoutKey());
Exemple #9
0
 public CompositeRange <T> WithoutKeys() =>
 IsEmpty
                         ? CompositeRange <T> .Empty
                         : SubRanges.Select(s => s.WithoutKey()).ToCompositeRange();
Exemple #10
0
 public CompositeRange <T, TKey2> WithKeys <TKey2>(
     [NotNull, InstantHandle] Func <TKey, TKey2> keySelector) =>
 IsEmpty
                                 ? CompositeRange <T, TKey2> .Empty
                                 : SubRanges.Select(s => s.WithKey(keySelector(s.Key))).ToCompositeRange();
 public CompositeRange <T2> WithValues <T2>(
     [NotNull, InstantHandle] Func <T, T2> fromValueSelector,
     [NotNull, InstantHandle] Func <T, T2> toValueSelector) =>
 IsEmpty
                                 ? CompositeRange <T2> .Empty
                                 : SubRanges.Select(s => s.WithValues(fromValueSelector, toValueSelector)).ToCompositeRange();
 public bool HasIntersection <TKey2>(Range <T, TKey2> other) =>
 ContainingRange.HasIntersection(other) &&
 SubRanges.Any(r => r.HasIntersection(other));
 public bool Contains(RangeBoundaryTo <T> other) =>
 ContainingRange.Contains(other) &&
 SubRanges.Any(r => r.Contains(other));
 public bool Contains(T value) =>
 ContainingRange.Contains(value) &&
 SubRanges.Any(r => r.Contains(value));
Exemple #15
0
 public CompositeRange <T2, TKey> WithValues <T2>(
     [NotNull, InstantHandle] Func <T, T2> newValueSelector) =>
 IsEmpty
                                 ? CompositeRange <T2, TKey> .Empty
                                 : SubRanges.Select(s => s.WithValues(newValueSelector)).ToCompositeRange();
Exemple #16
0
 private IEnumerable <Range <T> > GetMergedRanges() => _hasRangesToMerge
                 ? MergeRangesCore()
                 : SubRanges.Select(r => r.WithoutKey());