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