Lisaac prototype interface

Section Header
+ name := LINKED_LIST[E];
- comment :="One way linked list with internal automatic memorization of the last access.";
One way linked list implementation with internal automatic cached memorization
of the last access. Because of the last access memory cache, the traversal of a
LINKED_LIST from the `lower' index to the `upper' index using `item' is quite
efficient. As one can expect, adding element using `add_first' or
`add_last' is really efficient too, actually, the total number of elements
(i.e. `count') as well as a reference to the last cell is also cached automatically.
Keep in mind that LINKED_LIST uses a one way linked storage from `lower' to `upper',
so traversing a LINKED_LIST from `upper' to `lower' will be extremely time consumming
(also consider LINKED2_LIST).
Section Inherit
+ parent_linked_collection:Expanded LINKED_COLLECTION[E];
Section LINKED_LIST
+ first_link:LINKED_LIST_NODE[E];
NULL when empty or gives access to the first element.
+ last_link:LINKED_LIST_NODE[E];
NULL when empty or gives access to the last element.
+ mem_idx:INTEGER;
+ mem_lnk:LINKED_LIST_NODE[E];
To speed up accessing, `mem_idx' and `mem_lnk' is the
memory of the last access done. For example, after
item(1), `mem_idx' is 1 and `mem_lnk' is `first_link'.
When list is empty, `first_link' is NULL as well as
`mem_lnk' and `mem_idx' is 0;
Section Public
- create:SELF <-
Make an empty list;
- is_empty:BOOLEAN <-
- add_first element:E <-
- add_last element:E <-
- add element:E to index:INTEGER <-
- remove_first <-
- remove index:INTEGER <-
- first:E <-
- last:E <-
- item i:INTEGER :E <-
- put element:E to i:INTEGER <-
- count:INTEGER <-
- set_all_with v:E <-
- copy other:SELF <-
- '==' Right 60 other:SELF :BOOLEAN <-
- is_equal_map other:SELF :BOOLEAN <-
- index_of x:E start start_index:INTEGER :INTEGER <-
- reverse_index_of element:E start start_index:INTEGER :INTEGER <-
- fast_index_of element:E start start_index:INTEGER :INTEGER <-
- fast_reverse_index_of element:E start start_index:INTEGER :INTEGER <-
- clear <-
- from_collection model:COLLECTION[E] <-
- slice low:INTEGER to up:INTEGER :SELF <-
- occurrences element:E :INTEGER <-
- fast_occurrences element:E :INTEGER <-
- force element:E to index:INTEGER <-
- all_default:BOOLEAN <-
- remove_last <-
- replace_all old_value:E with new_value:E <-
- fast_replace_all old_value:E with new_value:E <-
- reverse <-