work in progress | array

Class ARRAY

Eiffel Library Standard
1995 Vintage


indexing
description: "Sequences of values, all of the same type or of a %
    %conforming one, accessible through integer indices in a %
    %contiguous interval"
class interface
ARRAY [G]
creation 
make (minindex, maxindex: INTEGER)
        -- Allocate array; set index interval to
        -- minindex .. maxindex; set all values to default.
        -- (Make array empty if minindex > maxindex.)
    ensure
        no_count: (minindex > maxindex) implies (count = 0); 
        count_constraint: (minindex <= maxindex) implies 
            (count = maxindex - minindex + 1)
make_from_array (a: ARRAY [G])
        -- Initialize from the items of a.
        -- (Useful in proper descendants of class ARRAY,
        -- to initialize an array-like object from a manifest array.)
feature -- Initialization
make (minindex, maxindex: INTEGER)
        -- Set index interval to minindex .. maxindex;
        -- reallocate if necessary; set all values to default.
        -- (Make array empty if minindex > maxindex.)
    ensure
        no_count: (minindex > maxindex) implies (count = 0); 
        count_constraint: (minindex <= maxindex) implies 
            (count = maxindex - minindex + 1)
make_from_array (a: ARRAY [G])
        -- Initialize from the items of a; reallocate if
        -- necessary. (Useful in proper descendants of
        -- class ARRAY, to initialize an array-like object
        -- from a manifest array.)
feature -- Access
entry (i: INTEGER): G
        -- Entry at index i, if in index interval
        -- (Redefinable synonym for item and infix "@".)
    require
        good_key: valid_index (i)
frozen item (i: INTEGER): G
        -- Entry at index i, if in index interval
    require
        good_key: valid_index (i)
frozen infix "@" (i: INTEGER): G
        -- Entry at index i, if in index interval
    require
        good_key: valid_index (i)
feature -- Measurement
count: INTEGER
        -- Number of available indices
lower: INTEGER
        -- Minimum index
upper: INTEGER
        -- Maximum index
feature -- Comparison
is_equal (other: like Current): BOOLEAN
        -- Is array made of the same items as other?
        -- (Redefined from GENERAL.)
feature -- Status report
valid_index (i: INTEGER): BOOLEAN
        -- Is i within the bounds of the array?
feature -- Element change
enter (v: G; i: INTEGER)
        -- Repace i-th entry, if in index interval, by v.
        -- (Redefinable synonym for put.)
    require
        good_key: valid_index (i)
    ensure
        inserted: item (i) = v
force (v: like item; i: INTEGER)
        -- Assign item v to i-th entry.
        -- Always applicable: resize the array if i falls out of
        -- currently defined bounds; preserve existing items.
    ensure
        inserted: item (i) = v; 
        higher_count: count >= old count
frozen put (v: like item; i: INTEGER)
        -- Replace i-th entry, if in index interval, by v.
    require
        good_key: valid_index (i)
    ensure
        inserted: item (i) = v
feature -- Resizing
resize (minindex, maxindex: INTEGER)
        -- Rearrange array so that it can accommodate
        -- indices down to minindex and up to maxindex.
        -- Do not lose any previously entered item.
    require
        good_indices: minindex <= maxindex
    ensure
        no_low_lost: lower = minindex.min (old lower);
        no_high_lost: upper = maxindex.max (old upper)
feature -- Conversion
to_c: POINTER
        -- Address of actual sequence of values, 
        -- for passing to external (non-Eiffel) routines.
feature -- Duplication
copy (other: like Current)
        -- Reinitialize by copying all the items of other.
        -- (This is also used by clone.)
        -- (From GENERAL.)
invariant
consistent_size: count = upper - lower + 1; 
non_negative_count: count >= 0 
end