indexing
description: "[
Sequences of values, all of the same type or of a conforming one,
accessible through integer indices in a contiguous interval.
]"
status: "See notice at end of class"
date: "$Date$"
revision: "$Revision$"
class interface
ARRAY [G]
create
make (min_index, max_index: INTEGER)
min_indexmax_index
min_indexmax_index
require
valid_bounds: min_index <= max_index + 1
ensure
lower_set: lower = min_index
upper_set: upper = max_index
items_set: all_default
make_from_array (a: ARRAY [G])
a
ARRAY
require
array_exists: a /= void
feature
make (min_index, max_index: INTEGER)
min_indexmax_index
min_indexmax_index
require
valid_bounds: min_index <= max_index + 1
ensure
lower_set: lower = min_index
upper_set: upper = max_index
items_set: all_default
make_from_array (a: ARRAY [G])
a
ARRAY
require
array_exists: a /= void
feature
area: SPECIAL [G]
TO_SPECIAL
entry (i: INTEGER): G
i
require
valid_key: valid_index (i)
has (v: G): BOOLEAN
v
object_comparison
ensure CONTAINER
not_found_in_empty: Result implies not is_empty
item (i: INTEGER): G
i
ARRAY@
require TABLE
valid_key: valid_index (k)
infix "@" (i: INTEGER): G
i
ARRAYitem
require TABLE
valid_key: valid_index (k)
feature
additional_space: INTEGER
RESIZABLE
ensure RESIZABLE
at_least_one: Result >= 1
capacity: INTEGER
ARRAYcount
ensure then
consistent_with_bounds: Result = upper - lower + 1
count: INTEGER
ARRAYcapacity
ensure then
consistent_with_bounds: Result = upper - lower + 1
Growth_percentage: INTEGER is 50
RESIZABLE
index_set: INTEGER_INTERVAL
ensure INDEXABLE
not_void: Result /= void
ensure then
same_count: Result.count = count
same_bounds: ((Result.lower = lower) and (Result.upper = upper))
lower: INTEGER
Minimal_increase: INTEGER is 5
RESIZABLE
occurrences (v: G): INTEGER
v
ensure BAG
non_negative_occurrences: Result >= 0
upper: INTEGER
feature
is_equal (other: like Current): BOOLEAN
other
require ANY
other_not_void: other /= void
ensure ANY
symmetric: Result implies other.is_equal (Current)
consistent: standard_is_equal (other) implies Result
feature
all_default: BOOLEAN
ensure
definition: Result = (count = 0 or else ((item (upper) = void or else item (upper) = item (upper).default) and subarray (lower, upper - 1).all_default))
changeable_comparison_criterion: BOOLEAN
object_comparison
CONTAINER
extendible: BOOLEAN
full: BOOLEAN
is_empty: BOOLEAN
FINITE
is_inserted (v: G): BOOLEAN
v
COLLECTION
object_comparison: BOOLEAN
equal=
=
CONTAINER
prunable: BOOLEAN
resizable: BOOLEAN
capacity
RESIZABLE
same_items (other: like Current): BOOLEAN
other
require
other_not_void: other /= void
ensure
definition: Result = ((count = other.count) and then (count = 0 or else (item (upper) = other.item (other.upper) and subarray (lower, upper - 1).same_items (other.subarray (other.lower, other.upper - 1)))))
valid_index (i: INTEGER): BOOLEAN
i
ensure then INDEXABLE
only_if_in_index_set: Result implies ((i >= index_set.lower) and (i <= index_set.upper))
valid_index_set: BOOLEAN
feature
compare_objects
equal
=
CONTAINER
require CONTAINER
changeable_comparison_criterion
ensure CONTAINER
object_comparison
compare_references
=
equal
CONTAINER
require CONTAINER
changeable_comparison_criterion
ensure CONTAINER
reference_comparison: not object_comparison
feature
enter (v: like item; i: INTEGER)
iv
require
valid_key: valid_index (i)
fill (other: CONTAINER [G])
other
other
COLLECTION
require COLLECTION
other_not_void: other /= void
extendible
force (v: like item; i: INTEGER)
vi
i
ensure
inserted: item (i) = v
higher_count: count >= old count
put (v: like item; i: INTEGER)
iv
require TABLE
valid_key: valid_index (k)
ensure then INDEXABLE
insertion_done: item (k) = v
subcopy (other: like Current; start_pos, end_pos, index_pos: INTEGER)
otherstart_posend_pos
index_pos
require
other_not_void: other /= void
valid_start_pos: other.valid_index (start_pos)
valid_end_pos: other.valid_index (end_pos)
valid_bounds: (start_pos <= end_pos) or (start_pos = end_pos + 1)
valid_index_pos: valid_index (index_pos)
enough_space: (upper - index_pos) >= (end_pos - start_pos)
feature
clear_all
ensure
stable_lower: lower = old lower
stable_upper: upper = old upper
default_items: all_default
discard_items
ensure
default_items: all_default
prune_all (v: G)
v
object_comparison
COLLECTION
require COLLECTION
prunable
ensure COLLECTION
no_more_occurrences: not has (v)
feature
automatic_grow
Growth_percentage
RESIZABLE
ensure RESIZABLE
increased_capacity: capacity >= old capacity + old capacity * growth_percentage // 100
grow (i: INTEGER)
i
ensure RESIZABLE
new_capacity: capacity >= i
resize (min_index, max_index: INTEGER)
min_indexmax_index
require
good_indices: min_index <= max_index
ensure
no_low_lost: lower = min_index or else lower = old lower
no_high_lost: upper = max_index or else upper = old upper
feature
linear_representation: LINEAR [G]
to_c: ANY
feature
copy (other: like Current)
other
clone
require ANY
other_not_void: other /= void
type_identity: same_type (other)
ensure ANY
is_equal: is_equal (other)
ensure then
equal_areas: area.is_equal (other.area)
subarray (start_pos, end_pos: INTEGER): like Current
start_posend_pos
require
valid_start_pos: valid_index (start_pos)
valid_end_pos: valid_index (end_pos)
valid_bounds: (start_pos <= end_pos) or (start_pos = end_pos + 1)
ensure
lower: Result.lower = start_pos
upper: Result.upper = end_pos
invariant
area_exists: area /= void
consistent_size: capacity = upper - lower + 1
non_negative_count: count >= 0
index_set_has_same_count: valid_index_set
ANY
reflexive_equality: standard_is_equal (Current)
reflexive_conformance: conforms_to (Current)
RESIZABLE
increase_by_at_least_one: minimal_increase >= 1
BOUNDED
valid_count: count <= capacity
full_definition: full = (count = capacity)
FINITE
empty_definition: is_empty = (count = 0)
non_negative_count: count >= 0
INDEXABLE
index_set_not_void: index_set /= void
indexing
library: "[
EiffelBase: Library of reusable components for Eiffel.
]"
status: "[
Copyright 1986-2001 Interactive Software Engineering (ISE).
For ISE customers the original versions are an ISE product
covered by the ISE Eiffel license and support agreements.
]"
license: "[
EiffelBase may now be used by anyone as FREE SOFTWARE to
develop any product, public-domain or commercial, without
payment to ISE, under the terms of the ISE Free Eiffel Library
License (IFELL) at http://eiffel.com/products/base/license.html.
]"
source: "[
Interactive Software Engineering Inc.
ISE Building
360 Storke Road, Goleta, CA 93117 USA
Telephone 805-685-1006, Fax 805-685-6869
Electronic mail <info@eiffel.com>
Customer support http://support.eiffel.com
]"
info: "[
For latest info see award-winning pages: http://eiffel.com
]"
end -- ARRAY