Section Header

    + name := TRAVERSABLE[E];

    - comment := "A `TRAVERSABLE[E_]' is a finite readable sequence of objects of type E_.";
For instance, `COLLECTION's and `STRING's are `TRAVERSABLE'.

A good performance should always be obtained by sequentially acessing a
`TRAVERSABLE' with increasing indexes (from `lower' to `upper'), as
demonstrated in the following code snippet :

i := a_traversable.lower;
{i > a_traversable.upper}.until_do {
do_something_with (a_traversable.item i);
i := i + 1;
};

Other accessing methods (including random access and sequential access
from `upper' to `lower') may or may not lead to acceptable performance,
depending on the particular implementation of `TRAVERSABLE'.

Section Inherit

    - parent_object:OBJECT :=

Section Public

Indexing:


    - lower:INTEGER <-
        Minimum index.
       
        See also `upper', `valid_index', `item'.

    - upper:INTEGER <-
        Maximum index.
       
        See also `lower', `valid_index', `item'.

    - valid_index i:INTEGER :BOOLEAN <-
        True when `i' is valid (i.e., inside actual bounds).
       
        See also `lower', `upper', `item'.

Counting:


    - count:INTEGER <-
        Number of available indices.
       
        See also `is_empty', `lower', `upper'.

    - is_empty:BOOLEAN <-
        Is collection empty ?
       
        See also `count'.

Accessing:


    - item i:INTEGER :E <-
        Item at the corresponding index `i'.
       
        See also `lower', `upper', `valid_index'.

    - first:E <-
        The very `first' item.
       
        See also `last', `item'.

    - last:E <-
        The `last' item.
       
        See also `first', `item'.