コード例 #1
0
ファイル: IndexedLeaf.cs プロジェクト: git-thinh/limada
        private IBTreeRange Search()
        {
            IBTreeRange range  = Search(Constraint().GetObject());
            QEBitmap    bitmap = QEBitmap.ForQE(Constraint().Evaluator());

            if (bitmap.TakeGreater())
            {
                if (bitmap.TakeEqual())
                {
                    return(range.ExtendToLast());
                }
                IBTreeRange greater = range.Greater();
                if (bitmap.TakeSmaller())
                {
                    return(greater.Union(range.Smaller()));
                }
                return(greater);
            }
            if (bitmap.TakeSmaller())
            {
                if (bitmap.TakeEqual())
                {
                    return(range.ExtendToFirst());
                }
                return(range.Smaller());
            }
            return(range);
        }
コード例 #2
0
ファイル: BTreeRangeSingle.cs プロジェクト: pondyond/db4o
        public virtual IBTreeRange ExtendToLastOf(IBTreeRange range)
        {
            var rangeImpl = CheckRangeArgument(range
                                               );

            return(NewBTreeRangeSingle(_first, rangeImpl._end));
        }
コード例 #3
0
        protected virtual IBTreeRange Range(int lower, int upper)
        {
            IBTreeRange lowerRange = Search(lower);
            IBTreeRange upperRange = Search(upper);

            return(lowerRange.ExtendToLastOf(upperRange));
        }
コード例 #4
0
            private void EnsureSingleOccurence(Transaction trans, IObjectInfoCollection col)
            {
                IEnumerator i = col.GetEnumerator();

                while (i.MoveNext())
                {
                    IObjectInfo objectInfo = (IObjectInfo)i.Current;
                    if (this.ReflectClass() != this._enclosing.ReflectorFor(trans, objectInfo.GetObject
                                                                                ()))
                    {
                        continue;
                    }
                    object obj        = this.ObjectFor(trans, objectInfo);
                    object fieldValue = this.FieldMetadata().GetOn(trans, obj);
                    if (fieldValue == null)
                    {
                        continue;
                    }
                    IBTreeRange range = this.FieldMetadata().Search(trans, fieldValue);
                    if (range.Size() > 1)
                    {
                        throw new UniqueFieldValueConstraintViolationException(this.ClassMetadata().GetName
                                                                                   (), this.FieldMetadata().GetName());
                    }
                }
            }
コード例 #5
0
        public virtual void TestUnionsMerge()
        {
            IBTreeRange range = Range(3, 3).Union(Range(7, 7)).Union(Range(4, 4));

            AssertIsRangeSingle(range);
            BTreeAssert.AssertRange(new int[] { 3, 4, 7 }, range);
        }
コード例 #6
0
        public virtual void TestIntersectUnionUnion()
        {
            IBTreeRange union1 = Range(3, 3).Union(Range(7, 9));
            IBTreeRange union2 = Range(3, 3).Union(Range(9, 9));

            AssertIntersection(new int[] { 3, 9 }, union1, union2);
        }
コード例 #7
0
ファイル: BTreeRangeUnion.cs プロジェクト: pondyond/db4o
 public virtual IBTreeRange Intersect(IBTreeRange range)
 {
     if (null == range)
     {
         throw new ArgumentNullException();
     }
     return(new BTreeRangeUnionIntersect(this).Dispatch(range));
 }
コード例 #8
0
ファイル: BigSet.cs プロジェクト: git-thinh/limada
 private bool Contains(int id)
 {
     lock (Lock())
     {
         IBTreeRange range = BTree().SearchRange(Transaction(), id);
         return(!range.IsEmpty());
     }
 }
コード例 #9
0
		public static void AssertRange(int[] expectedKeys, IBTreeRange range)
		{
			Assert.IsNotNull(range);
			ExpectingVisitor visitor = ExpectingVisitor.CreateSortedExpectingVisitor(expectedKeys
				);
			TraverseKeys(range, visitor);
			visitor.AssertExpectations();
		}
