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(BTreeRangeUnion union, BTreeRangeSingle single ) { var collection = NewBTreeRangeSingleCollection(); CollectIntersections(collection, union, single); return ToRange(collection); }
public static IBTreeRange Intersect(BTreeRangeUnion union, BTreeRangeSingle single ) { SortedCollection4 collection = NewBTreeRangeSingleCollection(); CollectIntersections(collection, union, single); return(ToRange(collection)); }
public static IBTreeRange Union(BTreeRangeUnion union1, BTreeRangeUnion union2) { var ranges = union1.Ranges(); IBTreeRange merged = union2; while (ranges.MoveNext()) { merged = merged.Union((IBTreeRange) ranges.Current); } return merged; }
public static IBTreeRange Intersect(BTreeRangeUnion union1, BTreeRangeUnion union2 ) { var collection = NewBTreeRangeSingleCollection(); var ranges = union1.Ranges(); while (ranges.MoveNext()) { var current = (BTreeRangeSingle) ranges.Current; CollectIntersections(collection, union2, current); } 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)); } } }
protected override IBTreeRange Execute(BTreeRangeUnion union) { return BTreeAlgebra.Union(union, _single); }
public BTreeRangeUnionOperation(BTreeRangeUnion union) { _union = union; }
protected override IBTreeRange Execute(BTreeRangeUnion union) { return(BTreeAlgebra.Intersect(_union, union)); }
public BTreeRangeUnionIntersect(BTreeRangeUnion union) : base(union) { }
protected override IBTreeRange Execute(BTreeRangeUnion union) { return BTreeAlgebra.Union(_union, union); }
public BTreeRangeUnionUnion(BTreeRangeUnion union) : base(union) { }
protected abstract IBTreeRange Execute(BTreeRangeUnion union);
public void Visit(BTreeRangeUnion union) { _resultingRange = Execute(union); }