File: AA-3-6-2.html

package info (click to toggle)
ada-reference-manual 20021112web-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, sarge
  • size: 18,652 kB
  • ctags: 8,921
  • sloc: makefile: 52; sh: 20
file content (168 lines) | stat: -rw-r--r-- 12,957 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
    <TITLE>AARM95 - Operations of Array Types</TITLE>
    <META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
    <META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
    <STYLE type="text/css">
    DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
    TT {font-family: "Courier New", monospace}
    DT {display: compact}
    DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
    DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
    DIV.Index {font-family: "Times New Roman", Times, serif}
    DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
    DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
    DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
    DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
    DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left:  10.0em; margin-bottom: 0.6em}
    DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
    DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
    DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
    DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left:  15.0em; margin-bottom: 0.6em}
    UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
    DD.Hanging {margin-left: 6.0em}
    DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.IndentedHanging {margin-left: 2.0em}
    DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.HangingInBulleted {margin-left: 4.0em}
    DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallHanging {margin-left: 7.5em}
    DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
    DD.SmallIndentedHanging {margin-left: 2.0em}
    DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallHangingInBulleted {margin-left: 5.0em}
    DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.Enumerated {margin-left: 2.0em}
    DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
    DD.SmallEnumerated {margin-left: 2.5em}
    DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
    DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
    </STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-6-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-6-3.html">Next</A></P>
<HR>
<H1> 3.6.2 Operations of Array Types</H1>

<H4 ALIGN=CENTER>Legality Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;[The argument N used in the <FONT FACE="Arial, Helvetica">attribute_designator</FONT>s
for the N-th dimension of an array shall be a static <FONT FACE="Arial, Helvetica">expression</FONT>
of some integer type.]  The value of N shall be positive (nonzero) and
no greater than the dimensionality of the array. </DIV>

<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2/1</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<I><A HREF="defect1.html#8652/0006">8652/0006</A></I>}
The following attributes are defined for a <U><FONT FACE="Arial, Helvetica">prefix</FONT></U><S>prefix</S>
A that is of an array type [(after any implicit dereference)], or denotes
a constrained array subtype: </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>2.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Ramification: </B>These attributes
are not defined if A is a subtype-mark for an access-to-array subtype.
They are defined (by implicit dereference) for access-to-array values.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'First<DD Class="Hanging">
<A NAME="I1889"></A><A NAME="I1890"></A>A'First denotes the lower bound
of the first index range; its type is the corresponding index type.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'First(N)<DD Class="Hanging">
<A NAME="I1891"></A><A NAME="I1892"></A>A'First(N) denotes the lower
bound of the N-th index range; its type is the corresponding index type.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'Last<DD Class="Hanging">
<A NAME="I1893"></A><A NAME="I1894"></A>A'Last denotes the upper bound
of the first index range; its type is the corresponding index type.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'Last(N)<DD Class="Hanging">
<A NAME="I1895"></A><A NAME="I1896"></A>A'Last(N) denotes the upper bound
of the N-th index range; its type is the corresponding index type.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'Range<DD Class="Hanging">
<A NAME="I1897"></A><A NAME="I1898"></A>A'Range is equivalent to the
range A'First .. A'Last, except that the <FONT FACE="Arial, Helvetica">prefix</FONT>
A is only evaluated once.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'Range(N)<DD Class="Hanging">
<A NAME="I1899"></A><A NAME="I1900"></A>A'Range(N) is equivalent to the
range A'First(N) .. A'Last(N), except that the <FONT FACE="Arial, Helvetica">prefix</FONT>
A is only evaluated once.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;A'Length<DD Class="Hanging">
<A NAME="I1901"></A><A NAME="I1902"></A>A'Length denotes the number of
values of the first index range (zero for a null range); its type is
<I>universal_integer</I>.</DL>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DL Class="Hanging"><DT>&nbsp;&nbsp;&nbsp;&nbsp;A'Length(N)<DD Class="Hanging">
<A NAME="I1903"></A><A NAME="I1904"></A>A'Length(N) denotes the number
of values of the N-th index range (zero for a null range); its type is
<I>universal_integer</I>. </DL>

<H4 ALIGN=CENTER>Implementation Advice</H4>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Normal">&nbsp;&nbsp;&nbsp;&nbsp;An implementation should normally represent multidimensional
arrays in row-major order, consistent with the notation used for multidimensional
array aggregates (see <A HREF="AA-4-3-3.html">4.3.3</A>). However, if
a <B>pragma</B> Convention(Fortran, ...) applies to a multidimensional
array type, then column-major order should be used instead (see <A HREF="AA-B-5.html">B.5</A>,
``<A HREF="AA-B-5.html">Interfacing with Fortran</A>''). </DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>12</FONT></DIV>
<DIV Class="Notes" Style="margin-bottom: 0.4em"><FONT SIZE=-1>45&nbsp;&nbsp;The
<FONT FACE="Arial, Helvetica">attribute_reference</FONT>s A'First and
A'First(1) denote the same value. A similar relation exists for the <FONT FACE="Arial, Helvetica">attribute_reference</FONT>s
A'Last, A'Range, and A'Length. The following relation is satisfied (except
for a null array) by the above attributes if the index type is an integer
type: </FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>13</FONT></DIV>
<DIV Class="Examples"><TT>&nbsp;&nbsp;&nbsp;A'Length(N)&nbsp;=&nbsp;A'Last(N)&nbsp;-&nbsp;A'First(N)&nbsp;+&nbsp;1</TT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>14</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>46&nbsp;&nbsp;An array type is limited
if its component type is limited (see <A HREF="AA-7-5.html">7.5</A>).</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>15</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>47&nbsp;&nbsp;<A NAME="I1905"></A>The
predefined operations of an array type include the membership tests,
qualification, and explicit conversion. If the array type is not limited,
they also include assignment and the predefined equality operators. For
a one-dimensional array type, they include the predefined concatenation
operators (if nonlimited) and, if the component type is discrete, the
predefined relational operators; if the component type is boolean, the
predefined logical operators are also included.</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>16</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>48&nbsp;&nbsp;A component of an array
can be named with an <FONT FACE="Arial, Helvetica">indexed_component</FONT>.
A value of an array type can be specified with an <FONT FACE="Arial, Helvetica">array_aggregate</FONT>,
unless the array type is limited. For a one-dimensional array type, a
slice of the array can be named; also, string literals are defined if
the component type is a character type. </FONT></DIV>

<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>17</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em">&nbsp;&nbsp;&nbsp;&nbsp;<I>Examples (using
arrays declared in the examples of subclause <A HREF="AA-3-6-1.html">3.6.1</A>):</I>
</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>18</FONT></DIV>
<DIV Class="Examples"><TT>--&nbsp;&nbsp;Filter'First&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;Filter'Last&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;31&nbsp;&nbsp;&nbsp;Filter'Length&nbsp;=&nbsp;&nbsp;32<BR>
--&nbsp;&nbsp;Rectangle'Last(1)&nbsp;=&nbsp;&nbsp;20&nbsp;&nbsp;&nbsp;Rectangle'Last(2)&nbsp;=&nbsp;&nbsp;30</TT></DIV>

<HR>
<P><A HREF="AA-TOC.html">Contents</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-0-29.html">Index</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-6-1.html">Previous</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-3-6-3.html">Next</A>&nbsp;&nbsp;&nbsp;<A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>