# An Iterator over an OrderedTree
private class OrderedTreeIterator[E: Object]
super Iterator[E]
var tree: OrderedTree[E]
var iterators = new Array[Iterator[E]]
init do
if not tree.is_empty then
iterators.add tree.roots.iterator
end
end
redef fun is_ok do return not iterators.is_empty
redef fun item do
assert is_ok
return iterators.last.item
end
redef fun next do
assert is_ok
if tree.sub.has_key(item) then
iterators.add tree.sub[item].iterator
else
iterators.last.next
while is_ok and not iterators.last.is_ok do
iterators.pop
if is_ok and iterators.last.is_ok then
iterators.last.next
end
end
end
end
redef fun iterator do return new OrderedTreeIterator[E](tree)
end
lib/ordered_tree/ordered_tree.nit:292,1--329,3