# Iterate over `self`
fun iterator: Iterator[E] do return self
+ # Pre-iteration hook.
+ #
+ # Used to inform `self` that the iteration is starting.
+ # Specific iterators can use this to prepare some resources.
+ #
+ # Is automatically invoked at the beginning of `for` structures.
+ #
+ # Do nothing by default.
+ fun start do end
+
# Post-iteration hook.
#
# Used to inform `self` that the iteration is over.
# Set a new `item` at `key`.
#fun item=(item: E) is abstract
+ # Pre-iteration hook.
+ #
+ # Used to inform `self` that the iteration is starting.
+ # Specific iterators can use this to prepare some resources.
+ #
+ # Is automatically invoked at the beginning of `for` structures.
+ #
+ # Do nothing by default.
+ fun start do end
+
# Post-iteration hook.
#
# Used to inform `self` that the iteration is over.
# assert a.last_index_of_from(20, 2) == 1
# assert a.last_index_of_from(20, 1) == 1
# assert a.last_index_of_from(20, 0) == -1
- fun last_index_of_from(item: nullable Object, pos: Int): Int
- do
- var res = -1
- var p = 0
- var i = iterator
- while i.is_ok do
- if p>pos then break
- if i.item == item then res = p
- i.next
- p += 1
+ fun last_index_of_from(item: nullable Object, pos: Int): Int do
+ var i = pos
+ while i >= 0 do
+ if self[i] == item then return i
+ i -= 1
end
- return res
+ return -1
end
# Two sequences are equals if they have the same items in the same order.