unconstrained_array_definition | constrained_array_definition
unconstrained_array_definition ::=
array
(index_subtype_definition {, index_subtype_definition}) of
component_subtype_indication
array
index_constraint of
component_subtype_indication
range
<>
type
VECTOR is array
(INTEGER range
<>) of
REAL;
type
MATRIX is array
(INTEGER range
<>, INTEGER range
<>)
of
REAL;
type
BIT_VECTOR is array
(INTEGER range
<>) of
BOOLEAN;
type
ROMAN is array
(POSITIVE range
<>) of
ROMAN_DIGIT;
type
TABLE is array
(1 .. 10) of
INTEGER;
type
SCHEDULE is array
(DAY) of
BOOLEAN;
type
LINE is array
(1 .. MAX_LINE_SIZE) of
CHARACTER;
GRID :
array
(1 .. 80, 1 .. 100) of
BOOLEAN;
MIX : array
(COLOR range
RED .. GREEN) of
BOOLEAN;
PAGE : array
(1 .. 50) of
LINE; -- an array of arrays
type
T is array
(POSITIVE range
MIN .. MAX) of
COMPONENT;
subtype
index_subtype is
POSITIVE range
MIN .. MAX;
type
array_type is array
(index_subtype range
<>) of
COMPONENT;
subtype
T is
array_type (index_subtype);
in
.
in out
, the bounds are those of the renamed object or of the corresponding generic actual parameter.
BOARD : MATRIX(1 .. 8, 1 .. 8); -- see 3.6
RECTANGLE : MATRIX(1 .. 20, 1 .. 30);
INVERSE : MATRIX(1 .. N, 1 .. N); -- N need not be
-- static
FILTER : BIT_VECTOR(0 .. 31);
MY_SCHEDULE : SCHEDULE; -- all arrays of type SCHEDULE
-- have the same bounds
type
VAR_LINE(LENGTH : INTEGER) is
record
IMAGE : STRING(1 .. LENGTH);
end record
;
-- array
not
, and the logical operators.
-- FILTER'FIRST = 0 FILTER'LAST = 31 FILTER'LENGTH = 32
-- RECTANGLE'LAST(1) = 20 RECTANGLE'LAST(2) = 30
A'LENGTH = A'LAST - A'FIRST + 1
A'LENGTH(N) = A'LAST(N) - A'FIRST(N) + 1
subtype
POSITIVE is
INTEGER range
1 .. INTEGER'LAST;
type
STRING is array
(POSITIVE range
<>) of CHARACTER;
STARS : STRING(1 .. 120) := (1 .. 120 => `*' );
QUESTION : constant
STRING := "HOW MANY CHARACTERS?";
-- QUESTION'FIRST = 1, QUESTION'LAST = 20
-- (the number of characters)
constant
STRING := QUESTION & QUESTION;
NINETY_SIX : constant
ROMAN := "XCVI"; -- see 3.6