class ARRAY2 [E_]

Features exported to ANY

General prurpose, resizable, two dimensional array.

Direct parents

conformant parents

COLLECTION2

Summary

creation features

exported features

Creation / modification:

Resizing:

Implementation of others feature from COLLECTION2:

 Looking and comparison:

Only for ARRAY2:

Indexing:

Index validity:

Counting:

Looking and comparison:

Printing:

Miscellaneous features:

Details

make (line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER)

Reset all bounds line_minimum / line_maximum / column_minimum and column_maximum using arguments as new values. All elements are set to the default value of type E_.

require

  • line_min <= line_max
  • column_min <= column_max

ensure

  • line_minimum = line_min
  • line_maximum = line_max
  • column_minimum = column_min
  • column_maximum = column_max

copy (other: ARRAY2 [E_])

require

  • same_dynamic_type(other)

ensure

  • is_equal(other)

from_collection2 (model: COLLECTION2[E_])
 Uses model to initialize Current.

require

  • model /= Void

ensure

  • lower1 = model.lower1
  • lower2 = model.lower2
  • count1 = model.count1
  • count2 = model.count2

from_collection (contents: COLLECTION[E_], line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER)
 Reset all bounds using line_min, line_max, column_min,
 and column_max .
 Copy all elements of contents, line by line into Current.

require

  • line_min <= line_max
  • column_min <= column_max
  • contents.count = (line_max - line_min + 1) * (column_max - column_min + 1)

ensure

  • line_minimum = line_min
  • line_maximum = line_max
  • column_minimum = column_min
  • column_maximum = column_max
  • count = contents.count

from_model (model: COLLECTION[COLLECTION[E_]])

The model is used to fill line by line the COLLECTION2. Assume all sub-collections of model have the same indexing.

require

  • model.count >= 1
  • model.first.count >= 1

ensure

  • line_minimum = model.lower
  • line_maximum = model.upper
  • column_minimum = model.first.lower
  • column_maximum = model.first.upper
  • count1 = model.count
  • count2 = model.first.count

lower1: INTEGER

Lower index bounds.

lower2: INTEGER

Lower index bounds.

upper1: INTEGER

Upper index bounds.

upper2: INTEGER

Upper index bounds.

make (line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER)

Reset all bounds line_minimum / line_maximum / column_minimum and column_maximum using arguments as new values. All elements are set to the default value of type E_.

require

  • line_min <= line_max
  • column_min <= column_max

ensure

  • line_minimum = line_min
  • line_maximum = line_max
  • column_minimum = column_min
  • column_maximum = column_max

from_collection2 (model: COLLECTION2[E_])
 Uses model to initialize Current.

require

  • model /= Void

ensure

  • lower1 = model.lower1
  • lower2 = model.lower2
  • count1 = model.count1
  • count2 = model.count2

from_collection (contents: COLLECTION[E_], line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER)
 Reset all bounds using line_min, line_max, column_min,
 and column_max .
 Copy all elements of contents, line by line into Current.

require

  • line_min <= line_max
  • column_min <= column_max
  • contents.count = (line_max - line_min + 1) * (column_max - column_min + 1)

ensure

  • line_minimum = line_min
  • line_maximum = line_max
  • column_minimum = column_min
  • column_maximum = column_max
  • count = contents.count

from_model (model: COLLECTION[COLLECTION[E_]])

The model is used to fill line by line the COLLECTION2. Assume all sub-collections of model have the same indexing.

require

  • model.count >= 1
  • model.first.count >= 1

ensure

  • line_minimum = model.lower
  • line_maximum = model.upper
  • column_minimum = model.first.lower
  • column_maximum = model.first.upper
  • count1 = model.count
  • count2 = model.first.count

resize (line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER)

Resize bounds of the Current array

require

  • line_max >= line_min
  • column_max >= column_min

ensure

  • line_minimum = line_min
  • line_maximum = line_max
  • column_minimum = column_min
  • column_maximum = column_max

item (line: INTEGER, column: INTEGER): E_

require

  • valid_index(line, column)

put (element: E_, line: INTEGER, column: INTEGER)

require

  • valid_index(line, column)

ensure

  • item(line, column) = element

count1: INTEGER

Size of the first dimension.

ensure

  • Result = upper1 - lower1 + 1

count2: INTEGER

Size of the second dimension.

ensure

  • Result = upper2 - lower2 + 1

count: INTEGER

Total number of elements.

ensure

  • Result = line_count * column_count

force (x: E_, line: INTEGER, column: INTEGER)

Put element at position (line,column). Collection is resized first when (line,column) is not inside current bounds. New bounds are initialized with default values.

require

  • True
  • line >= 0
  • column >= 0

ensure

  • item(line, column) = x
  • count >= old count

set_all_with (element: E_)

Set all item with value v.

ensure

  • count = old count

replace_all (old_value: E_, new_value: E_)

