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()); }
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)); }
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();
internal IEnumerable <Range <T> > GetMergedRanges() => _hasRangesToMerge ? MergeRangesNoKeyCore(SubRanges) : SubRanges.Select(r => r.WithoutKey());
public CompositeRange <T> WithoutKeys() => IsEmpty ? CompositeRange <T> .Empty : SubRanges.Select(s => s.WithoutKey()).ToCompositeRange();
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));
public CompositeRange <T2, TKey> WithValues <T2>( [NotNull, InstantHandle] Func <T, T2> newValueSelector) => IsEmpty ? CompositeRange <T2, TKey> .Empty : SubRanges.Select(s => s.WithValues(newValueSelector)).ToCompositeRange();
private IEnumerable <Range <T> > GetMergedRanges() => _hasRangesToMerge ? MergeRangesCore() : SubRanges.Select(r => r.WithoutKey());