コード例 #10
0
ファイル: BTreeRangeUnion.cs プロジェクト: masroore/db4o
 public virtual IBTreeRange Intersect(IBTreeRange range)
 {
     if (null == range)
     {
         throw new ArgumentNullException();
     }
     return new BTreeRangeUnionIntersect(this).Dispatch(range);
 }
コード例 #11
0
        private void AssertLastPointer(int searchValue, int expectedValue)
        {
            IBTreeRange  single       = Search(searchValue);
            IBTreeRange  smallerRange = single.Smaller();
            BTreePointer lastPointer  = smallerRange.LastPointer();

            Assert.AreEqual(expectedValue, lastPointer.Key());
        }
コード例 #12
0
        public virtual void TestIntersectSingleUnion()
        {
            IBTreeRange union  = Range(3, 3).Union(Range(7, 9));
            IBTreeRange single = Range(4, 7);

            AssertIntersection(new int[] { 7 }, union, single);
            AssertIntersection(new int[] { 3, 7 }, union, Range(3, 7));
        }
コード例 #13
0
ファイル: BTreeRangeUnion.cs プロジェクト: pondyond/db4o
 public virtual IBTreeRange Union(IBTreeRange other)
 {
     if (null == other)
     {
         throw new ArgumentNullException();
     }
     return(new BTreeRangeUnionUnion(this).Dispatch(other));
 }
コード例 #14
0
		public static void TraverseKeys(IBTreeRange result, IVisitor4 visitor)
		{
			IEnumerator i = result.Keys();
			while (i.MoveNext())
			{
				visitor.Visit(i.Current);
			}
		}
コード例 #15
0
        public static void AssertRange(int[] expectedKeys, IBTreeRange range)
        {
            Assert.IsNotNull(range);
            ExpectingVisitor visitor = ExpectingVisitor.CreateSortedExpectingVisitor(expectedKeys
                                                                                     );

            TraverseKeys(range, visitor);
            visitor.AssertExpectations();
        }
コード例 #16
0
        public static void TraverseKeys(IBTreeRange result, IVisitor4 visitor)
        {
            IEnumerator i = result.Keys();

            while (i.MoveNext())
            {
                visitor.Visit(i.Current);
            }
        }
コード例 #17
0
        private BTreePointer GetPointerForKey(int key)
        {
            IBTreeRange range    = Search(key);
            IEnumerator pointers = range.Pointers();

            Assert.IsTrue(pointers.MoveNext());
            BTreePointer pointer = (BTreePointer)pointers.Current;

            return(pointer);
        }
コード例 #18
0
        protected virtual void AssertFieldIndex(int id)
        {
            IReflectClass claxx = Reflector().ForClass(typeof(TPFieldIndexConsistencyTestCaseBase.Item
                                                              ));
            ClassMetadata classMetadata = FileSession().ClassMetadataForReflectClass(claxx);
            FieldMetadata field         = classMetadata.FieldMetadataForName(IdFieldName);
            IBTreeRange   indexRange    = field.Search(Trans(), id);

            Assert.AreEqual(1, indexRange.Size());
        }
コード例 #19
0
        public static IBTreeRange Union(BTreeRangeUnion union1, BTreeRangeUnion union2)
        {
            IEnumerator ranges = union1.Ranges();
            IBTreeRange merged = union2;

            while (ranges.MoveNext())
            {
                merged = merged.Union((IBTreeRange)ranges.Current);
            }
            return(merged);
        }
コード例 #20
0
 public JoinedLeaf(QCon constraint, IIndexedNodeWithRange leaf1, IBTreeRange range
                   )
 {
     if (null == constraint || null == leaf1 || null == range)
     {
         throw new ArgumentNullException();
     }
     _constraint = constraint;
     _leaf1      = leaf1;
     _range      = range;
 }
コード例 #21
0
ファイル: JoinedLeaf.cs プロジェクト: bvangrinsven/db4o-net
		public JoinedLeaf(QCon constraint, IIndexedNodeWithRange leaf1, IBTreeRange range
			)
		{
			if (null == constraint || null == leaf1 || null == range)
			{
				throw new ArgumentNullException();
			}
			_constraint = constraint;
			_leaf1 = leaf1;
			_range = range;
		}
