void RemoveSegFromLeftTree(ConeSide coneSide)
        {
            Debug.Assert(coneSide.Removed == false);
            coneSide.Removed = true;
            coneSideComparer.SetOperand(coneSide);
            RBNode <ConeSide> b = leftConeSides.Remove(coneSide);

            if (b == null)
            {
                double tmpZ = Z;
                Z = Math.Max(GetZ(coneSide.Start), Z - 0.01);
                coneSideComparer.SetOperand(coneSide);

#if TEST_MSAGL
                b =
#endif
                leftConeSides.Remove(coneSide);
                Z = tmpZ;
#if TEST_MSAGL
                if (b == null)
                {
                    PrintOutLeftSegTree();
                    Debug.WriteLine(coneSide);
                    ShowLeftTree(new Ellipse(2, 2, coneSide.Start));
                }
#endif
            }

            Debug.Assert(b != null);
        }
Esempio n. 2
0
        public void TestDelete()
        {
            tree.Remove(5);
            Assert.AreEqual(6, tree.Root.Key);
            Assert.AreEqual(9, tree.Root.Right.Key);
            Assert.AreEqual(1, tree.Root.Left.Key);
            Assert.AreEqual(11, tree.Root.Right.Right.Key);
            Assert.AreEqual(8, tree.Root.Right.Left.Key);
            Assert.AreEqual(2, tree.Root.Left.Right.Key);
            Assert.AreEqual(-1, tree.Root.Left.Left.Key);
            Assert.AreEqual(0, tree.Root.Left.Left.Right.Key);
            Assert.AreEqual(-2, tree.Root.Left.Left.Left.Key);

            tree.Remove(1);
            Assert.AreEqual(6, tree.Root.Key);
            Assert.AreEqual(9, tree.Root.Right.Key);
            Assert.AreEqual(11, tree.Root.Right.Right.Key);
            Assert.AreEqual(8, tree.Root.Right.Left.Key);
            Assert.AreEqual(-1, tree.Root.Left.Key);
            Assert.AreEqual(-2, tree.Root.Left.Left.Key);
            Assert.AreEqual(2, tree.Root.Left.Right.Key);
            Assert.AreEqual(0, tree.Root.Left.Right.Left.Key);

            Assert.AreEqual(true, tree.Validate());
        }
        void RemoveSegFromRightTree(ConeSide coneSide)
        {
            //   ShowRightTree();
            Debug.Assert(coneSide.Removed == false);
            coneSideComparer.SetOperand(coneSide);
            RBNode <ConeSide> b = rightConeSides.Remove(coneSide);

            coneSide.Removed = true;
            if (b == null)
            {
                double tmpZ = Z;
                Z = Math.Max(GetZ(coneSide.Start), Z - 0.01);
                //we need to return to the past a little bit when the order was still correc
                coneSideComparer.SetOperand(coneSide);
#if TEST_MSAGL
                b =
#endif
                rightConeSides.Remove(coneSide);
                Z = tmpZ;

#if TEST_MSAGL
                if (b == null)
                {
                    PrintOutRightSegTree();
                    Debug.WriteLine(coneSide);
                    ShowRightTree(CurveFactory.CreateDiamond(3, 4, coneSide.Start));
                    GeometryGraph gg = CreateGraphFromObstacles(Obstacles);
                    // FIXME GeometryGraphWriter.Write(gg, "c:\\tmp\\bug1");
                }
#endif
            }
            Debug.Assert(b != null);
        }
        void Traverse()
        {
            while (!BIsReached())
            {
                if (piercedToTheLeftFrontElemNode != null)
                {
                    ProcessLeftFrontPiercedElement();
                }
                else if (piercedToTheRightFrontElemNode != null)
                {
                    ProcessRightFrontPiercedElement();
                }
                else
                {
                    ProcessPiercedEdge();
                }
            }
            if (piercedTriangle != null)
            {
                RemovePiercedTriangle(piercedTriangle);
            }

            FindMoreRemovedFromFrontElements();

            foreach (var elem in elementsToBeRemovedFromFront)
            {
                front.Remove(elem);
            }
        }
