Signed-off-by: Jean Privat <jean@pryen.org>
end
redef fun iterator: ArrayIterator[E] do return new ArrayIterator[E](self)
+ redef fun reverse_iterator do return new ArrayReverseIterator[E](self)
end
# Resizable one dimension array of objects.
var _array: AbstractArrayRead[E]
end
+private class ArrayReverseIterator[E]
+ super ArrayIterator[E]
+
+ redef fun is_ok do return _index >= 0
+
+ redef fun next do _index -= 1
+
+ init(a: AbstractArrayRead[E])
+ do
+ _array = a
+ _index = a.length - 1
+ end
+end
+
# Others collections ##########################################################
# A set implemented with an Array.
redef fun iterator: ListIterator[E] do return new ListIterator[E](self)
+ redef fun reverse_iterator: ListIterator[E] do return new ListReverseIterator[E](self)
# Build an empty list.
init do end
end
end
+private class ListReverseIterator[E]
+ super ListIterator[E]
+
+ redef fun next
+ do
+ _node = _node.prev
+ _index -= 1
+ end
+
+ private init(list: List[E])
+ do
+ _list = list
+ _node = list._tail
+ _index = list.length
+ end
+end
+
# Linked nodes that constitute a linked list.
private class ListNode[E]
super Container[E]