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