core::hash_collection: shortcut some methods on empty collections
authorJean Privat <jean@pryen.org>
Mon, 19 Oct 2015 20:02:41 +0000 (16:02 -0400)
committerJean Privat <jean@pryen.org>
Mon, 19 Oct 2015 20:02:41 +0000 (16:02 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

lib/core/collection/hash_collection.nit

index 8ee3491..930c371 100644 (file)
@@ -50,6 +50,7 @@ private abstract class HashCollection[K]
        # Return the node associated with the key
        fun node_at(k: nullable Object): nullable N
        do
+               if _the_length == 0 then return null
                # cache: `is` is used instead of `==` because it is a faster filter (even if not exact)
                if k.is_same_instance(_last_accessed_key) then return _last_accessed_node
 
@@ -62,6 +63,7 @@ private abstract class HashCollection[K]
        # Return the node associated with the key (but with the index already known)
        fun node_at_idx(i: Int, k: nullable Object): nullable N
        do
+               if _the_length == 0 then return null
                var c = _array[i]
                while c != null do
                        var ck = c._key
@@ -111,6 +113,7 @@ private abstract class HashCollection[K]
        # Remove the node assosiated with the key
        fun remove_node(k: nullable Object)
        do
+               if _the_length == 0 then return
                var i = index_at(k)
                var node = node_at_idx(i, k)
                if node == null then return
@@ -180,6 +183,7 @@ private abstract class HashCollection[K]
                        i -= 1
                end
 
+               if _the_length == 0 then return
                if _capacity <= old_cap then return
 
                # Reput items in the array