Пример #1
0
    public bool TryGetValue(TKey key, out TValue value)
    {
        value = default(TValue);
        var ret = tree.Find(new KeyValuePair <TKey, TValue>(key, value));

        if (ret != null)
        {
            value = ret.Item.Value;
            return(true);
        }

        return(false);
    }
Пример #2
0
        internal bool RemoveExact(BasicReflectionEvent initialSite)
        {
            RBNode <BasicReflectionEvent> node = eventTree.Find(initialSite);

            if (null != node)
            {
                if (node.Item.Site == initialSite.Site)
                {
                    eventTree.DeleteNodeInternal(node);
                    return(true);
                }
            }
            return(false);
        }
Пример #3
0
        public void Find_TryFindNoExistElement_Exception()
        {
            var comparer = new StringComparator();

            var map = new RbTree <string, int>(comparer);

            map.Insert("ffg", 45);

            map.Insert("acb", 21);

            map.Insert("hyred", 90);

            map.Delete("acb");

            Assert.Throws <Exception>(() => map.Find("acb"));
        }
Пример #4
0
        private static void Main()
        {
            var rbtree = new RbTree <int>();

            rbtree.Insert(3);
            rbtree.Insert(2);
            rbtree.Insert(5);
            rbtree.Insert(7);
            rbtree.Insert(6);
            rbtree.Insert(11);
            rbtree.Insert(13);
            rbtree.Insert(1);
            rbtree.Insert(4);
            rbtree.Preorder();
            Console.WriteLine(rbtree.Find(2));
            Console.ReadLine();
        }
Пример #5
0
        public void Find_InsertFiveElements_CorrectValue()
        {
            var comparer = new StringComparator();

            var map = new RbTree <string, int>(comparer);

            map.Insert("Me", 51);

            map.Insert("You", 651);

            map.Insert("Her", 89);

            map.Insert("Him", 612);

            map.Insert("zero", -7);

            var actual = map.Find("Him");

            var expected = 612;

            Assert.AreEqual(expected, actual);
        }
Пример #6
0
        public void Delete_InsertThreeElementsAndDeleteTwoElements_FindOneElement()
        {
            var comparer = new StringComparator();

            var map = new RbTree <string, int>(comparer);

            map.Insert("vga", 5);

            map.Insert("hj", 1);

            map.Insert("vbz", 9);

            map.Delete("vga");

            map.Delete("vbz");

            var actual = map.Find("hj");

            var expected = 1;

            Assert.AreEqual(expected, actual);
        }
Пример #7
0
        //        static int count;
        void GoOverConesSeeingVertexEvent(SweepEvent vertexEvent)
        {
            RBNode <ConeSide> rbNode = FindFirstSegmentInTheRightTreeNotToTheLeftOfVertex(vertexEvent);

            if (rbNode == null)
            {
                return;
            }
            ConeSide coneRightSide = rbNode.Item;
            Cone     cone          = coneRightSide.Cone;
            ConeSide leftConeSide  = cone.LeftSide;

            if (VertexIsToTheLeftOfSegment(vertexEvent, leftConeSide))
            {
                return;
            }
            var visibleCones = new List <Cone> {
                cone
            };

            coneSideComparer.SetOperand(leftConeSide);
            rbNode = leftConeSides.Find(leftConeSide);

            if (rbNode == null)
            {
                double tmpZ = Z;

                Z = Math.Max(GetZ(leftConeSide.Start), PreviousZ);
                //we need to return to the past when the order was still correct
                coneSideComparer.SetOperand(leftConeSide);
                rbNode = leftConeSides.Find(leftConeSide);
                Z      = tmpZ;


#if TEST_MSAGL
                if (rbNode == null)
                {
                    //GeometryGraph gg = CreateGraphFromObstacles();
                    //gg.Save("c:\\tmp\\bug");


                    PrintOutLeftSegTree();
                    Debug.WriteLine(leftConeSide);
                    ShowLeftTree(new Ellipse(3, 3, vertexEvent.Site));
                    ShowRightTree(new Ellipse(3, 3, vertexEvent.Site));
                }
#endif
            }

            rbNode = leftConeSides.Next(rbNode);
            while (rbNode != null && !VertexIsToTheLeftOfSegment(vertexEvent, rbNode.Item))
            {
                visibleCones.Add(rbNode.Item.Cone);
                rbNode = leftConeSides.Next(rbNode);
            }

            //Show(new Ellipse(1, 1, vertexEvent.Site));

            foreach (Cone c in visibleCones)
            {
                AddEdge(c.Apex, vertexEvent.Site);
                RemoveCone(c);
            }
        }