Section Header

    + name := ARRAY3[E];

    - comment :=" General prurpose, resizable, three dimensional array..";

Section Inherit

    + parent_collection3:Expanded COLLECTION3[E];

Section Public

    + lower1:INTEGER;

    + lower2:INTEGER;

    + lower3:INTEGER;

    + upper1:INTEGER;

    + upper2:INTEGER;

    + upper3:INTEGER;

    + count1:INTEGER;

    + count2:INTEGER;

    + count3:INTEGER;

    + count:INTEGER;

Section ARRAY3

    + storage:NATIVE_ARRAY[E];
        To store elements line by line.

    + capacity:INTEGER;
        Number of elements in `storage'.

Section Public

Creation / modification:


    - create (line_min, column_min, depth_min:INTEGER) to (line_max, column_max, depth_max:INTEGER) :SELF <-
        Reset all bounds `line_minimum' / `line_maximum' / `column_minimum'
        `column_maximum' / `depth_min' and `depth_max' using arguments as
        new values. All elements are set to the default value of type E.

    - make (line_min, column_min, depth_min:INTEGER) to (line_max, column_max, depth_max:INTEGER) <-
        Reset all bounds `line_minimum' / `line_maximum' / `column_minimum'
        `column_maximum' / `depth_min' and `depth_max' using arguments as
        new values. All elements are set to the default value of type E.

    - from_collection3 model:COLLECTION3[E] <-

    - from_collection contents:COLLECTION[E] size (line_min,column_min,depth_min:INTEGER) to (line_max,column_max,depth_max:INTEGER) <-
        Reset all bounds using `line_min', `line_max', `column_min',
        `column_max', `depth_min', and `depth_max'.
        Copy all elements of `contents', line by line into Current.

    - from_model model:COLLECTION[COLLECTION[COLLECTION[E]]] <-
        The `model' is used to fill line by line the COLLECTION3.
        Assume all sub-collections of have the same indexing.

Resizing:


    - resize (line_min, column_min, depth_min:INTEGER) to (line_max, column_max, depth_max:INTEGER) <-
        Resize bounds of the Current array

Implementation of others feature from COLLECTION3:


    - item (line, column, depth:INTEGER) :E <-

    - put element:E to (line, column, depth:INTEGER) <-

    - force x:E to (line, column, depth:INTEGER) <-

    - set_all_with element:E <-

    - replace_all old_value:E with new_value:E <-

    - fast_replace_all old_value:E with new_value:E <-

    - sub_collection3 (line_min, column_min, depth_min:INTEGER) to (line_max, column_max, depth_max:INTEGER) :SELF <-

Looking and comparison:


    - occurrences elt:E :INTEGER <-

    - fast_occurrences elt:E :INTEGER <-

    - has x:E :BOOLEAN <-
        Search if a element x is in the array using `equal'.
        See also `fast_has' to choose the apropriate one.

    - fast_has x:E :BOOLEAN <-
        Search if a element x is in the array using `='.

    - all_default:BOOLEAN <-

    - swap (line1, column1, depth1:INTEGER) with (line2, column2, depth2:INTEGER) <-

    - copy other:SELF <-

Invariant.

[ ...
-? { count1 = upper1 - lower1 + 1 };
-? { count2 = upper2 - lower2 + 1 };
-? { count3 = upper3 - lower3 + 1 };
-? { capacity >= count };
];