コード例 #1
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 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);
 }
コード例 #2
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 public static IBTreeRange Intersect(BTreeRangeUnion union, BTreeRangeSingle single
     )
 {
     var collection = NewBTreeRangeSingleCollection();
     CollectIntersections(collection, union, single);
     return ToRange(collection);
 }
コード例 #3
0
        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));
        }
コード例 #4
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 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);
 }
コード例 #5
0
        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));
        }
コード例 #6
0
        public static IBTreeRange Intersect(BTreeRangeUnion union, BTreeRangeSingle single
                                            )
        {
            SortedCollection4 collection = NewBTreeRangeSingleCollection();

            CollectIntersections(collection, union, single);
            return(ToRange(collection));
        }
コード例 #7
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 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));
         }
     }
 }
コード例 #8
0
        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));
        }
コード例 #9
0
        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));
                }
            }
        }
コード例 #10
0
 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 }));
 }
コード例 #11
0
 private static BTreeRangeSingle Merge(BTreeRangeSingle range1, BTreeRangeSingle range2
                                       )
 {
     return(range1.NewBTreeRangeSingle(BTreePointer.Min(range1.First(), range2.First()
                                                        ), BTreePointer.Max(range1.End(), range2.End())));
 }
コード例 #12
0
 public BTreeRangeSingleIntersect(BTreeRangeSingle single) : base(single)
 {
 }
コード例 #13
0
 protected override IBTreeRange Execute(BTreeRangeSingle range)
 {
     return BTreeAlgebra.Intersect(_union, range);
 }
コード例 #14
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 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});
 }
コード例 #15
0
 protected override IBTreeRange Execute(BTreeRangeSingle single)
 {
     return BTreeAlgebra.Union(_single, single);
 }
コード例 #16
0
 public BTreeRangeSingleOperation(BTreeRangeSingle single)
 {
     _single = single;
 }
コード例 #17
0
ファイル: BTreeRangeOperation.cs プロジェクト: masroore/db4o
 public void Visit(BTreeRangeSingle single)
 {
     _resultingRange = Execute(single);
 }
コード例 #18
0
ファイル: BTreeRangeOperation.cs プロジェクト: masroore/db4o
 protected abstract IBTreeRange Execute(BTreeRangeSingle single);
コード例 #19
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 private static bool CanBeMerged(BTreeRangeSingle range1, BTreeRangeSingle range2)
 {
     return range1.Overlaps(range2) || range1.Adjacent(range2);
 }
コード例 #20
0
ファイル: BTreeAlgebra.cs プロジェクト: masroore/db4o
 private static BTreeRangeSingle Merge(BTreeRangeSingle range1, BTreeRangeSingle range2
     )
 {
     return range1.NewBTreeRangeSingle(BTreePointer.Min(range1.First(), range2.First()
         ), BTreePointer.Max(range1.End(), range2.End()));
 }
コード例 #21
0
 private static bool CanBeMerged(BTreeRangeSingle range1, BTreeRangeSingle range2)
 {
     return(range1.Overlaps(range2) || range1.Adjacent(range2));
 }
コード例 #22
0
ファイル: BTreeRangeOperation.cs プロジェクト: pondyond/db4o
 public void Visit(BTreeRangeSingle single)
 {
     _resultingRange = Execute(single);
 }
コード例 #23
0
 public BTreeRangeSingleUnion(BTreeRangeSingle single) : base(single)
 {
 }
コード例 #24
0
 public BTreeRangeKeyIterator(BTreeRangeSingle range) : base(range)
 {
 }
コード例 #25
0
 public BTreeRangeSingleOperation(BTreeRangeSingle single)
 {
     _single = single;
 }
コード例 #26
0
 public BTreeRangeSingleUnion(BTreeRangeSingle single) : base(single)
 {
 }
コード例 #27
0
 public BTreeRangePointerIterator(BTreeRangeSingle range) : base(range)
 {
 }
コード例 #28
0
 public BTreeRangeKeyIterator(BTreeRangeSingle range) : base(range)
 {
 }
コード例 #29
0
 public BTreeRangeSingleIntersect(BTreeRangeSingle single) : base(single)
 {
 }
コード例 #30
0
ファイル: BTreeRangeOperation.cs プロジェクト: pondyond/db4o
 protected abstract IBTreeRange Execute(BTreeRangeSingle single);
コード例 #31
0
 protected override IBTreeRange Execute(BTreeRangeSingle range)
 {
     return(BTreeAlgebra.Intersect(_union, range));
 }
コード例 #32
0
 protected override IBTreeRange Execute(BTreeRangeSingle single)
 {
     return(BTreeAlgebra.Union(_single, single));
 }
コード例 #33
0
 public BTreeRangePointerIterator(BTreeRangeSingle range) : base(range)
 {
 }