lib/more_collections: add `remove_at` to `HashMap[23]`
[nit.git] / lib / more_collections.nit
index 1bcc514..ecbbf9f 100644 (file)
@@ -29,7 +29,7 @@ module more_collections
 #     assert m.has_key("four")
 #     assert m["four"] == ['i', 'i', 'i', 'i']
 #     assert m["zzz"] == new Array[Char]
-class MultiHashMap[K: Object, V]
+class MultiHashMap[K, V]
        super HashMap[K, Array[V]]
 
        # Add `v` to the array associated with `k`.
@@ -59,7 +59,7 @@ end
 # assert hm2[1, "one"] == 1.0
 # assert hm2[2, "not-two"] == null
 # ~~~~
-class HashMap2[K1: Object, K2: Object, V]
+class HashMap2[K1, K2, V]
        private var level1 = new HashMap[K1, HashMap[K2, V]]
 
        # Return the value associated to the keys `k1` and `k2`.
@@ -86,6 +86,17 @@ class HashMap2[K1: Object, K2: Object, V]
                end
                level2[k2] = v
        end
+
+       # Remove the item at `k1` and `k2`
+       fun remove_at(k1: K1, k2: K2)
+       do
+               var level1 = self.level1
+
+               if not level1.has_key(k1) then return
+
+               var level2 = level1[k1]
+               level2.keys.remove(k2)
+       end
 end
 
 # Simple way to store an `HashMap[K1, HashMap[K2, HashMap[K3, V]]]`
@@ -97,7 +108,7 @@ end
 # assert hm3[1, "one", 11] == 1.0
 # assert hm3[2, "not-two", 22] == null
 # ~~~~
-class HashMap3[K1: Object, K2: Object, K3: Object, V]
+class HashMap3[K1, K2, K3, V]
        private var level1 = new HashMap[K1, HashMap2[K2, K3, V]]
 
        # Return the value associated to the keys `k1`, `k2`, and `k3`.
@@ -123,6 +134,17 @@ class HashMap3[K1: Object, K2: Object, K3: Object, V]
                end
                level2[k2, k3] = v
        end
+
+       # Remove the item at `k1`, `k2` and `k3`
+       fun remove_at(k1: K1, k2: K2, k3: K3)
+       do
+               var level1 = self.level1
+
+               if not level1.has_key(k1) then return
+
+               var level2 = level1[k1]
+               level2.remove_at(k2, k3)
+       end
 end
 
 # A map with a default value.
@@ -165,7 +187,7 @@ end
 # assert dma["b"] == [65, 66]
 # assert dma.default == [65]
 # ~~~~
-class DefaultMap[K: Object, V]
+class DefaultMap[K, V]
        super HashMap[K, V]
 
        # The default value.