ecere/com/containers/Map: Faster implementation of RemoveAll()
authorJerome St-Louis <jerome@ecere.com>
Thu, 29 Oct 2015 00:39:00 +0000 (20:39 -0400)
committerJerome St-Louis <jerome@ecere.com>
Wed, 9 Dec 2015 18:04:40 +0000 (13:04 -0500)
ecere/src/com/containers/Map.ec

index 40e57b0..3cd9bf4 100644 (file)
@@ -135,6 +135,36 @@ public class Map<class MT, class V> : CustomAVLTree<MapNode<MT, V>, I = MT, D =
          delete node.key;
    }
 
+   void RemoveAll()
+   {
+      MapNode<MT, V> node = root;
+      while(node)
+      {
+         if(node.left)
+         {
+            MapNode<MT, V> left = node.left;
+            node.left = null;
+            node = left;
+         }
+         else if(node.right)
+         {
+            MapNode<MT, V> right = node.right;
+            node.right = null;
+            node = right;
+         }
+         else
+         {
+            MapNode<MT, V> parent = node.parent;
+            FreeKey(node);
+            delete node;
+
+            node = parent;
+         }
+      }
+      root = null;
+      count = 0;
+   }
+
    void Remove(MapNode<MT, V> node)
    {
       CustomAVLTree::Remove(node);