class Range[E: Discrete]
super Collection[E]
- redef readable var _first: E
+ redef var first: E
# Get the last element.
- readable var _last: E
+ var last: E
# Get the element after the last one.
- readable var _after: E
+ var after: E
- redef fun has(item) do return item >= _first and item <= _last
+ redef fun has(item) do return item >= first and item <= last
- redef fun has_only(item) do return _first == item and item == _last or is_empty
+ redef fun has_only(item) do return first == item and item == last or is_empty
redef fun count(item)
do
redef fun iterator do return new IteratorRange[E](self)
- redef fun iterate
- !each(e: E)
- do
- var c = _first
- var l = _last
- while c <= l do
- each(c)
- c = c.succ
- end
- end
-
redef fun length
do
- var nb = _first.distance(_after)
+ var nb = first.distance(after)
if nb > 0 then
return nb
else
end
end
- redef fun is_empty do return _first >= _after
+ redef fun is_empty do return first >= after
# Create a range [`from`, `to`].
# The syntax `[from..to[` is equivalent.
init(from: E, to: E)
do
- _first = from
- _last = to
- _after = to.succ
+ first = from
+ last = to
+ after = to.successor(1)
end
# Create a range [`from`, `to`[.
# The syntax `[from..to[` is equivalent.
init without_last(from: E, to: E)
do
- _first = from
- _last = to.prec
- _after = to
+ first = from
+ last = to.predecessor(1)
+ after = to
end
end
-class IteratorRange[E: Discrete]
+private class IteratorRange[E: Discrete]
# Iterator on ranges.
super Iterator[E]
var _range: Range[E]
- redef readable var _item: E
+ var _item: E
+ redef fun item do return _item
redef fun is_ok do return _item < _range.after
- redef fun next do _item = _item.succ
+ redef fun next do _item = _item.successor(1)
init(r: Range[E])
do
redef class Int
# Returns the range from 0 to `self-1`, is used to do:
#
- # for i in 3.times do print "Cool"
- # for i in 100.times do print "{i}/100"
+ # var s = new Array[String]
+ # for i in 3.times do s.add "cool"
+ # assert s.join(" ") == "cool cool cool"
+ #
+ # s.clear
+ # for i in 10.times do s.add(i.to_s)
+ # assert s.to_s == "0123456789"
fun times: Range[Int] do return [0 .. self[
end