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); }
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); } }
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(); }
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); }
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()); }
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."); }
public void Remove(TKey key) { tree.Remove(new KeyValuePair <TKey, TValue>(key, default(TValue))); }
internal bool Remove(BasicReflectionEvent initialSite) { return(null != eventTree.Remove(initialSite)); }