コード例 #22
0
        public virtual void TestSearchingRemoved()
        {
            int[] keys = new int[] { 3, 4, 7, 9 };
            Add(keys);
            Remove(4);
            IBTreeRange result = Search(4);

            Assert.IsTrue(result.IsEmpty());
            IBTreeRange range = result.Greater();

            BTreeAssert.AssertRange(new int[] { 7, 9 }, range);
        }
コード例 #23
0
        public virtual void TestUnionWithEmptyDoesNotCreateNewRange()
        {
            IBTreeRange range = Range(3, 4);
            IBTreeRange empty = Range(0, 0);

            Assert.AreSame(range, range.Union(empty));
            Assert.AreSame(range, empty.Union(range));
            IBTreeRange union = range.Union(Range(8, 9));

            Assert.AreSame(union, union.Union(empty));
            Assert.AreSame(union, empty.Union(union));
        }
コード例 #24
0
ファイル: BTreeNodeTestCase.cs プロジェクト: danfma/db4o-net
        private BTreeNode Node(int value)
        {
            IBTreeRange range = Search(value);
            IEnumerator i     = range.Pointers();

            i.MoveNext();
            BTreePointer firstPointer = (BTreePointer)i.Current;
            BTreeNode    node         = firstPointer.Node();

            node.DebugLoadFully(SystemTrans());
            return(node);
        }
コード例 #25
0
        public override int AddressForId(int id)
        {
            IBTreeRange range    = _slotTree.SearchRange(Trans(), new IdSlotMapping(id, 0, 0));
            IEnumerator pointers = range.Pointers();

            if (pointers.MoveNext())
            {
                BTreePointer pointer = (BTreePointer)pointers.Current;
                return(((IdSlotMapping)pointer.Key())._address);
            }
            return(0);
        }
コード例 #26
0
        public static void AssertSingleElement(Transaction trans, BTree btree, object element
                                               )
        {
            Assert.AreEqual(1, btree.Size(trans));
            IBTreeRange      result           = btree.SearchRange(trans, element);
            ExpectingVisitor expectingVisitor = new ExpectingVisitor(new object[] { element }
                                                                     );

            BTreeAssert.TraverseKeys(result, expectingVisitor);
            expectingVisitor.AssertExpectations();
            expectingVisitor = new ExpectingVisitor(new object[] { element });
            btree.TraverseKeys(trans, expectingVisitor);
            expectingVisitor.AssertExpectations();
        }
コード例 #27
0
        public virtual void TestUnionsOfUnions()
        {
            IBTreeRange union1 = Range(3, 4).Union(Range(8, 9));

            BTreeAssert.AssertRange(new int[] { 3, 4, 9 }, union1);
            BTreeAssert.AssertRange(new int[] { 3, 4, 7, 9 }, union1.Union(Range(7, 7)));
            IBTreeRange union2 = Range(3, 3).Union(Range(7, 7));

            AssertUnion(new int[] { 3, 4, 7, 9 }, union1, union2);
            AssertIsRangeSingle(union1.Union(union2));
            AssertIsRangeSingle(union2.Union(union1));
            IBTreeRange union3 = Range(3, 3).Union(Range(9, 9));

            AssertUnion(new int[] { 3, 7, 9 }, union2, union3);
        }
コード例 #28
0
 private Db4objects.Db4o.Internal.Btree.BTreeRangeSingle CheckRangeArgument(IBTreeRange
                                                                            range)
 {
     if (null == range)
     {
         throw new ArgumentNullException();
     }
     Db4objects.Db4o.Internal.Btree.BTreeRangeSingle rangeImpl = (Db4objects.Db4o.Internal.Btree.BTreeRangeSingle
                                                                  )range;
     if (Btree() != rangeImpl.Btree())
     {
         throw new ArgumentException();
     }
     return(rangeImpl);
 }