Replace all occurrences of the element old_value by new_value using is_equal for comparison. See also fast_replace_all to choose the apropriate one.

ensure

  • count = old count
  • occurrences(old_value) = 0

fast_replace_all (old_value: E_, new_value: E_)

Replace all occurrences of the element old_value by new_value using operator = for comparison. See also replace_all to choose the apropriate one.

ensure

  • count = old count
  • fast_occurrences(old_value) = 0

sub_collection2 (line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER): ARRAY2 [E_]

Create a new object using selected area of Current.

require

  • valid_index(line_min, column_min)
  • valid_index(line_max, column_max)

ensure

  • Result.lower1 = line_min
  • Result.lower2 = column_min
  • Result.upper1 = line_max
  • Result.upper2 = column_max
  • Result /= Void

occurrences (elt: E_): INTEGER

Number of occurrences using is_equal. See also fast_occurrences to chose the apropriate one.

ensure

  • Result >= 0

fast_occurrences (elt: E_): INTEGER

Number of occurrences using =. See also occurrences to chose the apropriate one.

ensure

  • Result >= 0

has (x: E_): BOOLEAN

Search if a element x is in the array using equal. See also fast_has to chose the apropriate one.

fast_has (x: E_): BOOLEAN
 Search if a element x is in the array using =.
all_default: BOOLEAN

Do all items have their type's default value?

swap (line1: INTEGER, column1: INTEGER, line2: INTEGER, column2: INTEGER)

Swap the element at index (line1,column1) with the the element at index (line2,column2).

require

  • valid_index(line1, column1)
  • valid_index(line2, column2)

ensure

  • item(line1, column1) = old item(line2, column2)
  • item(line2, column2) = old item(line1, column1)
  • count = old count

copy (other: ARRAY2 [E_])

require

  • same_dynamic_type(other)

ensure

  • is_equal(other)

transpose

Transpose the Current array

ensure

  • line_minimum = old column_minimum
  • column_minimum = old line_minimum
  • line_maximum = old column_maximum
  • column_maximum = old line_maximum
  • count = old count

to_external: POINTER

Gives C access to the internal storage (may be dangerous).

frozen line_minimum: INTEGER

Equivalent of lower1.

frozen column_minimum: INTEGER

Equivalent of lower2.

frozen line_maximum: INTEGER

Equivalent of upper1.

frozen column_maximum: INTEGER

Equivalent of upper2.

frozen valid_line (line: INTEGER): BOOLEAN

ensure

  • Result = (lower1 <= line and line <= upper1)

valid_index1 (line: INTEGER): BOOLEAN

ensure

  • Result = (lower1 <= line and line <= upper1)

frozen valid_column (column: INTEGER): BOOLEAN

ensure

  • Result = (lower2 <= column and column <= upper2)

valid_index2 (column: INTEGER): BOOLEAN

ensure

  • Result = (lower2 <= column and column <= upper2)

frozen valid_index (line: INTEGER, column: INTEGER): BOOLEAN

ensure

  • Result = (valid_line(line) and valid_column(column))

frozen line_count: INTEGER

Equivalent of count1.

frozen column_count: INTEGER
frozen clear_all

Set all items to default values.

ensure

  • count = old count
  • all_default

is_equal (other: COLLECTION2[E_]): BOOLEAN

Do both collections have the same lower1, lower2, upper1 and upper2, and items? The basic = is used for comparison of items. See also is_equal_map.

require

  • other /= Void

ensure

  • commutative: generating_type = other.generating_type implies Result = other.is_equal(Current)

is_equal_map (other: COLLECTION2[E_]): BOOLEAN

Do both collections have the same lower1, lower2, upper1 and upper2, and items? Feature is_equal is used for comparison of items. See also is_equal.

frozen same_as (other: COLLECTION2[E_]): BOOLEAN
This feature is obsolete: Now you can just use `is_equal'. (July 7th2004)
frozen fill_tagged_out_memory

Append a viewable information in tagged_out_memory in order to affect the behavior of out, tagged_out, etc.

set_area (element: E_, line_min: INTEGER, line_max: INTEGER, column_min: INTEGER, column_max: INTEGER)

Set all the elements of the selected area rectangle with element.

require

  • valid_index(line_min, column_min)
  • valid_index(line_max, column_max)

ensure

  • count = old count

test (e1: E, e2: E): BOOLEAN

In order to avoid run-time type errors, feature safe_equal calls is_equal only when e1 and e2 have exactly the same dynamic type. Furthermore, this feature avoids argument passing from some expanded type to the corresponding reference type (no automatic allocation of some reference type during the comparison).

safe_equal (e1: E, e2: E): BOOLEAN

In order to avoid run-time type errors, feature safe_equal calls is_equal only when e1 and e2 have exactly the same dynamic type. Furthermore, this feature avoids argument passing from some expanded type to the corresponding reference type (no automatic allocation of some reference type during the comparison).

Class invariant