public static IBTreeRange Intersect(BTreeRangeSingle single1, BTreeRangeSingle single2 ) { var first = BTreePointer.Max(single1.First(), single2.First()); var end = BTreePointer.Min(single1.End(), single2.End()); return single1.NewBTreeRangeSingle(first, end); }
public static IBTreeRange Intersect(BTreeRangeUnion union, BTreeRangeSingle single ) { var collection = NewBTreeRangeSingleCollection(); CollectIntersections(collection, union, single); return ToRange(collection); }
public static IBTreeRange Union(BTreeRangeUnion union, BTreeRangeSingle single) { if (single.IsEmpty()) { return(union); } SortedCollection4 sorted = NewBTreeRangeSingleCollection(); sorted.Add(single); BTreeRangeSingle range = single; IEnumerator ranges = union.Ranges(); while (ranges.MoveNext()) { BTreeRangeSingle current = (BTreeRangeSingle)ranges.Current; if (CanBeMerged(current, range)) { sorted.Remove(range); range = Merge(current, range); sorted.Add(range); } else { sorted.Add(current); } } return(ToRange(sorted)); }
public static IBTreeRange Union(BTreeRangeUnion union, BTreeRangeSingle single) { if (single.IsEmpty()) { return union; } var sorted = NewBTreeRangeSingleCollection(); sorted.Add(single); var range = single; var ranges = union.Ranges(); while (ranges.MoveNext()) { var current = (BTreeRangeSingle) ranges.Current; if (CanBeMerged(current, range)) { sorted.Remove(range); range = Merge(current, range); sorted.Add(range); } else { sorted.Add(current); } } return ToRange(sorted); }
public static IBTreeRange Intersect(BTreeRangeSingle single1, BTreeRangeSingle single2 ) { BTreePointer first = BTreePointer.Max(single1.First(), single2.First()); BTreePointer end = BTreePointer.Min(single1.End(), single2.End()); return(single1.NewBTreeRangeSingle(first, end)); }
public static IBTreeRange Intersect(BTreeRangeUnion union, BTreeRangeSingle single ) { SortedCollection4 collection = NewBTreeRangeSingleCollection(); CollectIntersections(collection, union, single); return(ToRange(collection)); }
private static void CollectIntersections(SortedCollection4 collection, BTreeRangeUnion union, BTreeRangeSingle single) { var ranges = union.Ranges(); while (ranges.MoveNext()) { var current = (BTreeRangeSingle) ranges.Current; if (single.Overlaps(current)) { collection.Add(single.Intersect(current)); } } }
public static IBTreeRange Intersect(BTreeRangeUnion union1, BTreeRangeUnion union2 ) { SortedCollection4 collection = NewBTreeRangeSingleCollection(); IEnumerator ranges = union1.Ranges(); while (ranges.MoveNext()) { BTreeRangeSingle current = (BTreeRangeSingle)ranges.Current; CollectIntersections(collection, union2, current); } return(ToRange(collection)); }
private static void CollectIntersections(SortedCollection4 collection, BTreeRangeUnion union, BTreeRangeSingle single) { IEnumerator ranges = union.Ranges(); while (ranges.MoveNext()) { BTreeRangeSingle current = (BTreeRangeSingle)ranges.Current; if (single.Overlaps(current)) { collection.Add(single.Intersect(current)); } } }
public static IBTreeRange Union(BTreeRangeSingle single1, BTreeRangeSingle single2 ) { if (single1.IsEmpty()) { return(single2); } if (single2.IsEmpty()) { return(single1); } if (CanBeMerged(single1, single2)) { return(Merge(single1, single2)); } return(new BTreeRangeUnion(new BTreeRangeSingle[] { single1, single2 })); }
private static BTreeRangeSingle Merge(BTreeRangeSingle range1, BTreeRangeSingle range2 ) { return(range1.NewBTreeRangeSingle(BTreePointer.Min(range1.First(), range2.First() ), BTreePointer.Max(range1.End(), range2.End()))); }
public BTreeRangeSingleIntersect(BTreeRangeSingle single) : base(single) { }
protected override IBTreeRange Execute(BTreeRangeSingle range) { return BTreeAlgebra.Intersect(_union, range); }
public static IBTreeRange Union(BTreeRangeSingle single1, BTreeRangeSingle single2 ) { if (single1.IsEmpty()) { return single2; } if (single2.IsEmpty()) { return single1; } if (CanBeMerged(single1, single2)) { return Merge(single1, single2); } return new BTreeRangeUnion(new[] {single1, single2}); }
protected override IBTreeRange Execute(BTreeRangeSingle single) { return BTreeAlgebra.Union(_single, single); }
public BTreeRangeSingleOperation(BTreeRangeSingle single) { _single = single; }
public void Visit(BTreeRangeSingle single) { _resultingRange = Execute(single); }
protected abstract IBTreeRange Execute(BTreeRangeSingle single);
private static bool CanBeMerged(BTreeRangeSingle range1, BTreeRangeSingle range2) { return range1.Overlaps(range2) || range1.Adjacent(range2); }
private static BTreeRangeSingle Merge(BTreeRangeSingle range1, BTreeRangeSingle range2 ) { return range1.NewBTreeRangeSingle(BTreePointer.Min(range1.First(), range2.First() ), BTreePointer.Max(range1.End(), range2.End())); }
private static bool CanBeMerged(BTreeRangeSingle range1, BTreeRangeSingle range2) { return(range1.Overlaps(range2) || range1.Adjacent(range2)); }
public BTreeRangeSingleUnion(BTreeRangeSingle single) : base(single) { }
public BTreeRangeKeyIterator(BTreeRangeSingle range) : base(range) { }
public BTreeRangePointerIterator(BTreeRangeSingle range) : base(range) { }
protected override IBTreeRange Execute(BTreeRangeSingle range) { return(BTreeAlgebra.Intersect(_union, range)); }
protected override IBTreeRange Execute(BTreeRangeSingle single) { return(BTreeAlgebra.Union(_single, single)); }