parallelization_phase: use `ANode::validate` after AST shenanigans.
[nit.git] / lib / more_collections.nit
index 4f75430..9fb05bb 100644 (file)
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 # Highly specific, but useful, collections-related classes.
-module more_collections
+module more_collections is serialize
 
 import serialization
 
@@ -32,7 +32,6 @@ import serialization
 #     assert m["four"] == ['i', 'i', 'i', 'i']
 #     assert m["zzz"] == new Array[Char]
 class MultiHashMap[K, V]
-       auto_serializable
        super HashMap[K, Array[V]]
 
        # Add `v` to the array associated with `k`.
@@ -64,7 +63,6 @@ end
 # assert hm2[2, "not-two"] == null
 # ~~~~
 class HashMap2[K1, K2, V]
-       auto_serializable
 
        private var level1 = new HashMap[K1, HashMap[K2, V]]
 
@@ -99,6 +97,13 @@ class HashMap2[K1, K2, V]
                level2.keys.remove(k2)
        end
 
+       # Is there a value at `k1, k2`?
+       fun has(k1: K1, k2: K2): Bool
+       do
+               if not level1.keys.has(k1) then return false
+               return level1[k1].keys.has(k2)
+       end
+
        # Remove all items
        fun clear do level1.clear
 end
@@ -113,7 +118,6 @@ end
 # assert hm3[2, "not-two", 22] == null
 # ~~~~
 class HashMap3[K1, K2, K3, V]
-       auto_serializable
 
        private var level1 = new HashMap[K1, HashMap2[K2, K3, V]]
 
@@ -148,6 +152,13 @@ class HashMap3[K1, K2, K3, V]
                level2.remove_at(k2, k3)
        end
 
+       # Is there a value at `k1, k2, k3`?
+       fun has(k1: K1, k2: K2, k3: K3): Bool
+       do
+               if not level1.keys.has(k1) then return false
+               return level1[k1].has(k2, k3)
+       end
+
        # Remove all items
        fun clear do level1.clear
 end
@@ -193,7 +204,6 @@ end
 # assert dma.default == [65]
 # ~~~~
 class DefaultMap[K, V]
-       auto_serializable
        super HashMap[K, V]
 
        # The default value.