1    type MapIterator<K, V> =
2        inherit Iterator<(K, V)>
3    
4        let map : Map<K, V>
5        let version = map.version
6        let mut index = -1
7        let mut is_started = false
8    
9        def Iterator.move_next =
10           assert map.version == version
11           if not is_started then
12               index = map.first
13               is_started = true
14           else if index <> -1 then
15               index = map.array[index].next
16   
17           index <> -1
18   
19       def Iterator.get_value =
20           map.version == version
21           let entry = map.array[index]
22           (entry.key, entry.value)
23   
24   type Map<K, V>
25       def try_size = Some size |> as_option
26       def get_iterator = MapIterator<K, V> self
27   
28       is Iterable<(K, V)>
29