Esempio n. 5
0
        static void SubtreeCheck()
        {
            var t1 = new RbTree <int>();

            t1.Add(3);
            t1.Add(2);
            t1.Add(4);
            t1.Add(1);
            t1.Add(5);
            t1.Add(0);
            t1.Add(-1);
            t1.Add(-2);
            RbTree <int> .Node subroot = t1.Add(-3);
            t1.Add(-4);
            t1.Add(-5);

            t1.Print();

            WriteLine(Environment.NewLine);

            var t2 = t1.Subtree(subroot);

            t2.Print();

            t1.Remove(-5);

            WriteLine(Environment.NewLine);

            t2.Print();
        }
Esempio n. 6
0
        CdtSite LeftCase(CdtSite pi, RBNode <CdtFrontElement> hittedFrontElementNode, out CdtSite rightSite)
        {
            //left case
            //                if(db)ShowFrontWithSite(pi, new LineSegment(pi.Point, hittedFrontElementNode.Item.Edge.upperSite.Point), new LineSegment(pi.Point, hittedFrontElementNode.Item.Edge.lowerSite.Point));
            Debug.Assert(ApproximateComparer.Close(pi.Point.X, hittedFrontElementNode.Item.X));
            var hittedFrontElement = hittedFrontElementNode.Item;

            InsertAndLegalizeTriangle(pi, hittedFrontElement);
            var prevToHitted = front.Previous(hittedFrontElementNode);
            var leftSite     = prevToHitted.Item.LeftSite;

            rightSite = hittedFrontElementNode.Item.RightSite;
            //                if(db)ShowFrontWithSite(pi, new LineSegment(pi.Point, leftSite.Point), new LineSegment(pi.Point, prevToHitted.Item.RightSite.Point));
            InsertAndLegalizeTriangle(pi, prevToHitted.Item);
            front.DeleteNodeInternal(prevToHitted);
            var d = front.Remove(hittedFrontElement);

            Debug.Assert(d != null);
            return(leftSite);
        }
Esempio n. 7
0
        public void Test()
        {
            var t1 = new RbTree <int>();

            t1.Add(3);
            t1.Add(2);
            t1.Add(4);
            t1.Add(1);
            t1.Add(5);
            t1.Add(0);
            t1.Add(-1);
            t1.Add(-2);
            t1.Add(-3);
            t1.Add(-4);
            t1.Add(-5);

            var t2 = t1.Subtree(t1.Root.Left.Left);

            t1.Remove(-5);

            Assert.AreEqual(true, t2.Contains(-5));
            Assert.AreEqual(true, t2.Validate());
        }
Esempio n. 8
0
        static void GenerateTree()
        {
            WriteLine("Enter a size, start value, and end value, separated by spaces.");
            var s = ReadLine() !.Trim();
            var l = s.Split().Select(x => int.Parse(x)).ToList();

            var(size, from, to) = (l[0], l[1], l[2]);
            var tree        = new RbTree <int>();
            var rng         = RandomSingleton.GetInstance();
            var toInclusive = to + 1;

            watch.Start();
            for (int i = 0; i < size; ++i)
            {
                int j = rng.Next(from, toInclusive);
                tree.Add(j);
            }
            watch.Stop();

            WriteLine($"Added {size} elements in {watch.ElapsedMilliseconds} milliseconds.");
            WriteLine("Display tree? (Y/n)");
            if (ReadLine() !.Trim().ToLower() == "y")
            {
                tree.Print();
            }
            var list = tree.InOrderKeys();

            Shuffle(list);

            watch.Restart();
            foreach (var key in list)
            {
                tree.Remove(key);
            }
            watch.Stop();
            WriteLine($"Removed {size} elements in {watch.ElapsedMilliseconds} milliseconds.");
        }
Esempio n. 9
0
 public void Remove(TKey key)
 {
     tree.Remove(new KeyValuePair <TKey, TValue>(key, default(TValue)));
 }
Esempio n. 10
0
 internal bool Remove(BasicReflectionEvent initialSite)
 {
     return(null != eventTree.Remove(initialSite));
 }