コード例 #29
0
ファイル: BTreeRangeSingle.cs プロジェクト: pondyond/db4o
        private BTreeRangeSingle CheckRangeArgument(IBTreeRange
                                                    range)
        {
            if (null == range)
            {
                throw new ArgumentNullException();
            }
            var rangeImpl = (BTreeRangeSingle
                             )range;

            if (Btree() != rangeImpl.Btree())
            {
                throw new ArgumentException();
            }
            return(rangeImpl);
        }
コード例 #30
0
        private void ExpectKeysSearch(BTree btree, int[] values)
        {
            int lastValue = int.MinValue;

            for (int i = 0; i < values.Length; i++)
            {
                if (values[i] != lastValue)
                {
                    ExpectingVisitor expectingVisitor = ExpectingVisitor.CreateExpectingVisitor(values
                                                                                                [i], IntArrays4.Occurences(values, values[i]));
                    IBTreeRange range = FieldIndexKeySearch(Trans(), btree, values[i]);
                    BTreeAssert.TraverseKeys(range, new _IVisitor4_62(expectingVisitor));
                    expectingVisitor.AssertExpectations();
                    lastValue = values[i];
                }
            }
        }
コード例 #31
0
        private void ExpectKeysSearch(Transaction trans, BTree btree, int[] keys)
        {
            int lastValue = int.MinValue;

            for (int i = 0; i < keys.Length; i++)
            {
                if (keys[i] != lastValue)
                {
                    ExpectingVisitor expectingVisitor = ExpectingVisitor.CreateExpectingVisitor(keys[
                                                                                                    i], IntArrays4.Occurences(keys, keys[i]));
                    IBTreeRange range = btree.SearchRange(trans, keys[i]);
                    BTreeAssert.TraverseKeys(range, expectingVisitor);
                    expectingVisitor.AssertExpectations();
                    lastValue = keys[i];
                }
            }
        }
コード例 #32
0
        private IBTreeRange SearchRange(Transaction trans, IPreparedComparison preparedComparison
                                        )
        {
            EnsureActive(trans);
            // TODO: Optimize the following.
            //       Part of the search operates against the same nodes.
            //       As long as the bounds are on one node, the search
            //       should walk the nodes in one go.
            BTreeNodeSearchResult start = SearchLeaf(trans, preparedComparison, SearchTarget.
                                                     Lowest);
            BTreeNodeSearchResult end = SearchLeaf(trans, preparedComparison, SearchTarget.Highest
                                                   );
            IBTreeRange range = start.CreateIncludingRange(end);

            ConvertCacheEvictedNodesToReadMode();
            return(range);
        }
コード例 #33
0
        public HardObjectReference GetHardObjectReferenceBySignature(Transaction transaction
                                                                     , long longPart, byte[] signature)
        {
            IBTreeRange range = Search(transaction, longPart);
            IEnumerator keys  = range.Keys();

            while (keys.MoveNext())
            {
                IFieldIndexKey      current = (IFieldIndexKey)keys.Current;
                HardObjectReference hardRef = GetHardObjectReferenceById(transaction, current.ParentID
                                                                             (), signature);
                if (null != hardRef)
                {
                    return(hardRef);
                }
            }
            return(HardObjectReference.Invalid);
        }
コード例 #34
0
        public override int MappedId(int oldID)
        {
            if (_cache.Orig() == oldID)
            {
                return(_cache.Mapped());
            }
            int classID = MappedClassID(oldID);

            if (classID != 0)
            {
                return(classID);
            }
            IBTreeRange range    = _idTree.SearchRange(Trans(), new MappedIDPair(oldID, 0));
            IEnumerator pointers = range.Pointers();

            if (pointers.MoveNext())
            {
                BTreePointer pointer = (BTreePointer)pointers.Current;
                _cache = (MappedIDPair)pointer.Key();
                return(_cache.Mapped());
            }
            return(0);
        }
コード例 #35
0
ファイル: BTreeRangeSingle.cs プロジェクト: erdincay/db4o
		public virtual IBTreeRange ExtendToLastOf(IBTreeRange range)
		{
			Db4objects.Db4o.Internal.Btree.BTreeRangeSingle rangeImpl = CheckRangeArgument(range
				);
			return NewBTreeRangeSingle(_first, rangeImpl._end);
		}
