# 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
# 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
# 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
i -= 1
end
+ if _the_length == 0 then return
if _capacity <= old_cap then return
# Reput items in the array
redef fun []=(key, v)
do
+ if _capacity == 0 then enlarge(17) # 17 because magic in `store`
var i = index_at(key)
var c = node_at_idx(i, key)
if c != null then
do
_capacity = 0
_the_length = 0
- enlarge(0)
end
redef var keys: RemovableCollection[K] = new HashMapKeys[K, V](self) is lazy
end
# A `MapIterator` over a `HashMap`.
-class HashMapIterator[K, V]
+private class HashMapIterator[K, V]
super MapIterator[K, V]
redef fun is_ok do return _node != null
end
# The map to iterate on
- private var map: HashMap[K, V]
+ var map: HashMap[K, V]
# The current node
- private var node: nullable HashMapNode[K, V] = null
+ var node: nullable HashMapNode[K, V] = null
init
do
redef fun add(item)
do
+ if _capacity == 0 then enlarge(17) # 17 because magic in `store`
var i = index_at(item)
var c = node_at_idx(i, item)
if c != null then
do
_capacity = 0
_the_length = 0
- enlarge(0)
end
# Build a list filled with the items of `coll`.