General purpose resizable ARRAYs as they are define in the Eiffel language definition.
The lower bound can be any arbitrary value, even a negative one.
This 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 an 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 always stuck to 0 is not a problem for you, also consider FAST_ARRAY to
get better performances.
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.
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).