コード例 #36
0
ファイル: BTreeRangeSingle.cs プロジェクト: erdincay/db4o
		public virtual IBTreeRange Union(IBTreeRange other)
		{
			if (null == other)
			{
				throw new ArgumentNullException();
			}
			return new BTreeRangeSingleUnion(this).Dispatch(other);
		}
コード例 #37
0
		public virtual IBTreeRange ExtendToLastOf(IBTreeRange upperRange)
		{
			throw new NotImplementedException();
		}
コード例 #38
0
ファイル: BTreeRangeTestCase.cs プロジェクト: Galigator/db4o
		private void AssertIntersection(int[] expectedKeys, IBTreeRange range1, IBTreeRange
			 range2)
		{
			BTreeAssert.AssertRange(expectedKeys, range1.Intersect(range2));
			BTreeAssert.AssertRange(expectedKeys, range2.Intersect(range1));
		}
コード例 #39
0
ファイル: BTreeRangeSingle.cs プロジェクト: masroore/db4o
 private BTreeRangeSingle CheckRangeArgument(IBTreeRange
     range)
 {
     if (null == range)
     {
         throw new ArgumentNullException();
     }
     var rangeImpl = (BTreeRangeSingle
         ) range;
     if (Btree() != rangeImpl.Btree())
     {
         throw new ArgumentException();
     }
     return rangeImpl;
 }
コード例 #40
0
ファイル: BTreeRangeOperation.cs プロジェクト: erdincay/db4o
		public void Visit(BTreeRangeUnion union)
		{
			_resultingRange = Execute(union);
		}
コード例 #41
0
ファイル: BTreeRangeTestCase.cs プロジェクト: Galigator/db4o
		private void AssertIsRangeSingle(IBTreeRange range)
		{
			Assert.IsInstanceOf(typeof(BTreeRangeSingle), range);
		}
コード例 #42
0
ファイル: BTreeRangeSingle.cs プロジェクト: masroore/db4o
 public virtual IBTreeRange ExtendToLastOf(IBTreeRange range)
 {
     var rangeImpl = CheckRangeArgument(range
         );
     return NewBTreeRangeSingle(_first, rangeImpl._end);
 }
コード例 #43
0
ファイル: BTreeRangeSingle.cs プロジェクト: erdincay/db4o
		private Db4objects.Db4o.Internal.Btree.BTreeRangeSingle CheckRangeArgument(IBTreeRange
			 range)
		{
			if (null == range)
			{
				throw new ArgumentNullException();
			}
			Db4objects.Db4o.Internal.Btree.BTreeRangeSingle rangeImpl = (Db4objects.Db4o.Internal.Btree.BTreeRangeSingle
				)range;
			if (Btree() != rangeImpl.Btree())
			{
				throw new ArgumentException();
			}
			return rangeImpl;
		}
コード例 #44
0
ファイル: BTreeRangeTestCase.cs プロジェクト: Galigator/db4o
		private void AssertUnion(int[] expectedKeys, IBTreeRange range1, IBTreeRange range2
			)
		{
			BTreeAssert.AssertRange(expectedKeys, range1.Union(range2));
			BTreeAssert.AssertRange(expectedKeys, range2.Union(range1));
		}
コード例 #45
0
ファイル: BTreeRangeTestCase.cs プロジェクト: Galigator/db4o
		private void AssertSize(int size, IBTreeRange range)
		{
			Assert.AreEqual(size, range.Size());
		}
コード例 #46
0
ファイル: IndexedLeaf.cs プロジェクト: erdincay/db4o
		public IndexedLeaf(QConObject qcon) : base(qcon)
		{
			_range = Search();
		}
コード例 #47
0
ファイル: BTreeRangeOperation.cs プロジェクト: erdincay/db4o
		public virtual IBTreeRange Dispatch(IBTreeRange range)
		{
			range.Accept(this);
			return _resultingRange;
		}
コード例 #48
0
ファイル: BTreeRangeOperation.cs プロジェクト: erdincay/db4o
		public void Visit(BTreeRangeSingle single)
		{
			_resultingRange = Execute(single);
		}