General purpose resizable FAST_ARRAYs. The only difference with ARRAY is the fact that the lower bound
is actually frozen to 0. The item access is likely to be more efficient as well as loop going from
upper to lower just because lower is 0. Keep in mind that even if the lower is frozen to 0
it is really better to use the lower attribute, and not 0 directly, just because you may decide in the
future to use another COLLECTION implementation.
Like ARRAY, the FAST_ARRAY implementation uses only one chunk of memory, the storage area which is a
NATIVE_ARRAY. One must keep in mind that this internal storage area is always kept left align. Thus,
you can expect good performances while using a FAST_ARRAY to modelize a stack behavior with add_last /
last / remove_last. Conversely add_first and remove_first are likely to slow down your program if
they are too often used. If the fact that lower is stuck to 0 do matter, also consider ARRAY.
add_first and remove_first are O(count) commands for FAST_ARRAY.
For performance reasons, the unused area of storage is always left as it is when
some elements are removed.
No time is lost to clean the released area with a Void
or a 0 value. (Look for example the remove_last implementation.)
Thus, the unused area of storage may contains references of actually unreachable
objects. The following mark_native_arrays actually replace the
default behavior (the call is automatic) in order to mark only reachable objects.
The basic = is used
for comparison of items and indices are not considered (for
example this routine may yield True with Current indexed in
range [1..2] and other indexed in range [2..3]).
Forces the garbage collector to continue the marking process on the index-th element of
the native_array. The element at index can be Void or not Void (the Void-ness test
performed inside the mark_item itself).