Index in Current (seen as a COLLECTION) such that for any
valid_indexes i and j, if i < wrap_point and j >=
wrap_point then storage_index(i) > storage_index(j)
This can happen because of the circular nature of the
array.
Do not lose any
item whose index is in both [lower .. upper] and
[min_index .. max_index]. New positions if any are
initialized with the appropriate default value.
NOTE: do not free/realloc the Result. Any operation that changes
lower or upper can make this pointer useless (because the
array has wrapped or its beginning in the storage has moved),
and operations that change capacity can make it invalid
(because new memory has been allocated and the old memory has
been freed)
Index in Current (seen as a COLLECTION) such that for any
valid_indexes i and j, if i < wrap_point and j >=
wrap_point then storage_index(i) > storage_index(j)
This can happen because of the circular nature of the
array.
wrap_point is not a valid_index if and only if
there is no such point (i.e. the array doesn't wrap).
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).