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