]> code.delx.au - gnu-emacs-elpa/blob - packages/ada-ref-man/arm2012.info
Merge commit '0cda39255827f283e7578cd469ae42daad9556a2' from js2-mode
[gnu-emacs-elpa] / packages / ada-ref-man / arm2012.info
1 This is arm2012.info, produced by texi2any version 5.2 from
2 arm2012.texinfo.
3
4 INFO-DIR-SECTION GNU Ada tools
5 START-INFO-DIR-ENTRY
6 * Ada Reference Manual: (arm2012).
7 * Annotated ARM: (arm2012).
8 END-INFO-DIR-ENTRY
9
10 \1f
11 File: arm2012.info, Node: Top, Next: Front Matter, Up: (dir)
12
13 Ada Reference Manual
14 ********************
15
16 Ada Reference Manual, ISO/IEC 8652:2012(E)
17
18 Ada Reference Manual
19
20 ISO/IEC 8652:2012(E)
21
22 Language and Standard Libraries
23
24 * Menu:
25
26 * Front Matter:: Copyright, Foreword, etc.
27 * 1 :: General
28 * 2 :: Lexical Elements
29 * 3 :: Declarations and Types
30 * 4 :: Names and Expressions
31 * 5 :: Statements
32 * 6 :: Subprograms
33 * 7 :: Packages
34 * 8 :: Visibility Rules
35 * 9 :: Tasks and Synchronization
36 * 10 :: Program Structure and Compilation Issues
37 * 11 :: Exceptions
38 * 12 :: Generic Units
39 * 13 :: Representation Issues
40 * Annex A :: Predefined Language Environment
41 * Annex B :: Interface to Other Languages
42 * Annex C :: Systems Programming
43 * Annex D :: Real-Time Systems
44 * Annex E :: Distributed Systems
45 * Annex F :: Information Systems
46 * Annex G :: Numerics
47 * Annex H :: High Integrity Systems
48 * Annex J :: Obsolescent Features
49 * Annex K :: Language-Defined Aspects and Attributes
50 * Annex L :: Language-Defined Pragmas
51 * Annex M :: Summary of Documentation Requirements
52 * Annex N :: Glossary
53 * Annex P :: Syntax Summary
54 * Annex Q :: Language-Defined Entities
55 * Index :: Index
56
57 \1f
58 File: arm2012.info, Node: Front Matter, Next: 1, Prev: Top, Up: Top
59
60 Front Matter
61 ************
62
63 Copyright © 1992, 1993, 1994, 1995 Intermetrics, Inc.
64
65 Copyright © 2000 The MITRE Corporation, Inc.
66
67 Copyright © 2004, 2005, 2006 AXE Consultants
68
69 Copyright © 2004, 2005, 2006 Ada-Europe
70
71 Copyright © 2008, 2009, 2010, 2011, 2012 AXE Consultants
72
73
74
75
76
77
78
79 Ada Reference Manual - Language and Standard Libraries
80
81 Copyright © 1992, 1993, 1994, 1995, Intermetrics, Inc.
82
83 This copyright is assigned to the U.S. Government. All rights reserved.
84
85 This document may be copied, in whole or in part, in any form or by any
86 means, as is or with alterations, provided that (1) alterations are
87 clearly marked as alterations and (2) this copyright notice is included
88 unmodified in any copy. Compiled copies of standard library units and
89 examples need not contain this copyright notice so long as the notice is
90 included in all copies of source code and documentation.
91
92 -------
93
94 Technical Corrigendum 1
95
96 Copyright © 2000, The MITRE Corporation. All Rights Reserved.
97
98 This document may be copied, in whole or in part, in any form or by any
99 means, as is, or with alterations, provided that (1) alterations are
100 clearly marked as alterations and (2) this copyright notice is included
101 unmodified in any copy. Any other use or distribution of this document
102 is prohibited without the prior express permission of MITRE.
103
104 You use this document on the condition that you indemnify and hold
105 harmless MITRE, its Board of Trustees, officers, agents, and employees,
106 from any and all liability or damages to yourself or your hardware or
107 software, or third parties, including attorneys' fees, court costs, and
108 other related costs and expenses, arising out of your use of this
109 document irrespective of the cause of said liability.
110
111 MITRE MAKES THIS DOCUMENT AVAILABLE ON AN "AS IS" BASIS AND MAKES NO
112 WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, CAPABILITY, EFFICIENCY
113 MERCHANTABILITY, OR FUNCTIONING OF THIS DOCUMENT. IN NO EVENT WILL MITRE
114 BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT, INCIDENTAL,
115 EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF MITRE HAS BEEN ADVISED OF THE
116 POSSIBILITY OF SUCH DAMAGES.
117
118
119
120 Amendment 1
121
122 Copyright © 2004, 2005, 2006, 2007, AXE Consultants. All Rights
123 Reserved.
124
125 This document may be copied, in whole or in part, in any form or by any
126 means, as is, or with alterations, provided that (1) alterations are
127 clearly marked as alterations and (2) this copyright notice is included
128 unmodified in any copy. Any other use or distribution of this document
129 is prohibited without the prior express permission of AXE.
130
131 You use this document on the condition that you indemnify and hold
132 harmless AXE, its board, officers, agents, and employees, from any and
133 all liability or damages to yourself or your hardware or software, or
134 third parties, including attorneys' fees, court costs, and other related
135 costs and expenses, arising out of your use of this document
136 irrespective of the cause of said liability.
137
138 AXE MAKES THIS DOCUMENT AVAILABLE ON AN "AS IS" BASIS AND MAKES NO
139 WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, CAPABILITY, EFFICIENCY
140 MERCHANTABILITY, OR FUNCTIONING OF THIS DOCUMENT. IN NO EVENT WILL AXE
141 BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT, INCIDENTAL,
142 EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF AXE HAS BEEN ADVISED OF THE
143 POSSIBILITY OF SUCH DAMAGES.
144
145 Third Edition
146
147 Copyright © 2008, 2009, 2010, 2011, 2012 AXE Consultants. All Rights
148 Reserved.
149
150 This document may be copied, in whole or in part, in any form or by any
151 means, as is, or with alterations, provided that (1) alterations are
152 clearly marked as alterations and (2) this copyright notice is included
153 unmodified in any copy. Any other use or distribution of this document
154 is prohibited without the prior express permission of AXE.
155
156 You use this document on the condition that you indemnify and hold
157 harmless AXE, its board, officers, agents, and employees, from any and
158 all liability or damages to yourself or your hardware or software, or
159 third parties, including attorneys' fees, court costs, and other related
160 costs and expenses, arising out of your use of this document
161 irrespective of the cause of said liability.
162
163 AXE MAKES THIS DOCUMENT AVAILABLE ON AN "AS IS" BASIS AND MAKES NO
164 WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, CAPABILITY, EFFICIENCY
165 MERCHANTABILITY, OR FUNCTIONING OF THIS DOCUMENT. IN NO EVENT WILL AXE
166 BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT, INCIDENTAL,
167 EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF AXE HAS BEEN ADVISED OF THE
168 POSSIBILITY OF SUCH DAMAGES.
169
170
171
172 Ada 2005 Consolidated Standard
173
174 Copyright © 2004, 2005, 2006, Ada-Europe.
175
176 This document may be copied, in whole or in part, in any form or by any
177 means, as is, or with alterations, provided that (1) alterations are
178 clearly marked as alterations and (2) this copyright notice is included
179 unmodified in any copy. Any other use or distribution of this document
180 is prohibited without the prior express permission of Ada-Europe.
181
182 You use this document on the condition that you indemnify and hold
183 harmless Ada-Europe and its Board from any and all liability or damages
184 to yourself or your hardware or software, or third parties, including
185 attorneys' fees, court costs, and other related costs and expenses,
186 arising out of your use of this document irrespective of the cause of
187 said liability.
188
189 ADA-EUROPE MAKES THIS DOCUMENT AVAILABLE ON AN "AS IS" BASIS AND MAKES
190 NO WARRANTY, EXPRESS OR IMPLIED, AS TO THE ACCURACY, CAPABILITY,
191 EFFICIENCY MERCHANTABILITY, OR FUNCTIONING OF THIS DOCUMENT. IN NO EVENT
192 WILL ADA-EUROPE BE LIABLE FOR ANY GENERAL, CONSEQUENTIAL, INDIRECT,
193 INCIDENTAL, EXEMPLARY, OR SPECIAL DAMAGES, EVEN IF ADA-EUROPE HAS BEEN
194 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
195
196 * Menu:
197
198 * 0.1 :: Foreword to this version of the Ada Reference Manual
199 * 0.2 :: Foreword
200 * 0.3 :: Introduction
201 * 0.99 :: International Standard
202
203 \1f
204 File: arm2012.info, Node: 0.1, Next: 0.2, Up: Front Matter
205
206 0.1 Foreword
207 ============
208
209 1/3
210 ISO (the International Organization for Standardization) and IEC (the
211 International Electrotechnical Commission) form the specialized system
212 for worldwide standardization. National bodies that are members of ISO
213 or IEC participate in the development of International Standards through
214 technical committees established by the respective organization to deal
215 with particular fields of technical activity. ISO and IEC technical
216 committees collaborate in fields of mutual interest. Other
217 international organizations, governmental and non-governmental, in
218 liaison with ISO and IEC, also take part in the work. In the field of
219 information technology, ISO and IEC have established a joint technical
220 committee, ISO/IEC JTC 1.
221
222 1.1/3
223 International Standards are drafted in accordance with the rules given
224 in the ISO/IEC Directives, Part 2.
225
226 2/3
227 The main task of the joint technical committee is to prepare
228 International Standards. Draft International Standards adopted by the
229 joint technical committee are circulated to national bodies for voting.
230 Publication as an International Standard requires approval by at least
231 75 % of the national bodies casting a vote.
232
233 2.1/3
234 Attention is drawn to the possibility that some of the elements of this
235 document may be the subject of patent rights. ISO and IEC shall not be
236 held responsible for identifying any or all such patent rights.
237
238 3/3
239 International Standard ISO/IEC 8652 was prepared by Joint Technical
240 Committee ISO/IEC JTC 1, Information Technology Subcommittee SC22,
241 Programming languages, their environments and system software
242 interfaces.
243
244 4/3
245 This third edition cancels and replaces the second edition (ISO/IEC
246 8652:1995), which has been technically revised. It also incorporates
247 the Technical Corrigendum ISO/IEC 8652:1995:COR.1:2001 and Amendment
248 ISO/IEC 8652:1995:AMD 1:2007.
249
250 \1f
251 File: arm2012.info, Node: 0.2, Next: 0.99, Prev: 0.1, Up: Front Matter
252
253 0.2 Introduction
254 ================
255
256 1
257 This is the Ada Reference Manual.
258
259 2
260 Other available Ada documents include:
261
262 3/3
263 * Ada 2012 Rationale. This gives an introduction to the changes and
264 new features in Ada 2012, and explains the rationale behind them.
265 Programmers should read this rationale before reading this Standard
266 in depth. Rationales for Ada 83, Ada 95, and Ada 2005 are also
267 available.
268
269 4/1
270 * This paragraph was deleted.
271
272 5/3
273 * The Annotated Ada Reference Manual (AARM). The AARM contains all of
274 the text in this International Standard, plus various annotations.
275 It is intended primarily for compiler writers, validation test
276 writers, and others who wish to study the fine details. The
277 annotations include detailed rationale for individual rules and
278 explanations of some of the more arcane interactions among the
279 rules.
280
281 Design Goals
282
283 6/3
284 Ada was originally designed with three overriding concerns: program
285 reliability and maintenance, programming as a human activity, and
286 efficiency. The 1995 revision to the language was designed to provide
287 greater flexibility and extensibility, additional control over storage
288 management and synchronization, and standardized packages oriented
289 toward supporting important application areas, while at the same time
290 retaining the original emphasis on reliability, maintainability, and
291 efficiency. This third edition provides further flexibility and adds
292 more standardized packages within the framework provided by the 1995
293 revision.
294
295 7
296 The need for languages that promote reliability and simplify maintenance
297 is well established. Hence emphasis was placed on program readability
298 over ease of writing. For example, the rules of the language require
299 that program variables be explicitly declared and that their type be
300 specified. Since the type of a variable is invariant, compilers can
301 ensure that operations on variables are compatible with the properties
302 intended for objects of the type. Furthermore, error-prone notations
303 have been avoided, and the syntax of the language avoids the use of
304 encoded forms in favor of more English-like constructs. Finally, the
305 language offers support for separate compilation of program units in a
306 way that facilitates program development and maintenance, and which
307 provides the same degree of checking between units as within a unit.
308
309 8
310 Concern for the human programmer was also stressed during the design.
311 Above all, an attempt was made to keep to a relatively small number of
312 underlying concepts integrated in a consistent and systematic way while
313 continuing to avoid the pitfalls of excessive involution. The design
314 especially aims to provide language constructs that correspond
315 intuitively to the normal expectations of users.
316
317 9
318 Like many other human activities, the development of programs is
319 becoming ever more decentralized and distributed. Consequently, the
320 ability to assemble a program from independently produced software
321 components continues to be a central idea in the design. The concepts
322 of packages, of private types, and of generic units are directly related
323 to this idea, which has ramifications in many other aspects of the
324 language. An allied concern is the maintenance of programs to match
325 changing requirements; type extension and the hierarchical library
326 enable a program to be modified while minimizing disturbance to existing
327 tested and trusted components.
328
329 10
330 No language can avoid the problem of efficiency. Languages that require
331 over-elaborate compilers, or that lead to the inefficient use of storage
332 or execution time, force these inefficiencies on all machines and on all
333 programs. Every construct of the language was examined in the light of
334 present implementation techniques. Any proposed construct whose
335 implementation was unclear or that required excessive machine resources
336 was rejected.
337
338 Language Summary
339
340 11
341 An Ada program is composed of one or more program units. Program units
342 may be subprograms (which define executable algorithms), packages (which
343 define collections of entities), task units (which define concurrent
344 computations), protected units (which define operations for the
345 coordinated sharing of data between tasks), or generic units (which
346 define parameterized forms of packages and subprograms). Each program
347 unit normally consists of two parts: a specification, containing the
348 information that must be visible to other units, and a body, containing
349 the implementation details, which need not be visible to other units.
350 Most program units can be compiled separately.
351
352 12
353 This distinction of the specification and body, and the ability to
354 compile units separately, allows a program to be designed, written, and
355 tested as a set of largely independent software components.
356
357 13
358 An Ada program will normally make use of a library of program units of
359 general utility. The language provides means whereby individual
360 organizations can construct their own libraries. All libraries are
361 structured in a hierarchical manner; this enables the logical
362 decomposition of a subsystem into individual components. The text of a
363 separately compiled program unit must name the library units it
364 requires.
365
366 14
367 Program Units
368
369 15
370 A subprogram is the basic unit for expressing an algorithm. There are
371 two kinds of subprograms: procedures and functions. A procedure is the
372 means of invoking a series of actions. For example, it may read data,
373 update variables, or produce some output. It may have parameters, to
374 provide a controlled means of passing information between the procedure
375 and the point of call. A function is the means of invoking the
376 computation of a value. It is similar to a procedure, but in addition
377 will return a result.
378
379 16
380 A package is the basic unit for defining a collection of logically
381 related entities. For example, a package can be used to define a set of
382 type declarations and associated operations. Portions of a package can
383 be hidden from the user, thus allowing access only to the logical
384 properties expressed by the package specification.
385
386 17
387 Subprogram and package units may be compiled separately and arranged in
388 hierarchies of parent and child units giving fine control over
389 visibility of the logical properties and their detailed implementation.
390
391 18
392 A task unit is the basic unit for defining a task whose sequence of
393 actions may be executed concurrently with those of other tasks. Such
394 tasks may be implemented on multicomputers, multiprocessors, or with
395 interleaved execution on a single processor. A task unit may define
396 either a single executing task or a task type permitting the creation of
397 any number of similar tasks.
398
399 19/2
400 A protected unit is the basic unit for defining protected operations for
401 the coordinated use of data shared between tasks. Simple mutual
402 exclusion is provided automatically, and more elaborate sharing
403 protocols can be defined. A protected operation can either be a
404 subprogram or an entry. A protected entry specifies a Boolean
405 expression (an entry barrier) that must be True before the body of the
406 entry is executed. A protected unit may define a single protected
407 object or a protected type permitting the creation of several similar
408 objects.
409
410 20
411 Declarations and Statements
412
413 21
414 The body of a program unit generally contains two parts: a declarative
415 part, which defines the logical entities to be used in the program unit,
416 and a sequence of statements, which defines the execution of the program
417 unit.
418
419 22
420 The declarative part associates names with declared entities. For
421 example, a name may denote a type, a constant, a variable, or an
422 exception. A declarative part also introduces the names and parameters
423 of other nested subprograms, packages, task units, protected units, and
424 generic units to be used in the program unit.
425
426 23
427 The sequence of statements describes a sequence of actions that are to
428 be performed. The statements are executed in succession (unless a
429 transfer of control causes execution to continue from another place).
430
431 24
432 An assignment statement changes the value of a variable. A procedure
433 call invokes execution of a procedure after associating any actual
434 parameters provided at the call with the corresponding formal
435 parameters.
436
437 25
438 Case statements and if statements allow the selection of an enclosed
439 sequence of statements based on the value of an expression or on the
440 value of a condition.
441
442 26
443 The loop statement provides the basic iterative mechanism in the
444 language. A loop statement specifies that a sequence of statements is
445 to be executed repeatedly as directed by an iteration scheme, or until
446 an exit statement is encountered.
447
448 27
449 A block statement comprises a sequence of statements preceded by the
450 declaration of local entities used by the statements.
451
452 28
453 Certain statements are associated with concurrent execution. A delay
454 statement delays the execution of a task for a specified duration or
455 until a specified time. An entry call statement is written as a
456 procedure call statement; it requests an operation on a task or on a
457 protected object, blocking the caller until the operation can be
458 performed. A called task may accept an entry call by executing a
459 corresponding accept statement, which specifies the actions then to be
460 performed as part of the rendezvous with the calling task. An entry
461 call on a protected object is processed when the corresponding entry
462 barrier evaluates to true, whereupon the body of the entry is executed.
463 The requeue statement permits the provision of a service as a number of
464 related activities with preference control. One form of the select
465 statement allows a selective wait for one of several alternative
466 rendezvous. Other forms of the select statement allow conditional or
467 timed entry calls and the asynchronous transfer of control in response
468 to some triggering event.
469
470 29
471 Execution of a program unit may encounter error situations in which
472 normal program execution cannot continue. For example, an arithmetic
473 computation may exceed the maximum allowed value of a number, or an
474 attempt may be made to access an array component by using an incorrect
475 index value. To deal with such error situations, the statements of a
476 program unit can be textually followed by exception handlers that
477 specify the actions to be taken when the error situation arises.
478 Exceptions can be raised explicitly by a raise statement.
479
480 30
481 Data Types
482
483 31
484 Every object in the language has a type, which characterizes a set of
485 values and a set of applicable operations. The main classes of types
486 are elementary types (comprising enumeration, numeric, and access types)
487 and composite types (including array and record types).
488
489 32/2
490 An enumeration type defines an ordered set of distinct enumeration
491 literals, for example a list of states or an alphabet of characters.
492 The enumeration types Boolean, Character, Wide_Character, and
493 Wide_Wide_Character are predefined.
494
495 33
496 Numeric types provide a means of performing exact or approximate
497 numerical computations. Exact computations use integer types, which
498 denote sets of consecutive integers. Approximate computations use
499 either fixed point types, with absolute bounds on the error, or floating
500 point types, with relative bounds on the error. The numeric types
501 Integer, Float, and Duration are predefined.
502
503 34/2
504 Composite types allow definitions of structured objects with related
505 components. The composite types in the language include arrays and
506 records. An array is an object with indexed components of the same
507 type. A record is an object with named components of possibly different
508 types. Task and protected types are also forms of composite types. The
509 array types String, Wide_String, and Wide_Wide_String are predefined.
510
511 35
512 Record, task, and protected types may have special components called
513 discriminants which parameterize the type. Variant record structures
514 that depend on the values of discriminants can be defined within a
515 record type.
516
517 36
518 Access types allow the construction of linked data structures. A value
519 of an access type represents a reference to an object declared as
520 aliased or to an object created by the evaluation of an allocator.
521 Several variables of an access type may designate the same object, and
522 components of one object may designate the same or other objects. Both
523 the elements in such linked data structures and their relation to other
524 elements can be altered during program execution. Access types also
525 permit references to subprograms to be stored, passed as parameters, and
526 ultimately dereferenced as part of an indirect call.
527
528 37
529 Private types permit restricted views of a type. A private type can be
530 defined in a package so that only the logically necessary properties are
531 made visible to the users of the type. The full structural details that
532 are externally irrelevant are then only available within the package and
533 any child units.
534
535 38
536 From any type a new type may be defined by derivation. A type, together
537 with its derivatives (both direct and indirect) form a derivation class.
538 Class-wide operations may be defined that accept as a parameter an
539 operand of any type in a derivation class. For record and private
540 types, the derivatives may be extensions of the parent type. Types that
541 support these object-oriented capabilities of class-wide operations and
542 type extension must be tagged, so that the specific type of an operand
543 within a derivation class can be identified at run time. When an
544 operation of a tagged type is applied to an operand whose specific type
545 is not known until run time, implicit dispatching is performed based on
546 the tag of the operand.
547
548 38.1/2
549 Interface types provide abstract models from which other interfaces and
550 types may be composed and derived. This provides a reliable form of
551 multiple inheritance. Interface types may also be implemented by task
552 types and protected types thereby enabling concurrent programming and
553 inheritance to be merged.
554
555 39
556 The concept of a type is further refined by the concept of a subtype,
557 whereby a user can constrain the set of allowed values of a type.
558 Subtypes can be used to define subranges of scalar types, arrays with a
559 limited set of index values, and records and private types with
560 particular discriminant values.
561
562 40
563 Other Facilities
564
565 41/2
566 Aspect clauses can be used to specify the mapping between types and
567 features of an underlying machine. For example, the user can specify
568 that objects of a given type must be represented with a given number of
569 bits, or that the components of a record are to be represented using a
570 given storage layout. Other features allow the controlled use of low
571 level, nonportable, or implementation-dependent aspects, including the
572 direct insertion of machine code.
573
574 42/2
575 The predefined environment of the language provides for input-output and
576 other capabilities by means of standard library packages. Input-output
577 is supported for values of user-defined as well as of predefined types.
578 Standard means of representing values in display form are also provided.
579
580 42.1/2
581 The predefined standard library packages provide facilities such as
582 string manipulation, containers of various kinds (vectors, lists, maps,
583 etc.), mathematical functions, random number generation, and access to
584 the execution environment.
585
586 42.2/2
587 The specialized annexes define further predefined library packages and
588 facilities with emphasis on areas such as real-time scheduling,
589 interrupt handling, distributed systems, numerical computation, and
590 high-integrity systems.
591
592 43
593 Finally, the language provides a powerful means of parameterization of
594 program units, called generic program units. The generic parameters can
595 be types and subprograms (as well as objects and packages) and so allow
596 general algorithms and data structures to be defined that are applicable
597 to all types of a given class.
598
599 Language Changes
600
601 Paragraphs 44 through 57 have been removed as they described differences
602 from the first edition of Ada (Ada 83).
603
604 57.1/3
605 This International Standard replaces the second edition of 1995. It
606 modifies the previous edition by making changes and additions that
607 improve the capability of the language and the reliability of programs
608 written in the language. This edition incorporates the changes from
609 Amendment 1 (ISO/IEC 8652:1995:AMD 1:2007), which were designed to
610 improve the portability of programs, interfacing to other languages, and
611 both the object-oriented and real-time capabilities.
612
613 57.2/3
614 Significant changes originating in Amendment 1 are incorporated:
615
616 57.3/3
617 * Support for program text is extended to cover the entire ISO/IEC
618 10646:2003 repertoire. Execution support now includes the 32-bit
619 character set. See subclauses *note 2.1::, *note 3.5.2::, *note
620 3.6.3::, *note A.1::, *note A.3::, and *note A.4::.
621
622 57.4/3
623 * The object-oriented model has been improved by the addition of an
624 interface facility which provides multiple inheritance and
625 additional flexibility for type extensions. See subclauses *note
626 3.4::, *note 3.9::, and *note 7.3::. An alternative notation for
627 calling operations more akin to that used in other languages has
628 also been added. See subclause *note 4.1.3::.
629
630 57.5/3
631 * Access types have been further extended to unify properties such as
632 the ability to access constants and to exclude null values. See
633 clause *note 3.10::. Anonymous access types are now permitted more
634 freely and anonymous access-to-subprogram types are introduced.
635 See subclauses *note 3.3::, *note 3.6::, *note 3.10::, and *note
636 8.5.1::.
637
638 57.6/3
639 * The control of structure and visibility has been enhanced to permit
640 mutually dependent references between units and finer control over
641 access from the private part of a package. See subclauses *note
642 3.10.1:: and *note 10.1.2::. In addition, limited types have been
643 made more useful by the provision of aggregates, constants, and
644 constructor functions. See subclauses *note 4.3::, *note 6.5::,
645 and *note 7.5::.
646
647 57.7/3
648 * The predefined environment has been extended to include additional
649 time and calendar operations, improved string handling, a
650 comprehensive container library, file and directory management, and
651 access to environment variables. See subclauses *note 9.6.1::,
652 *note A.4::, *note A.16::, *note A.17::, and *note A.18::.
653
654 57.8/3
655 * Two of the Specialized Needs Annexes have been considerably
656 enhanced:
657
658 57.9/2
659 * The Real-Time Systems Annex now includes the Ravenscar
660 profile for high-integrity systems, further dispatching
661 policies such as Round Robin and Earliest Deadline First,
662 support for timing events, and support for control of CPU
663 time utilization. See subclauses *note D.2::, *note
664 D.13::, *note D.14::, and *note D.15::.
665
666 57.10/3
667 * The Numerics Annex now includes support for real and
668 complex vectors and matrices as previously defined in
669 ISO/IEC 13813:1997 plus further basic operations for
670 linear algebra. See subclause *note G.3::.
671
672 57.11/3
673 * The overall reliability of the language has been enhanced by a
674 number of improvements. These include new syntax which detects
675 accidental overloading, as well as pragmas for making assertions
676 and giving better control over the suppression of checks. See
677 subclauses *note 6.1::, *note 11.4.2::, and *note 11.5::.
678
679 57.12/3
680 In addition, this third edition makes enhancements to address two
681 important issues, namely, the particular problems of multiprocessor
682 architectures, and the need to further increase the capabilities
683 regarding assertions for correctness. It also makes additional changes
684 and additions that improve the capability of the language and the
685 reliability of programs written in the language.
686
687 57.13/3
688 The following significant changes with respect to the 1995 edition as
689 amended by Amendment 1 are incorporated:
690
691 57.14/3
692 * New syntax (the aspect specification) is introduced to enable
693 properties to be specified for various entities in a more
694 structured manner than through pragmas. See subclause *note
695 13.1.1::.
696
697 57.15/3
698 * The concept of assertions introduced in the 2005 edition is
699 extended with the ability to specify preconditions and
700 postconditions for subprograms, and invariants for private types.
701 The concept of constraints in defining subtypes is supplemented
702 with subtype predicates that enable subsets to be specified other
703 than as simple ranges. These properties are all indicated using
704 aspect specifications. See subclauses *note 3.2.4::, *note
705 6.1.1::, and *note 7.3.2::.
706
707 57.16/3
708 * New forms of expressions are introduced. These are if expressions,
709 case expressions, quantified expressions, and expression functions.
710 As well as being useful for programming in general by avoiding the
711 introduction of unnecessary assignments, they are especially
712 valuable in conditions and invariants since they avoid the need to
713 introduce auxiliary functions. See subclauses *note 4.5.7::, *note
714 4.5.8::, and *note 6.8::. Membership tests are also made more
715 flexible. See subclauses *note 4.4:: and *note 4.5.2::.
716
717 57.17/3
718 * A number of changes are made to subprogram parameters. Functions
719 may now have parameters of all modes. In order to mitigate
720 consequent (and indeed existing) problems of inadvertent order
721 dependence, rules are introduced to reduce aliasing. A parameter
722 may now be explicitly marked as aliased and the type of a parameter
723 may be incomplete in certain circumstances. See subclauses *note
724 3.10.1::, *note 6.1::, and *note 6.4.1::.
725
726 57.18/3
727 * The use of access types is now more flexible. The rules for
728 accessibility and certain conversions are improved. See subclauses
729 *note 3.10.2::, *note 4.5.2::, *note 4.6::, and *note 8.6::.
730 Furthermore, better control of storage pools is provided. See
731 subclause *note 13.11.4::.
732
733 57.19/3
734 * The Real-Time Systems Annex now includes facilities for defining
735 domains of processors and assigning tasks to them. Improvements
736 are made to scheduling and budgeting facilities. See subclauses
737 *note D.10.1::, *note D.14::, and *note D.16::.
738
739 57.20/3
740 * A number of important improvements are made to the standard
741 library. These include packages for conversions between strings
742 and UTF encodings, and classification functions for wide and wide
743 wide characters. Internationalization is catered for by a package
744 giving locale information. See subclauses *note A.3::, *note
745 A.4.11::, and *note A.19::. The container library is extended to
746 include bounded forms of the existing containers and new containers
747 for indefinite objects, multiway trees, and queues. See subclause
748 *note A.18::.
749
750 57.21/3
751 * Finally, certain features are added primarily to ease the use of
752 containers, such as the ability to iterate over all elements in a
753 container without having to encode the iteration. These can also
754 be used for iteration over arrays, and within quantified
755 expressions. See subclauses *note 4.1.5::, *note 4.1.6::, *note
756 5.5.1::, and *note 5.5.2::.
757
758 Instructions for Comment Submission
759
760 58/1
761 Informal comments on this International Standard may be sent via e-mail
762 to ada-comment@ada-auth.org. If appropriate, the Project Editor will
763 initiate the defect correction procedure.
764
765 59
766 Comments should use the following format:
767
768 60/3
769 !topic Title summarizing comment
770 !reference Ada 2012 RMss.ss(pp)
771 !from Author Name yy-mm-dd
772 !keywords keywords related to topic
773 !discussion
774
775 text of discussion
776
777 61/3
778 where ss.ss is the clause or subclause number, pp is the paragraph
779 number where applicable, and yy-mm-dd is the date the comment was sent.
780 The date is optional, as is the !keywords line.
781
782 62/1
783 Please use a descriptive "Subject" in your e-mail message, and limit
784 each message to a single comment.
785
786 63
787 When correcting typographical errors or making minor wording
788 suggestions, please put the correction directly as the topic of the
789 comment; use square brackets [ ] to indicate text to be omitted and
790 curly braces { } to indicate text to be added, and provide enough
791 context to make the nature of the suggestion self-evident or put
792 additional information in the body of the comment, for example:
793
794 64
795 !topic [c]{C}haracter
796 !topic it[']s meaning is not defined
797
798 65
799 Formal requests for interpretations and for reporting defects in this
800 International Standard may be made in accordance with the ISO/IEC JTC 1
801 Directives and the ISO/IEC JTC 1/SC 22 policy for interpretations.
802 National Bodies may submit a Defect Report to ISO/IEC JTC 1/SC 22 for
803 resolution under the JTC 1 procedures. A response will be provided and,
804 if appropriate, a Technical Corrigendum will be issued in accordance
805 with the procedures.
806
807 Acknowledgements for the Ada 83 edition
808
809 65.1/3
810 Ada is the result of a collective effort to design a common language for
811 programming large scale and real-time systems.
812
813 65.2/3
814 The common high order language program began in 1974. The requirements
815 of the United States Department of Defense were formalized in a series
816 of documents which were extensively reviewed by the Services, industrial
817 organizations, universities, and foreign military departments. The Ada
818 language was designed in accordance with the final (1978) form of these
819 requirements, embodied in the Steelman specification.
820
821 65.3/3
822 The Ada design team was led by Jean D. Ichbiah and has included Bernd
823 Krieg-Brueckner, Brian A. Wichmann, Henry F. Ledgard, Jean-Claude
824 Heliard, Jean-Loup Gailly, Jean-Raymond Abrial, John G.P. Barnes, Mike
825 Woodger, Olivier Roubine, Paul N. Hilfinger, and Robert Firth.
826
827 65.4/3
828 At various stages of the project, several people closely associated with
829 the design team made major contributions. They include J.B. Goodenough,
830 R.F. Brender, M.W. Davis, G. Ferran, K. Lester, L. MacLaren, E. Morel,
831 I.R. Nassi, I.C. Pyle, S.A. Schuman, and S.C. Vestal.
832
833 65.5/3
834 Two parallel efforts that were started in the second phase of this
835 design had a deep influence on the language. One was the development of
836 a formal definition using denotational semantics, with the participation
837 of V. Donzeau-Gouge, G. Kahn, and B. Lang. The other was the design of
838 a test translator with the participation of K. Ripken, P. Boullier, P.
839 Cadiou, J. Holden, J.F. Hueras, R.G. Lange, and D.T. Cornhill. The
840 entire effort benefitted from the dedicated assistance of Lyn Churchill
841 and Marion Myers, and the effective technical support of B. Gravem, W.L.
842 Heimerdinger, and P. Cleve. H.G. Schmitz served as program manager.
843
844 65.6/3
845 Over the five years spent on this project, several intense week-long
846 design reviews were conducted, with the participation of P. Belmont, B.
847 Brosgol, P. Cohen, R. Dewar, A. Evans, G. Fisher, H. Harte, A.L. Hisgen,
848 P. Knueven, M. Kronental, N. Lomuto, E. Ploedereder, G. Seegmueller, V.
849 Stenning, D. Taffs, and also F. Belz, R. Converse, K. Correll, A.N.
850 Habermann, J. Sammet, S. Squires, J. Teller, P. Wegner, and P.R.
851 Wetherall.
852
853 65.7/3
854 Several persons had a constructive influence with their comments,
855 criticisms and suggestions. They include P. Brinch Hansen, G. Goos,
856 C.A.R. Hoare, Mark Rain, W.A. Wulf, and also E. Boebert, P. Bonnard, H.
857 Clausen, M. Cox, G. Dismukes, R. Eachus, T. Froggatt, H. Ganzinger, C.
858 Hewitt, S. Kamin, R. Kotler, O. Lecarme, J.A.N. Lee, J.L. Mansion, F.
859 Minel, T. Phinney, J. Roehrich, V. Schneider, A. Singer, D. Slosberg,
860 I.C. Wand, the reviewers of Ada-Europe, AdaTech, Afcet, those of the
861 LMSC review team, and those of the Ada Tokyo Study Group.
862
863 65.8/3
864 These reviews and comments, the numerous evaluation reports received at
865 the end of the first and second phase, the nine hundred language issue
866 reports and test and evaluation reports received from fifteen different
867 countries during the third phase of the project, the thousands of
868 comments received during the ANSI Canvass, and the on-going work of the
869 IFIP Working Group 2.4 on system implementation languages and that of
870 the Purdue Europe LTPL-E committee, all had a substantial influence on
871 the final definition of Ada.
872
873 65.9/3
874 The Military Departments and Agencies have provided a broad base of
875 support including funding, extensive reviews, and countless individual
876 contributions by the members of the High Order Language Working Group
877 and other interested personnel. In particular, William A. Whitaker
878 provided leadership for the program during the formative stages. David
879 A. Fisher was responsible for the successful development and refinement
880 of the language requirement documents that led to the Steelman
881 specification.
882
883 65.10/3
884 The Ada 83 language definition was developed by Cii Honeywell Bull and
885 later Alsys, and by Honeywell Systems and Research Center, under
886 contract to the United States Department of Defense. William E. Carlson
887 and later Larry E. Druffel served as the technical representatives of
888 the United States Government and effectively coordinated the efforts of
889 all participants in the Ada program.
890
891 Acknowledgements for the Ada 95 edition
892
893 66
894 This International Standard was prepared by the Ada 9X Mapping/Revision
895 Team based at Intermetrics, Inc., which has included: W. Carlson,
896 Program Manager; T. Taft, Technical Director; J. Barnes (consultant); B.
897 Brosgol (consultant); R. Duff (Oak Tree Software); M. Edwards; C.
898 Garrity; R. Hilliard; O. Pazy (consultant); D. Rosenfeld; L. Shafer; W.
899 White; M. Woodger.
900
901 67
902 The following consultants to the Ada 9X Project contributed to the
903 Specialized Needs Annexes: T. Baker (Real-Time/Systems Programming --
904 SEI, FSU); K. Dritz (Numerics -- Argonne National Laboratory); A.
905 Gargaro (Distributed Systems -- Computer Sciences); J. Goodenough
906 (Real-Time/Systems Programming -- SEI); J. McHugh (Secure Systems --
907 consultant); B. Wichmann (Safety-Critical Systems -- NPL: UK).
908
909 68
910 This work was regularly reviewed by the Ada 9X Distinguished Reviewers
911 and the members of the Ada 9X Rapporteur Group (XRG): E. Ploedereder,
912 Chairman of DRs and XRG (University of Stuttgart: Germany); B. Bardin
913 (Hughes); J. Barnes (consultant: UK); B. Brett (DEC); B. Brosgol
914 (consultant); R. Brukardt (RR Software); N. Cohen (IBM); R. Dewar (NYU);
915 G. Dismukes (TeleSoft); A. Evans (consultant); A. Gargaro (Computer
916 Sciences); M. Gerhardt (ESL); J. Goodenough (SEI); S. Heilbrunner
917 (University of Salzburg: Austria); P. Hilfinger (UC/Berkeley); B.
918 Källberg (CelsiusTech: Sweden); M. Kamrad II (Unisys); J. van Katwijk
919 (Delft University of Technology: The Netherlands); V. Kaufman (Russia);
920 P. Kruchten (Rational); R. Landwehr (CCI: Germany); C. Lester
921 (Portsmouth Polytechnic: UK); L. Månsson (TELIA Research: Sweden); S.
922 Michell (Multiprocessor Toolsmiths: Canada); M. Mills (US Air Force); D.
923 Pogge (US Navy); K. Power (Boeing); O. Roubine (Verdix: France); A.
924 Strohmeier (Swiss Fed Inst of Technology: Switzerland); W. Taylor
925 (consultant: UK); J. Tokar (Tartan); E. Vasilescu (Grumman); J. Vladik
926 (Prospeks s.r.o.: Czech Republic); S. Van Vlierberghe (OFFIS: Belgium).
927
928 69
929 Other valuable feedback influencing the revision process was provided by
930 the Ada 9X Language Precision Team (Odyssey Research Associates), the
931 Ada 9X User/Implementer Teams (AETECH, Tartan, TeleSoft), the Ada 9X
932 Implementation Analysis Team (New York University) and the Ada
933 community-at-large.
934
935 70
936 Special thanks go to R. Mathis, Convenor of ISO/IEC JTC 1/SC 22 Working
937 Group 9.
938
939 71
940 The Ada 9X Project was sponsored by the Ada Joint Program Office.
941 Christine M. Anderson at the Air Force Phillips Laboratory (Kirtland
942 AFB, NM) was the project manager.
943
944 Acknowledgements for the Corrigendum version
945
946 71.1/3
947 The editor [R. Brukardt (USA)] would like to thank the many people whose
948 hard work and assistance has made this update possible.
949
950 71.2/1
951 Thanks go out to all of the members of the ISO/IEC JTC 1/SC 22/WG 9 Ada
952 Rapporteur Group, whose work on creating and editing the wording
953 corrections was critical to the entire process. Especially valuable
954 contributions came from the chairman of the ARG, E. Ploedereder
955 (Germany), who kept the process moving; J. Barnes (UK) and K. Ishihata
956 (Japan), whose extremely detailed reviews kept the editor on his toes;
957 G. Dismukes (USA), M. Kamrad (USA), P. Leroy (France), S. Michell
958 (Canada), T. Taft (USA), J. Tokar (USA), and other members too numerous
959 to mention.
960
961 71.3/1
962 Special thanks go to R. Duff (USA) for his explanations of the previous
963 system of formatting of these documents during the tedious conversion to
964 more modern formats. Special thanks also go to the convenor of ISO/IEC
965 JTC 1/SC 22/WG 9, J. Moore (USA), without whose help and support the
966 Corrigendum and this consolidated reference manual would not have been
967 possible.
968
969 Acknowledgements for the Amendment 1 version
970
971 71.4/3
972 The editor [R. Brukardt (USA)] would like to thank the many people whose
973 hard work and assistance has made this update possible.
974
975 71.5/2
976 Thanks go out to all of the members of the ISO/IEC JTC 1/SC 22/WG 9 Ada
977 Rapporteur Group, whose work on creating and editing the wording
978 corrections was critical to the entire process. Especially valuable
979 contributions came from the chairman of the ARG, P. Leroy (France), who
980 kept the process on schedule; J. Barnes (UK) whose careful reviews found
981 many typographical errors; T. Taft (USA), who always seemed to have a
982 suggestion when we were stuck, and who also was usually able to provide
983 the valuable service of explaining why things were as they are; S. Baird
984 (USA), who found many obscure problems with the proposals; and A. Burns
985 (UK), who pushed many of the real-time proposals to completion. Other
986 ARG members who contributed were: R. Dewar (USA), G. Dismukes (USA), R.
987 Duff (USA), K. Ishihata (Japan), S. Michell (Canada), E. Ploedereder
988 (Germany), J.P. Rosen (France), E. Schonberg (USA), J. Tokar (USA), and
989 T. Vardanega (Italy).
990
991 71.6/2
992 Special thanks go to Ada-Europe and the Ada Resource Association,
993 without whose help and support the Amendment and this consolidated
994 reference manual would not have been possible. M. Heaney (USA) requires
995 special thanks for his tireless work on the containers packages.
996 Finally, special thanks go to the convenor of ISO/IEC JTC 1/SC 22/WG 9,
997 J. Moore (USA), who guided the document through the standardization
998 process.
999
1000 Acknowledgements for the Ada 2012 edition
1001
1002 71.7/3
1003 The editor [R. Brukardt (USA)] would like to thank the many people whose
1004 hard work and assistance has made this revision possible.
1005
1006 71.8/3
1007 Thanks go out to all of the members of the ISO/IEC JTC 1/SC 22/WG 9 Ada
1008 Rapporteur Group, whose work on creating and editing the wording changes
1009 was critical to the entire process. Especially valuable contributions
1010 came from the chairman of the ARG, E. Schonberg (USA), who guided the
1011 work; T. Taft (USA), whose insights broke many logjams, both in design
1012 and wording; J. Barnes (UK) whose careful reviews uncovered many
1013 editorial errors; S. Baird (USA), who repeatedly found obscure
1014 interactions with the proposals that the rest of us missed. Other ARG
1015 members who substantially contributed were: A. Burns (UK), J. Cousins
1016 (UK), R. Dewar (USA), G. Dismukes (USA), R. Duff (USA), P. Leroy
1017 (France), B. Moore (Canada), E. Ploedereder (Germany), J.P. Rosen
1018 (France), B. Thomas (USA), and T. Vardanega (Italy).
1019
1020 71.9/3
1021 Special thanks go to Ada-Europe and the Ada Resource Association,
1022 without whose help and support this third edition of the Ada Standard
1023 would not have been possible. A special mention has to go to A.
1024 Beneschan (USA) for his efforts in eliminating sloppiness in our
1025 wording. M. Heaney (USA) also deserves a mention for his efforts to
1026 improve the containers packages. Finally, special thanks go to the
1027 convenor of ISO/IEC JTC 1/SC 22/WG 9, J. Tokar (USA), who guided the
1028 document through the standardization process.
1029
1030 Changes
1031
1032 72
1033 The International Standard is the same as this version of the Reference
1034 Manual, except:
1035
1036 73
1037 * This list of Changes is not included in the International Standard.
1038
1039 74
1040 * The "Acknowledgements" page is not included in the International
1041 Standard.
1042
1043 75
1044 * The text in the running headers and footers on each page is
1045 slightly different in the International Standard.
1046
1047 76
1048 * The title page(s) are different in the International Standard.
1049
1050 77
1051 * This document is formatted for 8.5-by-11-inch paper, whereas the
1052 International Standard is formatted for A4 paper (210-by-297mm);
1053 thus, the page breaks are in different places.
1054
1055 77.1/3
1056 * This paragraph was deleted.
1057
1058 77.2/3
1059 * The "Using this version of the Ada Reference Manual" subclause is
1060 not included in the International Standard.
1061
1062 77.3/3
1063 * Paragraph numbers are not included in the International Standard.
1064
1065 Using this version of the Ada Reference Manual
1066
1067 77.4/3
1068 This document has been revised with the corrections specified in
1069 Technical Corrigendum 1 (ISO/IEC 8652:1995/COR.1:2001) and Amendment 1
1070 (ISO/IEC 8652/AMD 1:2007), along with changes specifically for this
1071 third edition. In addition, a variety of editorial errors have been
1072 corrected.
1073
1074 77.5/3
1075 Changes to the original 8652:1995 can be identified by the version
1076 number following the paragraph number. Paragraphs with a version number
1077 of /1 were changed by Technical Corrigendum 1 or were editorial
1078 corrections at that time, while paragraphs with a version number of /2
1079 were changed by Amendment 1 or were more recent editorial corrections,
1080 and paragraphs with a version number of /3 were changed by the third
1081 (2012) edition of the Standard or were still more recent editorial
1082 corrections. Paragraphs not so marked are unchanged by the third
1083 edition, Amendment 1, Technical Corrigendum 1, or editorial corrections.
1084 Paragraph numbers of unchanged paragraphs are the same as in the 1995
1085 edition of the Ada Reference Manual. In addition, some versions of this
1086 document include revision bars near the paragraph numbers. Where
1087 paragraphs are inserted, the paragraph numbers are of the form pp.nn,
1088 where pp is the number of the preceding paragraph, and nn is an
1089 insertion number. For instance, the first paragraph inserted after
1090 paragraph 8 is numbered 8.1, the second paragraph inserted is numbered
1091 8.2, and so on. Deleted paragraphs are indicated by the text This
1092 paragraph was deleted. Deleted paragraphs include empty paragraphs that
1093 were numbered in the 1995 edition of the Ada Reference Manual.
1094
1095 \1f
1096 File: arm2012.info, Node: 0.99, Prev: 0.2, Up: Front Matter
1097
1098 0.99
1099 ====
1100
1101 ========== INTERNATIONAL STANDARD ISO/IEC 8652:2012(E)
1102
1103 ==========
1104
1105 Information technology -- Programming
1106 Languages -- Ada
1107
1108
1109
1110 \1f
1111 File: arm2012.info, Node: 1, Next: 2, Prev: Front Matter, Up: Top
1112
1113 1 General
1114 *********
1115
1116 * Menu:
1117
1118 * 1.1 :: Scope
1119 * 1.2 :: Normative References
1120 * 1.3 :: Terms and Definitions
1121
1122 \1f
1123 File: arm2012.info, Node: 1.1, Next: 1.2, Up: 1
1124
1125 1.1 Scope
1126 =========
1127
1128 1/3
1129 This International Standard specifies the form and meaning of programs
1130 written in Ada. Its purpose is to promote the portability of Ada
1131 programs to a variety of computing systems.
1132
1133 2/3
1134 Ada is a programming language designed to support the construction of
1135 long-lived, highly reliable software systems. The language includes
1136 facilities to define packages of related types, objects, and operations.
1137 The packages may be parameterized and the types may be extended to
1138 support the construction of libraries of reusable, adaptable software
1139 components. The operations may be implemented as subprograms using
1140 conventional sequential control structures, or as entries that include
1141 synchronization of concurrent threads of control as part of their
1142 invocation. Ada supports object-oriented programming by providing
1143 classes and interfaces, inheritance, polymorphism of variables and
1144 methods, and generic units. The language treats modularity in the
1145 physical sense as well, with a facility to support separate compilation.
1146
1147 3/3
1148 The language provides rich support for real-time, concurrent
1149 programming, and includes facilities for multicore and multiprocessor
1150 programming. Errors can be signaled as exceptions and handled
1151 explicitly. The language also covers systems programming; this requires
1152 precise control over the representation of data and access to
1153 system-dependent properties. Finally, a predefined environment of
1154 standard packages is provided, including facilities for, among others,
1155 input-output, string manipulation, numeric elementary functions, and
1156 random number generation, and definition and use of containers.
1157
1158 * Menu:
1159
1160 * 1.1.1 :: Extent
1161 * 1.1.2 :: Structure
1162 * 1.1.3 :: Conformity of an Implementation with the Standard
1163 * 1.1.4 :: Method of Description and Syntax Notation
1164 * 1.1.5 :: Classification of Errors
1165
1166 \1f
1167 File: arm2012.info, Node: 1.1.1, Next: 1.1.2, Up: 1.1
1168
1169 1.1.1 Extent
1170 ------------
1171
1172 1
1173 This International Standard specifies:
1174
1175 2
1176 * The form of a program written in Ada;
1177
1178 3
1179 * The effect of translating and executing such a program;
1180
1181 4
1182 * The manner in which program units may be combined to form Ada
1183 programs;
1184
1185 5
1186 * The language-defined library units that a conforming implementation
1187 is required to supply;
1188
1189 6
1190 * The permissible variations within the standard, and the manner in
1191 which they are to be documented;
1192
1193 7
1194 * Those violations of the standard that a conforming implementation
1195 is required to detect, and the effect of attempting to translate or
1196 execute a program containing such violations;
1197
1198 8
1199 * Those violations of the standard that a conforming implementation
1200 is not required to detect.
1201
1202 9
1203 This International Standard does not specify:
1204
1205 10
1206 * The means whereby a program written in Ada is transformed into
1207 object code executable by a processor;
1208
1209 11
1210 * The means whereby translation or execution of programs is invoked
1211 and the executing units are controlled;
1212
1213 12
1214 * The size or speed of the object code, or the relative execution
1215 speed of different language constructs;
1216
1217 13
1218 * The form or contents of any listings produced by implementations;
1219 in particular, the form or contents of error or warning messages;
1220
1221 14
1222 * The effect of unspecified execution.
1223
1224 15
1225 * The size of a program or program unit that will exceed the capacity
1226 of a particular conforming implementation.
1227
1228 \1f
1229 File: arm2012.info, Node: 1.1.2, Next: 1.1.3, Prev: 1.1.1, Up: 1.1
1230
1231 1.1.2 Structure
1232 ---------------
1233
1234 1/3
1235 This International Standard contains thirteen clauses, fifteen annexes,
1236 and an index.
1237
1238 2
1239 The core of the Ada language consists of:
1240
1241 3/3
1242 * Clauses 1 through 13
1243
1244 4
1245 * *note Annex A::, "*note Annex A:: Predefined Language Environment"
1246
1247 5
1248 * *note Annex B::, "*note Annex B:: Interface to Other Languages"
1249
1250 6
1251 * *note Annex J::, "*note Annex J:: Obsolescent Features"
1252
1253 7
1254 The following Specialized Needs Annexes define features that are needed
1255 by certain application areas:
1256
1257 8
1258 * *note Annex C::, "*note Annex C:: Systems Programming"
1259
1260 9
1261 * *note Annex D::, "*note Annex D:: Real-Time Systems"
1262
1263 10
1264 * *note Annex E::, "*note Annex E:: Distributed Systems"
1265
1266 11
1267 * *note Annex F::, "*note Annex F:: Information Systems"
1268
1269 12
1270 * *note Annex G::, "*note Annex G:: Numerics"
1271
1272 13
1273 * *note Annex H::, "*note Annex H:: High Integrity Systems"
1274
1275 14
1276 The core language and the Specialized Needs Annexes are normative,
1277 except that the material in each of the items listed below is
1278 informative:
1279
1280 15
1281 * Text under a NOTES or Examples heading.
1282
1283 16/3
1284 * Each subclause whose title starts with the word "Example" or
1285 "Examples".
1286
1287 17
1288 All implementations shall conform to the core language. In addition, an
1289 implementation may conform separately to one or more Specialized Needs
1290 Annexes.
1291
1292 18
1293 The following Annexes are informative:
1294
1295 19
1296 * *note Annex K::, "*note Annex K:: Language-Defined Aspects and
1297 Attributes"
1298
1299 20
1300 * *note Annex L::, "*note Annex L:: Language-Defined Pragmas"
1301
1302 21/3
1303 * *note Annex M::, "*note Annex M:: Summary of Documentation
1304 Requirements"
1305
1306 22
1307 * *note Annex N::, "*note Annex N:: Glossary"
1308
1309 23
1310 * *note Annex P::, "*note Annex P:: Syntax Summary"
1311
1312 23.1/3
1313 * *note Annex Q::, "*note Annex Q:: Language-Defined Entities"
1314
1315 24/3
1316 Each section is divided into subclauses that have a common structure.
1317 Each clause and subclause first introduces its subject. After the
1318 introductory text, text is labeled with the following headings:
1319
1320 _Syntax_
1321
1322 25
1323 Syntax rules (indented).
1324
1325 _Name Resolution Rules_
1326
1327 26/3
1328 Compile-time rules that are used in name resolution, including overload
1329 resolution.
1330
1331 _Legality Rules_
1332
1333 27
1334 Rules that are enforced at compile time. A construct is legal if it
1335 obeys all of the Legality Rules.
1336
1337 _Static Semantics_
1338
1339 28
1340 A definition of the compile-time effect of each construct.
1341
1342 _Post-Compilation Rules_
1343
1344 29
1345 Rules that are enforced before running a partition. A partition is
1346 legal if its compilation units are legal and it obeys all of the
1347 Post-Compilation Rules.
1348
1349 _Dynamic Semantics_
1350
1351 30
1352 A definition of the run-time effect of each construct.
1353
1354 _Bounded (Run-Time) Errors_
1355
1356 31
1357 Situations that result in bounded (run-time) errors (see *note 1.1.5::).
1358
1359 _Erroneous Execution_
1360
1361 32
1362 Situations that result in erroneous execution (see *note 1.1.5::).
1363
1364 _Implementation Requirements_
1365
1366 33
1367 Additional requirements for conforming implementations.
1368
1369 _Documentation Requirements_
1370
1371 34
1372 Documentation requirements for conforming implementations.
1373
1374 _Metrics_
1375
1376 35
1377 Metrics that are specified for the time/space properties of the
1378 execution of certain language constructs.
1379
1380 _Implementation Permissions_
1381
1382 36
1383 Additional permissions given to the implementer.
1384
1385 _Implementation Advice_
1386
1387 37
1388 Optional advice given to the implementer. The word "should" is used to
1389 indicate that the advice is a recommendation, not a requirement. It is
1390 implementation defined whether or not a given recommendation is obeyed.
1391
1392 NOTES
1393
1394 38
1395 1 Notes emphasize consequences of the rules described in the
1396 (sub)clause or elsewhere. This material is informative.
1397
1398 _Examples_
1399
1400 39
1401 Examples illustrate the possible forms of the constructs described.
1402 This material is informative.
1403
1404 \1f
1405 File: arm2012.info, Node: 1.1.3, Next: 1.1.4, Prev: 1.1.2, Up: 1.1
1406
1407 1.1.3 Conformity of an Implementation with the Standard
1408 -------------------------------------------------------
1409
1410 _Implementation Requirements_
1411
1412 1
1413 A conforming implementation shall:
1414
1415 2
1416 * Translate and correctly execute legal programs written in Ada,
1417 provided that they are not so large as to exceed the capacity of
1418 the implementation;
1419
1420 3
1421 * Identify all programs or program units that are so large as to
1422 exceed the capacity of the implementation (or raise an appropriate
1423 exception at run time);
1424
1425 4
1426 * Identify all programs or program units that contain errors whose
1427 detection is required by this International Standard;
1428
1429 5
1430 * Supply all language-defined library units required by this
1431 International Standard;
1432
1433 6
1434 * Contain no variations except those explicitly permitted by this
1435 International Standard, or those that are impossible or impractical
1436 to avoid given the implementation's execution environment;
1437
1438 7
1439 * Specify all such variations in the manner prescribed by this
1440 International Standard.
1441
1442 8
1443 The external effect of the execution of an Ada program is defined in
1444 terms of its interactions with its external environment. The following
1445 are defined as external interactions:
1446
1447 9
1448 * Any interaction with an external file (see *note A.7::);
1449
1450 10
1451 * The execution of certain code_statements (see *note 13.8::); which
1452 code_statements cause external interactions is implementation
1453 defined.
1454
1455 11
1456 * Any call on an imported subprogram (see *note Annex B::), including
1457 any parameters passed to it;
1458
1459 12
1460 * Any result returned or exception propagated from a main subprogram
1461 (see *note 10.2::) or an exported subprogram (see *note Annex B::)
1462 to an external caller;
1463
1464 13
1465 * Any read or update of an atomic or volatile object (see *note
1466 C.6::);
1467
1468 14
1469 * The values of imported and exported objects (see *note Annex B::)
1470 at the time of any other interaction with the external environment.
1471
1472 15
1473 A conforming implementation of this International Standard shall produce
1474 for the execution of a given Ada program a set of interactions with the
1475 external environment whose order and timing are consistent with the
1476 definitions and requirements of this International Standard for the
1477 semantics of the given program.
1478
1479 16
1480 An implementation that conforms to this Standard shall support each
1481 capability required by the core language as specified. In addition, an
1482 implementation that conforms to this Standard may conform to one or more
1483 Specialized Needs Annexes (or to none). Conformance to a Specialized
1484 Needs Annex means that each capability required by the Annex is provided
1485 as specified.
1486
1487 17/3
1488 An implementation conforming to this International Standard may provide
1489 additional aspects, attributes, library units, and pragmas. However, it
1490 shall not provide any aspect, attribute, library unit, or pragma having
1491 the same name as an aspect, attribute, library unit, or pragma
1492 (respectively) specified in a Specialized Needs Annex unless the
1493 provided construct is either as specified in the Specialized Needs Annex
1494 or is more limited in capability than that required by the Annex. A
1495 program that attempts to use an unsupported capability of an Annex shall
1496 either be identified by the implementation before run time or shall
1497 raise an exception at run time.
1498
1499 _Documentation Requirements_
1500
1501 18
1502 Certain aspects of the semantics are defined to be either implementation
1503 defined or unspecified. In such cases, the set of possible effects is
1504 specified, and the implementation may choose any effect in the set.
1505 Implementations shall document their behavior in implementation-defined
1506 situations, but documentation is not required for unspecified
1507 situations. The implementation-defined characteristics are summarized
1508 in *note M.2::.
1509
1510 19
1511 The implementation may choose to document implementation-defined
1512 behavior either by documenting what happens in general, or by providing
1513 some mechanism for the user to determine what happens in a particular
1514 case.
1515
1516 _Implementation Advice_
1517
1518 20
1519 If an implementation detects the use of an unsupported Specialized Needs
1520 Annex feature at run time, it should raise Program_Error if feasible.
1521
1522 21
1523 If an implementation wishes to provide implementation-defined extensions
1524 to the functionality of a language-defined library unit, it should
1525 normally do so by adding children to the library unit.
1526
1527 NOTES
1528
1529 22
1530 2 The above requirements imply that an implementation conforming
1531 to this Standard may support some of the capabilities required by a
1532 Specialized Needs Annex without supporting all required
1533 capabilities.
1534
1535 \1f
1536 File: arm2012.info, Node: 1.1.4, Next: 1.1.5, Prev: 1.1.3, Up: 1.1
1537
1538 1.1.4 Method of Description and Syntax Notation
1539 -----------------------------------------------
1540
1541 1
1542 The form of an Ada program is described by means of a context-free
1543 syntax together with context-dependent requirements expressed by
1544 narrative rules.
1545
1546 2
1547 The meaning of Ada programs is described by means of narrative rules
1548 defining both the effects of each construct and the composition rules
1549 for constructs.
1550
1551 3
1552 The context-free syntax of the language is described using a simple
1553 variant of Backus-Naur Form. In particular:
1554
1555 4
1556 * Lower case words in a sans-serif font, some containing embedded
1557 underlines, are used to denote syntactic categories, for example:
1558
1559 5
1560 case_statement
1561
1562 6
1563 * Boldface words are used to denote reserved words, for example:
1564
1565 7
1566 array
1567
1568 8
1569 * Square brackets enclose optional items. Thus the two following
1570 rules are equivalent.
1571
1572 9/2
1573 simple_return_statement ::= return [expression];
1574 simple_return_statement ::= return; | return expression;
1575
1576 10
1577 * Curly brackets enclose a repeated item. The item may appear zero
1578 or more times; the repetitions occur from left to right as with an
1579 equivalent left-recursive rule. Thus the two following rules are
1580 equivalent.
1581
1582 11
1583 term ::= factor {multiplying_operator factor}
1584 term ::= factor | term multiplying_operator factor
1585
1586 12
1587 * A vertical line separates alternative items unless it occurs
1588 immediately after an opening curly bracket, in which case it stands
1589 for itself:
1590
1591 13
1592 constraint ::= scalar_constraint | composite_constraint
1593 discrete_choice_list ::= discrete_choice {| discrete_choice}
1594
1595 14
1596 * If the name of any syntactic category starts with an italicized
1597 part, it is equivalent to the category name without the italicized
1598 part. The italicized part is intended to convey some semantic
1599 information. For example subtype_name and task_name are both
1600 equivalent to name alone.
1601
1602 14.1/3
1603 The delimiters, compound delimiters, reserved words, and
1604 numeric_literals are exclusively made of the characters whose code point
1605 is between 16#20# and 16#7E#, inclusively. The special characters for
1606 which names are defined in this International Standard (see *note 2.1::)
1607 belong to the same range. For example, the character E in the
1608 definition of exponent is the character whose name is "LATIN CAPITAL
1609 LETTER E", not "GREEK CAPITAL LETTER EPSILON".
1610
1611 14.2/3
1612 When this International Standard mentions the conversion of some
1613 character or sequence of characters to upper case, it means the
1614 character or sequence of characters obtained by using simple upper case
1615 mapping, as defined by documents referenced in the note in Clause 1 of
1616 ISO/IEC 10646:2011.
1617
1618 15
1619 A syntactic category is a nonterminal in the grammar defined in BNF
1620 under "Syntax." Names of syntactic categories are set in a different
1621 font, like_this.
1622
1623 16
1624 A construct is a piece of text (explicit or implicit) that is an
1625 instance of a syntactic category defined under "Syntax".
1626
1627 17
1628 A constituent of a construct is the construct itself, or any construct
1629 appearing within it.
1630
1631 18
1632 Whenever the run-time semantics defines certain actions to happen in an
1633 arbitrary order, this means that the implementation shall arrange for
1634 these actions to occur in a way that is equivalent to some sequential
1635 order, following the rules that result from that sequential order. When
1636 evaluations are defined to happen in an arbitrary order, with conversion
1637 of the results to some subtypes, or with some run-time checks, the
1638 evaluations, conversions, and checks may be arbitrarily interspersed, so
1639 long as each expression is evaluated before converting or checking its
1640 value. Note that the effect of a program can depend on the order chosen
1641 by the implementation. This can happen, for example, if two actual
1642 parameters of a given call have side effects.
1643
1644 NOTES
1645
1646 19
1647 3 The syntax rules describing structured constructs are presented
1648 in a form that corresponds to the recommended paragraphing. For
1649 example, an if_statement is defined as:
1650
1651 20
1652 if_statement ::=
1653 if condition then
1654 sequence_of_statements
1655 {elsif condition then
1656 sequence_of_statements}
1657 [else
1658 sequence_of_statements]
1659 end if;
1660
1661 21
1662 4 The line breaks and indentation in the syntax rules indicate the
1663 recommended line breaks and indentation in the corresponding
1664 constructs. The preferred places for other line breaks are after
1665 semicolons.
1666
1667 \1f
1668 File: arm2012.info, Node: 1.1.5, Prev: 1.1.4, Up: 1.1
1669
1670 1.1.5 Classification of Errors
1671 ------------------------------
1672
1673 _Implementation Requirements_
1674
1675 1
1676 The language definition classifies errors into several different
1677 categories:
1678
1679 2
1680 * Errors that are required to be detected prior to run time by every
1681 Ada implementation;
1682
1683 3
1684 These errors correspond to any violation of a rule given in this
1685 International Standard, other than those listed below. In
1686 particular, violation of any rule that uses the terms shall,
1687 allowed, permitted, legal, or illegal belongs to this category.
1688 Any program that contains such an error is not a legal Ada program;
1689 on the other hand, the fact that a program is legal does not mean,
1690 per se, that the program is free from other forms of error.
1691
1692 4
1693 The rules are further classified as either compile time rules, or
1694 post compilation rules, depending on whether a violation has to be
1695 detected at the time a compilation unit is submitted to the
1696 compiler, or may be postponed until the time a compilation unit is
1697 incorporated into a partition of a program.
1698
1699 5
1700 * Errors that are required to be detected at run time by the
1701 execution of an Ada program;
1702
1703 6
1704 The corresponding error situations are associated with the names of
1705 the predefined exceptions. Every Ada compiler is required to
1706 generate code that raises the corresponding exception if such an
1707 error situation arises during program execution. If such an error
1708 situation is certain to arise in every execution of a construct,
1709 then an implementation is allowed (although not required) to report
1710 this fact at compilation time.
1711
1712 7
1713 * Bounded errors;
1714
1715 8
1716 The language rules define certain kinds of errors that need not be
1717 detected either prior to or during run time, but if not detected,
1718 the range of possible effects shall be bounded. The errors of this
1719 category are called bounded errors. The possible effects of a
1720 given bounded error are specified for each such error, but in any
1721 case one possible effect of a bounded error is the raising of the
1722 exception Program_Error.
1723
1724 9
1725 * Erroneous execution.
1726
1727 10
1728 In addition to bounded errors, the language rules define certain
1729 kinds of errors as leading to erroneous execution. Like bounded
1730 errors, the implementation need not detect such errors either prior
1731 to or during run time. Unlike bounded errors, there is no
1732 language-specified bound on the possible effect of erroneous
1733 execution; the effect is in general not predictable.
1734
1735 _Implementation Permissions_
1736
1737 11
1738 An implementation may provide nonstandard modes of operation. Typically
1739 these modes would be selected by a pragma or by a command line switch
1740 when the compiler is invoked. When operating in a nonstandard mode, the
1741 implementation may reject compilation_units that do not conform to
1742 additional requirements associated with the mode, such as an excessive
1743 number of warnings or violation of coding style guidelines. Similarly,
1744 in a nonstandard mode, the implementation may apply special
1745 optimizations or alternative algorithms that are only meaningful for
1746 programs that satisfy certain criteria specified by the implementation.
1747 In any case, an implementation shall support a standard mode that
1748 conforms to the requirements of this International Standard; in
1749 particular, in the standard mode, all legal compilation_units shall be
1750 accepted.
1751
1752 _Implementation Advice_
1753
1754 12
1755 If an implementation detects a bounded error or erroneous execution, it
1756 should raise Program_Error.
1757
1758 \1f
1759 File: arm2012.info, Node: 1.2, Next: 1.3, Prev: 1.1, Up: 1
1760
1761 1.2 Normative References
1762 ========================
1763
1764 1/3
1765 The following documents, in whole or in part, are normatively referenced
1766 in this document and are indispensable for its application. For dated
1767 references, only the edition cited applies. For undated references, the
1768 latest edition of the referenced document (including any amendments)
1769 applies.
1770
1771 1.1/3
1772 ISO 639-3:2007, Codes for the representation of names of languages --
1773 Part 3: Alpha-3 code for comprehensive coverage of languages.
1774
1775 2
1776 ISO/IEC 646:1991, Information technology -- ISO 7-bit coded character
1777 set for information interchange.
1778
1779 3/2
1780 ISO/IEC 1539-1:2004, Information technology -- Programming languages --
1781 Fortran -- Part 1: Base language.
1782
1783 4/2
1784 ISO/IEC 1989:2002, Information technology -- Programming languages --
1785 COBOL.
1786
1787 4.1/3
1788 ISO/IEC 3166-1:2006, Codes for the representation of names of countries
1789 and their subdivisions -- Part 1: Country Codes.
1790
1791 5
1792 ISO/IEC 6429:1992, Information technology -- Control functions for coded
1793 graphic character sets.
1794
1795 5.1/2
1796 ISO 8601:2004, Data elements and interchange formats -- Information
1797 interchange -- Representation of dates and times.
1798
1799 6/3
1800 ISO/IEC 8859-1:1998, Information technology -- 8-bit single-byte coded
1801 graphic character sets -- Part 1: Latin alphabet No. 1.
1802
1803 7/3
1804 ISO/IEC 9899:2011, Information technology -- Programming languages -- C.
1805
1806 8/3
1807 ISO/IEC 10646:2011, Information technology -- Universal Multiple-Octet
1808 Coded Character Set (UCS).
1809
1810 9/3
1811 ISO/IEC 14882:2011, Information technology -- Programming languages --
1812 C++.
1813
1814 10/2
1815 ISO/IEC TR 19769:2004, Information technology -- Programming languages,
1816 their environments and system software interfaces -- Extensions for the
1817 programming language C to support new character data types.
1818
1819 \1f
1820 File: arm2012.info, Node: 1.3, Prev: 1.2, Up: 1
1821
1822 1.3 Terms and Definitions
1823 =========================
1824
1825 1/2
1826 Terms are defined throughout this International Standard, indicated by
1827 italic type. Terms explicitly defined in this International Standard
1828 are not to be presumed to refer implicitly to similar terms defined
1829 elsewhere. Mathematical terms not defined in this International
1830 Standard are to be interpreted according to the CRC Concise Encyclopedia
1831 of Mathematics, Second Edition. Other terms not defined in this
1832 International Standard are to be interpreted according to the Webster's
1833 Third New International Dictionary of the English Language. Informal
1834 descriptions of some terms are also given in *note Annex N::, "*note
1835 Annex N:: Glossary".
1836
1837 \1f
1838 File: arm2012.info, Node: 2, Next: 3, Prev: 1, Up: Top
1839
1840 2 Lexical Elements
1841 ******************
1842
1843 1/3
1844 The text of a program consists of the texts of one or more compilations.
1845 The text of a compilation is a sequence of lexical elements, each
1846 composed of characters; the rules of composition are given in this
1847 clause. Pragmas, which provide certain information for the compiler,
1848 are also described in this clause.
1849
1850 * Menu:
1851
1852 * 2.1 :: Character Set
1853 * 2.2 :: Lexical Elements, Separators, and Delimiters
1854 * 2.3 :: Identifiers
1855 * 2.4 :: Numeric Literals
1856 * 2.5 :: Character Literals
1857 * 2.6 :: String Literals
1858 * 2.7 :: Comments
1859 * 2.8 :: Pragmas
1860 * 2.9 :: Reserved Words
1861
1862 \1f
1863 File: arm2012.info, Node: 2.1, Next: 2.2, Up: 2
1864
1865 2.1 Character Set
1866 =================
1867
1868 1/3
1869 The character repertoire for the text of an Ada program consists of the
1870 entire coding space described by the ISO/IEC 10646:2011 Universal
1871 Multiple-Octet Coded Character Set. This coding space is organized in
1872 planes, each plane comprising 65536 characters.
1873
1874 _Syntax_
1875
1876 Paragraphs 2 and 3 were deleted.
1877
1878 3.1/3
1879 A character is defined by this International Standard for each cell
1880 in the coding space described by ISO/IEC 10646:2011, regardless of
1881 whether or not ISO/IEC 10646:2011 allocates a character to that
1882 cell.
1883
1884 _Static Semantics_
1885
1886 4/3
1887 The coded representation for characters is implementation defined (it
1888 need not be a representation defined within ISO/IEC 10646:2011). A
1889 character whose relative code point in its plane is 16#FFFE# or 16#FFFF#
1890 is not allowed anywhere in the text of a program. The only characters
1891 allowed outside of comments are those in categories other_format,
1892 format_effector, and graphic_character.
1893
1894 4.1/3
1895 The semantics of an Ada program whose text is not in Normalization Form
1896 KC (as defined by Clause 21 of ISO/IEC 10646:2011) is implementation
1897 defined.
1898
1899 5/3
1900 The description of the language definition in this International
1901 Standard uses the character properties General Category, Simple
1902 Uppercase Mapping, Uppercase Mapping, and Special Case Condition of the
1903 documents referenced by the note in Clause 1 of ISO/IEC 10646:2011. The
1904 actual set of graphic symbols used by an implementation for the visual
1905 representation of the text of an Ada program is not specified.
1906
1907 6/3
1908 Characters are categorized as follows:
1909
1910 7/2
1911
1912 This paragraph was deleted.
1913
1914 8/2
1915 letter_uppercase
1916 Any character whose General Category is defined to be
1917 "Letter, Uppercase".
1918
1919 9/2
1920 letter_lowercase
1921 Any character whose General Category is defined to be
1922 "Letter, Lowercase".
1923
1924 9.1/2
1925 letter_titlecase
1926 Any character whose General Category is defined to be
1927 "Letter, Titlecase".
1928
1929 9.2/2
1930 letter_modifier
1931 Any character whose General Category is defined to be
1932 "Letter, Modifier".
1933
1934 9.3/2
1935 letter_other
1936 Any character whose General Category is defined to be
1937 "Letter, Other".
1938
1939 9.4/2
1940 mark_non_spacing
1941 Any character whose General Category is defined to be
1942 "Mark, Non-Spacing".
1943
1944 9.5/2
1945 mark_spacing_combining
1946 Any character whose General Category is defined to be
1947 "Mark, Spacing Combining".
1948
1949 10/2
1950 number_decimal
1951 Any character whose General Category is defined to be
1952 "Number, Decimal".
1953
1954 10.1/2
1955 number_letter
1956 Any character whose General Category is defined to be
1957 "Number, Letter".
1958
1959 10.2/2
1960 punctuation_connector
1961 Any character whose General Category is defined to be
1962 "Punctuation, Connector".
1963
1964 10.3/2
1965 other_format
1966 Any character whose General Category is defined to be
1967 "Other, Format".
1968
1969 11/2
1970 separator_space
1971 Any character whose General Category is defined to be
1972 "Separator, Space".
1973
1974 12/2
1975 separator_line
1976 Any character whose General Category is defined to be
1977 "Separator, Line".
1978
1979 12.1/2
1980 separator_paragraph
1981 Any character whose General Category is defined to be
1982 "Separator, Paragraph".
1983
1984 13/3
1985 format_effector
1986 The characters whose code points are 16#09# (CHARACTER
1987 TABULATION), 16#0A# (LINE FEED), 16#0B# (LINE
1988 TABULATION), 16#0C# (FORM FEED), 16#0D# (CARRIAGE
1989 RETURN), 16#85# (NEXT LINE), and the characters in
1990 categories separator_line and separator_paragraph.
1991
1992 13.1/2
1993 other_control
1994 Any character whose General Category is defined to be
1995 "Other, Control", and which is not defined to be a
1996 format_effector.
1997
1998 13.2/2
1999 other_private_use
2000 Any character whose General Category is defined to be
2001 "Other, Private Use".
2002
2003 13.3/2
2004 other_surrogate
2005 Any character whose General Category is defined to be
2006 "Other, Surrogate".
2007
2008 14/3
2009 graphic_character
2010 Any character that is not in the categories
2011 other_control, other_private_use, other_surrogate,
2012 format_effector, and whose relative code point in its
2013 plane is neither 16#FFFE# nor 16#FFFF#.
2014
2015 15/3
2016 The following names are used when referring to certain characters (the
2017 first name is that given in ISO/IEC 10646:2011):
2018
2019 graphic symbol name graphic symbol name
2020 " quotation mark : colon
2021 # number sign ; semicolon
2022 & ampersand < less-than sign
2023 ' apostrophe, tick = equals sign
2024 ( left parenthesis > greater-than sign
2025 ) right parenthesis _ low line, underline
2026 * asterisk, multiply | vertical line
2027 + plus sign / solidus, divide
2028 , comma ! exclamation point
2029 - hyphen-minus, minus % percent sign
2030 . full stop, dot, point
2031
2032 _Implementation Requirements_
2033
2034 16/3
2035 An Ada implementation shall accept Ada source code in UTF-8 encoding,
2036 with or without a BOM (see *note A.4.11::), where every character is
2037 represented by its code point. The character pair CARRIAGE RETURN/LINE
2038 FEED (code points 16#0D# 16#0A#) signifies a single end of line (see
2039 *note 2.2::); every other occurrence of a format_effector other than the
2040 character whose code point position is 16#09# (CHARACTER TABULATION)
2041 also signifies a single end of line.
2042
2043 _Implementation Permissions_
2044
2045 17/3
2046 The categories defined above, as well as case mapping and folding, may
2047 be based on an implementation-defined version of ISO/IEC 10646 (2003
2048 edition or later).
2049
2050 NOTES
2051
2052 18/2
2053 1 The characters in categories other_control, other_private_use,
2054 and other_surrogate are only allowed in comments.
2055
2056 \1f
2057 File: arm2012.info, Node: 2.2, Next: 2.3, Prev: 2.1, Up: 2
2058
2059 2.2 Lexical Elements, Separators, and Delimiters
2060 ================================================
2061
2062 _Static Semantics_
2063
2064 1
2065 The text of a program consists of the texts of one or more compilations.
2066 The text of each compilation is a sequence of separate lexical elements.
2067 Each lexical element is formed from a sequence of characters, and is
2068 either a delimiter, an identifier, a reserved word, a numeric_literal, a
2069 character_literal, a string_literal, or a comment. The meaning of a
2070 program depends only on the particular sequences of lexical elements
2071 that form its compilations, excluding comments.
2072
2073 2/3
2074 The text of a compilation is divided into lines. In general, the
2075 representation for an end of line is implementation defined. However, a
2076 sequence of one or more format_effectors other than the character whose
2077 code point is 16#09# (CHARACTER TABULATION) signifies at least one end
2078 of line.
2079
2080 3/2
2081 In some cases an explicit separator is required to separate adjacent
2082 lexical elements. A separator is any of a separator_space, a
2083 format_effector, or the end of a line, as follows:
2084
2085 4/2
2086 * A separator_space is a separator except within a comment, a
2087 string_literal, or a character_literal.
2088
2089 5/3
2090 * The character whose code point is 16#09# (CHARACTER TABULATION) is
2091 a separator except within a comment.
2092
2093 6
2094 * The end of a line is always a separator.
2095
2096 7
2097 One or more separators are allowed between any two adjacent lexical
2098 elements, before the first of each compilation, or after the last. At
2099 least one separator is required between an identifier, a reserved word,
2100 or a numeric_literal and an adjacent identifier, reserved word, or
2101 numeric_literal.
2102
2103 7.1/3
2104 One or more other_format characters are allowed anywhere that a
2105 separator is; any such characters have no effect on the meaning of an
2106 Ada program.
2107
2108 8/2
2109 A delimiter is either one of the following characters:
2110
2111 9
2112 & ' ( ) * + , - . / : ; < = > |
2113
2114 10
2115 or one of the following compound delimiters each composed of two
2116 adjacent special characters
2117
2118 11
2119 => .. ** := /= >= <= << >> <>
2120
2121 12
2122 Each of the special characters listed for single character delimiters is
2123 a single delimiter except if this character is used as a character of a
2124 compound delimiter, or as a character of a comment, string_literal,
2125 character_literal, or numeric_literal.
2126
2127 13
2128 The following names are used when referring to compound delimiters:
2129
2130 delimiter name=> arrow
2131 .. double dot
2132 ** double star, exponentiate
2133 := assignment (pronounced: "becomes")
2134 /= inequality (pronounced: "not equal")
2135 >= greater than or equal
2136 <= less than or equal
2137 << left label bracket
2138 >> right label bracket
2139 <> box
2140 _Implementation Requirements_
2141
2142 14
2143 An implementation shall support lines of at least 200 characters in
2144 length, not counting any characters used to signify the end of a line.
2145 An implementation shall support lexical elements of at least 200
2146 characters in length. The maximum supported line length and lexical
2147 element length are implementation defined.
2148
2149 \1f
2150 File: arm2012.info, Node: 2.3, Next: 2.4, Prev: 2.2, Up: 2
2151
2152 2.3 Identifiers
2153 ===============
2154
2155 1
2156 Identifiers are used as names.
2157
2158 _Syntax_
2159
2160 2/2
2161 identifier ::=
2162 identifier_start {identifier_start | identifier_extend}
2163
2164 3/2
2165 identifier_start ::=
2166 letter_uppercase
2167 | letter_lowercase
2168 | letter_titlecase
2169 | letter_modifier
2170 | letter_other
2171 | number_letter
2172
2173 3.1/3
2174 identifier_extend ::=
2175 mark_non_spacing
2176 | mark_spacing_combining
2177 | number_decimal
2178 | punctuation_connector
2179
2180 4/3
2181 An identifier shall not contain two consecutive characters in
2182 category punctuation_connector, or end with a character in that
2183 category.
2184
2185 _Static Semantics_
2186
2187 5/3
2188 Two identifiers are considered the same if they consist of the same
2189 sequence of characters after applying locale-independent simple case
2190 folding, as defined by documents referenced in the note in Clause 1 of
2191 ISO/IEC 10646:2011.
2192
2193 5.3/3
2194 After applying simple case folding, an identifier shall not be identical
2195 to a reserved word.
2196
2197 _Implementation Permissions_
2198
2199 6
2200 In a nonstandard mode, an implementation may support other upper/lower
2201 case equivalence rules for identifiers, to accommodate local
2202 conventions.
2203
2204 NOTES
2205
2206 6.1/2
2207 2 Identifiers differing only in the use of corresponding upper and
2208 lower case letters are considered the same.
2209
2210 _Examples_
2211
2212 7
2213 Examples of identifiers:
2214
2215 8/2
2216 Count X Get_Symbol Ethelyn Marion
2217 Snobol_4 X1 Page_Count Store_Next_Item
2218 [Unicode 928][Unicode 955][Unicode 940][Unicode 964][Unicode 969][Unicode 957] -- Plato
2219 [Unicode 1063][Unicode 1072][Unicode 1081][Unicode 1082][Unicode 1086][Unicode 1074][Unicode 1089][Unicode 1082][Unicode 1080][Unicode 1081] -- Tchaikovsky
2220 [Unicode 952] [Unicode 966] -- Angles
2221
2222 \1f
2223 File: arm2012.info, Node: 2.4, Next: 2.5, Prev: 2.3, Up: 2
2224
2225 2.4 Numeric Literals
2226 ====================
2227
2228 1
2229 There are two kinds of numeric_literals, real literals and integer
2230 literals. A real literal is a numeric_literal that includes a point; an
2231 integer literal is a numeric_literal without a point.
2232
2233 _Syntax_
2234
2235 2
2236 numeric_literal ::= decimal_literal | based_literal
2237
2238 NOTES
2239
2240 3
2241 3 The type of an integer literal is universal_integer. The type
2242 of a real literal is universal_real.
2243
2244 * Menu:
2245
2246 * 2.4.1 :: Decimal Literals
2247 * 2.4.2 :: Based Literals
2248
2249 \1f
2250 File: arm2012.info, Node: 2.4.1, Next: 2.4.2, Up: 2.4
2251
2252 2.4.1 Decimal Literals
2253 ----------------------
2254
2255 1
2256 A decimal_literal is a numeric_literal in the conventional decimal
2257 notation (that is, the base is ten).
2258
2259 _Syntax_
2260
2261 2
2262 decimal_literal ::= numeral [.numeral] [exponent]
2263
2264 3
2265 numeral ::= digit {[underline] digit}
2266
2267 4
2268 exponent ::= E [+] numeral | E - numeral
2269
2270 4.1/2
2271 digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
2272
2273 5
2274 An exponent for an integer literal shall not have a minus sign.
2275
2276 _Static Semantics_
2277
2278 6
2279 An underline character in a numeric_literal does not affect its meaning.
2280 The letter E of an exponent can be written either in lower case or in
2281 upper case, with the same meaning.
2282
2283 7
2284 An exponent indicates the power of ten by which the value of the
2285 decimal_literal without the exponent is to be multiplied to obtain the
2286 value of the decimal_literal with the exponent.
2287
2288 _Examples_
2289
2290 8
2291 Examples of decimal literals:
2292
2293 9
2294 12 0 1E6 123_456 -- integer literals
2295
2296 12.0 0.0 0.456 3.14159_26 -- real literals
2297
2298 \1f
2299 File: arm2012.info, Node: 2.4.2, Prev: 2.4.1, Up: 2.4
2300
2301 2.4.2 Based Literals
2302 --------------------
2303
2304 1
2305 A based_literal is a numeric_literal expressed in a form that specifies
2306 the base explicitly.
2307
2308 _Syntax_
2309
2310 2
2311 based_literal ::=
2312 base # based_numeral [.based_numeral] # [exponent]
2313
2314 3
2315 base ::= numeral
2316
2317 4
2318 based_numeral ::=
2319 extended_digit {[underline] extended_digit}
2320
2321 5
2322 extended_digit ::= digit | A | B | C | D | E | F
2323
2324 _Legality Rules_
2325
2326 6
2327 The base (the numeric value of the decimal numeral preceding the first
2328 #) shall be at least two and at most sixteen. The extended_digits A
2329 through F represent the digits ten through fifteen, respectively. The
2330 value of each extended_digit of a based_literal shall be less than the
2331 base.
2332
2333 _Static Semantics_
2334
2335 7
2336 The conventional meaning of based notation is assumed. An exponent
2337 indicates the power of the base by which the value of the based_literal
2338 without the exponent is to be multiplied to obtain the value of the
2339 based_literal with the exponent. The base and the exponent, if any, are
2340 in decimal notation.
2341
2342 8
2343 The extended_digits A through F can be written either in lower case or
2344 in upper case, with the same meaning.
2345
2346 _Examples_
2347
2348 9
2349 Examples of based literals:
2350
2351 10
2352 2#1111_1111# 16#FF# 016#0ff# -- integer literals of value 255
2353 16#E#E1 2#1110_0000# -- integer literals of value 224
2354 16#F.FF#E+2 2#1.1111_1111_1110#E11 -- real literals of value 4095.0
2355
2356 \1f
2357 File: arm2012.info, Node: 2.5, Next: 2.6, Prev: 2.4, Up: 2
2358
2359 2.5 Character Literals
2360 ======================
2361
2362 1
2363 A character_literal is formed by enclosing a graphic character between
2364 two apostrophe characters.
2365
2366 _Syntax_
2367
2368 2
2369 character_literal ::= 'graphic_character'
2370
2371 NOTES
2372
2373 3
2374 4 A character_literal is an enumeration literal of a character
2375 type. See *note 3.5.2::.
2376
2377 _Examples_
2378
2379 4
2380 Examples of character literals:
2381
2382 5/2
2383 'A' '*' ''' ' '
2384 'L' '[Unicode 1051]' '[Unicode 923]' -- Various els.
2385 '[Unicode 8734]' '[Unicode 1488]' -- Big numbers - infinity and aleph.
2386
2387 \1f
2388 File: arm2012.info, Node: 2.6, Next: 2.7, Prev: 2.5, Up: 2
2389
2390 2.6 String Literals
2391 ===================
2392
2393 1
2394 A string_literal is formed by a sequence of graphic characters (possibly
2395 none) enclosed between two quotation marks used as string brackets.
2396 They are used to represent operator_symbols (see *note 6.1::), values of
2397 a string type (see *note 4.2::), and array subaggregates (see *note
2398 4.3.3::).
2399
2400 _Syntax_
2401
2402 2
2403 string_literal ::= "{string_element}"
2404
2405 3
2406 string_element ::= "" | non_quotation_mark_graphic_character
2407
2408 4
2409 A string_element is either a pair of quotation marks (""), or a
2410 single graphic_character other than a quotation mark.
2411
2412 _Static Semantics_
2413
2414 5
2415 The sequence of characters of a string_literal is formed from the
2416 sequence of string_elements between the bracketing quotation marks, in
2417 the given order, with a string_element that is "" becoming a single
2418 quotation mark in the sequence of characters, and any other
2419 string_element being reproduced in the sequence.
2420
2421 6
2422 A null string literal is a string_literal with no string_elements
2423 between the quotation marks.
2424
2425 NOTES
2426
2427 7
2428 5 An end of line cannot appear in a string_literal.
2429
2430 7.1/2
2431 6 No transformation is performed on the sequence of characters of
2432 a string_literal.
2433
2434 _Examples_
2435
2436 8
2437 Examples of string literals:
2438
2439 9/2
2440 "Message of the day:"
2441
2442 "" -- a null string literal
2443 " " "A" """" -- three string literals of length 1
2444
2445 "Characters such as $, %, and } are allowed in string literals"
2446 "Archimedes said ""[Unicode 917][Unicode 973][Unicode 961][Unicode 951][Unicode 954][Unicode 945]"""
2447 "Volume of cylinder (PIr²h) = "
2448
2449 \1f
2450 File: arm2012.info, Node: 2.7, Next: 2.8, Prev: 2.6, Up: 2
2451
2452 2.7 Comments
2453 ============
2454
2455 1
2456 A comment starts with two adjacent hyphens and extends up to the end of
2457 the line.
2458
2459 _Syntax_
2460
2461 2
2462 comment ::= --{non_end_of_line_character}
2463
2464 3
2465 A comment may appear on any line of a program.
2466
2467 _Static Semantics_
2468
2469 4
2470 The presence or absence of comments has no influence on whether a
2471 program is legal or illegal. Furthermore, comments do not influence the
2472 meaning of a program; their sole purpose is the enlightenment of the
2473 human reader.
2474
2475 _Examples_
2476
2477 5
2478 Examples of comments:
2479
2480 6
2481 -- the last sentence above echoes the Algol 68 report
2482
2483 end; -- processing of Line is complete
2484
2485 -- a long comment may be split onto
2486 -- two or more consecutive lines
2487
2488 ---------------- the first two hyphens start the comment
2489
2490 \1f
2491 File: arm2012.info, Node: 2.8, Next: 2.9, Prev: 2.7, Up: 2
2492
2493 2.8 Pragmas
2494 ===========
2495
2496 1
2497 A pragma is a compiler directive. There are language-defined pragmas
2498 that give instructions for optimization, listing control, etc. An
2499 implementation may support additional (implementation-defined) pragmas.
2500
2501 _Syntax_
2502
2503 2
2504 pragma ::=
2505 pragma identifier [(pragma_argument_association {,
2506 pragma_argument_association})];
2507
2508 3/3
2509 pragma_argument_association ::=
2510 [pragma_argument_identifier =>] name
2511 | [pragma_argument_identifier =>] expression
2512 | pragma_argument_aspect_mark => name
2513 | pragma_argument_aspect_mark => expression
2514
2515 4/3
2516 In a pragma, any pragma_argument_associations without a
2517 pragma_argument_identifier or pragma_argument_aspect_mark shall
2518 precede any associations with a pragma_argument_identifier or
2519 pragma_argument_aspect_mark.
2520
2521 5
2522 Pragmas are only allowed at the following places in a program:
2523
2524 6
2525 * After a semicolon delimiter, but not within a formal_part or
2526 discriminant_part.
2527
2528 7/3
2529 * At any place where the syntax rules allow a construct defined
2530 by a syntactic category whose name ends with "declaration",
2531 "item", "statement", "clause", or "alternative", or one of the
2532 syntactic categories variant or exception_handler; but not in
2533 place of such a construct if the construct is required, or is
2534 part of a list that is required to have at least one such
2535 construct.
2536
2537 7.1/3
2538 * In place of a statement in a sequence_of_statements.
2539
2540 7.2/3
2541 * At any place where a compilation_unit is allowed.
2542
2543 8
2544 Additional syntax rules and placement restrictions exist for
2545 specific pragmas.
2546
2547 9
2548 The name of a pragma is the identifier following the reserved word
2549 pragma. The name or expression of a pragma_argument_association is a
2550 pragma argument.
2551
2552 10/3
2553 An identifier specific to a pragma is an identifier or reserved word
2554 that is used in a pragma argument with special meaning for that pragma.
2555
2556 _Static Semantics_
2557
2558 11
2559 If an implementation does not recognize the name of a pragma, then it
2560 has no effect on the semantics of the program. Inside such a pragma,
2561 the only rules that apply are the Syntax Rules.
2562
2563 _Dynamic Semantics_
2564
2565 12
2566 Any pragma that appears at the place of an executable construct is
2567 executed. Unless otherwise specified for a particular pragma, this
2568 execution consists of the evaluation of each evaluable pragma argument
2569 in an arbitrary order.
2570
2571 _Implementation Requirements_
2572
2573 13
2574 The implementation shall give a warning message for an unrecognized
2575 pragma name.
2576
2577 _Implementation Permissions_
2578
2579 14
2580 An implementation may provide implementation-defined pragmas; the name
2581 of an implementation-defined pragma shall differ from those of the
2582 language-defined pragmas.
2583
2584 15
2585 An implementation may ignore an unrecognized pragma even if it violates
2586 some of the Syntax Rules, if detecting the syntax error is too complex.
2587
2588 _Implementation Advice_
2589
2590 16/3
2591 Normally, implementation-defined pragmas should have no semantic effect
2592 for error-free programs; that is, if the implementation-defined pragmas
2593 in a working program are replaced with unrecognized pragmas, the program
2594 should still be legal, and should still have the same semantics.
2595
2596 17
2597 Normally, an implementation should not define pragmas that can make an
2598 illegal program legal, except as follows:
2599
2600 18/3
2601 * A pragma used to complete a declaration;
2602
2603 19
2604 * A pragma used to configure the environment by adding, removing, or
2605 replacing library_items.
2606
2607 _Syntax_
2608
2609 20
2610 The forms of List, Page, and Optimize pragmas are as follows:
2611
2612 21
2613 pragma List(identifier);
2614
2615 22
2616 pragma Page;
2617
2618 23
2619 pragma Optimize(identifier);
2620
2621 24
2622 Other pragmas are defined throughout this International Standard,
2623 and are summarized in *note Annex L::.
2624
2625 _Static Semantics_
2626
2627 25
2628 A pragma List takes one of the identifiers On or Off as the single
2629 argument. This pragma is allowed anywhere a pragma is allowed. It
2630 specifies that listing of the compilation is to be continued or
2631 suspended until a List pragma with the opposite argument is given within
2632 the same compilation. The pragma itself is always listed if the
2633 compiler is producing a listing.
2634
2635 26
2636 A pragma Page is allowed anywhere a pragma is allowed. It specifies
2637 that the program text which follows the pragma should start on a new
2638 page (if the compiler is currently producing a listing).
2639
2640 27
2641 A pragma Optimize takes one of the identifiers Time, Space, or Off as
2642 the single argument. This pragma is allowed anywhere a pragma is
2643 allowed, and it applies until the end of the immediately enclosing
2644 declarative region, or for a pragma at the place of a compilation_unit,
2645 to the end of the compilation. It gives advice to the implementation as
2646 to whether time or space is the primary optimization criterion, or that
2647 optional optimizations should be turned off. It is implementation
2648 defined how this advice is followed.
2649
2650 _Examples_
2651
2652 28
2653 Examples of pragmas:
2654
2655 29/3
2656 pragma List(Off); -- turn off listing generation
2657 pragma Optimize(Off); -- turn off optional optimizations
2658 pragma Pure(Rational_Numbers); -- set categorization for package
2659 pragma Assert(Exists(File_Name),
2660 Message => "Nonexistent file"); -- assert file exists
2661
2662 \1f
2663 File: arm2012.info, Node: 2.9, Prev: 2.8, Up: 2
2664
2665 2.9 Reserved Words
2666 ==================
2667
2668 _Syntax_
2669
2670 1/1
2671 This paragraph was deleted.
2672
2673 2/3
2674 The following are the reserved words. Within a program, some or
2675 all of the letters of a reserved word may be in upper case.
2676
2677 abort else new return
2678 abs elsif not reverse
2679 abstract end null
2680 accept entry select
2681 access exception of separate
2682 aliased exit or some
2683 all others subtype
2684 and for out synchronized
2685 array function overriding
2686 at tagged
2687 generic package task
2688 begin goto pragma terminate
2689 body private then
2690 if procedure type
2691 case in protected
2692 constant interface until
2693 is raise use
2694 declare range
2695 delay limited record when
2696 delta loop rem while
2697 digits renames with
2698 do mod requeue
2699 xor
2700
2701 NOTES
2702
2703 3
2704 7 The reserved words appear in lower case boldface in this
2705 International Standard, except when used in the designator of an
2706 attribute (see *note 4.1.4::). Lower case boldface is also used
2707 for a reserved word in a string_literal used as an operator_symbol.
2708 This is merely a convention -- programs may be written in whatever
2709 typeface is desired and available.
2710
2711 \1f
2712 File: arm2012.info, Node: 3, Next: 4, Prev: 2, Up: Top
2713
2714 3 Declarations and Types
2715 ************************
2716
2717 1/3
2718 This clause describes the types in the language and the rules for
2719 declaring constants, variables, and named numbers.
2720
2721 * Menu:
2722
2723 * 3.1 :: Declarations
2724 * 3.2 :: Types and Subtypes
2725 * 3.3 :: Objects and Named Numbers
2726 * 3.4 :: Derived Types and Classes
2727 * 3.5 :: Scalar Types
2728 * 3.6 :: Array Types
2729 * 3.7 :: Discriminants
2730 * 3.8 :: Record Types
2731 * 3.9 :: Tagged Types and Type Extensions
2732 * 3.10 :: Access Types
2733 * 3.11 :: Declarative Parts
2734
2735 \1f
2736 File: arm2012.info, Node: 3.1, Next: 3.2, Up: 3
2737
2738 3.1 Declarations
2739 ================
2740
2741 1
2742 The language defines several kinds of named entities that are declared
2743 by declarations. The entity's name is defined by the declaration,
2744 usually by a defining_identifier (*note 3.1: S0022.), but sometimes by a
2745 defining_character_literal (*note 3.5.1: S0040.) or
2746 defining_operator_symbol (*note 6.1: S0171.).
2747
2748 2
2749 There are several forms of declaration. A basic_declaration is a form
2750 of declaration defined as follows.
2751
2752 _Syntax_
2753
2754 3/3
2755 basic_declaration ::=
2756 type_declaration | subtype_declaration
2757 | object_declaration | number_declaration
2758 | subprogram_declaration | abstract_subprogram_declaration
2759 | null_procedure_declaration | expression_function_declaration
2760 | package_declaration | renaming_declaration
2761 | exception_declaration | generic_declaration
2762 | generic_instantiation
2763
2764 4
2765 defining_identifier ::= identifier
2766
2767 _Static Semantics_
2768
2769 5
2770 A declaration is a language construct that associates a name with (a
2771 view of) an entity. A declaration may appear explicitly in the program
2772 text (an explicit declaration), or may be supposed to occur at a given
2773 place in the text as a consequence of the semantics of another construct
2774 (an implicit declaration).
2775
2776 6/3
2777 Each of the following is defined to be a declaration: any
2778 basic_declaration (*note 3.1: S0021.); an
2779 enumeration_literal_specification (*note 3.5.1: S0039.); a
2780 discriminant_specification (*note 3.7: S0062.); a component_declaration
2781 (*note 3.8: S0070.); a loop_parameter_specification (*note 5.5: S0158.);
2782 an iterator_specification (*note 5.5.2: S0159.); a
2783 parameter_specification (*note 6.1: S0175.); a subprogram_body (*note
2784 6.3: S0177.); an extended_return_object_declaration (*note 6.5: S0185.);
2785 an entry_declaration (*note 9.5.2: S0218.); an entry_index_specification
2786 (*note 9.5.2: S0224.); a choice_parameter_specification (*note 11.2:
2787 S0267.); a generic_formal_parameter_declaration (*note 12.1: S0274.).
2788
2789 7
2790 All declarations contain a definition for a view of an entity. A view
2791 consists of an identification of the entity (the entity of the view),
2792 plus view-specific characteristics that affect the use of the entity
2793 through that view (such as mode of access to an object, formal parameter
2794 names and defaults for a subprogram, or visibility to components of a
2795 type). In most cases, a declaration also contains the definition for
2796 the entity itself (a renaming_declaration is an example of a declaration
2797 that does not define a new entity, but instead defines a view of an
2798 existing entity (see *note 8.5::)).
2799
2800 7.1/3
2801 When it is clear from context, the term object is used in place of view
2802 of an object. Similarly, the terms type and subtype are used in place
2803 of view of a type and view of a subtype, respectively.
2804
2805 8
2806 For each declaration, the language rules define a certain region of text
2807 called the scope of the declaration (see *note 8.2::). Most
2808 declarations associate an identifier with a declared entity. Within its
2809 scope, and only there, there are places where it is possible to use the
2810 identifier to refer to the declaration, the view it defines, and the
2811 associated entity; these places are defined by the visibility rules (see
2812 *note 8.3::). At such places the identifier is said to be a name of the
2813 entity (the direct_name or selector_name); the name is said to denote
2814 the declaration, the view, and the associated entity (see *note 8.6::).
2815 The declaration is said to declare the name, the view, and in most
2816 cases, the entity itself.
2817
2818 9
2819 As an alternative to an identifier, an enumeration literal can be
2820 declared with a character_literal as its name (see *note 3.5.1::), and a
2821 function can be declared with an operator_symbol as its name (see *note
2822 6.1::).
2823
2824 10
2825 The syntax rules use the terms defining_identifier,
2826 defining_character_literal (*note 3.5.1: S0040.), and
2827 defining_operator_symbol (*note 6.1: S0171.) for the defining occurrence
2828 of a name; these are collectively called defining names. The terms
2829 direct_name and selector_name are used for usage occurrences of
2830 identifiers, character_literals, and operator_symbols. These are
2831 collectively called usage names.
2832
2833 _Dynamic Semantics_
2834
2835 11
2836 The process by which a construct achieves its run-time effect is called
2837 execution. This process is also called elaboration for declarations and
2838 evaluation for expressions. One of the terms execution, elaboration, or
2839 evaluation is defined by this International Standard for each construct
2840 that has a run-time effect.
2841
2842 NOTES
2843
2844 12
2845 1 At compile time, the declaration of an entity declares the
2846 entity. At run time, the elaboration of the declaration creates
2847 the entity.
2848
2849 \1f
2850 File: arm2012.info, Node: 3.2, Next: 3.3, Prev: 3.1, Up: 3
2851
2852 3.2 Types and Subtypes
2853 ======================
2854
2855 _Static Semantics_
2856
2857 1
2858 A type is characterized by a set of values, and a set of primitive
2859 operations which implement the fundamental aspects of its semantics. An
2860 object of a given type is a run-time entity that contains (has) a value
2861 of the type.
2862
2863 2/2
2864 Types are grouped into categories of types. There exist several
2865 language-defined categories of types (see NOTES below), reflecting the
2866 similarity of their values and primitive operations. Most categories of
2867 types form classes of types. Elementary types are those whose values
2868 are logically indivisible; composite types are those whose values are
2869 composed of component values.
2870
2871 3
2872 The elementary types are the scalar types (discrete and real) and the
2873 access types (whose values provide access to objects or subprograms).
2874 Discrete types are either integer types or are defined by enumeration of
2875 their values (enumeration types). Real types are either floating point
2876 types or fixed point types.
2877
2878 4/2
2879 The composite types are the record types, record extensions, array
2880 types, interface types, task types, and protected types.
2881
2882 4.1/2
2883 There can be multiple views of a type with varying sets of operations.
2884 An incomplete type represents an incomplete view (see *note 3.10.1::) of
2885 a type with a very restricted usage, providing support for recursive
2886 data structures. A private type or private extension represents a
2887 partial view (see *note 7.3::) of a type, providing support for data
2888 abstraction. The full view (see *note 3.2.1::) of a type represents its
2889 complete definition. An incomplete or partial view is considered a
2890 composite type, even if the full view is not.
2891
2892 5/2
2893 Certain composite types (and views thereof) have special components
2894 called discriminants whose values affect the presence, constraints, or
2895 initialization of other components. Discriminants can be thought of as
2896 parameters of the type.
2897
2898 6/2
2899 The term subcomponent is used in this International Standard in place of
2900 the term component to indicate either a component, or a component of
2901 another subcomponent. Where other subcomponents are excluded, the term
2902 component is used instead. Similarly, a part of an object or value is
2903 used to mean the whole object or value, or any set of its subcomponents.
2904 The terms component, subcomponent, and part are also applied to a type
2905 meaning the component, subcomponent, or part of objects and values of
2906 the type.
2907
2908 7/2
2909 The set of possible values for an object of a given type can be
2910 subjected to a condition that is called a constraint (the case of a null
2911 constraint that specifies no restriction is also included); the rules
2912 for which values satisfy a given kind of constraint are given in *note
2913 3.5:: for range_constraints, *note 3.6.1:: for index_constraints, and
2914 *note 3.7.1:: for discriminant_constraints. The set of possible values
2915 for an object of an access type can also be subjected to a condition
2916 that excludes the null value (see *note 3.10::).
2917
2918 8/2
2919 A subtype of a given type is a combination of the type, a constraint on
2920 values of the type, and certain attributes specific to the subtype. The
2921 given type is called the type of the subtype. Similarly, the associated
2922 constraint is called the constraint of the subtype. The set of values
2923 of a subtype consists of the values of its type that satisfy its
2924 constraint and any exclusion of the null value. Such values belong to
2925 the subtype.
2926
2927 9
2928 A subtype is called an unconstrained subtype if its type has unknown
2929 discriminants, or if its type allows range, index, or discriminant
2930 constraints, but the subtype does not impose such a constraint;
2931 otherwise, the subtype is called a constrained subtype (since it has no
2932 unconstrained characteristics).
2933
2934 NOTES
2935
2936 10/2
2937 2 Any set of types can be called a "category" of types, and any
2938 set of types that is closed under derivation (see *note 3.4::) can
2939 be called a "class" of types. However, only certain categories and
2940 classes are used in the description of the rules of the language --
2941 generally those that have their own particular set of primitive
2942 operations (see *note 3.2.3::), or that correspond to a set of
2943 types that are matched by a given kind of generic formal type (see
2944 *note 12.5::). The following are examples of "interesting"
2945 language-defined classes: elementary, scalar, discrete,
2946 enumeration, character, boolean, integer, signed integer, modular,
2947 real, floating point, fixed point, ordinary fixed point, decimal
2948 fixed point, numeric, access, access-to-object,
2949 access-to-subprogram, composite, array, string, (untagged) record,
2950 tagged, task, protected, nonlimited. Special syntax is provided to
2951 define types in each of these classes. In addition to these
2952 classes, the following are examples of "interesting"
2953 language-defined categories: abstract, incomplete, interface,
2954 limited, private, record.
2955
2956 11/2
2957 These language-defined categories are organized like this:
2958
2959 12/2
2960 all types
2961 elementary
2962 scalar
2963 discrete
2964 enumeration
2965 character
2966 boolean
2967 other enumeration
2968 integer
2969 signed integer
2970 modular integer
2971 real
2972 floating point
2973 fixed point
2974 ordinary fixed point
2975 decimal fixed point
2976 access
2977 access-to-object
2978 access-to-subprogram
2979 composite
2980 untagged
2981 array
2982 string
2983 other array
2984 record
2985 task
2986 protected
2987 tagged (including interfaces)
2988 nonlimited tagged record
2989 limited tagged
2990 limited tagged record
2991 synchronized tagged
2992 tagged task
2993 tagged protected
2994
2995 13/2
2996 There are other categories, such as "numeric" and "discriminated",
2997 which represent other categorization dimensions, but do not fit
2998 into the above strictly hierarchical picture.
2999
3000 * Menu:
3001
3002 * 3.2.1 :: Type Declarations
3003 * 3.2.2 :: Subtype Declarations
3004 * 3.2.3 :: Classification of Operations
3005 * 3.2.4 :: Subtype Predicates
3006
3007 \1f
3008 File: arm2012.info, Node: 3.2.1, Next: 3.2.2, Up: 3.2
3009
3010 3.2.1 Type Declarations
3011 -----------------------
3012
3013 1
3014 A type_declaration declares a type and its first subtype.
3015
3016 _Syntax_
3017
3018 2
3019 type_declaration ::= full_type_declaration
3020 | incomplete_type_declaration
3021 | private_type_declaration
3022 | private_extension_declaration
3023
3024 3/3
3025 full_type_declaration ::=
3026 type defining_identifier [known_discriminant_part] is
3027 type_definition
3028 [aspect_specification];
3029 | task_type_declaration
3030 | protected_type_declaration
3031
3032 4/2
3033 type_definition ::=
3034 enumeration_type_definition | integer_type_definition
3035 | real_type_definition | array_type_definition
3036 | record_type_definition | access_type_definition
3037 | derived_type_definition | interface_type_definition
3038
3039 _Legality Rules_
3040
3041 5
3042 A given type shall not have a subcomponent whose type is the given type
3043 itself.
3044
3045 _Static Semantics_
3046
3047 6
3048 The defining_identifier (*note 3.1: S0022.) of a type_declaration (*note
3049 3.2.1: S0023.) denotes the first subtype of the type. The
3050 known_discriminant_part (*note 3.7: S0061.), if any, defines the
3051 discriminants of the type (see *note 3.7::, "*note 3.7::
3052 Discriminants"). The remainder of the type_declaration (*note 3.2.1:
3053 S0023.) defines the remaining characteristics of (the view of) the type.
3054
3055 7/2
3056 A type defined by a type_declaration (*note 3.2.1: S0023.) is a named
3057 type; such a type has one or more nameable subtypes. Certain other
3058 forms of declaration also include type definitions as part of the
3059 declaration for an object. The type defined by such a declaration is
3060 anonymous -- it has no nameable subtypes. For explanatory purposes,
3061 this International Standard sometimes refers to an anonymous type by a
3062 pseudo-name, written in italics, and uses such pseudo-names at places
3063 where the syntax normally requires an identifier. For a named type
3064 whose first subtype is T, this International Standard sometimes refers
3065 to the type of T as simply "the type T".
3066
3067 8/2
3068 A named type that is declared by a full_type_declaration (*note 3.2.1:
3069 S0024.), or an anonymous type that is defined by an access_definition or
3070 as part of declaring an object of the type, is called a full type. The
3071 declaration of a full type also declares the full view of the type. The
3072 type_definition (*note 3.2.1: S0025.), task_definition (*note 9.1:
3073 S0207.), protected_definition (*note 9.4: S0212.), or access_definition
3074 (*note 3.10: S0084.) that defines a full type is called a full type
3075 definition. Types declared by other forms of type_declaration (*note
3076 3.2.1: S0023.) are not separate types; they are partial or incomplete
3077 views of some full type.
3078
3079 9
3080 The definition of a type implicitly declares certain predefined
3081 operators that operate on the type, according to what classes the type
3082 belongs, as specified in *note 4.5::, "*note 4.5:: Operators and
3083 Expression Evaluation".
3084
3085 10
3086 The predefined types (for example the types Boolean, Wide_Character,
3087 Integer, root_integer, and universal_integer) are the types that are
3088 defined in a predefined library package called Standard; this package
3089 also includes the (implicit) declarations of their predefined operators.
3090 The package Standard is described in *note A.1::.
3091
3092 _Dynamic Semantics_
3093
3094 11
3095 The elaboration of a full_type_declaration consists of the elaboration
3096 of the full type definition. Each elaboration of a full type definition
3097 creates a distinct type and its first subtype.
3098
3099 _Examples_
3100
3101 12
3102 Examples of type definitions:
3103
3104 13
3105 (White, Red, Yellow, Green, Blue, Brown, Black)
3106 range 1 .. 72
3107 array(1 .. 10) of Integer
3108
3109 14
3110 Examples of type declarations:
3111
3112 15
3113 type Color is (White, Red, Yellow, Green, Blue, Brown, Black);
3114 type Column is range 1 .. 72;
3115 type Table is array(1 .. 10) of Integer;
3116
3117 NOTES
3118
3119 16
3120 3 Each of the above examples declares a named type. The
3121 identifier given denotes the first subtype of the type. Other
3122 named subtypes of the type can be declared with
3123 subtype_declarations (see *note 3.2.2::). Although names do not
3124 directly denote types, a phrase like "the type Column" is sometimes
3125 used in this International Standard to refer to the type of Column,
3126 where Column denotes the first subtype of the type. For an example
3127 of the definition of an anonymous type, see the declaration of the
3128 array Color_Table in *note 3.3.1::; its type is anonymous -- it has
3129 no nameable subtypes.
3130
3131 \1f
3132 File: arm2012.info, Node: 3.2.2, Next: 3.2.3, Prev: 3.2.1, Up: 3.2
3133
3134 3.2.2 Subtype Declarations
3135 --------------------------
3136
3137 1
3138 A subtype_declaration declares a subtype of some previously declared
3139 type, as defined by a subtype_indication.
3140
3141 _Syntax_
3142
3143 2/3
3144 subtype_declaration ::=
3145 subtype defining_identifier is subtype_indication
3146 [aspect_specification];
3147
3148 3/2
3149 subtype_indication ::= [null_exclusion] subtype_mark [constraint]
3150
3151 4
3152 subtype_mark ::= subtype_name
3153
3154 5
3155 constraint ::= scalar_constraint | composite_constraint
3156
3157 6
3158 scalar_constraint ::=
3159 range_constraint | digits_constraint | delta_constraint
3160
3161 7
3162 composite_constraint ::=
3163 index_constraint | discriminant_constraint
3164
3165 _Name Resolution Rules_
3166
3167 8
3168 A subtype_mark shall resolve to denote a subtype. The type determined
3169 by a subtype_mark is the type of the subtype denoted by the
3170 subtype_mark.
3171
3172 _Dynamic Semantics_
3173
3174 9
3175 The elaboration of a subtype_declaration consists of the elaboration of
3176 the subtype_indication. The elaboration of a subtype_indication creates
3177 a new subtype. If the subtype_indication does not include a constraint,
3178 the new subtype has the same (possibly null) constraint as that denoted
3179 by the subtype_mark. The elaboration of a subtype_indication that
3180 includes a constraint proceeds as follows:
3181
3182 10
3183 * The constraint is first elaborated.
3184
3185 11
3186 * A check is then made that the constraint is compatible with the
3187 subtype denoted by the subtype_mark.
3188
3189 12
3190 The condition imposed by a constraint is the condition obtained after
3191 elaboration of the constraint. The rules defining compatibility are
3192 given for each form of constraint in the appropriate subclause. These
3193 rules are such that if a constraint is compatible with a subtype, then
3194 the condition imposed by the constraint cannot contradict any condition
3195 already imposed by the subtype on its values. The exception
3196 Constraint_Error is raised if any check of compatibility fails.
3197
3198 NOTES
3199
3200 13
3201 4 A scalar_constraint may be applied to a subtype of an
3202 appropriate scalar type (see *note 3.5::, *note 3.5.9::, and *note
3203 J.3::), even if the subtype is already constrained. On the other
3204 hand, a composite_constraint may be applied to a composite subtype
3205 (or an access-to-composite subtype) only if the composite subtype
3206 is unconstrained (see *note 3.6.1:: and *note 3.7.1::).
3207
3208 _Examples_
3209
3210 14
3211 Examples of subtype declarations:
3212
3213 15/2
3214 subtype Rainbow is Color range Red .. Blue; -- see *note 3.2.1::
3215 subtype Red_Blue is Rainbow;
3216 subtype Int is Integer;
3217 subtype Small_Int is Integer range -10 .. 10;
3218 subtype Up_To_K is Column range 1 .. K; -- see *note 3.2.1::
3219 subtype Square is Matrix(1 .. 10, 1 .. 10); -- see *note 3.6::
3220 subtype Male is Person(Sex => M); -- see *note 3.10.1::
3221 subtype Binop_Ref is not null Binop_Ptr; -- see *note 3.10::
3222
3223 \1f
3224 File: arm2012.info, Node: 3.2.3, Next: 3.2.4, Prev: 3.2.2, Up: 3.2
3225
3226 3.2.3 Classification of Operations
3227 ----------------------------------
3228
3229 _Static Semantics_
3230
3231 1/2
3232 An operation operates on a type T if it yields a value of type T, if it
3233 has an operand whose expected type (see *note 8.6::) is T, or if it has
3234 an access parameter or access result type (see *note 6.1::) designating
3235 T. A predefined operator, or other language-defined operation such as
3236 assignment or a membership test, that operates on a type, is called a
3237 predefined operation of the type. The primitive operations of a type
3238 are the predefined operations of the type, plus any user-defined
3239 primitive subprograms.
3240
3241 2
3242 The primitive subprograms of a specific type are defined as follows:
3243
3244 3
3245 * The predefined operators of the type (see *note 4.5::);
3246
3247 4
3248 * For a derived type, the inherited (see *note 3.4::) user-defined
3249 subprograms;
3250
3251 5
3252 * For an enumeration type, the enumeration literals (which are
3253 considered parameterless functions -- see *note 3.5.1::);
3254
3255 6
3256 * For a specific type declared immediately within a
3257 package_specification, any subprograms (in addition to the
3258 enumeration literals) that are explicitly declared immediately
3259 within the same package_specification and that operate on the type;
3260
3261 6.1/3
3262 * For a specific type with an explicitly declared primitive "="
3263 operator whose result type is Boolean, the corresponding "/="
3264 operator (see *note 6.6::);
3265
3266 7/2
3267 * For a nonformal type, any subprograms not covered above that are
3268 explicitly declared immediately within the same declarative region
3269 as the type and that override (see *note 8.3::) other implicitly
3270 declared primitive subprograms of the type.
3271
3272 8
3273 A primitive subprogram whose designator is an operator_symbol is called
3274 a primitive operator.
3275
3276 \1f
3277 File: arm2012.info, Node: 3.2.4, Prev: 3.2.3, Up: 3.2
3278
3279 3.2.4 Subtype Predicates
3280 ------------------------
3281
3282 1/3
3283 The language-defined predicate aspects Static_Predicate and
3284 Dynamic_Predicate may be used to define properties of subtypes. A
3285 predicate specification is an aspect_specification for one of the two
3286 predicate aspects. General rules for aspects and aspect_specifications
3287 are found in Clause *note 13:: (*note 13.1:: and *note 13.1.1::
3288 respectively).
3289
3290 _Name Resolution Rules_
3291
3292 2/3
3293 The expected type for a predicate aspect expression is any boolean type.
3294
3295 _Static Semantics_
3296
3297 3/3
3298 A predicate specification may be given on a type_declaration or a
3299 subtype_declaration, and applies to the declared subtype. In addition,
3300 predicate specifications apply to certain other subtypes:
3301
3302 4/3
3303 * For a (first) subtype defined by a derived type declaration, the
3304 predicates of the parent subtype and the progenitor subtypes apply.
3305
3306 5/3
3307 * For a subtype created by a subtype_indication, the predicate of the
3308 subtype denoted by the subtype_mark applies.
3309
3310 6/3
3311 The predicate of a subtype consists of all predicate specifications that
3312 apply, and-ed together; if no predicate specifications apply, the
3313 predicate is True (in particular, the predicate of a base subtype is
3314 True).
3315
3316 7/3
3317 Predicate checks are defined to be enabled or disabled for a given
3318 subtype as follows:
3319
3320 8/3
3321 * If a subtype is declared by a type_declaration or
3322 subtype_declaration that includes a predicate specification, then:
3323
3324 9/3
3325 * if performing checks is required by the Static_Predicate
3326 assertion policy (see *note 11.4.2::) and the declaration
3327 includes a Static_Predicate specification, then predicate
3328 checks are enabled for the subtype;
3329
3330 10/3
3331 * if performing checks is required by the Dynamic_Predicate
3332 assertion policy (see *note 11.4.2::) and the declaration
3333 includes a Dynamic_Predicate specification, then predicate
3334 checks are enabled for the subtype;
3335
3336 11/3
3337 * otherwise, predicate checks are disabled for the subtype,
3338 regardless of whether predicate checking is enabled for any
3339 other subtypes mentioned in the declaration;
3340
3341 12/3
3342 * If a subtype is defined by a derived type declaration that does not
3343 include a predicate specification, then predicate checks are
3344 enabled for the subtype if and only if predicate checks are enabled
3345 for at least one of the parent subtype and the progenitor subtypes;
3346
3347 13/3
3348 * If a subtype is created by a subtype_indication other than in one
3349 of the previous cases, then predicate checks are enabled for the
3350 subtype if and only if predicate checks are enabled for the subtype
3351 denoted by the subtype_mark;
3352
3353 14/3
3354 * Otherwise, predicate checks are disabled for the given subtype.
3355
3356 _Legality Rules_
3357
3358 15/3
3359 The expression of a Static_Predicate specification shall be
3360 predicate-static; that is, one of the following:
3361
3362 16/3
3363 * a static expression;
3364
3365 17/3
3366 * a membership test whose simple_expression is the current instance,
3367 and whose membership_choice_list meets the requirements for a
3368 static membership test (see *note 4.9::);
3369
3370 18/3
3371 * a case_expression whose selecting_expression is the current
3372 instance, and whose dependent_expressions are static expressions;
3373
3374 19/3
3375 * a call to a predefined equality or ordering operator, where one
3376 operand is the current instance, and the other is a static
3377 expression;
3378
3379 20/3
3380 * a call to a predefined boolean logical operator, where each operand
3381 is predicate-static;
3382
3383 21/3
3384 * a short-circuit control form where both operands are
3385 predicate-static; or
3386
3387 22/3
3388 * a parenthesized predicate-static expression.
3389
3390 23/3
3391 A predicate shall not be specified for an incomplete subtype.
3392
3393 24/3
3394 If a predicate applies to a subtype, then that predicate shall not
3395 mention any other subtype to which the same predicate applies.
3396
3397 25/3
3398 An index subtype, discrete_range of an index_constraint or slice, or a
3399 discrete_subtype_definition of a constrained_array_definition,
3400 entry_declaration, or entry_index_specification shall not denote a
3401 subtype to which predicate specifications apply.
3402
3403 26/3
3404 The prefix of an attribute_reference whose attribute_designator is
3405 First, Last, or Range shall not denote a scalar subtype to which
3406 predicate specifications apply.
3407
3408 27/3
3409 The discrete_subtype_definition of a loop_parameter_specification shall
3410 not denote a nonstatic subtype to which predicate specifications apply
3411 or any subtype to which Dynamic_Predicate specifications apply.
3412
3413 28/3
3414 The discrete_choice of a named_array_aggregate shall not denote a
3415 nonstatic subtype to which predicate specifications apply.
3416
3417 29/3
3418 In addition to the places where Legality Rules normally apply (see *note
3419 12.3::), these rules apply also in the private part of an instance of a
3420 generic unit.
3421
3422 _Dynamic Semantics_
3423
3424 30/3
3425 If predicate checks are enabled for a given subtype, then:
3426
3427 31/3
3428 On every subtype conversion, the predicate of the target
3429 subtype is evaluated, and a check is performed that the
3430 predicate is True. This includes all parameter passing,
3431 except for certain parameters passed by reference, which are
3432 covered by the following rule: After normal completion and
3433 leaving of a subprogram, for each in out or out parameter that
3434 is passed by reference, the predicate of the subtype of the
3435 actual is evaluated, and a check is performed that the
3436 predicate is True. For an object created by an
3437 object_declaration with no explicit initialization expression,
3438 or by an uninitialized allocator, if any subcomponents have
3439 default_expressions, the predicate of the nominal subtype of
3440 the created object is evaluated, and a check is performed that
3441 the predicate is True. Assertions.Assertion_Error is raised
3442 if any of these checks fail.
3443
3444 32/3
3445 A value satisfies a predicate if the predicate is True for that value.
3446
3447 33/3
3448 If any of the above Legality Rules is violated in an instance of a
3449 generic unit, Program_Error is raised at the point of the violation.
3450
3451 NOTES
3452
3453 34/3
3454 5 A predicate specification does not cause a subtype to be
3455 considered constrained.
3456
3457 35/3
3458 6 A Static_Predicate, like a constraint, always remains True for
3459 all objects of the subtype, except in the case of uninitialized
3460 variables and other invalid values. A Dynamic_Predicate, on the
3461 other hand, is checked as specified above, but can become False at
3462 other times. For example, the predicate of a record subtype is not
3463 checked when a subcomponent is modified.
3464
3465 \1f
3466 File: arm2012.info, Node: 3.3, Next: 3.4, Prev: 3.2, Up: 3
3467
3468 3.3 Objects and Named Numbers
3469 =============================
3470
3471 1
3472 Objects are created at run time and contain a value of a given type. An
3473 object can be created and initialized as part of elaborating a
3474 declaration, evaluating an allocator, aggregate, or function_call, or
3475 passing a parameter by copy. Prior to reclaiming the storage for an
3476 object, it is finalized if necessary (see *note 7.6.1::).
3477
3478 _Static Semantics_
3479
3480 2
3481 All of the following are objects:
3482
3483 3
3484 * the entity declared by an object_declaration;
3485
3486 4
3487 * a formal parameter of a subprogram, entry, or generic subprogram;
3488
3489 5
3490 * a generic formal object;
3491
3492 6
3493 * a loop parameter;
3494
3495 7
3496 * a choice parameter of an exception_handler;
3497
3498 8
3499 * an entry index of an entry_body;
3500
3501 9
3502 * the result of dereferencing an access-to-object value (see *note
3503 4.1::);
3504
3505 10/3
3506 * the return object of a function;
3507
3508 11
3509 * the result of evaluating an aggregate;
3510
3511 11.1/3
3512 * a qualified_expression whose operand denotes an object;
3513
3514 12
3515 * a component, slice, or view conversion of another object.
3516
3517 13/3
3518 An object is either a constant object or a variable object. Similarly,
3519 a view of an object is either a constant or a variable. All views of a
3520 constant elementary object are constant. All views of a constant
3521 composite object are constant, except for parts that are of controlled
3522 or immutably limited types; variable views of those parts and their
3523 subcomponents may exist. In this sense, objects of controlled and
3524 immutably limited types are inherently mutable. A constant view of an
3525 object cannot be used to modify its value. The terms constant and
3526 variable by themselves refer to constant and variable views of objects.
3527
3528 14
3529 The value of an object is read when the value of any part of the object
3530 is evaluated, or when the value of an enclosing object is evaluated.
3531 The value of a variable is updated when an assignment is performed to
3532 any part of the variable, or when an assignment is performed to an
3533 enclosing object.
3534
3535 15
3536 Whether a view of an object is constant or variable is determined by the
3537 definition of the view. The following (and no others) represent
3538 constants:
3539
3540 16
3541 * an object declared by an object_declaration with the reserved word
3542 constant;
3543
3544 17
3545 * a formal parameter or generic formal object of mode in;
3546
3547 18
3548 * a discriminant;
3549
3550 18.1/3
3551 * a loop parameter unless specified to be a variable for a
3552 generalized loop (see *note 5.5.2::);
3553
3554 19/3
3555 * a choice parameter or entry index;
3556
3557 20
3558 * the dereference of an access-to-constant value;
3559
3560 20.1/3
3561 * the return object declared by an extended_return_statement with the
3562 reserved word constant;
3563
3564 21/3
3565 * the object denoted by a function_call or an aggregate;
3566
3567 21.1/3
3568 * the result of evaluating a qualified_expression;
3569
3570 21.2/3
3571 * within the body of a protected function (or a function declared
3572 immediately within a protected_body), the current instance of the
3573 enclosing protected unit;
3574
3575 22
3576 * a selected_component, indexed_component, slice, or view conversion
3577 of a constant.
3578
3579 23/3
3580 At the place where a view of an object is defined, a nominal subtype is
3581 associated with the view. The object's actual subtype (that is, its
3582 subtype) can be more restrictive than the nominal subtype of the view;
3583 it always is if the nominal subtype is an indefinite subtype. A subtype
3584 is an indefinite subtype if it is an unconstrained array subtype, or if
3585 it has unknown discriminants or unconstrained discriminants without
3586 defaults (see *note 3.7::); otherwise, the subtype is a definite subtype
3587 (all elementary subtypes are definite subtypes). A class-wide subtype
3588 is defined to have unknown discriminants, and is therefore an indefinite
3589 subtype. An indefinite subtype does not by itself provide enough
3590 information to create an object; an additional constraint or explicit
3591 initialization expression is necessary (see *note 3.3.1::). A component
3592 cannot have an indefinite nominal subtype.
3593
3594 23.1/3
3595 A view of a composite object is known to be constrained if:
3596
3597 23.2/3
3598 * its nominal subtype is constrained, and is not an untagged partial
3599 view; or
3600
3601 23.3/3
3602 * its nominal subtype is indefinite; or
3603
3604 23.4/3
3605 * its type is immutably limited (see *note 7.5::); or
3606
3607 23.5/3
3608 * it is part of a stand-alone constant (including a generic formal
3609 object of mode in); or
3610
3611 23.6/3
3612 * it is part of a formal parameter of mode in; or
3613
3614 23.7/3
3615 * it is part of the object denoted by a function_call or aggregate;
3616 or
3617
3618 23.8/3
3619 * it is part of a constant return object of an
3620 extended_return_statement; or
3621
3622 23.9/3
3623 * it is a dereference of a pool-specific access type, and there is no
3624 ancestor of its type that has a constrained partial view.
3625
3626 23.10/3
3627 For the purposes of determining within a generic body whether an object
3628 is known to be constrained:
3629
3630 23.11/3
3631 * if a subtype is a descendant of an untagged generic formal private
3632 or derived type, and the subtype is not an unconstrained array
3633 subtype, it is not considered indefinite and is considered to have
3634 a constrained partial view;
3635
3636 23.12/3
3637 * if a subtype is a descendant of a formal access type, it is not
3638 considered pool-specific.
3639
3640 24
3641 A named number provides a name for a numeric value known at compile
3642 time. It is declared by a number_declaration.
3643
3644 NOTES
3645
3646 25
3647 7 A constant cannot be the target of an assignment operation, nor
3648 be passed as an in out or out parameter, between its initialization
3649 and finalization, if any.
3650
3651 25.1/3
3652 8 The value of a constant object cannot be changed after its
3653 initialization, except in some cases where the object has a
3654 controlled or immutably limited part (see *note 7.5::, *note 7.6::,
3655 and *note 13.9.1::).
3656
3657 26/3
3658 9 The nominal and actual subtypes of an elementary object are
3659 always the same. For a discriminated or array object, if the
3660 nominal subtype is constrained, then so is the actual subtype.
3661
3662 * Menu:
3663
3664 * 3.3.1 :: Object Declarations
3665 * 3.3.2 :: Number Declarations
3666
3667 \1f
3668 File: arm2012.info, Node: 3.3.1, Next: 3.3.2, Up: 3.3
3669
3670 3.3.1 Object Declarations
3671 -------------------------
3672
3673 1/3
3674 An object_declaration declares a stand-alone object with a given nominal
3675 subtype and, optionally, an explicit initial value given by an
3676 initialization expression. For an array, access, task, or protected
3677 object, the object_declaration may include the definition of the
3678 (anonymous) type of the object.
3679
3680 _Syntax_
3681
3682 2/3
3683 object_declaration ::=
3684 defining_identifier_list : [aliased] [constant]
3685 subtype_indication [:= expression]
3686 [aspect_specification];
3687 | defining_identifier_list : [aliased] [constant]
3688 access_definition [:= expression]
3689 [aspect_specification];
3690 | defining_identifier_list : [aliased] [constant]
3691 array_type_definition [:= expression]
3692 [aspect_specification];
3693 | single_task_declaration
3694 | single_protected_declaration
3695
3696 3
3697 defining_identifier_list ::=
3698 defining_identifier {, defining_identifier}
3699
3700 _Name Resolution Rules_
3701
3702 4
3703 For an object_declaration with an expression following the compound
3704 delimiter :=, the type expected for the expression is that of the
3705 object. This expression is called the initialization expression.
3706
3707 _Legality Rules_
3708
3709 5/2
3710 An object_declaration without the reserved word constant declares a
3711 variable object. If it has a subtype_indication or an
3712 array_type_definition that defines an indefinite subtype, then there
3713 shall be an initialization expression.
3714
3715 _Static Semantics_
3716
3717 6/3
3718 An object_declaration with the reserved word constant declares a
3719 constant object. If it has an initialization expression, then it is
3720 called a full constant declaration. Otherwise, it is called a deferred
3721 constant declaration. The rules for deferred constant declarations are
3722 given in subclause *note 7.4::. The rules for full constant
3723 declarations are given in this subclause.
3724
3725 7
3726 Any declaration that includes a defining_identifier_list with more than
3727 one defining_identifier is equivalent to a series of declarations each
3728 containing one defining_identifier from the list, with the rest of the
3729 text of the declaration copied for each declaration in the series, in
3730 the same order as the list. The remainder of this International
3731 Standard relies on this equivalence; explanations are given for
3732 declarations with a single defining_identifier.
3733
3734 8/2
3735 The subtype_indication, access_definition, or full type definition of an
3736 object_declaration defines the nominal subtype of the object. The
3737 object_declaration declares an object of the type of the nominal
3738 subtype.
3739
3740 8.1/2
3741 A component of an object is said to require late initialization if it
3742 has an access discriminant value constrained by a per-object expression,
3743 or if it has an initialization expression that includes a name denoting
3744 the current instance of the type or denoting an access discriminant.
3745
3746 _Dynamic Semantics_
3747
3748 9/2
3749 If a composite object declared by an object_declaration has an
3750 unconstrained nominal subtype, then if this subtype is indefinite or the
3751 object is constant the actual subtype of this object is constrained.
3752 The constraint is determined by the bounds or discriminants (if any) of
3753 its initial value; the object is said to be constrained by its initial
3754 value. When not constrained by its initial value, the actual and
3755 nominal subtypes of the object are the same. If its actual subtype is
3756 constrained, the object is called a constrained object.
3757
3758 10
3759 For an object_declaration without an initialization expression, any
3760 initial values for the object or its subcomponents are determined by the
3761 implicit initial values defined for its nominal subtype, as follows:
3762
3763 11
3764 * The implicit initial value for an access subtype is the null value
3765 of the access type.
3766
3767 11.1/3
3768 * The implicit initial value for a scalar subtype that has the
3769 Default_Value aspect specified is the value of that aspect
3770 converted to the nominal subtype (which might raise
3771 Constraint_Error -- see *note 4.6::, "*note 4.6:: Type
3772 Conversions");
3773
3774 12
3775 * The implicit initial (and only) value for each discriminant of a
3776 constrained discriminated subtype is defined by the subtype.
3777
3778 13/3
3779 * For a (definite) composite subtype, the implicit initial value of
3780 each component with a default_expression is obtained by evaluation
3781 of this expression and conversion to the component's nominal
3782 subtype (which might raise Constraint_Error), unless the component
3783 is a discriminant of a constrained subtype (the previous case), or
3784 is in an excluded variant (see *note 3.8.1::). For each component
3785 that does not have a default_expression, if the composite subtype
3786 has the Default_Component_Value aspect specified, the implicit
3787 initial value is the value of that aspect converted to the
3788 component's nominal subtype; otherwise, any implicit initial values
3789 are those determined by the component's nominal subtype.
3790
3791 14
3792 * For a protected or task subtype, there is an implicit component (an
3793 entry queue) corresponding to each entry, with its implicit initial
3794 value being an empty queue.
3795
3796 15
3797 The elaboration of an object_declaration proceeds in the following
3798 sequence of steps:
3799
3800 16/2
3801 1. The subtype_indication (*note 3.2.2: S0027.), access_definition
3802 (*note 3.10: S0084.), array_type_definition (*note 3.6: S0051.),
3803 single_task_declaration (*note 9.1: S0206.), or
3804 single_protected_declaration (*note 9.4: S0211.) is first
3805 elaborated. This creates the nominal subtype (and the anonymous
3806 type in the last four cases).
3807
3808 17
3809 2. If the object_declaration includes an initialization
3810 expression, the (explicit) initial value is obtained by evaluating
3811 the expression and converting it to the nominal subtype (which
3812 might raise Constraint_Error -- see *note 4.6::).
3813
3814 18/2
3815 3. The object is created, and, if there is not an initialization
3816 expression, the object is initialized by default. When an object
3817 is initialized by default, any per-object constraints (see *note
3818 3.8::) are elaborated and any implicit initial values for the
3819 object or for its subcomponents are obtained as determined by the
3820 nominal subtype. Any initial values (whether explicit or implicit)
3821 are assigned to the object or to the corresponding subcomponents.
3822 As described in *note 5.2:: and *note 7.6::, Initialize and Adjust
3823 procedures can be called.
3824
3825 19/2
3826 This paragraph was deleted.
3827
3828 20/2
3829 For the third step above, evaluations and assignments are performed in
3830 an arbitrary order subject to the following restrictions:
3831
3832 20.1/2
3833 * Assignment to any part of the object is preceded by the evaluation
3834 of the value that is to be assigned.
3835
3836 20.2/2
3837 * The evaluation of a default_expression that includes the name of a
3838 discriminant is preceded by the assignment to that discriminant.
3839
3840 20.3/2
3841 * The evaluation of the default_expression for any component that
3842 depends on a discriminant is preceded by the assignment to that
3843 discriminant.
3844
3845 20.4/3
3846 * The assignments to any components, including implicit components,
3847 not requiring late initialization precede the initial value
3848 evaluations for any components requiring late initialization; if
3849 two components both require late initialization, then assignments
3850 to parts of the component occurring earlier in the order of the
3851 component declarations precede the initial value evaluations of the
3852 component occurring later.
3853
3854 21/3
3855 There is no implicit initial value defined for a scalar subtype unless
3856 the Default_Value aspect has been specified for the type. In the
3857 absence of an explicit initialization or the specification of the
3858 Default_Value aspect, a newly created scalar object might have a value
3859 that does not belong to its subtype (see *note 13.9.1:: and *note
3860 H.1::).
3861
3862 NOTES
3863
3864 22
3865 10 Implicit initial values are not defined for an indefinite
3866 subtype, because if an object's nominal subtype is indefinite, an
3867 explicit initial value is required.
3868
3869 23/3
3870 11 As indicated above, a stand-alone object is an object declared
3871 by an object_declaration. Similar definitions apply to
3872 "stand-alone constant" and "stand-alone variable." A subcomponent
3873 of an object is not a stand-alone object, nor is an object that is
3874 created by an allocator. An object declared by a
3875 loop_parameter_specification, iterator_specification,
3876 parameter_specification, entry_index_specification,
3877 choice_parameter_specification, extended_return_statement, or a
3878 formal_object_declaration of mode in out is not considered a
3879 stand-alone object.
3880
3881 24
3882 12 The type of a stand-alone object cannot be abstract (see *note
3883 3.9.3::).
3884
3885 _Examples_
3886
3887 25
3888 Example of a multiple object declaration:
3889
3890 26
3891 -- the multiple object declaration
3892
3893 27/2
3894 John, Paul : not null Person_Name := new Person(Sex => M); -- see *note 3.10.1::
3895
3896 28
3897 -- is equivalent to the two single object declarations in the order given
3898
3899 29/2
3900 John : not null Person_Name := new Person(Sex => M);
3901 Paul : not null Person_Name := new Person(Sex => M);
3902
3903 30
3904 Examples of variable declarations:
3905
3906 31/2
3907 Count, Sum : Integer;
3908 Size : Integer range 0 .. 10_000 := 0;
3909 Sorted : Boolean := False;
3910 Color_Table : array(1 .. Max) of Color;
3911 Option : Bit_Vector(1 .. 10) := (others => True);
3912 Hello : aliased String := "Hi, world.";
3913 [Unicode 952], [Unicode 966] : Float range -PI .. +PI;
3914
3915 32
3916 Examples of constant declarations:
3917
3918 33/2
3919 Limit : constant Integer := 10_000;
3920 Low_Limit : constant Integer := Limit/10;
3921 Tolerance : constant Real := Dispersion(1.15);
3922 Hello_Msg : constant access String := Hello'Access; -- see *note 3.10.2::
3923
3924 \1f
3925 File: arm2012.info, Node: 3.3.2, Prev: 3.3.1, Up: 3.3
3926
3927 3.3.2 Number Declarations
3928 -------------------------
3929
3930 1
3931 A number_declaration declares a named number.
3932
3933 _Syntax_
3934
3935 2
3936 number_declaration ::=
3937 defining_identifier_list : constant := static_expression;
3938
3939 _Name Resolution Rules_
3940
3941 3
3942 The static_expression given for a number_declaration is expected to be
3943 of any numeric type.
3944
3945 _Legality Rules_
3946
3947 4/3
3948 The static_expression given for a number declaration shall be a static
3949 expression, as defined by subclause *note 4.9::.
3950
3951 _Static Semantics_
3952
3953 5
3954 The named number denotes a value of type universal_integer if the type
3955 of the static_expression is an integer type. The named number denotes a
3956 value of type universal_real if the type of the static_expression is a
3957 real type.
3958
3959 6
3960 The value denoted by the named number is the value of the
3961 static_expression, converted to the corresponding universal type.
3962
3963 _Dynamic Semantics_
3964
3965 7
3966 The elaboration of a number_declaration has no effect.
3967
3968 _Examples_
3969
3970 8
3971 Examples of number declarations:
3972
3973 9
3974 Two_Pi : constant := 2.0*Ada.Numerics.Pi; -- a real number (see *note A.5::)
3975
3976 10/2
3977 Max : constant := 500; -- an integer number
3978 Max_Line_Size : constant := Max/6; -- the integer 83
3979 Power_16 : constant := 2**16; -- the integer 65_536
3980 One, Un, Eins : constant := 1; -- three different names for 1
3981
3982 \1f
3983 File: arm2012.info, Node: 3.4, Next: 3.5, Prev: 3.3, Up: 3
3984
3985 3.4 Derived Types and Classes
3986 =============================
3987
3988 1/2
3989 A derived_type_definition defines a derived type (and its first subtype)
3990 whose characteristics are derived from those of a parent type, and
3991 possibly from progenitor types.
3992
3993 1.1/2
3994 A class of types is a set of types that is closed under derivation; that
3995 is, if the parent or a progenitor type of a derived type belongs to a
3996 class, then so does the derived type. By saying that a particular group
3997 of types forms a class, we are saying that all derivatives of a type in
3998 the set inherit the characteristics that define that set. The more
3999 general term category of types is used for a set of types whose defining
4000 characteristics are not necessarily inherited by derivatives; for
4001 example, limited, abstract, and interface are all categories of types,
4002 but not classes of types.
4003
4004 _Syntax_
4005
4006 2/2
4007 derived_type_definition ::=
4008 [abstract] [limited] new parent_subtype_indication [[and
4009 interface_list] record_extension_part]
4010
4011 _Legality Rules_
4012
4013 3/2
4014 The parent_subtype_indication defines the parent subtype; its type is
4015 the parent type. The interface_list defines the progenitor types (see
4016 *note 3.9.4::). A derived type has one parent type and zero or more
4017 progenitor types.
4018
4019 4
4020 A type shall be completely defined (see *note 3.11.1::) prior to being
4021 specified as the parent type in a derived_type_definition -- the
4022 full_type_declarations for the parent type and any of its subcomponents
4023 have to precede the derived_type_definition.
4024
4025 5/2
4026 If there is a record_extension_part, the derived type is called a record
4027 extension of the parent type. A record_extension_part shall be provided
4028 if and only if the parent type is a tagged type. An interface_list
4029 shall be provided only if the parent type is a tagged type.
4030
4031 5.1/3
4032 If the reserved word limited appears in a derived_type_definition, the
4033 parent type shall be a limited type. If the parent type is a tagged
4034 formal type, then in addition to the places where Legality Rules
4035 normally apply (see *note 12.3::), this rule applies also in the private
4036 part of an instance of a generic unit.
4037
4038 _Static Semantics_
4039
4040 6
4041 The first subtype of the derived type is unconstrained if a
4042 known_discriminant_part is provided in the declaration of the derived
4043 type, or if the parent subtype is unconstrained. Otherwise, the
4044 constraint of the first subtype corresponds to that of the parent
4045 subtype in the following sense: it is the same as that of the parent
4046 subtype except that for a range constraint (implicit or explicit), the
4047 value of each bound of its range is replaced by the corresponding value
4048 of the derived type.
4049
4050 6.1/2
4051 The first subtype of the derived type excludes null (see *note 3.10::)
4052 if and only if the parent subtype excludes null.
4053
4054 7/3
4055 The characteristics and implicitly declared primitive subprograms of the
4056 derived type are defined as follows:
4057
4058 8/2
4059 * If the parent type or a progenitor type belongs to a class of
4060 types, then the derived type also belongs to that class. The
4061 following sets of types, as well as any higher-level sets composed
4062 from them, are classes in this sense, and hence the characteristics
4063 defining these classes are inherited by derived types from their
4064 parent or progenitor types: signed integer, modular integer,
4065 ordinary fixed, decimal fixed, floating point, enumeration,
4066 boolean, character, access-to-constant, general access-to-variable,
4067 pool-specific access-to-variable, access-to-subprogram, array,
4068 string, non-array composite, nonlimited, untagged record, tagged,
4069 task, protected, and synchronized tagged.
4070
4071 9
4072 * If the parent type is an elementary type or an array type, then the
4073 set of possible values of the derived type is a copy of the set of
4074 possible values of the parent type. For a scalar type, the base
4075 range of the derived type is the same as that of the parent type.
4076
4077 10
4078 * If the parent type is a composite type other than an array type,
4079 then the components, protected subprograms, and entries that are
4080 declared for the derived type are as follows:
4081
4082 11
4083 * The discriminants specified by a new
4084 known_discriminant_part, if there is one; otherwise, each
4085 discriminant of the parent type (implicitly declared in
4086 the same order with the same specifications) -- in the
4087 latter case, the discriminants are said to be inherited,
4088 or if unknown in the parent, are also unknown in the
4089 derived type;
4090
4091 12
4092 * Each nondiscriminant component, entry, and protected
4093 subprogram of the parent type, implicitly declared in the
4094 same order with the same declarations; these components,
4095 entries, and protected subprograms are said to be
4096 inherited;
4097
4098 13
4099 * Each component declared in a record_extension_part, if
4100 any.
4101
4102 14
4103 Declarations of components, protected subprograms, and entries,
4104 whether implicit or explicit, occur immediately within the
4105 declarative region of the type, in the order indicated above,
4106 following the parent subtype_indication.
4107
4108 15/2
4109 * This paragraph was deleted.
4110
4111 16
4112 * For each predefined operator of the parent type, there is a
4113 corresponding predefined operator of the derived type.
4114
4115 17/2
4116 * For each user-defined primitive subprogram (other than a
4117 user-defined equality operator -- see below) of the parent type or
4118 of a progenitor type that already exists at the place of the
4119 derived_type_definition, there exists a corresponding inherited
4120 primitive subprogram of the derived type with the same defining
4121 name. Primitive user-defined equality operators of the parent type
4122 and any progenitor types are also inherited by the derived type,
4123 except when the derived type is a nonlimited record extension, and
4124 the inherited operator would have a profile that is type conformant
4125 with the profile of the corresponding predefined equality operator;
4126 in this case, the user-defined equality operator is not inherited,
4127 but is rather incorporated into the implementation of the
4128 predefined equality operator of the record extension (see *note
4129 4.5.2::).
4130
4131 18/3
4132 The profile of an inherited subprogram (including an inherited
4133 enumeration literal) is obtained from the profile of the
4134 corresponding (user-defined) primitive subprogram of the parent or
4135 progenitor type, after systematic replacement of each subtype of
4136 its profile (see *note 6.1::) that is of the parent or progenitor
4137 type, other than those subtypes found in the designated profile of
4138 an access_definition, with a corresponding subtype of the derived
4139 type. For a given subtype of the parent or progenitor type, the
4140 corresponding subtype of the derived type is defined as follows:
4141
4142 19
4143 * If the declaration of the derived type has neither a
4144 known_discriminant_part nor a record_extension_part, then
4145 the corresponding subtype has a constraint that
4146 corresponds (as defined above for the first subtype of
4147 the derived type) to that of the given subtype.
4148
4149 20
4150 * If the derived type is a record extension, then the
4151 corresponding subtype is the first subtype of the derived
4152 type.
4153
4154 21
4155 * If the derived type has a new known_discriminant_part but
4156 is not a record extension, then the corresponding subtype
4157 is constrained to those values that when converted to the
4158 parent type belong to the given subtype (see *note
4159 4.6::).
4160
4161 22/2
4162 The same formal parameters have default_expressions in the profile
4163 of the inherited subprogram. Any type mismatch due to the
4164 systematic replacement of the parent or progenitor type by the
4165 derived type is handled as part of the normal type conversion
4166 associated with parameter passing -- see *note 6.4.1::.
4167
4168 23/2
4169 If a primitive subprogram of the parent or progenitor type is visible at
4170 the place of the derived_type_definition, then the corresponding
4171 inherited subprogram is implicitly declared immediately after the
4172 derived_type_definition. Otherwise, the inherited subprogram is
4173 implicitly declared later or not at all, as explained in *note 7.3.1::.
4174
4175 24
4176 A derived type can also be defined by a private_extension_declaration
4177 (*note 7.3: S0194.) (see *note 7.3::) or a
4178 formal_derived_type_definition (*note 12.5.1: S0285.) (see *note
4179 12.5.1::). Such a derived type is a partial view of the corresponding
4180 full or actual type.
4181
4182 25
4183 All numeric types are derived types, in that they are implicitly derived
4184 from a corresponding root numeric type (see *note 3.5.4:: and *note
4185 3.5.6::).
4186
4187 _Dynamic Semantics_
4188
4189 26
4190 The elaboration of a derived_type_definition creates the derived type
4191 and its first subtype, and consists of the elaboration of the
4192 subtype_indication (*note 3.2.2: S0027.) and the record_extension_part
4193 (*note 3.9.1: S0075.), if any. If the subtype_indication (*note 3.2.2:
4194 S0027.) depends on a discriminant, then only those expressions that do
4195 not depend on a discriminant are evaluated.
4196
4197 27/2
4198 For the execution of a call on an inherited subprogram, a call on the
4199 corresponding primitive subprogram of the parent or progenitor type is
4200 performed; the normal conversion of each actual parameter to the subtype
4201 of the corresponding formal parameter (see *note 6.4.1::) performs any
4202 necessary type conversion as well. If the result type of the inherited
4203 subprogram is the derived type, the result of calling the subprogram of
4204 the parent or progenitor is converted to the derived type, or in the
4205 case of a null extension, extended to the derived type using the
4206 equivalent of an extension_aggregate with the original result as the
4207 ancestor_part and null record as the record_component_association_list.
4208
4209 NOTES
4210
4211 28
4212 13 Classes are closed under derivation -- any class that contains
4213 a type also contains its derivatives. Operations available for a
4214 given class of types are available for the derived types in that
4215 class.
4216
4217 29
4218 14 Evaluating an inherited enumeration literal is equivalent to
4219 evaluating the corresponding enumeration literal of the parent
4220 type, and then converting the result to the derived type. This
4221 follows from their equivalence to parameterless functions.
4222
4223 30
4224 15 A generic subprogram is not a subprogram, and hence cannot be a
4225 primitive subprogram and cannot be inherited by a derived type. On
4226 the other hand, an instance of a generic subprogram can be a
4227 primitive subprogram, and hence can be inherited.
4228
4229 31
4230 16 If the parent type is an access type, then the parent and the
4231 derived type share the same storage pool; there is a null access
4232 value for the derived type and it is the implicit initial value for
4233 the type. See *note 3.10::.
4234
4235 32
4236 17 If the parent type is a boolean type, the predefined relational
4237 operators of the derived type deliver a result of the predefined
4238 type Boolean (see *note 4.5.2::). If the parent type is an integer
4239 type, the right operand of the predefined exponentiation operator
4240 is of the predefined type Integer (see *note 4.5.6::).
4241
4242 33
4243 18 Any discriminants of the parent type are either all inherited,
4244 or completely replaced with a new set of discriminants.
4245
4246 34
4247 19 For an inherited subprogram, the subtype of a formal parameter
4248 of the derived type need not have any value in common with the
4249 first subtype of the derived type.
4250
4251 35
4252 20 If the reserved word abstract is given in the declaration of a
4253 type, the type is abstract (see *note 3.9.3::).
4254
4255 35.1/2
4256 21 An interface type that has a progenitor type "is derived from"
4257 that type. A derived_type_definition, however, never defines an
4258 interface type.
4259
4260 35.2/2
4261 22 It is illegal for the parent type of a derived_type_definition
4262 to be a synchronized tagged type.
4263
4264 _Examples_
4265
4266 36
4267 Examples of derived type declarations:
4268
4269 37
4270 type Local_Coordinate is new Coordinate; -- two different types
4271 type Midweek is new Day range Tue .. Thu; -- see *note 3.5.1::
4272 type Counter is new Positive; -- same range as Positive
4273
4274 38
4275 type Special_Key is new Key_Manager.Key; -- see *note 7.3.1::
4276 -- the inherited subprograms have the following specifications:
4277 -- procedure Get_Key(K : out Special_Key);
4278 -- function "<"(X,Y : Special_Key) return Boolean;
4279
4280 * Menu:
4281
4282 * 3.4.1 :: Derivation Classes
4283
4284 \1f
4285 File: arm2012.info, Node: 3.4.1, Up: 3.4
4286
4287 3.4.1 Derivation Classes
4288 ------------------------
4289
4290 1
4291 In addition to the various language-defined classes of types, types can
4292 be grouped into derivation classes.
4293
4294 _Static Semantics_
4295
4296 2/2
4297 A derived type is derived from its parent type directly; it is derived
4298 indirectly from any type from which its parent type is derived. A
4299 derived type, interface type, type extension, task type, protected type,
4300 or formal derived type is also derived from every ancestor of each of
4301 its progenitor types, if any. The derivation class of types for a type
4302 T (also called the class rooted at T) is the set consisting of T (the
4303 root type of the class) and all types derived from T (directly or
4304 indirectly) plus any associated universal or class-wide types (defined
4305 below).
4306
4307 3/2
4308 Every type is either a specific type, a class-wide type, or a universal
4309 type. A specific type is one defined by a type_declaration, a
4310 formal_type_declaration, or a full type definition embedded in another
4311 construct. Class-wide and universal types are implicitly defined, to
4312 act as representatives for an entire class of types, as follows:
4313
4314 4
4315 Class-wide types
4316 Class-wide types are defined for (and belong to) each
4317 derivation class rooted at a tagged type (see *note
4318 3.9::). Given a subtype S of a tagged type T, S'Class is
4319 the subtype_mark for a corresponding subtype of the
4320 tagged class-wide type T'Class. Such types are called
4321 "class-wide" because when a formal parameter is defined
4322 to be of a class-wide type T'Class, an actual parameter
4323 of any type in the derivation class rooted at T is
4324 acceptable (see *note 8.6::).
4325
4326 5
4327 The set of values for a class-wide type T'Class is the
4328 discriminated union of the set of values of each specific
4329 type in the derivation class rooted at T (the tag acts as
4330 the implicit discriminant -- see *note 3.9::).
4331 Class-wide types have no primitive subprograms of their
4332 own. However, as explained in *note 3.9.2::, operands of
4333 a class-wide type T'Class can be used as part of a
4334 dispatching call on a primitive subprogram of the type T.
4335 The only components (including discriminants) of T'Class
4336 that are visible are those of T. If S is a first subtype,
4337 then S'Class is a first subtype.
4338
4339 6/2
4340 Universal types
4341 Universal types are defined for (and belong to) the
4342 integer, real, fixed point, and access classes, and are
4343 referred to in this standard as respectively,
4344 universal_integer, universal_real, universal_fixed, and
4345 universal_access. These are analogous to class-wide
4346 types for these language-defined elementary classes. As
4347 with class-wide types, if a formal parameter is of a
4348 universal type, then an actual parameter of any type in
4349 the corresponding class is acceptable. In addition, a
4350 value of a universal type (including an integer or real
4351 numeric_literal, or the literal null) is "universal" in
4352 that it is acceptable where some particular type in the
4353 class is expected (see *note 8.6::).
4354
4355 7
4356 The set of values of a universal type is the
4357 undiscriminated union of the set of values possible for
4358 any definable type in the associated class. Like
4359 class-wide types, universal types have no primitive
4360 subprograms of their own. However, their "universality"
4361 allows them to be used as operands with the primitive
4362 subprograms of any type in the corresponding class.
4363
4364 8
4365 The integer and real numeric classes each have a specific root type in
4366 addition to their universal type, named respectively root_integer and
4367 root_real.
4368
4369 9
4370 A class-wide or universal type is said to cover all of the types in its
4371 class. A specific type covers only itself.
4372
4373 10/2
4374 A specific type T2 is defined to be a descendant of a type T1 if T2 is
4375 the same as T1, or if T2 is derived (directly or indirectly) from T1. A
4376 class-wide type T2'Class is defined to be a descendant of type T1 if T2
4377 is a descendant of T1. Similarly, the numeric universal types are
4378 defined to be descendants of the root types of their classes. If a type
4379 T2 is a descendant of a type T1, then T1 is called an ancestor of T2.
4380 An ultimate ancestor of a type is an ancestor of that type that is not
4381 itself a descendant of any other type. Every untagged type has a unique
4382 ultimate ancestor.
4383
4384 11
4385 An inherited component (including an inherited discriminant) of a
4386 derived type is inherited from a given ancestor of the type if the
4387 corresponding component was inherited by each derived type in the chain
4388 of derivations going back to the given ancestor.
4389
4390 NOTES
4391
4392 12
4393 23 Because operands of a universal type are acceptable to the
4394 predefined operators of any type in their class, ambiguity can
4395 result. For universal_integer and universal_real, this potential
4396 ambiguity is resolved by giving a preference (see *note 8.6::) to
4397 the predefined operators of the corresponding root types
4398 (root_integer and root_real, respectively). Hence, in an
4399 apparently ambiguous expression like
4400
4401 13
4402 1 + 4 < 7
4403
4404 14
4405 where each of the literals is of type universal_integer, the
4406 predefined operators of root_integer will be preferred over those
4407 of other specific integer types, thereby resolving the ambiguity.
4408
4409 \1f
4410 File: arm2012.info, Node: 3.5, Next: 3.6, Prev: 3.4, Up: 3
4411
4412 3.5 Scalar Types
4413 ================
4414
4415 1
4416 Scalar types comprise enumeration types, integer types, and real types.
4417 Enumeration types and integer types are called discrete types; each
4418 value of a discrete type has a position number which is an integer
4419 value. Integer types and real types are called numeric types. All
4420 scalar types are ordered, that is, all relational operators are
4421 predefined for their values.
4422
4423 _Syntax_
4424
4425 2
4426 range_constraint ::= range range
4427
4428 3
4429 range ::= range_attribute_reference
4430 | simple_expression .. simple_expression
4431
4432 4
4433 A range has a lower bound and an upper bound and specifies a subset of
4434 the values of some scalar type (the type of the range). A range with
4435 lower bound L and upper bound R is described by "L .. R". If R is less
4436 than L, then the range is a null range, and specifies an empty set of
4437 values. Otherwise, the range specifies the values of the type from the
4438 lower bound to the upper bound, inclusive. A value belongs to a range
4439 if it is of the type of the range, and is in the subset of values
4440 specified by the range. A value satisfies a range constraint if it
4441 belongs to the associated range. One range is included in another if
4442 all values that belong to the first range also belong to the second.
4443
4444 _Name Resolution Rules_
4445
4446 5
4447 For a subtype_indication containing a range_constraint, either directly
4448 or as part of some other scalar_constraint, the type of the range shall
4449 resolve to that of the type determined by the subtype_mark of the
4450 subtype_indication. For a range of a given type, the simple_expressions
4451 of the range (likewise, the simple_expressions of the equivalent range
4452 for a range_attribute_reference) are expected to be of the type of the
4453 range.
4454
4455 _Static Semantics_
4456
4457 6
4458 The base range of a scalar type is the range of finite values of the
4459 type that can be represented in every unconstrained object of the type;
4460 it is also the range supported at a minimum for intermediate values
4461 during the evaluation of expressions involving predefined operators of
4462 the type.
4463
4464 7
4465 A constrained scalar subtype is one to which a range constraint applies.
4466 The range of a constrained scalar subtype is the range associated with
4467 the range constraint of the subtype. The range of an unconstrained
4468 scalar subtype is the base range of its type.
4469
4470 _Dynamic Semantics_
4471
4472 8
4473 A range is compatible with a scalar subtype if and only if it is either
4474 a null range or each bound of the range belongs to the range of the
4475 subtype. A range_constraint is compatible with a scalar subtype if and
4476 only if its range is compatible with the subtype.
4477
4478 9
4479 The elaboration of a range_constraint consists of the evaluation of the
4480 range. The evaluation of a range determines a lower bound and an upper
4481 bound. If simple_expressions are given to specify bounds, the
4482 evaluation of the range evaluates these simple_expressions in an
4483 arbitrary order, and converts them to the type of the range. If a
4484 range_attribute_reference is given, the evaluation of the range consists
4485 of the evaluation of the range_attribute_reference.
4486
4487 10
4488 Attributes
4489
4490 11
4491 For every scalar subtype S, the following attributes are defined:
4492
4493 12
4494 S'First
4495 S'First denotes the lower bound of the range of S. The
4496 value of this attribute is of the type of S.
4497
4498 13
4499 S'Last
4500 S'Last denotes the upper bound of the range of S. The
4501 value of this attribute is of the type of S.
4502
4503 14
4504 S'Range
4505 S'Range is equivalent to the range S'First .. S'Last.
4506
4507 15
4508 S'Base
4509 S'Base denotes an unconstrained subtype of the type of S.
4510 This unconstrained subtype is called the base subtype of
4511 the type.
4512
4513 16
4514 S'Min
4515 S'Min denotes a function with the following
4516 specification:
4517
4518 17
4519 function S'Min(Left, Right : S'Base)
4520 return S'Base
4521
4522 18
4523 The function returns the lesser of the values of the two
4524 parameters.
4525
4526 19
4527 S'Max
4528 S'Max denotes a function with the following
4529 specification:
4530
4531 20
4532 function S'Max(Left, Right : S'Base)
4533 return S'Base
4534
4535 21
4536 The function returns the greater of the values of the two
4537 parameters.
4538
4539 22
4540 S'Succ
4541 S'Succ denotes a function with the following
4542 specification:
4543
4544 23
4545 function S'Succ(Arg : S'Base)
4546 return S'Base
4547
4548 24
4549 For an enumeration type, the function returns the value
4550 whose position number is one more than that of the value
4551 of Arg; Constraint_Error is raised if there is no such
4552 value of the type. For an integer type, the function
4553 returns the result of adding one to the value of Arg.
4554 For a fixed point type, the function returns the result
4555 of adding small to the value of Arg. For a floating
4556 point type, the function returns the machine number (as
4557 defined in *note 3.5.7::) immediately above the value of
4558 Arg; Constraint_Error is raised if there is no such
4559 machine number.
4560
4561 25
4562 S'Pred
4563 S'Pred denotes a function with the following
4564 specification:
4565
4566 26
4567 function S'Pred(Arg : S'Base)
4568 return S'Base
4569
4570 27
4571 For an enumeration type, the function returns the value
4572 whose position number is one less than that of the value
4573 of Arg; Constraint_Error is raised if there is no such
4574 value of the type. For an integer type, the function
4575 returns the result of subtracting one from the value of
4576 Arg. For a fixed point type, the function returns the
4577 result of subtracting small from the value of Arg. For a
4578 floating point type, the function returns the machine
4579 number (as defined in *note 3.5.7::) immediately below
4580 the value of Arg; Constraint_Error is raised if there is
4581 no such machine number.
4582
4583 27.1/2
4584 S'Wide_Wide_Image
4585 S'Wide_Wide_Image denotes a function with the following
4586 specification:
4587
4588 27.2/2
4589 function S'Wide_Wide_Image(Arg : S'Base)
4590 return Wide_Wide_String
4591
4592 27.3/2
4593 The function returns an image of the value of Arg, that
4594 is, a sequence of characters representing the value in
4595 display form. The lower bound of the result is one.
4596
4597 27.4/2
4598 The image of an integer value is the corresponding
4599 decimal literal, without underlines, leading zeros,
4600 exponent, or trailing spaces, but with a single leading
4601 character that is either a minus sign or a space.
4602
4603 27.5/2
4604 The image of an enumeration value is either the
4605 corresponding identifier in upper case or the
4606 corresponding character literal (including the two
4607 apostrophes); neither leading nor trailing spaces are
4608 included. For a nongraphic character (a value of a
4609 character type that has no enumeration literal associated
4610 with it), the result is a corresponding language-defined
4611 name in upper case (for example, the image of the
4612 nongraphic character identified as nul is "NUL" -- the
4613 quotes are not part of the image).
4614
4615 27.6/2
4616 The image of a floating point value is a decimal real
4617 literal best approximating the value (rounded away from
4618 zero if halfway between) with a single leading character
4619 that is either a minus sign or a space, a single digit
4620 (that is nonzero unless the value is zero), a decimal
4621 point, S'Digits-1 (see *note 3.5.8::) digits after the
4622 decimal point (but one if S'Digits is one), an upper case
4623 E, the sign of the exponent (either + or -), and two or
4624 more digits (with leading zeros if necessary)
4625 representing the exponent. If S'Signed_Zeros is True,
4626 then the leading character is a minus sign for a
4627 negatively signed zero.
4628
4629 27.7/2
4630 The image of a fixed point value is a decimal real
4631 literal best approximating the value (rounded away from
4632 zero if halfway between) with a single leading character
4633 that is either a minus sign or a space, one or more
4634 digits before the decimal point (with no redundant
4635 leading zeros), a decimal point, and S'Aft (see *note
4636 3.5.10::) digits after the decimal point.
4637
4638 28
4639 S'Wide_Image
4640 S'Wide_Image denotes a function with the following
4641 specification:
4642
4643 29
4644 function S'Wide_Image(Arg : S'Base)
4645 return Wide_String
4646
4647 30/3
4648 The function returns an image of the value of Arg as a
4649 Wide_String. The lower bound of the result is one. The
4650 image has the same sequence of graphic characters as
4651 defined for S'Wide_Wide_Image if all the graphic
4652 characters are defined in Wide_Character; otherwise, the
4653 sequence of characters is implementation defined (but no
4654 shorter than that of S'Wide_Wide_Image for the same value
4655 of Arg).
4656
4657 Paragraphs 31 through 34 were moved to Wide_Wide_Image.
4658
4659 35
4660 S'Image
4661 S'Image denotes a function with the following
4662 specification:
4663
4664 36
4665 function S'Image(Arg : S'Base)
4666 return String
4667
4668 37/3
4669 The function returns an image of the value of Arg as a
4670 String. The lower bound of the result is one. The image
4671 has the same sequence of graphic characters as that
4672 defined for S'Wide_Wide_Image if all the graphic
4673 characters are defined in Character; otherwise, the
4674 sequence of characters is implementation defined (but no
4675 shorter than that of S'Wide_Wide_Image for the same value
4676 of Arg).
4677
4678 37.1/2
4679 S'Wide_Wide_Width
4680 S'Wide_Wide_Width denotes the maximum length of a
4681 Wide_Wide_String returned by S'Wide_Wide_Image over all
4682 values of the subtype S. It denotes zero for a subtype
4683 that has a null range. Its type is universal_integer.
4684
4685 38
4686 S'Wide_Width
4687 S'Wide_Width denotes the maximum length of a Wide_String
4688 returned by S'Wide_Image over all values of the subtype
4689 S. It denotes zero for a subtype that has a null range.
4690 Its type is universal_integer.
4691
4692 39
4693 S'Width
4694 S'Width denotes the maximum length of a String returned
4695 by S'Image over all values of the subtype S. It denotes
4696 zero for a subtype that has a null range. Its type is
4697 universal_integer.
4698
4699 39.1/2
4700 S'Wide_Wide_Value
4701 S'Wide_Wide_Value denotes a function with the following
4702 specification:
4703
4704 39.2/2
4705 function S'Wide_Wide_Value(Arg : Wide_Wide_String)
4706 return S'Base
4707
4708 39.3/2
4709 This function returns a value given an image of the value
4710 as a Wide_Wide_String, ignoring any leading or trailing
4711 spaces.
4712
4713 39.4/3
4714 For the evaluation of a call on S'Wide_Wide_Value for an
4715 enumeration subtype S, if the sequence of characters of
4716 the parameter (ignoring leading and trailing spaces) has
4717 the syntax of an enumeration literal and if it
4718 corresponds to a literal of the type of S (or corresponds
4719 to the result of S'Wide_Wide_Image for a nongraphic
4720 character of the type), the result is the corresponding
4721 enumeration value; otherwise, Constraint_Error is raised.
4722
4723 39.5/3
4724 For the evaluation of a call on S'Wide_Wide_Value for an
4725 integer subtype S, if the sequence of characters of the
4726 parameter (ignoring leading and trailing spaces) has the
4727 syntax of an integer literal, with an optional leading
4728 sign character (plus or minus for a signed type; only
4729 plus for a modular type), and the corresponding numeric
4730 value belongs to the base range of the type of S, then
4731 that value is the result; otherwise, Constraint_Error is
4732 raised.
4733
4734 39.6/2
4735 For the evaluation of a call on S'Wide_Wide_Value for a
4736 real subtype S, if the sequence of characters of the
4737 parameter (ignoring leading and trailing spaces) has the
4738 syntax of one of the following:
4739
4740 39.7/2
4741 * numeric_literal
4742
4743 39.8/2
4744 * numeral.[exponent]
4745
4746 39.9/2
4747 * .numeral[exponent]
4748
4749 39.10/2
4750 * base#based_numeral.#[exponent]
4751
4752 39.11/2
4753 * base#.based_numeral#[exponent]
4754
4755 39.12/3
4756 with an optional leading sign character (plus or minus),
4757 and if the corresponding numeric value belongs to the
4758 base range of the type of S, then that value is the
4759 result; otherwise, Constraint_Error is raised. The sign
4760 of a zero value is preserved (positive if none has been
4761 specified) if S'Signed_Zeros is True.
4762
4763 40
4764 S'Wide_Value
4765 S'Wide_Value denotes a function with the following
4766 specification:
4767
4768 41
4769 function S'Wide_Value(Arg : Wide_String)
4770 return S'Base
4771
4772 42
4773 This function returns a value given an image of the value
4774 as a Wide_String, ignoring any leading or trailing
4775 spaces.
4776
4777 43/3
4778 For the evaluation of a call on S'Wide_Value for an
4779 enumeration subtype S, if the sequence of characters of
4780 the parameter (ignoring leading and trailing spaces) has
4781 the syntax of an enumeration literal and if it
4782 corresponds to a literal of the type of S (or corresponds
4783 to the result of S'Wide_Image for a value of the type),
4784 the result is the corresponding enumeration value;
4785 otherwise, Constraint_Error is raised. For a numeric
4786 subtype S, the evaluation of a call on S'Wide_Value with
4787 Arg of type Wide_String is equivalent to a call on
4788 S'Wide_Wide_Value for a corresponding Arg of type
4789 Wide_Wide_String.
4790
4791 Paragraphs 44 through 51 were moved to Wide_Wide_Value.
4792
4793 52
4794 S'Value
4795 S'Value denotes a function with the following
4796 specification:
4797
4798 53
4799 function S'Value(Arg : String)
4800 return S'Base
4801
4802 54
4803 This function returns a value given an image of the value
4804 as a String, ignoring any leading or trailing spaces.
4805
4806 55/3
4807 For the evaluation of a call on S'Value for an
4808 enumeration subtype S, if the sequence of characters of
4809 the parameter (ignoring leading and trailing spaces) has
4810 the syntax of an enumeration literal and if it
4811 corresponds to a literal of the type of S (or corresponds
4812 to the result of S'Image for a value of the type), the
4813 result is the corresponding enumeration value; otherwise,
4814 Constraint_Error is raised. For a numeric subtype S, the
4815 evaluation of a call on S'Value with Arg of type String
4816 is equivalent to a call on S'Wide_Wide_Value for a
4817 corresponding Arg of type Wide_Wide_String.
4818
4819 _Implementation Permissions_
4820
4821 56/2
4822 An implementation may extend the Wide_Wide_Value, Wide_Value, Value,
4823 Wide_Wide_Image, Wide_Image, and Image attributes of a floating point
4824 type to support special values such as infinities and NaNs.
4825
4826 56.1/3
4827 An implementation may extend the Wide_Wide_Value, Wide_Value, and Value
4828 attributes of a character type to accept strings of the form
4829 "Hex_hhhhhhhh" (ignoring case) for any character (not just the ones for
4830 which Wide_Wide_Image would produce that form -- see *note 3.5.2::), as
4831 well as three-character strings of the form "'X'", where X is any
4832 character, including nongraphic characters.
4833
4834 _Static Semantics_
4835
4836 56.2/3
4837 For a scalar type, the following language-defined representation aspect
4838 may be specified with an aspect_specification (see *note 13.1.1::):
4839
4840 56.3/3
4841 Default_Value
4842 This aspect shall be specified by a static expression,
4843 and that expression shall be explicit, even if the aspect
4844 has a boolean type. Default_Value shall be specified
4845 only on a full_type_declaration.
4846
4847 56.4/3
4848 If a derived type with no primitive subprograms inherits a boolean
4849 Default_Value aspect, the aspect may be specified to have any value for
4850 the derived type.
4851
4852 _Name Resolution Rules_
4853
4854 56.5/3
4855 The expected type for the expression specified for the Default_Value
4856 aspect is the type defined by the full_type_declaration on which it
4857 appears.
4858
4859 NOTES
4860
4861 57
4862 24 The evaluation of S'First or S'Last never raises an exception.
4863 If a scalar subtype S has a nonnull range, S'First and S'Last
4864 belong to this range. These values can, for example, always be
4865 assigned to a variable of subtype S.
4866
4867 58
4868 25 For a subtype of a scalar type, the result delivered by the
4869 attributes Succ, Pred, and Value might not belong to the subtype;
4870 similarly, the actual parameters of the attributes Succ, Pred, and
4871 Image need not belong to the subtype.
4872
4873 59
4874 26 For any value V (including any nongraphic character) of an
4875 enumeration subtype S, S'Value(S'Image(V)) equals V, as do
4876 S'Wide_Value(S'Wide_Image(V)) and
4877 S'Wide_Wide_Value(S'Wide_Wide_Image(V)). None of these expressions
4878 ever raise Constraint_Error.
4879
4880 _Examples_
4881
4882 60
4883 Examples of ranges:
4884
4885 61
4886 -10 .. 10
4887 X .. X + 1
4888 0.0 .. 2.0*Pi
4889 Red .. Green -- see *note 3.5.1::
4890 1 .. 0 -- a null range
4891 Table'Range -- a range attribute reference (see *note 3.6::)
4892
4893 62
4894 Examples of range constraints:
4895
4896 63
4897 range -999.0 .. +999.0
4898 range S'First+1 .. S'Last-1
4899
4900 * Menu:
4901
4902 * 3.5.1 :: Enumeration Types
4903 * 3.5.2 :: Character Types
4904 * 3.5.3 :: Boolean Types
4905 * 3.5.4 :: Integer Types
4906 * 3.5.5 :: Operations of Discrete Types
4907 * 3.5.6 :: Real Types
4908 * 3.5.7 :: Floating Point Types
4909 * 3.5.8 :: Operations of Floating Point Types
4910 * 3.5.9 :: Fixed Point Types
4911 * 3.5.10 :: Operations of Fixed Point Types
4912
4913 \1f
4914 File: arm2012.info, Node: 3.5.1, Next: 3.5.2, Up: 3.5
4915
4916 3.5.1 Enumeration Types
4917 -----------------------
4918
4919 1
4920 An enumeration_type_definition defines an enumeration type.
4921
4922 _Syntax_
4923
4924 2
4925 enumeration_type_definition ::=
4926 (enumeration_literal_specification {,
4927 enumeration_literal_specification})
4928
4929 3
4930 enumeration_literal_specification ::= defining_identifier |
4931 defining_character_literal
4932
4933 4
4934 defining_character_literal ::= character_literal
4935
4936 _Legality Rules_
4937
4938 5/3
4939 The defining_identifiers in upper case and the
4940 defining_character_literals listed in an enumeration_type_definition
4941 shall be distinct.
4942
4943 _Static Semantics_
4944
4945 6/3
4946 Each enumeration_literal_specification is the explicit declaration of
4947 the corresponding enumeration literal: it declares a parameterless
4948 function, whose defining name is the defining_identifier (*note 3.1:
4949 S0022.) or defining_character_literal (*note 3.5.1: S0040.), and whose
4950 result subtype is the base subtype of the enumeration type.
4951
4952 7
4953 Each enumeration literal corresponds to a distinct value of the
4954 enumeration type, and to a distinct position number. The position
4955 number of the value of the first listed enumeration literal is zero; the
4956 position number of the value of each subsequent enumeration literal is
4957 one more than that of its predecessor in the list.
4958
4959 8
4960 The predefined order relations between values of the enumeration type
4961 follow the order of corresponding position numbers.
4962
4963 9
4964 If the same defining_identifier or defining_character_literal is
4965 specified in more than one enumeration_type_definition (*note 3.5.1:
4966 S0038.), the corresponding enumeration literals are said to be
4967 overloaded. At any place where an overloaded enumeration literal occurs
4968 in the text of a program, the type of the enumeration literal has to be
4969 determinable from the context (see *note 8.6::).
4970
4971 _Dynamic Semantics_
4972
4973 10
4974 The elaboration of an enumeration_type_definition creates the
4975 enumeration type and its first subtype, which is constrained to the base
4976 range of the type.
4977
4978 11
4979 When called, the parameterless function associated with an enumeration
4980 literal returns the corresponding value of the enumeration type.
4981
4982 NOTES
4983
4984 12
4985 27 If an enumeration literal occurs in a context that does not
4986 otherwise suffice to determine the type of the literal, then
4987 qualification by the name of the enumeration type is one way to
4988 resolve the ambiguity (see *note 4.7::).
4989
4990 _Examples_
4991
4992 13
4993 Examples of enumeration types and subtypes:
4994
4995 14
4996 type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
4997 type Suit is (Clubs, Diamonds, Hearts, Spades);
4998 type Gender is (M, F);
4999 type Level is (Low, Medium, Urgent);
5000 type Color is (White, Red, Yellow, Green, Blue, Brown, Black);
5001 type Light is (Red, Amber, Green); -- Red and Green are overloaded
5002
5003 15
5004 type Hexa is ('A', 'B', 'C', 'D', 'E', 'F');
5005 type Mixed is ('A', 'B', '*', B, None, '?', '%');
5006
5007 16
5008 subtype Weekday is Day range Mon .. Fri;
5009 subtype Major is Suit range Hearts .. Spades;
5010 subtype Rainbow is Color range Red .. Blue; -- the Color Red, not the Light
5011
5012 \1f
5013 File: arm2012.info, Node: 3.5.2, Next: 3.5.3, Prev: 3.5.1, Up: 3.5
5014
5015 3.5.2 Character Types
5016 ---------------------
5017
5018 _Static Semantics_
5019
5020 1
5021 An enumeration type is said to be a character type if at least one of
5022 its enumeration literals is a character_literal.
5023
5024 2/3
5025 The predefined type Character is a character type whose values
5026 correspond to the 256 code points of Row 00 (also known as Latin-1) of
5027 the ISO/IEC 10646:2011 Basic Multilingual Plane (BMP). Each of the
5028 graphic characters of Row 00 of the BMP has a corresponding
5029 character_literal in Character. Each of the nongraphic characters of
5030 Row 00 has a corresponding language-defined name, which is not usable as
5031 an enumeration literal, but which is usable with the attributes Image,
5032 Wide_Image, Wide_Wide_Image, Value, Wide_Value, and Wide_Wide_Value;
5033 these names are given in the definition of type Character in *note
5034 A.1::, "*note A.1:: The Package Standard", but are set in italics.
5035
5036 3/3
5037 The predefined type Wide_Character is a character type whose values
5038 correspond to the 65536 code points of the ISO/IEC 10646:2011 Basic
5039 Multilingual Plane (BMP). Each of the graphic characters of the BMP has
5040 a corresponding character_literal in Wide_Character. The first 256
5041 values of Wide_Character have the same character_literal or
5042 language-defined name as defined for Character. Each of the
5043 graphic_characters has a corresponding character_literal.
5044
5045 4/3
5046 The predefined type Wide_Wide_Character is a character type whose values
5047 correspond to the 2147483648 code points of the ISO/IEC 10646:2011
5048 character set. Each of the graphic_characters has a corresponding
5049 character_literal in Wide_Wide_Character. The first 65536 values of
5050 Wide_Wide_Character have the same character_literal or language-defined
5051 name as defined for Wide_Character.
5052
5053 5/3
5054 The characters whose code point is larger than 16#FF# and which are not
5055 graphic_characters have language-defined names which are formed by
5056 appending to the string "Hex_" the representation of their code point in
5057 hexadecimal as eight extended digits. As with other language-defined
5058 names, these names are usable only with the attributes (Wide_)Wide_Image
5059 and (Wide_)Wide_Value; they are not usable as enumeration literals.
5060
5061 Paragraphs 6 and 7 were deleted.
5062
5063 NOTES
5064
5065 8
5066 28 The language-defined library package Characters.Latin_1 (see
5067 *note A.3.3::) includes the declaration of constants denoting
5068 control characters, lower case characters, and special characters
5069 of the predefined type Character.
5070
5071 9/3
5072 29 A conventional character set such as EBCDIC can be declared as
5073 a character type; the internal codes of the characters can be
5074 specified by an enumeration_representation_clause as explained in
5075 subclause *note 13.4::.
5076
5077 _Examples_
5078
5079 10
5080 Example of a character type:
5081
5082 11
5083 type Roman_Digit is ('I', 'V', 'X', 'L', 'C', 'D', 'M');
5084
5085 \1f
5086 File: arm2012.info, Node: 3.5.3, Next: 3.5.4, Prev: 3.5.2, Up: 3.5
5087
5088 3.5.3 Boolean Types
5089 -------------------
5090
5091 _Static Semantics_
5092
5093 1
5094 There is a predefined enumeration type named Boolean, declared in the
5095 visible part of package Standard. It has the two enumeration literals
5096 False and True ordered with the relation False < True. Any descendant
5097 of the predefined type Boolean is called a boolean type.
5098
5099 \1f
5100 File: arm2012.info, Node: 3.5.4, Next: 3.5.5, Prev: 3.5.3, Up: 3.5
5101
5102 3.5.4 Integer Types
5103 -------------------
5104
5105 1
5106 An integer_type_definition defines an integer type; it defines either a
5107 signed integer type, or a modular integer type. The base range of a
5108 signed integer type includes at least the values of the specified range.
5109 A modular type is an integer type with all arithmetic modulo a specified
5110 positive modulus; such a type corresponds to an unsigned type with
5111 wrap-around semantics.
5112
5113 _Syntax_
5114
5115 2
5116 integer_type_definition ::= signed_integer_type_definition |
5117 modular_type_definition
5118
5119 3
5120 signed_integer_type_definition ::= range static_
5121 simple_expression .. static_simple_expression
5122
5123 4
5124 modular_type_definition ::= mod static_expression
5125
5126 _Name Resolution Rules_
5127
5128 5
5129 Each simple_expression in a signed_integer_type_definition is expected
5130 to be of any integer type; they need not be of the same type. The
5131 expression in a modular_type_definition is likewise expected to be of
5132 any integer type.
5133
5134 _Legality Rules_
5135
5136 6
5137 The simple_expressions of a signed_integer_type_definition shall be
5138 static, and their values shall be in the range System.Min_Int ..
5139 System.Max_Int.
5140
5141 7
5142 The expression of a modular_type_definition shall be static, and its
5143 value (the modulus) shall be positive, and shall be no greater than
5144 System.Max_Binary_Modulus if a power of 2, or no greater than
5145 System.Max_Nonbinary_Modulus if not.
5146
5147 _Static Semantics_
5148
5149 8
5150 The set of values for a signed integer type is the (infinite) set of
5151 mathematical integers, though only values of the base range of the type
5152 are fully supported for run-time operations. The set of values for a
5153 modular integer type are the values from 0 to one less than the modulus,
5154 inclusive.
5155
5156 9
5157 A signed_integer_type_definition defines an integer type whose base
5158 range includes at least the values of the simple_expressions and is
5159 symmetric about zero, excepting possibly an extra negative value. A
5160 signed_integer_type_definition also defines a constrained first subtype
5161 of the type, with a range whose bounds are given by the values of the
5162 simple_expressions, converted to the type being defined.
5163
5164 10
5165 A modular_type_definition defines a modular type whose base range is
5166 from zero to one less than the given modulus. A modular_type_definition
5167 also defines a constrained first subtype of the type with a range that
5168 is the same as the base range of the type.
5169
5170 11
5171 There is a predefined signed integer subtype named Integer, declared in
5172 the visible part of package Standard. It is constrained to the base
5173 range of its type.
5174
5175 12
5176 Integer has two predefined subtypes, declared in the visible part of
5177 package Standard:
5178
5179 13
5180 subtype Natural is Integer range 0 .. Integer'Last;
5181 subtype Positive is Integer range 1 .. Integer'Last;
5182
5183 14
5184 A type defined by an integer_type_definition is implicitly derived from
5185 root_integer, an anonymous predefined (specific) integer type, whose
5186 base range is System.Min_Int .. System.Max_Int. However, the base
5187 range of the new type is not inherited from root_integer, but is instead
5188 determined by the range or modulus specified by the
5189 integer_type_definition. Integer literals are all of the type
5190 universal_integer, the universal type (see *note 3.4.1::) for the class
5191 rooted at root_integer, allowing their use with the operations of any
5192 integer type.
5193
5194 15
5195 The position number of an integer value is equal to the value.
5196
5197 16/2
5198 For every modular subtype S, the following attributes are defined:
5199
5200 16.1/2
5201 S'Mod
5202 S'Mod denotes a function with the following
5203 specification:
5204
5205 16.2/2
5206 function S'Mod (Arg : universal_integer)
5207 return S'Base
5208
5209 16.3/2
5210 This function returns Arg mod S'Modulus, as a value of
5211 the type of S.
5212
5213 17
5214 S'Modulus
5215 S'Modulus yields the modulus of the type of S, as a value
5216 of the type universal_integer.
5217
5218 _Dynamic Semantics_
5219
5220 18
5221 The elaboration of an integer_type_definition creates the integer type
5222 and its first subtype.
5223
5224 19
5225 For a modular type, if the result of the execution of a predefined
5226 operator (see *note 4.5::) is outside the base range of the type, the
5227 result is reduced modulo the modulus of the type to a value that is
5228 within the base range of the type.
5229
5230 20
5231 For a signed integer type, the exception Constraint_Error is raised by
5232 the execution of an operation that cannot deliver the correct result
5233 because it is outside the base range of the type. For any integer type,
5234 Constraint_Error is raised by the operators "/", "rem", and "mod" if the
5235 right operand is zero.
5236
5237 _Implementation Requirements_
5238
5239 21
5240 In an implementation, the range of Integer shall include the range
5241 -2**15+1 .. +2**15-1.
5242
5243 22
5244 If Long_Integer is predefined for an implementation, then its range
5245 shall include the range -2**31+1 .. +2**31-1.
5246
5247 23
5248 System.Max_Binary_Modulus shall be at least 2**16.
5249
5250 _Implementation Permissions_
5251
5252 24
5253 For the execution of a predefined operation of a signed integer type,
5254 the implementation need not raise Constraint_Error if the result is
5255 outside the base range of the type, so long as the correct result is
5256 produced.
5257
5258 25
5259 An implementation may provide additional predefined signed integer
5260 types, declared in the visible part of Standard, whose first subtypes
5261 have names of the form Short_Integer, Long_Integer, Short_Short_Integer,
5262 Long_Long_Integer, etc. Different predefined integer types are allowed
5263 to have the same base range. However, the range of Integer should be no
5264 wider than that of Long_Integer. Similarly, the range of Short_Integer
5265 (if provided) should be no wider than Integer. Corresponding
5266 recommendations apply to any other predefined integer types. There need
5267 not be a named integer type corresponding to each distinct base range
5268 supported by an implementation. The range of each first subtype should
5269 be the base range of its type.
5270
5271 26
5272 An implementation may provide nonstandard integer types, descendants of
5273 root_integer that are declared outside of the specification of package
5274 Standard, which need not have all the standard characteristics of a type
5275 defined by an integer_type_definition. For example, a nonstandard
5276 integer type might have an asymmetric base range or it might not be
5277 allowed as an array or loop index (a very long integer). Any type
5278 descended from a nonstandard integer type is also nonstandard. An
5279 implementation may place arbitrary restrictions on the use of such
5280 types; it is implementation defined whether operators that are
5281 predefined for "any integer type" are defined for a particular
5282 nonstandard integer type. In any case, such types are not permitted as
5283 explicit_generic_actual_parameters for formal scalar types -- see *note
5284 12.5.2::.
5285
5286 27
5287 For a one's complement machine, the high bound of the base range of a
5288 modular type whose modulus is one less than a power of 2 may be equal to
5289 the modulus, rather than one less than the modulus. It is
5290 implementation defined for which powers of 2, if any, this permission is
5291 exercised.
5292
5293 27.1/1
5294 For a one's complement machine, implementations may support nonbinary
5295 modulus values greater than System.Max_Nonbinary_Modulus. It is
5296 implementation defined which specific values greater than
5297 System.Max_Nonbinary_Modulus, if any, are supported.
5298
5299 _Implementation Advice_
5300
5301 28
5302 An implementation should support Long_Integer in addition to Integer if
5303 the target machine supports 32-bit (or longer) arithmetic. No other
5304 named integer subtypes are recommended for package Standard. Instead,
5305 appropriate named integer subtypes should be provided in the library
5306 package Interfaces (see *note B.2::).
5307
5308 29
5309 An implementation for a two's complement machine should support modular
5310 types with a binary modulus up to System.Max_Int*2+2. An implementation
5311 should support a nonbinary modulus up to Integer'Last.
5312
5313 NOTES
5314
5315 30
5316 30 Integer literals are of the anonymous predefined integer type
5317 universal_integer. Other integer types have no literals. However,
5318 the overload resolution rules (see *note 8.6::, "*note 8.6:: The
5319 Context of Overload Resolution") allow expressions of the type
5320 universal_integer whenever an integer type is expected.
5321
5322 31
5323 31 The same arithmetic operators are predefined for all signed
5324 integer types defined by a signed_integer_type_definition (see
5325 *note 4.5::, "*note 4.5:: Operators and Expression Evaluation").
5326 For modular types, these same operators are predefined, plus
5327 bit-wise logical operators (and, or, xor, and not). In addition,
5328 for the unsigned types declared in the language-defined package
5329 Interfaces (see *note B.2::), functions are defined that provide
5330 bit-wise shifting and rotating.
5331
5332 32
5333 32 Modular types match a generic_formal_parameter_declaration of
5334 the form "type T is mod <>;"; signed integer types match "type T is
5335 range <>;" (see *note 12.5.2::).
5336
5337 _Examples_
5338
5339 33
5340 Examples of integer types and subtypes:
5341
5342 34
5343 type Page_Num is range 1 .. 2_000;
5344 type Line_Size is range 1 .. Max_Line_Size;
5345
5346 35
5347 subtype Small_Int is Integer range -10 .. 10;
5348 subtype Column_Ptr is Line_Size range 1 .. 10;
5349 subtype Buffer_Size is Integer range 0 .. Max;
5350
5351 36
5352 type Byte is mod 256; -- an unsigned byte
5353 type Hash_Index is mod 97; -- modulus is prime
5354
5355 \1f
5356 File: arm2012.info, Node: 3.5.5, Next: 3.5.6, Prev: 3.5.4, Up: 3.5
5357
5358 3.5.5 Operations of Discrete Types
5359 ----------------------------------
5360
5361 _Static Semantics_
5362
5363 1
5364 For every discrete subtype S, the following attributes are defined:
5365
5366 2
5367 S'Pos
5368 S'Pos denotes a function with the following
5369 specification:
5370
5371 3
5372 function S'Pos(Arg : S'Base)
5373 return universal_integer
5374
5375 4
5376 This function returns the position number of the value of
5377 Arg, as a value of type universal_integer.
5378
5379 5
5380 S'Val
5381 S'Val denotes a function with the following
5382 specification:
5383
5384 6
5385 function S'Val(Arg : universal_integer)
5386 return S'Base
5387
5388 7
5389 This function returns a value of the type of S whose
5390 position number equals the value of Arg. For the
5391 evaluation of a call on S'Val, if there is no value in
5392 the base range of its type with the given position
5393 number, Constraint_Error is raised.
5394
5395 7.1/3
5396 For every static discrete subtype S for which there exists at least one
5397 value belonging to S that satisfies any predicate of S, the following
5398 attributes are defined:
5399
5400 7.2/3
5401 S'First_Valid
5402 S'First_Valid denotes the smallest value that belongs to
5403 S and satisfies the predicate of S. The value of this
5404 attribute is of the type of S.
5405
5406 7.3/3
5407 S'Last_Valid
5408 S'Last_Valid denotes the largest value that belongs to S
5409 and satisfies the predicate of S. The value of this
5410 attribute is of the type of S.
5411
5412 7.4/3
5413 First_Valid and Last_Valid attribute_references are always static
5414 expressions. Any explicit predicate of S can only have been specified
5415 by a Static_Predicate aspect.
5416
5417 _Implementation Advice_
5418
5419 8
5420 For the evaluation of a call on S'Pos for an enumeration subtype, if the
5421 value of the operand does not correspond to the internal code for any
5422 enumeration literal of its type (perhaps due to an uninitialized
5423 variable), then the implementation should raise Program_Error. This is
5424 particularly important for enumeration types with noncontiguous internal
5425 codes specified by an enumeration_representation_clause (*note 13.4:
5426 S0310.).
5427
5428 NOTES
5429
5430 9
5431 33 Indexing and loop iteration use values of discrete types.
5432
5433 10/3
5434 34 The predefined operations of a discrete type include the
5435 assignment operation, qualification, the membership tests, and the
5436 relational operators; for a boolean type they include the
5437 short-circuit control forms and the logical operators; for an
5438 integer type they include type conversion to and from other numeric
5439 types, as well as the binary and unary adding operators - and +,
5440 the multiplying operators, the unary operator abs, and the
5441 exponentiation operator. The assignment operation is described in
5442 *note 5.2::. The other predefined operations are described in
5443 Clause *note 4::.
5444
5445 11
5446 35 As for all types, objects of a discrete type have Size and
5447 Address attributes (see *note 13.3::).
5448
5449 12
5450 36 For a subtype of a discrete type, the result delivered by the
5451 attribute Val might not belong to the subtype; similarly, the
5452 actual parameter of the attribute Pos need not belong to the
5453 subtype. The following relations are satisfied (in the absence of
5454 an exception) by these attributes:
5455
5456 13
5457 S'Val(S'Pos(X)) = X
5458 S'Pos(S'Val(N)) = N
5459
5460 _Examples_
5461
5462 14
5463 Examples of attributes of discrete subtypes:
5464
5465 15
5466 -- For the types and subtypes declared in subclause *note 3.5.1:: the following hold:
5467
5468 16
5469 -- Color'First = White, Color'Last = Black
5470 -- Rainbow'First = Red, Rainbow'Last = Blue
5471
5472 17
5473 -- Color'Succ(Blue) = Rainbow'Succ(Blue) = Brown
5474 -- Color'Pos(Blue) = Rainbow'Pos(Blue) = 4
5475 -- Color'Val(0) = Rainbow'Val(0) = White
5476
5477 \1f
5478 File: arm2012.info, Node: 3.5.6, Next: 3.5.7, Prev: 3.5.5, Up: 3.5
5479
5480 3.5.6 Real Types
5481 ----------------
5482
5483 1
5484 Real types provide approximations to the real numbers, with relative
5485 bounds on errors for floating point types, and with absolute bounds for
5486 fixed point types.
5487
5488 _Syntax_
5489
5490 2
5491 real_type_definition ::=
5492 floating_point_definition | fixed_point_definition
5493
5494 _Static Semantics_
5495
5496 3
5497 A type defined by a real_type_definition is implicitly derived from
5498 root_real, an anonymous predefined (specific) real type. Hence, all
5499 real types, whether floating point or fixed point, are in the derivation
5500 class rooted at root_real.
5501
5502 4
5503 Real literals are all of the type universal_real, the universal type
5504 (see *note 3.4.1::) for the class rooted at root_real, allowing their
5505 use with the operations of any real type. Certain multiplying operators
5506 have a result type of universal_fixed (see *note 4.5.5::), the universal
5507 type for the class of fixed point types, allowing the result of the
5508 multiplication or division to be used where any specific fixed point
5509 type is expected.
5510
5511 _Dynamic Semantics_
5512
5513 5
5514 The elaboration of a real_type_definition consists of the elaboration of
5515 the floating_point_definition or the fixed_point_definition.
5516
5517 _Implementation Requirements_
5518
5519 6
5520 An implementation shall perform the run-time evaluation of a use of a
5521 predefined operator of root_real with an accuracy at least as great as
5522 that of any floating point type definable by a
5523 floating_point_definition.
5524
5525 _Implementation Permissions_
5526
5527 7/2
5528 For the execution of a predefined operation of a real type, the
5529 implementation need not raise Constraint_Error if the result is outside
5530 the base range of the type, so long as the correct result is produced,
5531 or the Machine_Overflows attribute of the type is False (see *note
5532 G.2::).
5533
5534 8
5535 An implementation may provide nonstandard real types, descendants of
5536 root_real that are declared outside of the specification of package
5537 Standard, which need not have all the standard characteristics of a type
5538 defined by a real_type_definition. For example, a nonstandard real type
5539 might have an asymmetric or unsigned base range, or its predefined
5540 operations might wrap around or "saturate" rather than overflow (modular
5541 or saturating arithmetic), or it might not conform to the accuracy model
5542 (see *note G.2::). Any type descended from a nonstandard real type is
5543 also nonstandard. An implementation may place arbitrary restrictions on
5544 the use of such types; it is implementation defined whether operators
5545 that are predefined for "any real type" are defined for a particular
5546 nonstandard real type. In any case, such types are not permitted as
5547 explicit_generic_actual_parameters for formal scalar types -- see *note
5548 12.5.2::.
5549
5550 NOTES
5551
5552 9
5553 37 As stated, real literals are of the anonymous predefined real
5554 type universal_real. Other real types have no literals. However,
5555 the overload resolution rules (see *note 8.6::) allow expressions
5556 of the type universal_real whenever a real type is expected.
5557
5558 \1f
5559 File: arm2012.info, Node: 3.5.7, Next: 3.5.8, Prev: 3.5.6, Up: 3.5
5560
5561 3.5.7 Floating Point Types
5562 --------------------------
5563
5564 1
5565 For floating point types, the error bound is specified as a relative
5566 precision by giving the required minimum number of significant decimal
5567 digits.
5568
5569 _Syntax_
5570
5571 2
5572 floating_point_definition ::=
5573 digits static_expression [real_range_specification]
5574
5575 3
5576 real_range_specification ::=
5577 range static_simple_expression .. static_simple_expression
5578
5579 _Name Resolution Rules_
5580
5581 4
5582 The requested decimal precision, which is the minimum number of
5583 significant decimal digits required for the floating point type, is
5584 specified by the value of the expression given after the reserved word
5585 digits. This expression is expected to be of any integer type.
5586
5587 5
5588 Each simple_expression of a real_range_specification is expected to be
5589 of any real type; the types need not be the same.
5590
5591 _Legality Rules_
5592
5593 6
5594 The requested decimal precision shall be specified by a static
5595 expression whose value is positive and no greater than
5596 System.Max_Base_Digits. Each simple_expression of a
5597 real_range_specification shall also be static. If the
5598 real_range_specification is omitted, the requested decimal precision
5599 shall be no greater than System.Max_Digits.
5600
5601 7
5602 A floating_point_definition is illegal if the implementation does not
5603 support a floating point type that satisfies the requested decimal
5604 precision and range.
5605
5606 _Static Semantics_
5607
5608 8
5609 The set of values for a floating point type is the (infinite) set of
5610 rational numbers. The machine numbers of a floating point type are the
5611 values of the type that can be represented exactly in every
5612 unconstrained variable of the type. The base range (see *note 3.5::) of
5613 a floating point type is symmetric around zero, except that it can
5614 include some extra negative values in some implementations.
5615
5616 9
5617 The base decimal precision of a floating point type is the number of
5618 decimal digits of precision representable in objects of the type. The
5619 safe range of a floating point type is that part of its base range for
5620 which the accuracy corresponding to the base decimal precision is
5621 preserved by all predefined operations.
5622
5623 10
5624 A floating_point_definition defines a floating point type whose base
5625 decimal precision is no less than the requested decimal precision. If a
5626 real_range_specification is given, the safe range of the floating point
5627 type (and hence, also its base range) includes at least the values of
5628 the simple expressions given in the real_range_specification. If a
5629 real_range_specification is not given, the safe (and base) range of the
5630 type includes at least the values of the range -10.0**(4*D) ..
5631 +10.0**(4*D) where D is the requested decimal precision. The safe range
5632 might include other values as well. The attributes Safe_First and
5633 Safe_Last give the actual bounds of the safe range.
5634
5635 11
5636 A floating_point_definition also defines a first subtype of the type.
5637 If a real_range_specification is given, then the subtype is constrained
5638 to a range whose bounds are given by a conversion of the values of the
5639 simple_expressions of the real_range_specification to the type being
5640 defined. Otherwise, the subtype is unconstrained.
5641
5642 12
5643 There is a predefined, unconstrained, floating point subtype named
5644 Float, declared in the visible part of package Standard.
5645
5646 _Dynamic Semantics_
5647
5648 13
5649 The elaboration of a floating_point_definition creates the floating
5650 point type and its first subtype.
5651
5652 _Implementation Requirements_
5653
5654 14
5655 In an implementation that supports floating point types with 6 or more
5656 digits of precision, the requested decimal precision for Float shall be
5657 at least 6.
5658
5659 15
5660 If Long_Float is predefined for an implementation, then its requested
5661 decimal precision shall be at least 11.
5662
5663 _Implementation Permissions_
5664
5665 16
5666 An implementation is allowed to provide additional predefined floating
5667 point types, declared in the visible part of Standard, whose
5668 (unconstrained) first subtypes have names of the form Short_Float,
5669 Long_Float, Short_Short_Float, Long_Long_Float, etc. Different
5670 predefined floating point types are allowed to have the same base
5671 decimal precision. However, the precision of Float should be no greater
5672 than that of Long_Float. Similarly, the precision of Short_Float (if
5673 provided) should be no greater than Float. Corresponding
5674 recommendations apply to any other predefined floating point types.
5675 There need not be a named floating point type corresponding to each
5676 distinct base decimal precision supported by an implementation.
5677
5678 _Implementation Advice_
5679
5680 17
5681 An implementation should support Long_Float in addition to Float if the
5682 target machine supports 11 or more digits of precision. No other named
5683 floating point subtypes are recommended for package Standard. Instead,
5684 appropriate named floating point subtypes should be provided in the
5685 library package Interfaces (see *note B.2::).
5686
5687 NOTES
5688
5689 18
5690 38 If a floating point subtype is unconstrained, then assignments
5691 to variables of the subtype involve only Overflow_Checks, never
5692 Range_Checks.
5693
5694 _Examples_
5695
5696 19
5697 Examples of floating point types and subtypes:
5698
5699 20
5700 type Coefficient is digits 10 range -1.0 .. 1.0;
5701
5702 21
5703 type Real is digits 8;
5704 type Mass is digits 7 range 0.0 .. 1.0E35;
5705
5706 22
5707 subtype Probability is Real range 0.0 .. 1.0; -- a subtype with a smaller range
5708
5709 \1f
5710 File: arm2012.info, Node: 3.5.8, Next: 3.5.9, Prev: 3.5.7, Up: 3.5
5711
5712 3.5.8 Operations of Floating Point Types
5713 ----------------------------------------
5714
5715 _Static Semantics_
5716
5717 1
5718 The following attribute is defined for every floating point subtype S:
5719
5720 2/1
5721 S'Digits
5722 S'Digits denotes the requested decimal precision for the
5723 subtype S. The value of this attribute is of the type
5724 universal_integer. The requested decimal precision of
5725 the base subtype of a floating point type T is defined to
5726 be the largest value of d for which
5727 ceiling(d * log(10) / log(T'Machine_Radix)) + g <=
5728 T'Model_Mantissa
5729 where g is 0 if Machine_Radix is a positive power of 10
5730 and 1 otherwise.
5731
5732 NOTES
5733
5734 3
5735 39 The predefined operations of a floating point type include the
5736 assignment operation, qualification, the membership tests, and
5737 explicit conversion to and from other numeric types. They also
5738 include the relational operators and the following predefined
5739 arithmetic operators: the binary and unary adding operators - and
5740 +, certain multiplying operators, the unary operator abs, and the
5741 exponentiation operator.
5742
5743 4
5744 40 As for all types, objects of a floating point type have Size
5745 and Address attributes (see *note 13.3::). Other attributes of
5746 floating point types are defined in *note A.5.3::.
5747
5748 \1f
5749 File: arm2012.info, Node: 3.5.9, Next: 3.5.10, Prev: 3.5.8, Up: 3.5
5750
5751 3.5.9 Fixed Point Types
5752 -----------------------
5753
5754 1
5755 A fixed point type is either an ordinary fixed point type, or a decimal
5756 fixed point type. The error bound of a fixed point type is specified as
5757 an absolute value, called the delta of the fixed point type.
5758
5759 _Syntax_
5760
5761 2
5762 fixed_point_definition ::= ordinary_fixed_point_definition |
5763 decimal_fixed_point_definition
5764
5765 3
5766 ordinary_fixed_point_definition ::=
5767 delta static_expression real_range_specification
5768
5769 4
5770 decimal_fixed_point_definition ::=
5771 delta static_expression digits static_expression [
5772 real_range_specification]
5773
5774 5
5775 digits_constraint ::=
5776 digits static_expression [range_constraint]
5777
5778 _Name Resolution Rules_
5779
5780 6
5781 For a type defined by a fixed_point_definition, the delta of the type is
5782 specified by the value of the expression given after the reserved word
5783 delta; this expression is expected to be of any real type. For a type
5784 defined by a decimal_fixed_point_definition (a decimal fixed point
5785 type), the number of significant decimal digits for its first subtype
5786 (the digits of the first subtype) is specified by the expression given
5787 after the reserved word digits; this expression is expected to be of any
5788 integer type.
5789
5790 _Legality Rules_
5791
5792 7
5793 In a fixed_point_definition or digits_constraint, the expressions given
5794 after the reserved words delta and digits shall be static; their values
5795 shall be positive.
5796
5797 8/2
5798 The set of values of a fixed point type comprise the integral multiples
5799 of a number called the small of the type. The machine numbers of a
5800 fixed point type are the values of the type that can be represented
5801 exactly in every unconstrained variable of the type. For a type defined
5802 by an ordinary_fixed_point_definition (an ordinary fixed point type),
5803 the small may be specified by an attribute_definition_clause (*note
5804 13.3: S0309.) (see *note 13.3::); if so specified, it shall be no
5805 greater than the delta of the type. If not specified, the small of an
5806 ordinary fixed point type is an implementation-defined power of two less
5807 than or equal to the delta.
5808
5809 9
5810 For a decimal fixed point type, the small equals the delta; the delta
5811 shall be a power of 10. If a real_range_specification is given, both
5812 bounds of the range shall be in the range -(10**digits-1)*delta ..
5813 +(10**digits-1)*delta.
5814
5815 10
5816 A fixed_point_definition is illegal if the implementation does not
5817 support a fixed point type with the given small and specified range or
5818 digits.
5819
5820 11
5821 For a subtype_indication with a digits_constraint, the subtype_mark
5822 shall denote a decimal fixed point subtype.
5823
5824 _Static Semantics_
5825
5826 12
5827 The base range (see *note 3.5::) of a fixed point type is symmetric
5828 around zero, except possibly for an extra negative value in some
5829 implementations.
5830
5831 13
5832 An ordinary_fixed_point_definition defines an ordinary fixed point type
5833 whose base range includes at least all multiples of small that are
5834 between the bounds specified in the real_range_specification. The base
5835 range of the type does not necessarily include the specified bounds
5836 themselves. An ordinary_fixed_point_definition (*note 3.5.9: S0048.)
5837 also defines a constrained first subtype of the type, with each bound of
5838 its range given by the closer to zero of:
5839
5840 14
5841 * the value of the conversion to the fixed point type of the
5842 corresponding expression of the real_range_specification;
5843
5844 15
5845 * the corresponding bound of the base range.
5846
5847 16
5848 A decimal_fixed_point_definition defines a decimal fixed point type
5849 whose base range includes at least the range -(10**digits-1)*delta ..
5850 +(10**digits-1)*delta. A decimal_fixed_point_definition also defines a
5851 constrained first subtype of the type. If a real_range_specification is
5852 given, the bounds of the first subtype are given by a conversion of the
5853 values of the expressions of the real_range_specification. Otherwise,
5854 the range of the first subtype is -(10**digits-1)*delta ..
5855 +(10**digits-1)*delta.
5856
5857 _Dynamic Semantics_
5858
5859 17
5860 The elaboration of a fixed_point_definition creates the fixed point type
5861 and its first subtype.
5862
5863 18
5864 For a digits_constraint on a decimal fixed point subtype with a given
5865 delta, if it does not have a range_constraint, then it specifies an
5866 implicit range -(10**D-1)*delta .. +(10**D-1)*delta, where D is the
5867 value of the expression. A digits_constraint is compatible with a
5868 decimal fixed point subtype if the value of the expression is no greater
5869 than the digits of the subtype, and if it specifies (explicitly or
5870 implicitly) a range that is compatible with the subtype.
5871
5872 19
5873 The elaboration of a digits_constraint consists of the elaboration of
5874 the range_constraint, if any. If a range_constraint is given, a check
5875 is made that the bounds of the range are both in the range
5876 -(10**D-1)*delta .. +(10**D-1)*delta, where D is the value of the
5877 (static) expression given after the reserved word digits. If this check
5878 fails, Constraint_Error is raised.
5879
5880 _Implementation Requirements_
5881
5882 20
5883 The implementation shall support at least 24 bits of precision
5884 (including the sign bit) for fixed point types.
5885
5886 _Implementation Permissions_
5887
5888 21
5889 Implementations are permitted to support only smalls that are a power of
5890 two. In particular, all decimal fixed point type declarations can be
5891 disallowed. Note however that conformance with the Information Systems
5892 Annex requires support for decimal smalls, and decimal fixed point type
5893 declarations with digits up to at least 18.
5894
5895 NOTES
5896
5897 22
5898 41 The base range of an ordinary fixed point type need not include
5899 the specified bounds themselves so that the range specification can
5900 be given in a natural way, such as:
5901
5902 23
5903 type Fraction is delta 2.0**(-15) range -1.0 .. 1.0;
5904
5905
5906 24
5907 With 2's complement hardware, such a type could have a signed
5908 16-bit representation, using 1 bit for the sign and 15 bits for
5909 fraction, resulting in a base range of -1.0 .. 1.0-2.0**(-15).
5910
5911 _Examples_
5912
5913 25
5914 Examples of fixed point types and subtypes:
5915
5916 26
5917 type Volt is delta 0.125 range 0.0 .. 255.0;
5918
5919 27
5920 -- A pure fraction which requires all the available
5921 -- space in a word can be declared as the type Fraction:
5922 type Fraction is delta System.Fine_Delta range -1.0 .. 1.0;
5923 -- Fraction'Last = 1.0 - System.Fine_Delta
5924
5925 28
5926 type Money is delta 0.01 digits 15; -- decimal fixed point
5927 subtype Salary is Money digits 10;
5928 -- Money'Last = 10.0**13 - 0.01, Salary'Last = 10.0**8 - 0.01
5929
5930 \1f
5931 File: arm2012.info, Node: 3.5.10, Prev: 3.5.9, Up: 3.5
5932
5933 3.5.10 Operations of Fixed Point Types
5934 --------------------------------------
5935
5936 _Static Semantics_
5937
5938 1
5939 The following attributes are defined for every fixed point subtype S:
5940
5941 2/1
5942 S'Small
5943 S'Small denotes the small of the type of S. The value of
5944 this attribute is of the type universal_real. Small may
5945 be specified for nonderived ordinary fixed point types
5946 via an attribute_definition_clause (*note 13.3: S0309.)
5947 (see *note 13.3::); the expression of such a clause shall
5948 be static.
5949
5950 3
5951 S'Delta
5952 S'Delta denotes the delta of the fixed point subtype S.
5953 The value of this attribute is of the type
5954 universal_real.
5955
5956 4
5957 S'Fore
5958 S'Fore yields the minimum number of characters needed
5959 before the decimal point for the decimal representation
5960 of any value of the subtype S, assuming that the
5961 representation does not include an exponent, but includes
5962 a one-character prefix that is either a minus sign or a
5963 space. (This minimum number does not include superfluous
5964 zeros or underlines, and is at least 2.) The value of
5965 this attribute is of the type universal_integer.
5966
5967 5
5968 S'Aft
5969 S'Aft yields the number of decimal digits needed after
5970 the decimal point to accommodate the delta of the subtype
5971 S, unless the delta of the subtype S is greater than 0.1,
5972 in which case the attribute yields the value one. (S'Aft
5973 is the smallest positive integer N for which
5974 (10**N)*S'Delta is greater than or equal to one.) The
5975 value of this attribute is of the type universal_integer.
5976
5977 6
5978 The following additional attributes are defined for every decimal fixed
5979 point subtype S:
5980
5981 7
5982 S'Digits
5983 S'Digits denotes the digits of the decimal fixed point
5984 subtype S, which corresponds to the number of decimal
5985 digits that are representable in objects of the subtype.
5986 The value of this attribute is of the type
5987 universal_integer. Its value is determined as follows:
5988
5989 8
5990 * For a first subtype or a subtype defined by a
5991 subtype_indication with a digits_constraint, the
5992 digits is the value of the expression given after
5993 the reserved word digits;
5994
5995 9
5996 * For a subtype defined by a subtype_indication
5997 without a digits_constraint, the digits of the
5998 subtype is the same as that of the subtype denoted
5999 by the subtype_mark in the subtype_indication.
6000
6001 10
6002 * The digits of a base subtype is the largest integer
6003 D such that the range -(10**D-1)*delta ..
6004 +(10**D-1)*delta is included in the base range of
6005 the type.
6006
6007 11
6008 S'Scale
6009 S'Scale denotes the scale of the subtype S, defined as
6010 the value N such that S'Delta = 10.0**(-N). The scale
6011 indicates the position of the point relative to the
6012 rightmost significant digits of values of subtype S. The
6013 value of this attribute is of the type universal_integer.
6014
6015 12
6016 S'Round
6017 S'Round denotes a function with the following
6018 specification:
6019
6020 13
6021 function S'Round(X : universal_real)
6022 return S'Base
6023
6024 14
6025 The function returns the value obtained by rounding X
6026 (away from 0, if X is midway between two values of the
6027 type of S).
6028
6029 NOTES
6030
6031 15
6032 42 All subtypes of a fixed point type will have the same value for
6033 the Delta attribute, in the absence of delta_constraints (see *note
6034 J.3::).
6035
6036 16
6037 43 S'Scale is not always the same as S'Aft for a decimal subtype;
6038 for example, if S'Delta = 1.0 then S'Aft is 1 while S'Scale is 0.
6039
6040 17
6041 44 The predefined operations of a fixed point type include the
6042 assignment operation, qualification, the membership tests, and
6043 explicit conversion to and from other numeric types. They also
6044 include the relational operators and the following predefined
6045 arithmetic operators: the binary and unary adding operators - and
6046 +, multiplying operators, and the unary operator abs.
6047
6048 18
6049 45 As for all types, objects of a fixed point type have Size and
6050 Address attributes (see *note 13.3::). Other attributes of fixed
6051 point types are defined in *note A.5.4::.
6052
6053 \1f
6054 File: arm2012.info, Node: 3.6, Next: 3.7, Prev: 3.5, Up: 3
6055
6056 3.6 Array Types
6057 ===============
6058
6059 1
6060 An array object is a composite object consisting of components which all
6061 have the same subtype. The name for a component of an array uses one or
6062 more index values belonging to specified discrete types. The value of
6063 an array object is a composite value consisting of the values of the
6064 components.
6065
6066 _Syntax_
6067
6068 2
6069 array_type_definition ::=
6070 unconstrained_array_definition | constrained_array_definition
6071
6072 3
6073 unconstrained_array_definition ::=
6074 array(index_subtype_definition {, index_subtype_definition}) of
6075 component_definition
6076
6077 4
6078 index_subtype_definition ::= subtype_mark range <>
6079
6080 5
6081 constrained_array_definition ::=
6082 array (discrete_subtype_definition {,
6083 discrete_subtype_definition}) of component_definition
6084
6085 6
6086 discrete_subtype_definition ::= discrete_subtype_indication | range
6087
6088 7/2
6089 component_definition ::=
6090 [aliased] subtype_indication
6091 | [aliased] access_definition
6092
6093 _Name Resolution Rules_
6094
6095 8
6096 For a discrete_subtype_definition that is a range, the range shall
6097 resolve to be of some specific discrete type; which discrete type shall
6098 be determined without using any context other than the bounds of the
6099 range itself (plus the preference for root_integer -- see *note 8.6::).
6100
6101 _Legality Rules_
6102
6103 9
6104 Each index_subtype_definition or discrete_subtype_definition in an
6105 array_type_definition defines an index subtype; its type (the index
6106 type) shall be discrete.
6107
6108 10
6109 The subtype defined by the subtype_indication of a component_definition
6110 (the component subtype) shall be a definite subtype.
6111
6112 11/2
6113 This paragraph was deleted.
6114
6115 _Static Semantics_
6116
6117 12
6118 An array is characterized by the number of indices (the dimensionality
6119 of the array), the type and position of each index, the lower and upper
6120 bounds for each index, and the subtype of the components. The order of
6121 the indices is significant.
6122
6123 13
6124 A one-dimensional array has a distinct component for each possible index
6125 value. A multidimensional array has a distinct component for each
6126 possible sequence of index values that can be formed by selecting one
6127 value for each index position (in the given order). The possible values
6128 for a given index are all the values between the lower and upper bounds,
6129 inclusive; this range of values is called the index range. The bounds
6130 of an array are the bounds of its index ranges. The length of a
6131 dimension of an array is the number of values of the index range of the
6132 dimension (zero for a null range). The length of a one-dimensional
6133 array is the length of its only dimension.
6134
6135 14
6136 An array_type_definition defines an array type and its first subtype.
6137 For each object of this array type, the number of indices, the type and
6138 position of each index, and the subtype of the components are as in the
6139 type definition; the values of the lower and upper bounds for each index
6140 belong to the corresponding index subtype of its type, except for null
6141 arrays (see *note 3.6.1::).
6142
6143 15
6144 An unconstrained_array_definition defines an array type with an
6145 unconstrained first subtype. Each index_subtype_definition (*note 3.6:
6146 S0053.) defines the corresponding index subtype to be the subtype
6147 denoted by the subtype_mark (*note 3.2.2: S0028.). The compound
6148 delimiter <> (called a box) of an index_subtype_definition stands for an
6149 undefined range (different objects of the type need not have the same
6150 bounds).
6151
6152 16
6153 A constrained_array_definition defines an array type with a constrained
6154 first subtype. Each discrete_subtype_definition (*note 3.6: S0055.)
6155 defines the corresponding index subtype, as well as the corresponding
6156 index range for the constrained first subtype. The constraint of the
6157 first subtype consists of the bounds of the index ranges.
6158
6159 17
6160 The discrete subtype defined by a discrete_subtype_definition (*note
6161 3.6: S0055.) is either that defined by the subtype_indication (*note
6162 3.2.2: S0027.), or a subtype determined by the range as follows:
6163
6164 18
6165 * If the type of the range resolves to root_integer, then the
6166 discrete_subtype_definition defines a subtype of the predefined
6167 type Integer with bounds given by a conversion to Integer of the
6168 bounds of the range;
6169
6170 19
6171 * Otherwise, the discrete_subtype_definition defines a subtype of the
6172 type of the range, with the bounds given by the range.
6173
6174 20
6175 The component_definition of an array_type_definition defines the nominal
6176 subtype of the components. If the reserved word aliased appears in the
6177 component_definition, then each component of the array is aliased (see
6178 *note 3.10::).
6179
6180 _Dynamic Semantics_
6181
6182 21
6183 The elaboration of an array_type_definition creates the array type and
6184 its first subtype, and consists of the elaboration of any
6185 discrete_subtype_definition (*note 3.6: S0055.)s and the
6186 component_definition (*note 3.6: S0056.).
6187
6188 22/2
6189 The elaboration of a discrete_subtype_definition that does not contain
6190 any per-object expressions creates the discrete subtype, and consists of
6191 the elaboration of the subtype_indication (*note 3.2.2: S0027.) or the
6192 evaluation of the range. The elaboration of a
6193 discrete_subtype_definition that contains one or more per-object
6194 expressions is defined in *note 3.8::. The elaboration of a
6195 component_definition (*note 3.6: S0056.) in an array_type_definition
6196 (*note 3.6: S0051.) consists of the elaboration of the
6197 subtype_indication (*note 3.2.2: S0027.) or access_definition. The
6198 elaboration of any discrete_subtype_definition (*note 3.6: S0055.)s and
6199 the elaboration of the component_definition (*note 3.6: S0056.) are
6200 performed in an arbitrary order.
6201
6202 _Static Semantics_
6203
6204 22.1/3
6205 For an array type with a scalar component type, the following
6206 language-defined representation aspect may be specified with an
6207 aspect_specification (see *note 13.1.1::):
6208
6209 22.2/3
6210 Default_Component_Value
6211 This aspect shall be specified by a static expression,
6212 and that expression shall be explicit, even if the aspect
6213 has a boolean type. Default_Component_Value shall be
6214 specified only on a full_type_declaration.
6215
6216 22.3/3
6217 If a derived type with no primitive subprograms inherits a boolean
6218 Default_Component_Value aspect, the aspect may be specified to have any
6219 value for the derived type.
6220
6221 _Name Resolution Rules_
6222
6223 22.4/3
6224 The expected type for the expression specified for the
6225 Default_Component_Value aspect is the component type of the array type
6226 defined by the full_type_declaration on which it appears.
6227
6228 NOTES
6229
6230 23
6231 46 All components of an array have the same subtype. In
6232 particular, for an array of components that are one-dimensional
6233 arrays, this means that all components have the same bounds and
6234 hence the same length.
6235
6236 24
6237 47 Each elaboration of an array_type_definition creates a distinct
6238 array type. A consequence of this is that each object whose
6239 object_declaration contains an array_type_definition is of its own
6240 unique type.
6241
6242 _Examples_
6243
6244 25
6245 Examples of type declarations with unconstrained array definitions:
6246
6247 26
6248 type Vector is array(Integer range <>) of Real;
6249 type Matrix is array(Integer range <>, Integer range <>) of Real;
6250 type Bit_Vector is array(Integer range <>) of Boolean;
6251 type Roman is array(Positive range <>) of Roman_Digit; -- see *note 3.5.2::
6252
6253 27
6254 Examples of type declarations with constrained array definitions:
6255
6256 28
6257 type Table is array(1 .. 10) of Integer;
6258 type Schedule is array(Day) of Boolean;
6259 type Line is array(1 .. Max_Line_Size) of Character;
6260
6261 29
6262 Examples of object declarations with array type definitions:
6263
6264 30/2
6265 Grid : array(1 .. 80, 1 .. 100) of Boolean;
6266 Mix : array(Color range Red .. Green) of Boolean;
6267 Msg_Table : constant array(Error_Code) of access constant String :=
6268 (Too_Big => new String'("Result too big"), Too_Small => ...);
6269 Page : array(Positive range <>) of Line := -- an array of arrays
6270 (1 | 50 => Line'(1 | Line'Last => '+', others => '-'), -- see *note 4.3.3::
6271 2 .. 49 => Line'(1 | Line'Last => '|', others => ' '));
6272 -- Page is constrained by its initial value to (1..50)
6273
6274 * Menu:
6275
6276 * 3.6.1 :: Index Constraints and Discrete Ranges
6277 * 3.6.2 :: Operations of Array Types
6278 * 3.6.3 :: String Types
6279
6280 \1f
6281 File: arm2012.info, Node: 3.6.1, Next: 3.6.2, Up: 3.6
6282
6283 3.6.1 Index Constraints and Discrete Ranges
6284 -------------------------------------------
6285
6286 1
6287 An index_constraint determines the range of possible values for every
6288 index of an array subtype, and thereby the corresponding array bounds.
6289
6290 _Syntax_
6291
6292 2
6293 index_constraint ::= (discrete_range {, discrete_range})
6294
6295 3
6296 discrete_range ::= discrete_subtype_indication | range
6297
6298 _Name Resolution Rules_
6299
6300 4
6301 The type of a discrete_range is the type of the subtype defined by the
6302 subtype_indication, or the type of the range. For an index_constraint,
6303 each discrete_range shall resolve to be of the type of the corresponding
6304 index.
6305
6306 _Legality Rules_
6307
6308 5
6309 An index_constraint shall appear only in a subtype_indication whose
6310 subtype_mark denotes either an unconstrained array subtype, or an
6311 unconstrained access subtype whose designated subtype is an
6312 unconstrained array subtype; in either case, the index_constraint shall
6313 provide a discrete_range for each index of the array type.
6314
6315 _Static Semantics_
6316
6317 6
6318 A discrete_range defines a range whose bounds are given by the range, or
6319 by the range of the subtype defined by the subtype_indication.
6320
6321 _Dynamic Semantics_
6322
6323 7
6324 An index_constraint is compatible with an unconstrained array subtype if
6325 and only if the index range defined by each discrete_range is compatible
6326 (see *note 3.5::) with the corresponding index subtype. If any of the
6327 discrete_ranges defines a null range, any array thus constrained is a
6328 null array, having no components. An array value satisfies an
6329 index_constraint if at each index position the array value and the
6330 index_constraint have the same index bounds.
6331
6332 8
6333 The elaboration of an index_constraint consists of the evaluation of the
6334 discrete_range(s), in an arbitrary order. The evaluation of a
6335 discrete_range consists of the elaboration of the subtype_indication or
6336 the evaluation of the range.
6337
6338 NOTES
6339
6340 9
6341 48 The elaboration of a subtype_indication consisting of a
6342 subtype_mark followed by an index_constraint checks the
6343 compatibility of the index_constraint with the subtype_mark (see
6344 *note 3.2.2::).
6345
6346 10
6347 49 Even if an array value does not satisfy the index constraint of
6348 an array subtype, Constraint_Error is not raised on conversion to
6349 the array subtype, so long as the length of each dimension of the
6350 array value and the array subtype match. See *note 4.6::.
6351
6352 _Examples_
6353
6354 11
6355 Examples of array declarations including an index constraint:
6356
6357 12
6358 Board : Matrix(1 .. 8, 1 .. 8); -- see *note 3.6::
6359 Rectangle : Matrix(1 .. 20, 1 .. 30);
6360 Inverse : Matrix(1 .. N, 1 .. N); -- N need not be static
6361
6362 13
6363 Filter : Bit_Vector(0 .. 31);
6364
6365 14
6366 Example of array declaration with a constrained array subtype:
6367
6368 15
6369 My_Schedule : Schedule; -- all arrays of type Schedule have the same bounds
6370
6371 16
6372 Example of record type with a component that is an array:
6373
6374 17
6375 type Var_Line(Length : Natural) is
6376 record
6377 Image : String(1 .. Length);
6378 end record;
6379
6380 18
6381 Null_Line : Var_Line(0); -- Null_Line.Image is a null array
6382
6383 \1f
6384 File: arm2012.info, Node: 3.6.2, Next: 3.6.3, Prev: 3.6.1, Up: 3.6
6385
6386 3.6.2 Operations of Array Types
6387 -------------------------------
6388
6389 _Legality Rules_
6390
6391 1
6392 The argument N used in the attribute_designators for the N-th dimension
6393 of an array shall be a static expression of some integer type. The
6394 value of N shall be positive (nonzero) and no greater than the
6395 dimensionality of the array.
6396
6397 _Static Semantics_
6398
6399 2/1
6400 The following attributes are defined for a prefix A that is of an array
6401 type (after any implicit dereference), or denotes a constrained array
6402 subtype:
6403
6404 3
6405 A'First
6406 A'First denotes the lower bound of the first index range;
6407 its type is the corresponding index type.
6408
6409 4
6410 A'First(N)
6411 A'First(N) denotes the lower bound of the N-th index
6412 range; its type is the corresponding index type.
6413
6414 5
6415 A'Last
6416 A'Last denotes the upper bound of the first index range;
6417 its type is the corresponding index type.
6418
6419 6
6420 A'Last(N)
6421 A'Last(N) denotes the upper bound of the N-th index
6422 range; its type is the corresponding index type.
6423
6424 7
6425 A'Range
6426 A'Range is equivalent to the range A'First .. A'Last,
6427 except that the prefix A is only evaluated once.
6428
6429 8
6430 A'Range(N)
6431 A'Range(N) is equivalent to the range A'First(N) ..
6432 A'Last(N), except that the prefix A is only evaluated
6433 once.
6434
6435 9
6436 A'Length
6437 A'Length denotes the number of values of the first index
6438 range (zero for a null range); its type is
6439 universal_integer.
6440
6441 10
6442 A'Length(N)
6443 A'Length(N) denotes the number of values of the N-th
6444 index range (zero for a null range); its type is
6445 universal_integer.
6446
6447 _Implementation Advice_
6448
6449 11/3
6450 An implementation should normally represent multidimensional arrays in
6451 row-major order, consistent with the notation used for multidimensional
6452 array aggregates (see *note 4.3.3::). However, if convention Fortran is
6453 specified for a multidimensional array type, then column-major order
6454 should be used instead (see *note B.5::, "*note B.5:: Interfacing with
6455 Fortran").
6456
6457 NOTES
6458
6459 12
6460 50 The attribute_references A'First and A'First(1) denote the same
6461 value. A similar relation exists for the attribute_references
6462 A'Last, A'Range, and A'Length. The following relation is satisfied
6463 (except for a null array) by the above attributes if the index type
6464 is an integer type:
6465
6466 13
6467 A'Length(N) = A'Last(N) - A'First(N) + 1
6468
6469 14
6470 51 An array type is limited if its component type is limited (see
6471 *note 7.5::).
6472
6473 15
6474 52 The predefined operations of an array type include the
6475 membership tests, qualification, and explicit conversion. If the
6476 array type is not limited, they also include assignment and the
6477 predefined equality operators. For a one-dimensional array type,
6478 they include the predefined concatenation operators (if nonlimited)
6479 and, if the component type is discrete, the predefined relational
6480 operators; if the component type is boolean, the predefined logical
6481 operators are also included.
6482
6483 16/2
6484 53 A component of an array can be named with an indexed_component.
6485 A value of an array type can be specified with an array_aggregate.
6486 For a one-dimensional array type, a slice of the array can be
6487 named; also, string literals are defined if the component type is a
6488 character type.
6489
6490 _Examples_
6491
6492 17
6493 Examples (using arrays declared in the examples of subclause *note
6494 3.6.1::):
6495
6496 18
6497 -- Filter'First = 0 Filter'Last = 31 Filter'Length = 32
6498 -- Rectangle'Last(1) = 20 Rectangle'Last(2) = 30
6499
6500 \1f
6501 File: arm2012.info, Node: 3.6.3, Prev: 3.6.2, Up: 3.6
6502
6503 3.6.3 String Types
6504 ------------------
6505
6506 _Static Semantics_
6507
6508 1
6509 A one-dimensional array type whose component type is a character type is
6510 called a string type.
6511
6512 2/2
6513 There are three predefined string types, String, Wide_String, and
6514 Wide_Wide_String, each indexed by values of the predefined subtype
6515 Positive; these are declared in the visible part of package Standard:
6516
6517 3
6518 subtype Positive is Integer range 1 .. Integer'Last;
6519
6520 4/2
6521 type String is array(Positive range <>) of Character;
6522 type Wide_String is array(Positive range <>) of Wide_Character;
6523 type Wide_Wide_String is array(Positive range <>) of Wide_Wide_Character;
6524
6525
6526 NOTES
6527
6528 5
6529 54 String literals (see *note 2.6:: and *note 4.2::) are defined
6530 for all string types. The concatenation operator & is predefined
6531 for string types, as for all nonlimited one-dimensional array
6532 types. The ordering operators <, <=, >, and >= are predefined for
6533 string types, as for all one-dimensional discrete array types;
6534 these ordering operators correspond to lexicographic order (see
6535 *note 4.5.2::).
6536
6537 _Examples_
6538
6539 6
6540 Examples of string objects:
6541
6542 7
6543 Stars : String(1 .. 120) := (1 .. 120 => '*' );
6544 Question : constant String := "How many characters?";
6545 -- Question'First = 1, Question'Last = 20
6546 -- Question'Length = 20 (the number of characters)
6547
6548 8
6549 Ask_Twice : String := Question & Question; -- constrained to (1..40)
6550 Ninety_Six : constant Roman := "XCVI"; -- see *note 3.5.2:: and *note 3.6::
6551
6552 \1f
6553 File: arm2012.info, Node: 3.7, Next: 3.8, Prev: 3.6, Up: 3
6554
6555 3.7 Discriminants
6556 =================
6557
6558 1/2
6559 A composite type (other than an array or interface type) can have
6560 discriminants, which parameterize the type. A known_discriminant_part
6561 specifies the discriminants of a composite type. A discriminant of an
6562 object is a component of the object, and is either of a discrete type or
6563 an access type. An unknown_discriminant_part in the declaration of a
6564 view of a type specifies that the discriminants of the type are unknown
6565 for the given view; all subtypes of such a view are indefinite subtypes.
6566
6567 _Syntax_
6568
6569 2/2
6570 discriminant_part ::= unknown_discriminant_part |
6571 known_discriminant_part
6572
6573 3
6574 unknown_discriminant_part ::= (<>)
6575
6576 4
6577 known_discriminant_part ::=
6578 (discriminant_specification {; discriminant_specification})
6579
6580 5/2
6581 discriminant_specification ::=
6582 defining_identifier_list : [null_exclusion] subtype_mark [:=
6583 default_expression]
6584 | defining_identifier_list : access_definition [:=
6585 default_expression]
6586
6587 6
6588 default_expression ::= expression
6589
6590 _Name Resolution Rules_
6591
6592 7
6593 The expected type for the default_expression of a
6594 discriminant_specification is that of the corresponding discriminant.
6595
6596 _Legality Rules_
6597
6598 8/2
6599 A discriminant_part is only permitted in a declaration for a composite
6600 type that is not an array or interface type (this includes generic
6601 formal types). A type declared with a known_discriminant_part is called
6602 a discriminated type, as is a type that inherits (known) discriminants.
6603
6604 9/2
6605 The subtype of a discriminant may be defined by an optional
6606 null_exclusion and a subtype_mark, in which case the subtype_mark shall
6607 denote a discrete or access subtype, or it may be defined by an
6608 access_definition. A discriminant that is defined by an
6609 access_definition is called an access discriminant and is of an
6610 anonymous access type.
6611
6612 9.1/3
6613 Default_expressions shall be provided either for all or for none of the
6614 discriminants of a known_discriminant_part (*note 3.7: S0061.). No
6615 default_expression (*note 3.7: S0063.)s are permitted in a
6616 known_discriminant_part (*note 3.7: S0061.) in a declaration of a
6617 nonlimited tagged type or a generic formal type.
6618
6619 10/3
6620 A discriminant_specification for an access discriminant may have a
6621 default_expression only in the declaration for an immutably limited type
6622 (see *note 7.5::). In addition to the places where Legality Rules
6623 normally apply (see *note 12.3::), this rule applies also in the private
6624 part of an instance of a generic unit.
6625
6626 11/2
6627 This paragraph was deleted.
6628
6629 12
6630 For a type defined by a derived_type_definition, if a
6631 known_discriminant_part is provided in its declaration, then:
6632
6633 13
6634 * The parent subtype shall be constrained;
6635
6636 14
6637 * If the parent type is not a tagged type, then each discriminant of
6638 the derived type shall be used in the constraint defining the
6639 parent subtype;
6640
6641 15
6642 * If a discriminant is used in the constraint defining the parent
6643 subtype, the subtype of the discriminant shall be statically
6644 compatible (see *note 4.9.1::) with the subtype of the
6645 corresponding parent discriminant.
6646
6647 16/3
6648 This paragraph was deleted.
6649
6650 _Static Semantics_
6651
6652 17
6653 A discriminant_specification declares a discriminant; the subtype_mark
6654 denotes its subtype unless it is an access discriminant, in which case
6655 the discriminant's subtype is the anonymous access-to-variable subtype
6656 defined by the access_definition.
6657
6658 18
6659 For a type defined by a derived_type_definition, each discriminant of
6660 the parent type is either inherited, constrained to equal some new
6661 discriminant of the derived type, or constrained to the value of an
6662 expression. When inherited or constrained to equal some new
6663 discriminant, the parent discriminant and the discriminant of the
6664 derived type are said to correspond. Two discriminants also correspond
6665 if there is some common discriminant to which they both correspond. A
6666 discriminant corresponds to itself as well. If a discriminant of a
6667 parent type is constrained to a specific value by a
6668 derived_type_definition, then that discriminant is said to be specified
6669 by that derived_type_definition.
6670
6671 19
6672 A constraint that appears within the definition of a discriminated type
6673 depends on a discriminant of the type if it names the discriminant as a
6674 bound or discriminant value. A component_definition depends on a
6675 discriminant if its constraint depends on the discriminant, or on a
6676 discriminant that corresponds to it.
6677
6678 20
6679 A component depends on a discriminant if:
6680
6681 21
6682 * Its component_definition depends on the discriminant; or
6683
6684 22
6685 * It is declared in a variant_part that is governed by the
6686 discriminant; or
6687
6688 23
6689 * It is a component inherited as part of a derived_type_definition,
6690 and the constraint of the parent_subtype_indication depends on the
6691 discriminant; or
6692
6693 24
6694 * It is a subcomponent of a component that depends on the
6695 discriminant.
6696
6697 25
6698 Each value of a discriminated type includes a value for each component
6699 of the type that does not depend on a discriminant; this includes the
6700 discriminants themselves. The values of discriminants determine which
6701 other component values are present in the value of the discriminated
6702 type.
6703
6704 26
6705 A type declared with a known_discriminant_part is said to have known
6706 discriminants; its first subtype is unconstrained. A type declared with
6707 an unknown_discriminant_part is said to have unknown discriminants. A
6708 type declared without a discriminant_part has no discriminants, unless
6709 it is a derived type; if derived, such a type has the same sort of
6710 discriminants (known, unknown, or none) as its parent (or ancestor)
6711 type. A tagged class-wide type also has unknown discriminants. Any
6712 subtype of a type with unknown discriminants is an unconstrained and
6713 indefinite subtype (see *note 3.2:: and *note 3.3::).
6714
6715 _Dynamic Semantics_
6716
6717 27/2
6718 For an access discriminant, its access_definition is elaborated when the
6719 value of the access discriminant is defined: by evaluation of its
6720 default_expression, by elaboration of a discriminant_constraint, or by
6721 an assignment that initializes the enclosing object.
6722
6723 NOTES
6724
6725 28
6726 55 If a discriminated type has default_expressions for its
6727 discriminants, then unconstrained variables of the type are
6728 permitted, and the values of the discriminants can be changed by an
6729 assignment to such a variable. If defaults are not provided for
6730 the discriminants, then all variables of the type are constrained,
6731 either by explicit constraint or by their initial value; the values
6732 of the discriminants of such a variable cannot be changed after
6733 initialization.
6734
6735 29
6736 56 The default_expression for a discriminant of a type is
6737 evaluated when an object of an unconstrained subtype of the type is
6738 created.
6739
6740 30
6741 57 Assignment to a discriminant of an object (after its
6742 initialization) is not allowed, since the name of a discriminant is
6743 a constant; neither assignment_statements nor assignments inherent
6744 in passing as an in out or out parameter are allowed. Note however
6745 that the value of a discriminant can be changed by assigning to the
6746 enclosing object, presuming it is an unconstrained variable.
6747
6748 31
6749 58 A discriminant that is of a named access type is not called an
6750 access discriminant; that term is used only for discriminants
6751 defined by an access_definition.
6752
6753 _Examples_
6754
6755 32
6756 Examples of discriminated types:
6757
6758 33
6759 type Buffer(Size : Buffer_Size := 100) is -- see *note 3.5.4::
6760 record
6761 Pos : Buffer_Size := 0;
6762 Value : String(1 .. Size);
6763 end record;
6764
6765 34
6766 type Matrix_Rec(Rows, Columns : Integer) is
6767 record
6768 Mat : Matrix(1 .. Rows, 1 .. Columns); -- see *note 3.6::
6769 end record;
6770
6771 35
6772 type Square(Side : Integer) is new
6773 Matrix_Rec(Rows => Side, Columns => Side);
6774
6775 36
6776 type Double_Square(Number : Integer) is
6777 record
6778 Left : Square(Number);
6779 Right : Square(Number);
6780 end record;
6781
6782 37/3
6783 task type Worker(Prio : System.Priority; Buf : access Buffer)
6784 with Priority => Prio is -- see *note D.1::
6785 -- discriminants used to parameterize the task type (see *note 9.1::)
6786 entry Fill;
6787 entry Drain;
6788 end Worker;
6789
6790 * Menu:
6791
6792 * 3.7.1 :: Discriminant Constraints
6793 * 3.7.2 :: Operations of Discriminated Types
6794
6795 \1f
6796 File: arm2012.info, Node: 3.7.1, Next: 3.7.2, Up: 3.7
6797
6798 3.7.1 Discriminant Constraints
6799 ------------------------------
6800
6801 1
6802 A discriminant_constraint specifies the values of the discriminants for
6803 a given discriminated type.
6804
6805 _Syntax_
6806
6807 2
6808 discriminant_constraint ::=
6809 (discriminant_association {, discriminant_association})
6810
6811 3
6812 discriminant_association ::=
6813 [discriminant_selector_name {| discriminant_selector_name} =>]
6814 expression
6815
6816 4
6817 A discriminant_association is said to be named if it has one or
6818 more discriminant_selector_names; it is otherwise said to be
6819 positional. In a discriminant_constraint, any positional
6820 associations shall precede any named associations.
6821
6822 _Name Resolution Rules_
6823
6824 5
6825 Each selector_name of a named discriminant_association (*note 3.7.1:
6826 S0065.) shall resolve to denote a discriminant of the subtype being
6827 constrained; the discriminants so named are the associated discriminants
6828 of the named association. For a positional association, the associated
6829 discriminant is the one whose discriminant_specification (*note 3.7:
6830 S0062.) occurred in the corresponding position in the
6831 known_discriminant_part (*note 3.7: S0061.) that defined the
6832 discriminants of the subtype being constrained.
6833
6834 6
6835 The expected type for the expression in a discriminant_association is
6836 that of the associated discriminant(s).
6837
6838 _Legality Rules_
6839
6840 7/3
6841 A discriminant_constraint is only allowed in a subtype_indication whose
6842 subtype_mark denotes either an unconstrained discriminated subtype, or
6843 an unconstrained access subtype whose designated subtype is an
6844 unconstrained discriminated subtype. However, in the case of an access
6845 subtype, a discriminant_constraint (*note 3.7.1: S0064.) is legal only
6846 if any dereference of a value of the access type is known to be
6847 constrained (see *note 3.3::). In addition to the places where Legality
6848 Rules normally apply (see *note 12.3::), these rules apply also in the
6849 private part of an instance of a generic unit.
6850
6851 8
6852 A named discriminant_association with more than one selector_name is
6853 allowed only if the named discriminants are all of the same type. A
6854 discriminant_constraint shall provide exactly one value for each
6855 discriminant of the subtype being constrained.
6856
6857 9/3
6858 This paragraph was deleted.
6859
6860 _Dynamic Semantics_
6861
6862 10
6863 A discriminant_constraint is compatible with an unconstrained
6864 discriminated subtype if each discriminant value belongs to the subtype
6865 of the corresponding discriminant.
6866
6867 11
6868 A composite value satisfies a discriminant constraint if and only if
6869 each discriminant of the composite value has the value imposed by the
6870 discriminant constraint.
6871
6872 12
6873 For the elaboration of a discriminant_constraint, the expressions in the
6874 discriminant_associations are evaluated in an arbitrary order and
6875 converted to the type of the associated discriminant (which might raise
6876 Constraint_Error -- see *note 4.6::); the expression of a named
6877 association is evaluated (and converted) once for each associated
6878 discriminant. The result of each evaluation and conversion is the value
6879 imposed by the constraint for the associated discriminant.
6880
6881 NOTES
6882
6883 13
6884 59 The rules of the language ensure that a discriminant of an
6885 object always has a value, either from explicit or implicit
6886 initialization.
6887
6888 _Examples_
6889
6890 14/3
6891 Examples (using types declared above in subclause *note 3.7::):
6892
6893 15
6894 Large : Buffer(200); -- constrained, always 200 characters
6895 -- (explicit discriminant value)
6896 Message : Buffer; -- unconstrained, initially 100 characters
6897 -- (default discriminant value)
6898 Basis : Square(5); -- constrained, always 5 by 5
6899 Illegal : Square; -- illegal, a Square has to be constrained
6900
6901 \1f
6902 File: arm2012.info, Node: 3.7.2, Prev: 3.7.1, Up: 3.7
6903
6904 3.7.2 Operations of Discriminated Types
6905 ---------------------------------------
6906
6907 1
6908 If a discriminated type has default_expressions for its discriminants,
6909 then unconstrained variables of the type are permitted, and the
6910 discriminants of such a variable can be changed by assignment to the
6911 variable. For a formal parameter of such a type, an attribute is
6912 provided to determine whether the corresponding actual parameter is
6913 constrained or unconstrained.
6914
6915 _Static Semantics_
6916
6917 2
6918 For a prefix A that is of a discriminated type (after any implicit
6919 dereference), the following attribute is defined:
6920
6921 3/3
6922 A'Constrained
6923 Yields the value True if A denotes a constant, a value, a
6924 tagged object, or a constrained variable, and False
6925 otherwise.
6926
6927 _Erroneous Execution_
6928
6929 4
6930 The execution of a construct is erroneous if the construct has a
6931 constituent that is a name denoting a subcomponent that depends on
6932 discriminants, and the value of any of these discriminants is changed by
6933 this execution between evaluating the name and the last use (within this
6934 execution) of the subcomponent denoted by the name.
6935
6936 \1f
6937 File: arm2012.info, Node: 3.8, Next: 3.9, Prev: 3.7, Up: 3
6938
6939 3.8 Record Types
6940 ================
6941
6942 1
6943 A record object is a composite object consisting of named components.
6944 The value of a record object is a composite value consisting of the
6945 values of the components.
6946
6947 _Syntax_
6948
6949 2
6950 record_type_definition ::= [[abstract] tagged] [limited]
6951 record_definition
6952
6953 3
6954 record_definition ::=
6955 record
6956 component_list
6957 end record
6958 | null record
6959
6960 4
6961 component_list ::=
6962 component_item {component_item}
6963 | {component_item} variant_part
6964 | null;
6965
6966 5/1
6967 component_item ::= component_declaration | aspect_clause
6968
6969 6/3
6970 component_declaration ::=
6971 defining_identifier_list : component_definition [:=
6972 default_expression]
6973 [aspect_specification];
6974
6975 _Name Resolution Rules_
6976
6977 7
6978 The expected type for the default_expression, if any, in a
6979 component_declaration is the type of the component.
6980
6981 _Legality Rules_
6982
6983 8/2
6984 This paragraph was deleted.
6985
6986 9/2
6987 Each component_declaration declares a component of the record type.
6988 Besides components declared by component_declarations, the components of
6989 a record type include any components declared by
6990 discriminant_specifications of the record type declaration. The
6991 identifiers of all components of a record type shall be distinct.
6992
6993 10
6994 Within a type_declaration, a name that denotes a component, protected
6995 subprogram, or entry of the type is allowed only in the following cases:
6996
6997 11/3
6998 * A name that denotes any component, protected subprogram, or entry
6999 is allowed within an aspect_specification, an operational item, or
7000 a representation item that occurs within the declaration of the
7001 composite type.
7002
7003 12/3
7004 * A name that denotes a noninherited discriminant is allowed within
7005 the declaration of the type, but not within the discriminant_part.
7006 If the discriminant is used to define the constraint of a
7007 component, the bounds of an entry family, or the constraint of the
7008 parent subtype in a derived_type_definition, then its name shall
7009 appear alone as a direct_name (not as part of a larger expression
7010 or expanded name). A discriminant shall not be used to define the
7011 constraint of a scalar component.
7012
7013 13
7014 If the name of the current instance of a type (see *note 8.6::) is used
7015 to define the constraint of a component, then it shall appear as a
7016 direct_name that is the prefix of an attribute_reference whose result is
7017 of an access type, and the attribute_reference shall appear alone.
7018
7019 _Static Semantics_
7020
7021 13.1/3
7022 If a record_type_definition includes the reserved word limited, the type
7023 is called an explicitly limited record type.
7024
7025 14
7026 The component_definition of a component_declaration defines the
7027 (nominal) subtype of the component. If the reserved word aliased
7028 appears in the component_definition, then the component is aliased (see
7029 *note 3.10::).
7030
7031 15
7032 If the component_list of a record type is defined by the reserved word
7033 null and there are no discriminants, then the record type has no
7034 components and all records of the type are null records. A
7035 record_definition of null record is equivalent to record null; end
7036 record.
7037
7038 _Dynamic Semantics_
7039
7040 16
7041 The elaboration of a record_type_definition creates the record type and
7042 its first subtype, and consists of the elaboration of the
7043 record_definition. The elaboration of a record_definition consists of
7044 the elaboration of its component_list, if any.
7045
7046 17
7047 The elaboration of a component_list consists of the elaboration of the
7048 component_items and variant_part, if any, in the order in which they
7049 appear. The elaboration of a component_declaration consists of the
7050 elaboration of the component_definition.
7051
7052 18/2
7053 Within the definition of a composite type, if a component_definition or
7054 discrete_subtype_definition (see *note 9.5.2::) includes a name that
7055 denotes a discriminant of the type, or that is an attribute_reference
7056 whose prefix denotes the current instance of the type, the expression
7057 containing the name is called a per-object expression, and the
7058 constraint or range being defined is called a per-object constraint.
7059 For the elaboration of a component_definition of a component_declaration
7060 or the discrete_subtype_definition (*note 3.6: S0055.) of an
7061 entry_declaration (*note 9.5.2: S0218.) for an entry family (see *note
7062 9.5.2::), if the component subtype is defined by an access_definition or
7063 if the constraint or range of the subtype_indication or
7064 discrete_subtype_definition (*note 3.6: S0055.) is not a per-object
7065 constraint, then the access_definition, subtype_indication, or
7066 discrete_subtype_definition (*note 3.6: S0055.) is elaborated. On the
7067 other hand, if the constraint or range is a per-object constraint, then
7068 the elaboration consists of the evaluation of any included expression
7069 that is not part of a per-object expression. Each such expression is
7070 evaluated once unless it is part of a named association in a
7071 discriminant constraint, in which case it is evaluated once for each
7072 associated discriminant.
7073
7074 18.1/1
7075 When a per-object constraint is elaborated (as part of creating an
7076 object), each per-object expression of the constraint is evaluated. For
7077 other expressions, the values determined during the elaboration of the
7078 component_definition (*note 3.6: S0056.) or entry_declaration (*note
7079 9.5.2: S0218.) are used. Any checks associated with the enclosing
7080 subtype_indication or discrete_subtype_definition are performed,
7081 including the subtype compatibility check (see *note 3.2.2::), and the
7082 associated subtype is created.
7083
7084 NOTES
7085
7086 19
7087 60 A component_declaration with several identifiers is equivalent
7088 to a sequence of single component_declarations, as explained in
7089 *note 3.3.1::.
7090
7091 20
7092 61 The default_expression of a record component is only evaluated
7093 upon the creation of a default-initialized object of the record
7094 type (presuming the object has the component, if it is in a
7095 variant_part -- see *note 3.3.1::).
7096
7097 21
7098 62 The subtype defined by a component_definition (see *note 3.6::)
7099 has to be a definite subtype.
7100
7101 22
7102 63 If a record type does not have a variant_part, then the same
7103 components are present in all values of the type.
7104
7105 23
7106 64 A record type is limited if it has the reserved word limited in
7107 its definition, or if any of its components are limited (see *note
7108 7.5::).
7109
7110 24
7111 65 The predefined operations of a record type include membership
7112 tests, qualification, and explicit conversion. If the record type
7113 is nonlimited, they also include assignment and the predefined
7114 equality operators.
7115
7116 25/2
7117 66 A component of a record can be named with a selected_component.
7118 A value of a record can be specified with a record_aggregate.
7119
7120 _Examples_
7121
7122 26
7123 Examples of record type declarations:
7124
7125 27
7126 type Date is
7127 record
7128 Day : Integer range 1 .. 31;
7129 Month : Month_Name;
7130 Year : Integer range 0 .. 4000;
7131 end record;
7132
7133 28
7134 type Complex is
7135 record
7136 Re : Real := 0.0;
7137 Im : Real := 0.0;
7138 end record;
7139
7140 29
7141 Examples of record variables:
7142
7143 30
7144 Tomorrow, Yesterday : Date;
7145 A, B, C : Complex;
7146
7147 31
7148 -- both components of A, B, and C are implicitly initialized to zero
7149
7150 * Menu:
7151
7152 * 3.8.1 :: Variant Parts and Discrete Choices
7153
7154 \1f
7155 File: arm2012.info, Node: 3.8.1, Up: 3.8
7156
7157 3.8.1 Variant Parts and Discrete Choices
7158 ----------------------------------------
7159
7160 1
7161 A record type with a variant_part specifies alternative lists of
7162 components. Each variant defines the components for the value or values
7163 of the discriminant covered by its discrete_choice_list.
7164
7165 _Syntax_
7166
7167 2
7168 variant_part ::=
7169 case discriminant_direct_name is
7170 variant
7171 {variant}
7172 end case;
7173
7174 3
7175 variant ::=
7176 when discrete_choice_list =>
7177 component_list
7178
7179 4
7180 discrete_choice_list ::= discrete_choice {| discrete_choice}
7181
7182 5/3
7183 discrete_choice ::= choice_expression | discrete_
7184 subtype_indication | range | others
7185
7186 _Name Resolution Rules_
7187
7188 6
7189 The discriminant_direct_name shall resolve to denote a discriminant
7190 (called the discriminant of the variant_part) specified in the
7191 known_discriminant_part of the full_type_declaration that contains the
7192 variant_part. The expected type for each discrete_choice in a variant
7193 is the type of the discriminant of the variant_part.
7194
7195 _Legality Rules_
7196
7197 7
7198 The discriminant of the variant_part shall be of a discrete type.
7199
7200 8/3
7201 The choice_expressions, subtype_indications, and ranges given as
7202 discrete_choices in a variant_part shall be static. The discrete_choice
7203 others shall appear alone in a discrete_choice_list, and such a
7204 discrete_choice_list, if it appears, shall be the last one in the
7205 enclosing construct.
7206
7207 9
7208 A discrete_choice is defined to cover a value in the following cases:
7209
7210 10/3
7211 * A discrete_choice that is a choice_expression covers a value if the
7212 value equals the value of the choice_expression converted to the
7213 expected type.
7214
7215 10.1/3
7216 * A discrete_choice that is a subtype_indication covers all values
7217 (possibly none) that belong to the subtype and that satisfy the
7218 static predicate of the subtype (see *note 3.2.4::).
7219
7220 11/3
7221 * A discrete_choice that is a range covers all values (possibly none)
7222 that belong to the range.
7223
7224 12
7225 * The discrete_choice others covers all values of its expected type
7226 that are not covered by previous discrete_choice_lists of the same
7227 construct.
7228
7229 13
7230 A discrete_choice_list covers a value if one of its discrete_choices
7231 covers the value.
7232
7233 14
7234 The possible values of the discriminant of a variant_part shall be
7235 covered as follows:
7236
7237 15/3
7238 * If the discriminant is of a static constrained scalar subtype then,
7239 except within an instance of a generic unit, each non-others
7240 discrete_choice (*note 3.8.1: S0074.) shall cover only values in
7241 that subtype that satisfy its predicate, and each value of that
7242 subtype that satisfies its predicate shall be covered by some
7243 discrete_choice (*note 3.8.1: S0074.) (either explicitly or by
7244 others);
7245
7246 16/3
7247 * If the type of the discriminant is a descendant of a generic formal
7248 scalar type, then the variant_part shall have an others
7249 discrete_choice;
7250
7251 17
7252 * Otherwise, each value of the base range of the type of the
7253 discriminant shall be covered (either explicitly or by others).
7254
7255 18
7256 Two distinct discrete_choices of a variant_part shall not cover the same
7257 value.
7258
7259 _Static Semantics_
7260
7261 19
7262 If the component_list of a variant is specified by null, the variant has
7263 no components.
7264
7265 20
7266 The discriminant of a variant_part is said to govern the variant_part
7267 and its variants. In addition, the discriminant of a derived type
7268 governs a variant_part and its variants if it corresponds (see *note
7269 3.7::) to the discriminant of the variant_part.
7270
7271 _Dynamic Semantics_
7272
7273 21
7274 A record value contains the values of the components of a particular
7275 variant only if the value of the discriminant governing the variant is
7276 covered by the discrete_choice_list of the variant. This rule applies
7277 in turn to any further variant that is, itself, included in the
7278 component_list of the given variant.
7279
7280 21.1/3
7281 When an object of a discriminated type T is initialized by default,
7282 Constraint_Error is raised if no discrete_choice_list of any variant of
7283 a variant_part of T covers the value of the discriminant that governs
7284 the variant_part. When a variant_part appears in the component_list of
7285 another variant V, this test is only applied if the value of the
7286 discriminant governing V is covered by the discrete_choice_list of V.
7287
7288 22
7289 The elaboration of a variant_part consists of the elaboration of the
7290 component_list of each variant in the order in which they appear.
7291
7292 _Examples_
7293
7294 23
7295 Example of record type with a variant part:
7296
7297 24
7298 type Device is (Printer, Disk, Drum);
7299 type State is (Open, Closed);
7300
7301 25
7302 type Peripheral(Unit : Device := Disk) is
7303 record
7304 Status : State;
7305 case Unit is
7306 when Printer =>
7307 Line_Count : Integer range 1 .. Page_Size;
7308 when others =>
7309 Cylinder : Cylinder_Index;
7310 Track : Track_Number;
7311 end case;
7312 end record;
7313
7314 26
7315 Examples of record subtypes:
7316
7317 27
7318 subtype Drum_Unit is Peripheral(Drum);
7319 subtype Disk_Unit is Peripheral(Disk);
7320
7321 28
7322 Examples of constrained record variables:
7323
7324 29
7325 Writer : Peripheral(Unit => Printer);
7326 Archive : Disk_Unit;
7327
7328 \1f
7329 File: arm2012.info, Node: 3.9, Next: 3.10, Prev: 3.8, Up: 3
7330
7331 3.9 Tagged Types and Type Extensions
7332 ====================================
7333
7334 1
7335 Tagged types and type extensions support object-oriented programming,
7336 based on inheritance with extension and run-time polymorphism via
7337 dispatching operations.
7338
7339 _Static Semantics_
7340
7341 2/2
7342 A record type or private type that has the reserved word tagged in its
7343 declaration is called a tagged type. In addition, an interface type is
7344 a tagged type, as is a task or protected type derived from an interface
7345 (see *note 3.9.4::). When deriving from a tagged type, as for any
7346 derived type, additional primitive subprograms may be defined, and
7347 inherited primitive subprograms may be overridden. The derived type is
7348 called an extension of its ancestor types, or simply a type extension.
7349
7350 2.1/2
7351 Every type extension is also a tagged type, and is a record extension or
7352 a private extension of some other tagged type, or a noninterface
7353 synchronized tagged type (see *note 3.9.4::). A record extension is
7354 defined by a derived_type_definition with a record_extension_part (see
7355 *note 3.9.1::), which may include the definition of additional
7356 components. A private extension, which is a partial view of a record
7357 extension or of a synchronized tagged type, can be declared in the
7358 visible part of a package (see *note 7.3::) or in a generic formal part
7359 (see *note 12.5.1::).
7360
7361 3
7362 An object of a tagged type has an associated (run-time) tag that
7363 identifies the specific tagged type used to create the object
7364 originally. The tag of an operand of a class-wide tagged type T'Class
7365 controls which subprogram body is to be executed when a primitive
7366 subprogram of type T is applied to the operand (see *note 3.9.2::);
7367 using a tag to control which body to execute is called dispatching.
7368
7369 4/2
7370 The tag of a specific tagged type identifies the full_type_declaration
7371 of the type, and for a type extension, is sufficient to uniquely
7372 identify the type among all descendants of the same ancestor. If a
7373 declaration for a tagged type occurs within a
7374 generic_package_declaration, then the corresponding type declarations in
7375 distinct instances of the generic package are associated with distinct
7376 tags. For a tagged type that is local to a generic package body and
7377 with all of its ancestors (if any) also local to the generic body, the
7378 language does not specify whether repeated instantiations of the generic
7379 body result in distinct tags.
7380
7381 5
7382 The following language-defined library package exists:
7383
7384 6/2
7385 package Ada.Tags is
7386 pragma Preelaborate(Tags);
7387 type Tag is private;
7388 pragma Preelaborable_Initialization(Tag);
7389
7390 6.1/2
7391 No_Tag : constant Tag;
7392
7393 7/2
7394 function Expanded_Name(T : Tag) return String;
7395 function Wide_Expanded_Name(T : Tag) return Wide_String;
7396 function Wide_Wide_Expanded_Name(T : Tag) return Wide_Wide_String;
7397 function External_Tag(T : Tag) return String;
7398 function Internal_Tag(External : String) return Tag;
7399
7400 7.1/2
7401 function Descendant_Tag(External : String; Ancestor : Tag) return Tag;
7402 function Is_Descendant_At_Same_Level(Descendant, Ancestor : Tag)
7403 return Boolean;
7404
7405 7.2/2
7406 function Parent_Tag (T : Tag) return Tag;
7407
7408 7.3/2
7409 type Tag_Array is array (Positive range <>) of Tag;
7410
7411 7.4/2
7412 function Interface_Ancestor_Tags (T : Tag) return Tag_Array;
7413
7414 7.5/3
7415 function Is_Abstract (T : Tag) return Boolean;
7416
7417 8
7418 Tag_Error : exception;
7419
7420 9
7421 private
7422 ... -- not specified by the language
7423 end Ada.Tags;
7424
7425 9.1/2
7426 No_Tag is the default initial value of type Tag.
7427
7428 10/2
7429 The function Wide_Wide_Expanded_Name returns the full expanded name of
7430 the first subtype of the specific type identified by the tag, in upper
7431 case, starting with a root library unit. The result is implementation
7432 defined if the type is declared within an unnamed block_statement.
7433
7434 10.1/2
7435 The function Expanded_Name (respectively, Wide_Expanded_Name) returns
7436 the same sequence of graphic characters as that defined for
7437 Wide_Wide_Expanded_Name, if all the graphic characters are defined in
7438 Character (respectively, Wide_Character); otherwise, the sequence of
7439 characters is implementation defined, but no shorter than that returned
7440 by Wide_Wide_Expanded_Name for the same value of the argument.
7441
7442 11
7443 The function External_Tag returns a string to be used in an external
7444 representation for the given tag. The call External_Tag(S'Tag) is
7445 equivalent to the attribute_reference S'External_Tag (see *note 13.3::).
7446
7447 11.1/2
7448 The string returned by the functions Expanded_Name, Wide_Expanded_Name,
7449 Wide_Wide_Expanded_Name, and External_Tag has lower bound 1.
7450
7451 12/2
7452 The function Internal_Tag returns a tag that corresponds to the given
7453 external tag, or raises Tag_Error if the given string is not the
7454 external tag for any specific type of the partition. Tag_Error is also
7455 raised if the specific type identified is a library-level type whose tag
7456 has not yet been created (see *note 13.14::).
7457
7458 12.1/3
7459 The function Descendant_Tag returns the (internal) tag for the type that
7460 corresponds to the given external tag and is both a descendant of the
7461 type identified by the Ancestor tag and has the same accessibility level
7462 as the identified ancestor. Tag_Error is raised if External is not the
7463 external tag for such a type. Tag_Error is also raised if the specific
7464 type identified is a library-level type whose tag has not yet been
7465 created, or if the given external tag identifies more than one type that
7466 has the appropriate Ancestor and accessibility level.
7467
7468 12.2/2
7469 The function Is_Descendant_At_Same_Level returns True if the Descendant
7470 tag identifies a type that is both a descendant of the type identified
7471 by Ancestor and at the same accessibility level. If not, it returns
7472 False.
7473
7474 12.3/3
7475 For the purposes of the dynamic semantics of functions Descendant_Tag
7476 and Is_Descendant_At_Same_Level, a tagged type T2 is a descendant of a
7477 type T1 if it is the same as T1, or if its parent type or one of its
7478 progenitor types is a descendant of type T1 by this rule, even if at the
7479 point of the declaration of T2, one of the derivations in the chain is
7480 not visible.
7481
7482 12.4/3
7483 The function Parent_Tag returns the tag of the parent type of the type
7484 whose tag is T. If the type does not have a parent type (that is, it was
7485 not declared by a derived_type_declaration), then No_Tag is returned.
7486
7487 12.5/3
7488 The function Interface_Ancestor_Tags returns an array containing the tag
7489 of each interface ancestor type of the type whose tag is T, other than T
7490 itself. The lower bound of the returned array is 1, and the order of
7491 the returned tags is unspecified. Each tag appears in the result
7492 exactly once. If the type whose tag is T has no interface ancestors, a
7493 null array is returned.
7494
7495 12.6/3
7496 The function Is_Abstract returns True if the type whose tag is T is
7497 abstract, and False otherwise.
7498
7499 13
7500 For every subtype S of a tagged type T (specific or class-wide), the
7501 following attributes are defined:
7502
7503 14
7504 S'Class
7505 S'Class denotes a subtype of the class-wide type (called
7506 T'Class in this International Standard) for the class
7507 rooted at T (or if S already denotes a class-wide
7508 subtype, then S'Class is the same as S).
7509
7510 15
7511 S'Class is unconstrained. However, if S is constrained,
7512 then the values of S'Class are only those that when
7513 converted to the type T belong to S.
7514
7515 16
7516 S'Tag
7517 S'Tag denotes the tag of the type T (or if T is
7518 class-wide, the tag of the root type of the corresponding
7519 class). The value of this attribute is of type Tag.
7520
7521 17
7522 Given a prefix X that is of a class-wide tagged type (after any implicit
7523 dereference), the following attribute is defined:
7524
7525 18
7526 X'Tag
7527 X'Tag denotes the tag of X. The value of this attribute
7528 is of type Tag.
7529
7530 18.1/2
7531 The following language-defined generic function exists:
7532
7533 18.2/3
7534 generic
7535 type T (<>) is abstract tagged limited private;
7536 type Parameters (<>) is limited private;
7537 with function Constructor (Params : not null access Parameters)
7538 return T is abstract;
7539 function Ada.Tags.Generic_Dispatching_Constructor
7540 (The_Tag : Tag;
7541 Params : not null access Parameters) return T'Class
7542 with Convention => Intrinsic;
7543 pragma Preelaborate(Generic_Dispatching_Constructor);
7544
7545 18.3/2
7546 Tags.Generic_Dispatching_Constructor provides a mechanism to create an
7547 object of an appropriate type from just a tag value. The function
7548 Constructor is expected to create the object given a reference to an
7549 object of type Parameters.
7550
7551 _Dynamic Semantics_
7552
7553 19
7554 The tag associated with an object of a tagged type is determined as
7555 follows:
7556
7557 20
7558 * The tag of a stand-alone object, a component, or an aggregate of a
7559 specific tagged type T identifies T.
7560
7561 21
7562 * The tag of an object created by an allocator for an access type
7563 with a specific designated tagged type T, identifies T.
7564
7565 22
7566 * The tag of an object of a class-wide tagged type is that of its
7567 initialization expression.
7568
7569 23
7570 * The tag of the result returned by a function whose result type is a
7571 specific tagged type T identifies T.
7572
7573 24/2
7574 * The tag of the result returned by a function with a class-wide
7575 result type is that of the return object.
7576
7577 25
7578 The tag is preserved by type conversion and by parameter passing. The
7579 tag of a value is the tag of the associated object (see *note 6.2::).
7580
7581 25.1/3
7582 Tag_Error is raised by a call of Descendant_Tag, Expanded_Name,
7583 External_Tag, Interface_Ancestor_Tags, Is_Abstract,
7584 Is_Descendant_At_Same_Level, Parent_Tag, Wide_Expanded_Name, or
7585 Wide_Wide_Expanded_Name if any tag passed is No_Tag.
7586
7587 25.2/2
7588 An instance of Tags.Generic_Dispatching_Constructor raises Tag_Error if
7589 The_Tag does not represent a concrete descendant of T or if the
7590 innermost master (see *note 7.6.1::) of this descendant is not also a
7591 master of the instance. Otherwise, it dispatches to the primitive
7592 function denoted by the formal Constructor for the type identified by
7593 The_Tag, passing Params, and returns the result. Any exception raised
7594 by the function is propagated.
7595
7596 _Erroneous Execution_
7597
7598 25.3/2
7599 If an internal tag provided to an instance of
7600 Tags.Generic_Dispatching_Constructor or to any subprogram declared in
7601 package Tags identifies either a type that is not library-level and
7602 whose tag has not been created (see *note 13.14::), or a type that does
7603 not exist in the partition at the time of the call, then execution is
7604 erroneous.
7605
7606 _Implementation Permissions_
7607
7608 26/2
7609 The implementation of Internal_Tag and Descendant_Tag may raise
7610 Tag_Error if no specific type corresponding to the string External
7611 passed as a parameter exists in the partition at the time the function
7612 is called, or if there is no such type whose innermost master is a
7613 master of the point of the function call.
7614
7615 _Implementation Advice_
7616
7617 26.1/3
7618 Internal_Tag should return the tag of a type, if one exists, whose
7619 innermost master is a master of the point of the function call.
7620
7621 NOTES
7622
7623 27
7624 67 A type declared with the reserved word tagged should normally
7625 be declared in a package_specification, so that new primitive
7626 subprograms can be declared for it.
7627
7628 28
7629 68 Once an object has been created, its tag never changes.
7630
7631 29
7632 69 Class-wide types are defined to have unknown discriminants (see
7633 *note 3.7::). This means that objects of a class-wide type have to
7634 be explicitly initialized (whether created by an object_declaration
7635 or an allocator), and that aggregates have to be explicitly
7636 qualified with a specific type when their expected type is
7637 class-wide.
7638
7639 30/2
7640 70 The capability provided by Tags.Generic_Dispatching_Constructor
7641 is sometimes known as a factory.
7642
7643 _Examples_
7644
7645 31
7646 Examples of tagged record types:
7647
7648 32
7649 type Point is tagged
7650 record
7651 X, Y : Real := 0.0;
7652 end record;
7653
7654 33
7655 type Expression is tagged null record;
7656 -- Components will be added by each extension
7657
7658 * Menu:
7659
7660 * 3.9.1 :: Type Extensions
7661 * 3.9.2 :: Dispatching Operations of Tagged Types
7662 * 3.9.3 :: Abstract Types and Subprograms
7663 * 3.9.4 :: Interface Types
7664
7665 \1f
7666 File: arm2012.info, Node: 3.9.1, Next: 3.9.2, Up: 3.9
7667
7668 3.9.1 Type Extensions
7669 ---------------------
7670
7671 1/2
7672 Every type extension is a tagged type, and is a record extension or a
7673 private extension of some other tagged type, or a noninterface
7674 synchronized tagged type.
7675
7676 _Syntax_
7677
7678 2
7679 record_extension_part ::= with record_definition
7680
7681 _Legality Rules_
7682
7683 3/2
7684 The parent type of a record extension shall not be a class-wide type nor
7685 shall it be a synchronized tagged type (see *note 3.9.4::). If the
7686 parent type or any progenitor is nonlimited, then each of the components
7687 of the record_extension_part shall be nonlimited. In addition to the
7688 places where Legality Rules normally apply (see *note 12.3::), these
7689 rules apply also in the private part of an instance of a generic unit.
7690
7691 4/2
7692 Within the body of a generic unit, or the body of any of its descendant
7693 library units, a tagged type shall not be declared as a descendant of a
7694 formal type declared within the formal part of the generic unit.
7695
7696 _Static Semantics_
7697
7698 4.1/2
7699 A record extension is a null extension if its declaration has no
7700 known_discriminant_part and its record_extension_part includes no
7701 component_declarations.
7702
7703 _Dynamic Semantics_
7704
7705 5
7706 The elaboration of a record_extension_part consists of the elaboration
7707 of the record_definition.
7708
7709 NOTES
7710
7711 6
7712 71 The term "type extension" refers to a type as a whole. The
7713 term "extension part" refers to the piece of text that defines the
7714 additional components (if any) the type extension has relative to
7715 its specified ancestor type.
7716
7717 7/2
7718 72 When an extension is declared immediately within a body,
7719 primitive subprograms are inherited and are overridable, but new
7720 primitive subprograms cannot be added.
7721
7722 8
7723 73 A name that denotes a component (including a discriminant) of
7724 the parent type is not allowed within the record_extension_part.
7725 Similarly, a name that denotes a component defined within the
7726 record_extension_part is not allowed within the
7727 record_extension_part. It is permissible to use a name that
7728 denotes a discriminant of the record extension, providing there is
7729 a new known_discriminant_part in the enclosing type declaration.
7730 (The full rule is given in *note 3.8::.)
7731
7732 9
7733 74 Each visible component of a record extension has to have a
7734 unique name, whether the component is (visibly) inherited from the
7735 parent type or declared in the record_extension_part (see *note
7736 8.3::).
7737
7738 _Examples_
7739
7740 10
7741 Examples of record extensions (of types defined above in *note 3.9::):
7742
7743 11
7744 type Painted_Point is new Point with
7745 record
7746 Paint : Color := White;
7747 end record;
7748 -- Components X and Y are inherited
7749
7750 12
7751 Origin : constant Painted_Point := (X | Y => 0.0, Paint => Black);
7752
7753 13
7754 type Literal is new Expression with
7755 record -- a leaf in an Expression tree
7756 Value : Real;
7757 end record;
7758
7759 14
7760 type Expr_Ptr is access all Expression'Class;
7761 -- see *note 3.10::
7762
7763 15
7764 type Binary_Operation is new Expression with
7765 record -- an internal node in an Expression tree
7766 Left, Right : Expr_Ptr;
7767 end record;
7768
7769 16
7770 type Addition is new Binary_Operation with null record;
7771 type Subtraction is new Binary_Operation with null record;
7772 -- No additional components needed for these extensions
7773
7774 17
7775 Tree : Expr_Ptr := -- A tree representation of "5.0 + (13.0-7.0)"
7776 new Addition'(
7777 Left => new Literal'(Value => 5.0),
7778 Right => new Subtraction'(
7779 Left => new Literal'(Value => 13.0),
7780 Right => new Literal'(Value => 7.0)));
7781
7782 \1f
7783 File: arm2012.info, Node: 3.9.2, Next: 3.9.3, Prev: 3.9.1, Up: 3.9
7784
7785 3.9.2 Dispatching Operations of Tagged Types
7786 --------------------------------------------
7787
7788 1/2
7789 The primitive subprograms of a tagged type, the subprograms declared by
7790 formal_abstract_subprogram_declaration (*note 12.6: S0297.)s, and the
7791 stream attributes of a specific tagged type that are available (see
7792 *note 13.13.2::) at the end of the declaration list where the type is
7793 declared are called dispatching operations. A dispatching operation can
7794 be called using a statically determined controlling tag, in which case
7795 the body to be executed is determined at compile time. Alternatively,
7796 the controlling tag can be dynamically determined, in which case the
7797 call dispatches to a body that is determined at run time; such a call is
7798 termed a dispatching call. As explained below, the properties of the
7799 operands and the context of a particular call on a dispatching operation
7800 determine how the controlling tag is determined, and hence whether or
7801 not the call is a dispatching call. Run-time polymorphism is achieved
7802 when a dispatching operation is called by a dispatching call.
7803
7804 _Static Semantics_
7805
7806 2/3
7807 A call on a dispatching operation is a call whose name or prefix denotes
7808 the declaration of a dispatching operation. A controlling operand in a
7809 call on a dispatching operation of a tagged type T is one whose
7810 corresponding formal parameter is of type T or is of an anonymous access
7811 type with designated type T; the corresponding formal parameter is
7812 called a controlling formal parameter. If the controlling formal
7813 parameter is an access parameter, the controlling operand is the object
7814 designated by the actual parameter, rather than the actual parameter
7815 itself. If the call is to a (primitive) function with result type T (a
7816 function with a controlling result), then the call has a controlling
7817 result -- the context of the call can control the dispatching.
7818 Similarly, if the call is to a function with an access result type
7819 designating T (a function with a controlling access result), then the
7820 call has a controlling access result, and the context can similarly
7821 control dispatching.
7822
7823 3
7824 A name or expression of a tagged type is either statically tagged,
7825 dynamically tagged, or tag indeterminate, according to whether, when
7826 used as a controlling operand, the tag that controls dispatching is
7827 determined statically by the operand's (specific) type, dynamically by
7828 its tag at run time, or from context. A qualified_expression or
7829 parenthesized expression is statically, dynamically, or indeterminately
7830 tagged according to its operand. For other kinds of names and
7831 expressions, this is determined as follows:
7832
7833 4/2
7834 * The name or expression is statically tagged if it is of a specific
7835 tagged type and, if it is a call with a controlling result or
7836 controlling access result, it has at least one statically tagged
7837 controlling operand;
7838
7839 5/2
7840 * The name or expression is dynamically tagged if it is of a
7841 class-wide type, or it is a call with a controlling result or
7842 controlling access result and at least one dynamically tagged
7843 controlling operand;
7844
7845 6/2
7846 * The name or expression is tag indeterminate if it is a call with a
7847 controlling result or controlling access result, all of whose
7848 controlling operands (if any) are tag indeterminate.
7849
7850 7/1
7851 A type_conversion is statically or dynamically tagged according to
7852 whether the type determined by the subtype_mark is specific or
7853 class-wide, respectively. For an object that is designated by an
7854 expression whose expected type is an anonymous access-to-specific tagged
7855 type, the object is dynamically tagged if the expression, ignoring
7856 enclosing parentheses, is of the form X'Access, where X is of a
7857 class-wide type, or is of the form new T'(...), where T denotes a
7858 class-wide subtype. Otherwise, the object is statically or dynamically
7859 tagged according to whether the designated type of the type of the
7860 expression is specific or class-wide, respectively.
7861
7862 _Legality Rules_
7863
7864 8
7865 A call on a dispatching operation shall not have both dynamically tagged
7866 and statically tagged controlling operands.
7867
7868 9/1
7869 If the expected type for an expression or name is some specific tagged
7870 type, then the expression or name shall not be dynamically tagged unless
7871 it is a controlling operand in a call on a dispatching operation.
7872 Similarly, if the expected type for an expression is an anonymous
7873 access-to-specific tagged type, then the object designated by the
7874 expression shall not be dynamically tagged unless it is a controlling
7875 operand in a call on a dispatching operation.
7876
7877 10/2
7878 In the declaration of a dispatching operation of a tagged type,
7879 everywhere a subtype of the tagged type appears as a subtype of the
7880 profile (see *note 6.1::), it shall statically match the first subtype
7881 of the tagged type. If the dispatching operation overrides an inherited
7882 subprogram, it shall be subtype conformant with the inherited
7883 subprogram. The convention of an inherited dispatching operation is the
7884 convention of the corresponding primitive operation of the parent or
7885 progenitor type. The default convention of a dispatching operation that
7886 overrides an inherited primitive operation is the convention of the
7887 inherited operation; if the operation overrides multiple inherited
7888 operations, then they shall all have the same convention. An explicitly
7889 declared dispatching operation shall not be of convention Intrinsic.
7890
7891 11/2
7892 The default_expression for a controlling formal parameter of a
7893 dispatching operation shall be tag indeterminate.
7894
7895 11.1/2
7896 If a dispatching operation is defined by a
7897 subprogram_renaming_declaration or the instantiation of a generic
7898 subprogram, any access parameter of the renamed subprogram or the
7899 generic subprogram that corresponds to a controlling access parameter of
7900 the dispatching operation, shall have a subtype that excludes null.
7901
7902 12
7903 A given subprogram shall not be a dispatching operation of two or more
7904 distinct tagged types.
7905
7906 13
7907 The explicit declaration of a primitive subprogram of a tagged type
7908 shall occur before the type is frozen (see *note 13.14::). For example,
7909 new dispatching operations cannot be added after objects or values of
7910 the type exist, nor after deriving a record extension from it, nor after
7911 a body.
7912
7913 _Dynamic Semantics_
7914
7915 14
7916 For the execution of a call on a dispatching operation of a type T, the
7917 controlling tag value determines which subprogram body is executed. The
7918 controlling tag value is defined as follows:
7919
7920 15
7921 * If one or more controlling operands are statically tagged, then the
7922 controlling tag value is statically determined to be the tag of T.
7923
7924 16
7925 * If one or more controlling operands are dynamically tagged, then
7926 the controlling tag value is not statically determined, but is
7927 rather determined by the tags of the controlling operands. If
7928 there is more than one dynamically tagged controlling operand, a
7929 check is made that they all have the same tag. If this check
7930 fails, Constraint_Error is raised unless the call is a
7931 function_call whose name denotes the declaration of an equality
7932 operator (predefined or user defined) that returns Boolean, in
7933 which case the result of the call is defined to indicate
7934 inequality, and no subprogram_body is executed. This check is
7935 performed prior to evaluating any tag-indeterminate controlling
7936 operands.
7937
7938 17/2
7939 * If all of the controlling operands (if any) are tag-indeterminate,
7940 then:
7941
7942 18/2
7943 * If the call has a controlling result or controlling
7944 access result and is itself, or designates, a (possibly
7945 parenthesized or qualified) controlling operand of an
7946 enclosing call on a dispatching operation of a descendant
7947 of type T, then its controlling tag value is determined
7948 by the controlling tag value of this enclosing call;
7949
7950 18.1/2
7951 * If the call has a controlling result or controlling
7952 access result and (possibly parenthesized, qualified, or
7953 dereferenced) is the expression of an
7954 assignment_statement whose target is of a class-wide
7955 type, then its controlling tag value is determined by the
7956 target;
7957
7958 19
7959 * Otherwise, the controlling tag value is statically
7960 determined to be the tag of type T.
7961
7962 20/3
7963 For the execution of a call on a dispatching operation, the action
7964 performed is determined by the properties of the corresponding
7965 dispatching operation of the specific type identified by the controlling
7966 tag value:
7967
7968 20.1/3
7969 * if the corresponding operation is explicitly declared for this
7970 type, even if the declaration occurs in a private part, then the
7971 action comprises an invocation of the explicit body for the
7972 operation;
7973
7974 20.2/3
7975 * if the corresponding operation is implicitly declared for this type
7976 and is implemented by an entry or protected subprogram (see *note
7977 9.1:: and *note 9.4::), then the action comprises a call on this
7978 entry or protected subprogram, with the target object being given
7979 by the first actual parameter of the call, and the actual
7980 parameters of the entry or protected subprogram being given by the
7981 remaining actual parameters of the call, if any;
7982
7983 20.3/3
7984 * if the corresponding operation is a predefined operator then the
7985 action comprises an invocation of that operator;
7986
7987 20.4/3
7988 * otherwise, the action is the same as the action for the
7989 corresponding operation of the parent type or progenitor type from
7990 which the operation was inherited except that additional invariant
7991 checks (see *note 7.3.2::) and class-wide postcondition checks (see
7992 *note 6.1.1::) may apply. If there is more than one such
7993 corresponding operation, the action is that for the operation that
7994 is not a null procedure, if any; otherwise, the action is that of
7995 an arbitrary one of the operations.
7996
7997 NOTES
7998
7999 21
8000 75 The body to be executed for a call on a dispatching operation
8001 is determined by the tag; it does not matter whether that tag is
8002 determined statically or dynamically, and it does not matter
8003 whether the subprogram's declaration is visible at the place of the
8004 call.
8005
8006 22/2
8007 76 This subclause covers calls on dispatching subprograms of a
8008 tagged type. Rules for tagged type membership tests are described
8009 in *note 4.5.2::. Controlling tag determination for an
8010 assignment_statement is described in *note 5.2::.
8011
8012 23
8013 77 A dispatching call can dispatch to a body whose declaration is
8014 not visible at the place of the call.
8015
8016 24
8017 78 A call through an access-to-subprogram value is never a
8018 dispatching call, even if the access value designates a dispatching
8019 operation. Similarly a call whose prefix denotes a
8020 subprogram_renaming_declaration cannot be a dispatching call unless
8021 the renaming itself is the declaration of a primitive subprogram.
8022
8023 \1f
8024 File: arm2012.info, Node: 3.9.3, Next: 3.9.4, Prev: 3.9.2, Up: 3.9
8025
8026 3.9.3 Abstract Types and Subprograms
8027 ------------------------------------
8028
8029 1/2
8030 An abstract type is a tagged type intended for use as an ancestor of
8031 other types, but which is not allowed to have objects of its own. An
8032 abstract subprogram is a subprogram that has no body, but is intended to
8033 be overridden at some point when inherited. Because objects of an
8034 abstract type cannot be created, a dispatching call to an abstract
8035 subprogram always dispatches to some overriding body.
8036
8037 _Syntax_
8038
8039 1.1/3
8040 abstract_subprogram_declaration ::=
8041 [overriding_indicator]
8042 subprogram_specification is abstract
8043 [aspect_specification];
8044
8045 _Static Semantics_
8046
8047 1.2/2
8048 Interface types (see *note 3.9.4::) are abstract types. In addition, a
8049 tagged type that has the reserved word abstract in its declaration is an
8050 abstract type. The class-wide type (see *note 3.4.1::) rooted at an
8051 abstract type is not itself an abstract type.
8052
8053 _Legality Rules_
8054
8055 2/2
8056 Only a tagged type shall have the reserved word abstract in its
8057 declaration.
8058
8059 3/2
8060 A subprogram declared by an abstract_subprogram_declaration (*note
8061 3.9.3: S0076.) or a formal_abstract_subprogram_declaration (*note 12.6:
8062 S0297.) (see *note 12.6::) is an abstract subprogram. If it is a
8063 primitive subprogram of a tagged type, then the tagged type shall be
8064 abstract.
8065
8066 4/3
8067 If a type has an implicitly declared primitive subprogram that is
8068 inherited or is a predefined operator, and the corresponding primitive
8069 subprogram of the parent or ancestor type is abstract or is a function
8070 with a controlling access result, or if a type other than a nonabstract
8071 null extension inherits a function with a controlling result, then:
8072
8073 5/2
8074 * If the type is abstract or untagged, the implicitly declared
8075 subprogram is abstract.
8076
8077 6/2
8078 * Otherwise, the subprogram shall be overridden with a nonabstract
8079 subprogram or, in the case of a private extension inheriting a
8080 function with a controlling result, have a full type that is a null
8081 extension; for a type declared in the visible part of a package,
8082 the overriding may be either in the visible or the private part.
8083 Such a subprogram is said to require overriding. However, if the
8084 type is a generic formal type, the subprogram need not be
8085 overridden for the formal type itself; a nonabstract version will
8086 necessarily be provided by the actual type.
8087
8088 7
8089 A call on an abstract subprogram shall be a dispatching call;
8090 nondispatching calls to an abstract subprogram are not allowed.
8091
8092 8/3
8093 The type of an aggregate, or of an object created by an
8094 object_declaration or an allocator, or a generic formal object of mode
8095 in, shall not be abstract. The type of the target of an assignment
8096 operation (see *note 5.2::) shall not be abstract. The type of a
8097 component shall not be abstract. If the result type of a function is
8098 abstract, then the function shall be abstract. If a function has an
8099 access result type designating an abstract type, then the function shall
8100 be abstract. The type denoted by a return_subtype_indication (see *note
8101 6.5::) shall not be abstract. A generic function shall not have an
8102 abstract result type or an access result type designating an abstract
8103 type.
8104
8105 9
8106 If a partial view is not abstract, the corresponding full view shall not
8107 be abstract. If a generic formal type is abstract, then for each
8108 primitive subprogram of the formal that is not abstract, the
8109 corresponding primitive subprogram of the actual shall not be abstract.
8110
8111 10/3
8112 For an abstract type declared in a visible part, an abstract primitive
8113 subprogram shall not be declared in the private part, unless it is
8114 overriding an abstract subprogram implicitly declared in the visible
8115 part. For a tagged type declared in a visible part, a primitive
8116 function with a controlling result or a controlling access result shall
8117 not be declared in the private part, unless it is overriding a function
8118 implicitly declared in the visible part.
8119
8120 11/2
8121 A generic actual subprogram shall not be an abstract subprogram unless
8122 the generic formal subprogram is declared by a
8123 formal_abstract_subprogram_declaration. The prefix of an
8124 attribute_reference for the Access, Unchecked_Access, or Address
8125 attributes shall not denote an abstract subprogram.
8126
8127 _Dynamic Semantics_
8128
8129 11.1/2
8130 The elaboration of an abstract_subprogram_declaration has no effect.
8131
8132 NOTES
8133
8134 12
8135 79 Abstractness is not inherited; to declare an abstract type, the
8136 reserved word abstract has to be used in the declaration of the
8137 type extension.
8138
8139 13
8140 80 A class-wide type is never abstract. Even if a class is rooted
8141 at an abstract type, the class-wide type for the class is not
8142 abstract, and an object of the class-wide type can be created; the
8143 tag of such an object will identify some nonabstract type in the
8144 class.
8145
8146 _Examples_
8147
8148 14
8149 Example of an abstract type representing a set of natural numbers:
8150
8151 15
8152 package Sets is
8153 subtype Element_Type is Natural;
8154 type Set is abstract tagged null record;
8155 function Empty return Set is abstract;
8156 function Union(Left, Right : Set) return Set is abstract;
8157 function Intersection(Left, Right : Set) return Set is abstract;
8158 function Unit_Set(Element : Element_Type) return Set is abstract;
8159 procedure Take(Element : out Element_Type;
8160 From : in out Set) is abstract;
8161 end Sets;
8162
8163 NOTES
8164
8165 16
8166 81 Notes on the example: Given the above abstract type, one could
8167 then derive various (nonabstract) extensions of the type,
8168 representing alternative implementations of a set. One might use a
8169 bit vector, but impose an upper bound on the largest element
8170 representable, while another might use a hash table, trading off
8171 space for flexibility.
8172
8173 \1f
8174 File: arm2012.info, Node: 3.9.4, Prev: 3.9.3, Up: 3.9
8175
8176 3.9.4 Interface Types
8177 ---------------------
8178
8179 1/2
8180 An interface type is an abstract tagged type that provides a restricted
8181 form of multiple inheritance. A tagged type, task type, or protected
8182 type may have one or more interface types as ancestors.
8183
8184 _Syntax_
8185
8186 2/2
8187 interface_type_definition ::=
8188 [limited | task | protected | synchronized] interface [and
8189 interface_list]
8190
8191 3/2
8192 interface_list ::= interface_subtype_mark {and interface_
8193 subtype_mark}
8194
8195 _Static Semantics_
8196
8197 4/2
8198 An interface type (also called an interface) is a specific abstract
8199 tagged type that is defined by an interface_type_definition.
8200
8201 5/2
8202 An interface with the reserved word limited, task, protected, or
8203 synchronized in its definition is termed, respectively, a limited
8204 interface, a task interface, a protected interface, or a synchronized
8205 interface. In addition, all task and protected interfaces are
8206 synchronized interfaces, and all synchronized interfaces are limited
8207 interfaces.
8208
8209 6/2
8210 A task or protected type derived from an interface is a tagged type.
8211 Such a tagged type is called a synchronized tagged type, as are
8212 synchronized interfaces and private extensions whose declaration
8213 includes the reserved word synchronized.
8214
8215 7/2
8216 A task interface is an abstract task type. A protected interface is an
8217 abstract protected type.
8218
8219 8/2
8220 An interface type has no components.
8221
8222 9/2
8223 An interface_subtype_mark in an interface_list names a progenitor
8224 subtype; its type is the progenitor type. An interface type inherits
8225 user-defined primitive subprograms from each progenitor type in the same
8226 way that a derived type inherits user-defined primitive subprograms from
8227 its progenitor types (see *note 3.4::).
8228
8229 _Legality Rules_
8230
8231 10/2
8232 All user-defined primitive subprograms of an interface type shall be
8233 abstract subprograms or null procedures.
8234
8235 11/2
8236 The type of a subtype named in an interface_list shall be an interface
8237 type.
8238
8239 12/2
8240 A type derived from a nonlimited interface shall be nonlimited.
8241
8242 13/2
8243 An interface derived from a task interface shall include the reserved
8244 word task in its definition; any other type derived from a task
8245 interface shall be a private extension or a task type declared by a task
8246 declaration (see *note 9.1::).
8247
8248 14/2
8249 An interface derived from a protected interface shall include the
8250 reserved word protected in its definition; any other type derived from a
8251 protected interface shall be a private extension or a protected type
8252 declared by a protected declaration (see *note 9.4::).
8253
8254 15/2
8255 An interface derived from a synchronized interface shall include one of
8256 the reserved words task, protected, or synchronized in its definition;
8257 any other type derived from a synchronized interface shall be a private
8258 extension, a task type declared by a task declaration, or a protected
8259 type declared by a protected declaration.
8260
8261 16/2
8262 No type shall be derived from both a task interface and a protected
8263 interface.
8264
8265 17/2
8266 In addition to the places where Legality Rules normally apply (see *note
8267 12.3::), these rules apply also in the private part of an instance of a
8268 generic unit.
8269
8270 _Dynamic Semantics_
8271
8272 18/3
8273 The elaboration of an interface_type_definition creates the interface
8274 type and its first subtype.
8275
8276 NOTES
8277
8278 19/2
8279 82 Nonlimited interface types have predefined nonabstract equality
8280 operators. These may be overridden with user-defined abstract
8281 equality operators. Such operators will then require an explicit
8282 overriding for any nonabstract descendant of the interface.
8283
8284 _Examples_
8285
8286 20/2
8287 Example of a limited interface and a synchronized interface extending
8288 it:
8289
8290 21/2
8291 type Queue is limited interface;
8292 procedure Append(Q : in out Queue; Person : in Person_Name) is abstract;
8293 procedure Remove_First(Q : in out Queue;
8294 Person : out Person_Name) is abstract;
8295 function Cur_Count(Q : in Queue) return Natural is abstract;
8296 function Max_Count(Q : in Queue) return Natural is abstract;
8297 -- See *note 3.10.1:: for Person_Name.
8298
8299 22/3
8300 Queue_Error : exception;
8301 -- Append raises Queue_Error if Cur_Count(Q) = Max_Count(Q)
8302 -- Remove_First raises Queue_Error if Cur_Count(Q) = 0
8303
8304 23/2
8305 type Synchronized_Queue is synchronized interface and Queue; -- see *note 9.11::
8306 procedure Append_Wait(Q : in out Synchronized_Queue;
8307 Person : in Person_Name) is abstract;
8308 procedure Remove_First_Wait(Q : in out Synchronized_Queue;
8309 Person : out Person_Name) is abstract;
8310
8311 24/2
8312 ...
8313
8314 25/2
8315 procedure Transfer(From : in out Queue'Class;
8316 To : in out Queue'Class;
8317 Number : in Natural := 1) is
8318 Person : Person_Name;
8319 begin
8320 for I in 1..Number loop
8321 Remove_First(From, Person);
8322 Append(To, Person);
8323 end loop;
8324 end Transfer;
8325
8326 26/2
8327 This defines a Queue interface defining a queue of people. (A similar
8328 design could be created to define any kind of queue simply by replacing
8329 Person_Name by an appropriate type.) The Queue interface has four
8330 dispatching operations, Append, Remove_First, Cur_Count, and Max_Count.
8331 The body of a class-wide operation, Transfer is also shown. Every
8332 nonabstract extension of Queue must provide implementations for at least
8333 its four dispatching operations, as they are abstract. Any object of a
8334 type derived from Queue may be passed to Transfer as either the From or
8335 the To operand. The two operands need not be of the same type in any
8336 given call.
8337
8338 27/2
8339 The Synchronized_Queue interface inherits the four dispatching
8340 operations from Queue and adds two additional dispatching operations,
8341 which wait if necessary rather than raising the Queue_Error exception.
8342 This synchronized interface may only be implemented by a task or
8343 protected type, and as such ensures safe concurrent access.
8344
8345 28/2
8346 Example use of the interface:
8347
8348 29/3
8349 type Fast_Food_Queue is new Queue with record ...;
8350 procedure Append(Q : in out Fast_Food_Queue; Person : in Person_Name);
8351 procedure Remove_First(Q : in out Fast_Food_Queue; Person : out Person_Name);
8352 function Cur_Count(Q : in Fast_Food_Queue) return Natural;
8353 function Max_Count(Q : in Fast_Food_Queue) return Natural;
8354
8355 30/2
8356 ...
8357
8358 31/2
8359 Cashier, Counter : Fast_Food_Queue;
8360
8361 32/2
8362 ...
8363 -- Add George (see *note 3.10.1::) to the cashier's queue:
8364 Append (Cashier, George);
8365 -- After payment, move George to the sandwich counter queue:
8366 Transfer (Cashier, Counter);
8367 ...
8368
8369 33/2
8370 An interface such as Queue can be used directly as the parent of a new
8371 type (as shown here), or can be used as a progenitor when a type is
8372 derived. In either case, the primitive operations of the interface are
8373 inherited. For Queue, the implementation of the four inherited routines
8374 must be provided. Inside the call of Transfer, calls will dispatch to
8375 the implementations of Append and Remove_First for type Fast_Food_Queue.
8376
8377 34/2
8378 Example of a task interface:
8379
8380 35/2
8381 type Serial_Device is task interface; -- see *note 9.1::
8382 procedure Read (Dev : in Serial_Device; C : out Character) is abstract;
8383 procedure Write(Dev : in Serial_Device; C : in Character) is abstract;
8384
8385 36/2
8386 The Serial_Device interface has two dispatching operations which are
8387 intended to be implemented by task entries (see 9.1).
8388
8389 \1f
8390 File: arm2012.info, Node: 3.10, Next: 3.11, Prev: 3.9, Up: 3
8391
8392 3.10 Access Types
8393 =================
8394
8395 1
8396 A value of an access type (an access value) provides indirect access to
8397 the object or subprogram it designates. Depending on its type, an
8398 access value can designate either subprograms, objects created by
8399 allocators (see *note 4.8::), or more generally aliased objects of an
8400 appropriate type.
8401
8402 _Syntax_
8403
8404 2/2
8405 access_type_definition ::=
8406 [null_exclusion] access_to_object_definition
8407 | [null_exclusion] access_to_subprogram_definition
8408
8409 3
8410 access_to_object_definition ::=
8411 access [general_access_modifier] subtype_indication
8412
8413 4
8414 general_access_modifier ::= all | constant
8415
8416 5
8417 access_to_subprogram_definition ::=
8418 access [protected] procedure parameter_profile
8419 | access [protected] function parameter_and_result_profile
8420
8421 5.1/2
8422 null_exclusion ::= not null
8423
8424 6/2
8425 access_definition ::=
8426 [null_exclusion] access [constant] subtype_mark
8427 | [null_exclusion] access [protected] procedure parameter_profile
8428 | [null_exclusion] access [protected] function
8429 parameter_and_result_profile
8430
8431 _Static Semantics_
8432
8433 7/1
8434 There are two kinds of access types, access-to-object types, whose
8435 values designate objects, and access-to-subprogram types, whose values
8436 designate subprograms. Associated with an access-to-object type is a
8437 storage pool; several access types may share the same storage pool. All
8438 descendants of an access type share the same storage pool. A storage
8439 pool is an area of storage used to hold dynamically allocated objects
8440 (called pool elements) created by allocators; storage pools are
8441 described further in *note 13.11::, "*note 13.11:: Storage Management".
8442
8443 8
8444 Access-to-object types are further subdivided into pool-specific access
8445 types, whose values can designate only the elements of their associated
8446 storage pool, and general access types, whose values can designate the
8447 elements of any storage pool, as well as aliased objects created by
8448 declarations rather than allocators, and aliased subcomponents of other
8449 objects.
8450
8451 9/3
8452 A view of an object is defined to be aliased if it is defined by an
8453 object_declaration (*note 3.3.1: S0032.), component_definition (*note
8454 3.6: S0056.), parameter_specification (*note 6.1: S0175.), or
8455 extended_return_object_declaration with the reserved word aliased, or by
8456 a renaming of an aliased view. In addition, the dereference of an
8457 access-to-object value denotes an aliased view, as does a view
8458 conversion (see *note 4.6::) of an aliased view. The current instance
8459 of an immutably limited type (see *note 7.5::) is defined to be aliased.
8460 Finally, a formal parameter or generic formal object of a tagged type is
8461 defined to be aliased. Aliased views are the ones that can be
8462 designated by an access value.
8463
8464 10
8465 An access_to_object_definition defines an access-to-object type and its
8466 first subtype; the subtype_indication (*note 3.2.2: S0027.) defines the
8467 designated subtype of the access type. If a general_access_modifier
8468 (*note 3.10: S0081.) appears, then the access type is a general access
8469 type. If the modifier is the reserved word constant, then the type is
8470 an access-to-constant type; a designated object cannot be updated
8471 through a value of such a type. If the modifier is the reserved word
8472 all, then the type is an access-to-variable type; a designated object
8473 can be both read and updated through a value of such a type. If no
8474 general_access_modifier (*note 3.10: S0081.) appears in the
8475 access_to_object_definition (*note 3.10: S0080.), the access type is a
8476 pool-specific access-to-variable type.
8477
8478 11
8479 An access_to_subprogram_definition defines an access-to-subprogram type
8480 and its first subtype; the parameter_profile or
8481 parameter_and_result_profile defines the designated profile of the
8482 access type. There is a calling convention associated with the
8483 designated profile; only subprograms with this calling convention can be
8484 designated by values of the access type. By default, the calling
8485 convention is "protected" if the reserved word protected appears, and
8486 "Ada" otherwise. See *note Annex B:: for how to override this default.
8487
8488 12/3
8489 An access_definition defines an anonymous general access type or an
8490 anonymous access-to-subprogram type. For a general access type, the
8491 subtype_mark denotes its designated subtype; if the
8492 general_access_modifier (*note 3.10: S0081.) constant appears, the type
8493 is an access-to-constant type; otherwise, it is an access-to-variable
8494 type. For an access-to-subprogram type, the parameter_profile (*note
8495 6.1: S0172.) or parameter_and_result_profile (*note 6.1: S0173.) denotes
8496 its designated profile.
8497
8498 13/2
8499 For each access type, there is a null access value designating no entity
8500 at all, which can be obtained by (implicitly) converting the literal
8501 null to the access type. The null value of an access type is the
8502 default initial value of the type. Nonnull values of an
8503 access-to-object type are obtained by evaluating an allocator, which
8504 returns an access value designating a newly created object (see *note
8505 3.10.2::), or in the case of a general access-to-object type, evaluating
8506 an attribute_reference for the Access or Unchecked_Access attribute of
8507 an aliased view of an object. Nonnull values of an access-to-subprogram
8508 type are obtained by evaluating an attribute_reference for the Access
8509 attribute of a nonintrinsic subprogram.
8510
8511 13.1/2
8512 A null_exclusion in a construct specifies that the null value does not
8513 belong to the access subtype defined by the construct, that is, the
8514 access subtype excludes null. In addition, the anonymous access subtype
8515 defined by the access_definition for a controlling access parameter (see
8516 *note 3.9.2::) excludes null. Finally, for a subtype_indication without
8517 a null_exclusion, the subtype denoted by the subtype_indication excludes
8518 null if and only if the subtype denoted by the subtype_mark in the
8519 subtype_indication excludes null.
8520
8521 14/3
8522 All subtypes of an access-to-subprogram type are constrained. The first
8523 subtype of a type defined by an access_definition or an
8524 access_to_object_definition is unconstrained if the designated subtype
8525 is an unconstrained array or discriminated subtype; otherwise, it is
8526 constrained.
8527
8528 _Legality Rules_
8529
8530 14.1/2
8531 If a subtype_indication (*note 3.2.2: S0027.),
8532 discriminant_specification (*note 3.7: S0062.), parameter_specification
8533 (*note 6.1: S0175.), parameter_and_result_profile (*note 6.1: S0173.),
8534 object_renaming_declaration (*note 8.5.1: S0200.), or
8535 formal_object_declaration (*note 12.4: S0279.) has a null_exclusion
8536 (*note 3.10: S0083.), the subtype_mark (*note 3.2.2: S0028.) in that
8537 construct shall denote an access subtype that does not exclude null.
8538
8539 _Dynamic Semantics_
8540
8541 15/2
8542 A composite_constraint is compatible with an unconstrained access
8543 subtype if it is compatible with the designated subtype. A
8544 null_exclusion is compatible with any access subtype that does not
8545 exclude null. An access value satisfies a composite_constraint of an
8546 access subtype if it equals the null value of its type or if it
8547 designates an object whose value satisfies the constraint. An access
8548 value satisfies an exclusion of the null value if it does not equal the
8549 null value of its type.
8550
8551 16
8552 The elaboration of an access_type_definition creates the access type and
8553 its first subtype. For an access-to-object type, this elaboration
8554 includes the elaboration of the subtype_indication, which creates the
8555 designated subtype.
8556
8557 17/2
8558 The elaboration of an access_definition creates an anonymous access
8559 type.
8560
8561 NOTES
8562
8563 18
8564 83 Access values are called "pointers" or "references" in some
8565 other languages.
8566
8567 19
8568 84 Each access-to-object type has an associated storage pool;
8569 several access types can share the same pool. An object can be
8570 created in the storage pool of an access type by an allocator (see
8571 *note 4.8::) for the access type. A storage pool (roughly)
8572 corresponds to what some other languages call a "heap." See *note
8573 13.11:: for a discussion of pools.
8574
8575 20
8576 85 Only index_constraints and discriminant_constraints can be
8577 applied to access types (see *note 3.6.1:: and *note 3.7.1::).
8578
8579 _Examples_
8580
8581 21
8582 Examples of access-to-object types:
8583
8584 22/2
8585 type Peripheral_Ref is not null access Peripheral; -- see *note 3.8.1::
8586 type Binop_Ptr is access all Binary_Operation'Class;
8587 -- general access-to-class-wide, see *note 3.9.1::
8588
8589 23
8590 Example of an access subtype:
8591
8592 24
8593 subtype Drum_Ref is Peripheral_Ref(Drum); -- see *note 3.8.1::
8594
8595 25
8596 Example of an access-to-subprogram type:
8597
8598 26
8599 type Message_Procedure is access procedure (M : in String := "Error!");
8600 procedure Default_Message_Procedure(M : in String);
8601 Give_Message : Message_Procedure := Default_Message_Procedure'Access;
8602 ...
8603 procedure Other_Procedure(M : in String);
8604 ...
8605 Give_Message := Other_Procedure'Access;
8606 ...
8607 Give_Message("File not found."); -- call with parameter (.all is optional)
8608 Give_Message.all; -- call with no parameters
8609
8610 * Menu:
8611
8612 * 3.10.1 :: Incomplete Type Declarations
8613 * 3.10.2 :: Operations of Access Types
8614
8615 \1f
8616 File: arm2012.info, Node: 3.10.1, Next: 3.10.2, Up: 3.10
8617
8618 3.10.1 Incomplete Type Declarations
8619 -----------------------------------
8620
8621 1
8622 There are no particular limitations on the designated type of an access
8623 type. In particular, the type of a component of the designated type can
8624 be another access type, or even the same access type. This permits
8625 mutually dependent and recursive access types. An
8626 incomplete_type_declaration can be used to introduce a type to be used
8627 as a designated type, while deferring its full definition to a
8628 subsequent full_type_declaration.
8629
8630 _Syntax_
8631
8632 2/2
8633 incomplete_type_declaration ::= type defining_identifier [
8634 discriminant_part] [is tagged];
8635
8636 _Static Semantics_
8637
8638 2.1/2
8639 An incomplete_type_declaration declares an incomplete view of a type and
8640 its first subtype; the first subtype is unconstrained if a
8641 discriminant_part appears. If the incomplete_type_declaration (*note
8642 3.10.1: S0085.) includes the reserved word tagged, it declares a tagged
8643 incomplete view. An incomplete view of a type is a limited view of the
8644 type (see *note 7.5::).
8645
8646 2.2/2
8647 Given an access type A whose designated type T is an incomplete view, a
8648 dereference of a value of type A also has this incomplete view except
8649 when:
8650
8651 2.3/2
8652 * it occurs within the immediate scope of the completion of T, or
8653
8654 2.4/3
8655 * it occurs within the scope of a nonlimited_with_clause that
8656 mentions a library package in whose visible part the completion of
8657 T is declared, or
8658
8659 2.5/3
8660 * it occurs within the scope of the completion of T and T is an
8661 incomplete view declared by an incomplete_type_declaration.
8662
8663 2.6/3
8664 In these cases, the dereference has the view of T visible at the point
8665 of the dereference.
8666
8667 2.7/3
8668 Similarly, if a subtype_mark denotes a subtype_declaration defining a
8669 subtype of an incomplete view T, the subtype_mark denotes an incomplete
8670 view except under the same three circumstances given above, in which
8671 case it denotes the view of T visible at the point of the subtype_mark.
8672
8673 _Legality Rules_
8674
8675 3/3
8676 An incomplete_type_declaration (*note 3.10.1: S0085.) requires a
8677 completion, which shall be a type_declaration (*note 3.2.1: S0023.)
8678 other than an incomplete_type_declaration (*note 3.10.1: S0085.). If
8679 the incomplete_type_declaration (*note 3.10.1: S0085.) occurs
8680 immediately within either the visible part of a package_specification
8681 (*note 7.1: S0191.) or a declarative_part (*note 3.11: S0086.), then the
8682 type_declaration (*note 3.2.1: S0023.) shall occur later and immediately
8683 within this visible part or declarative_part (*note 3.11: S0086.). If
8684 the incomplete_type_declaration (*note 3.10.1: S0085.) occurs
8685 immediately within the private part of a given package_specification
8686 (*note 7.1: S0191.), then the type_declaration (*note 3.2.1: S0023.)
8687 shall occur later and immediately within either the private part itself,
8688 or the declarative_part (*note 3.11: S0086.) of the corresponding
8689 package_body (*note 7.2: S0192.).
8690
8691 4/3
8692 If an incomplete_type_declaration (*note 3.10.1: S0085.) includes the
8693 reserved word tagged, then a type_declaration (*note 3.2.1: S0023.) that
8694 completes it shall declare a tagged type. If an
8695 incomplete_type_declaration (*note 3.10.1: S0085.) has a
8696 known_discriminant_part (*note 3.7: S0061.), then a type_declaration
8697 (*note 3.2.1: S0023.) that completes it shall have a fully conforming
8698 (explicit) known_discriminant_part (*note 3.7: S0061.) (see *note
8699 6.3.1::). If an incomplete_type_declaration (*note 3.10.1: S0085.) has
8700 no discriminant_part (or an unknown_discriminant_part (*note 3.7:
8701 S0060.)), then a corresponding type_declaration (*note 3.2.1: S0023.) is
8702 nevertheless allowed to have discriminants, either explicitly, or
8703 inherited via derivation.
8704
8705 5/2
8706 A name that denotes an incomplete view of a type may be used as follows:
8707
8708 6/3
8709 * as the subtype_mark in the subtype_indication of an
8710 access_to_object_definition (*note 3.10: S0080.); the only form of
8711 constraint allowed in this subtype_indication is a
8712 discriminant_constraint (a null_exclusion is not allowed);
8713
8714 7/2
8715 * as the subtype_mark in the subtype_indication of a
8716 subtype_declaration; the subtype_indication (*note 3.2.2: S0027.)
8717 shall not have a null_exclusion (*note 3.10: S0083.) or a
8718 constraint;
8719
8720 8/3
8721 * as the subtype_mark in an access_definition for an access-to-object
8722 type;
8723
8724 8.1/3
8725 * as the subtype_mark defining the subtype of a parameter or result
8726 in a profile occurring within a basic_declaration;
8727
8728 8.2/3
8729 * as a generic actual parameter whose corresponding generic formal
8730 parameter is a formal incomplete type (see *note 12.5.1::).
8731
8732 8.3/2
8733 If such a name denotes a tagged incomplete view, it may also be used:
8734
8735 8.4/3
8736 * as the subtype_mark defining the subtype of a parameter in the
8737 profile for a subprogram_body, entry_body, or accept_statement;
8738
8739 9/2
8740 * as the prefix of an attribute_reference whose attribute_designator
8741 (*note 4.1.4: S0101.) is Class; such an attribute_reference (*note
8742 4.1.4: S0100.) is restricted to the uses allowed here; it denotes a
8743 tagged incomplete view.
8744
8745 9.1/3
8746 This paragraph was deleted.
8747
8748 9.2/3
8749 * This paragraph was deleted.
8750
8751 9.3/2
8752 If any of the above uses occurs as part of the declaration of a
8753 primitive subprogram of the incomplete view, and the declaration occurs
8754 immediately within the private part of a package, then the completion of
8755 the incomplete view shall also occur immediately within the private
8756 part; it shall not be deferred to the package body.
8757
8758 9.4/2
8759 No other uses of a name that denotes an incomplete view of a type are
8760 allowed.
8761
8762 10/3
8763 A prefix that denotes an object shall not be of an incomplete view. An
8764 actual parameter in a call shall not be of an untagged incomplete view.
8765 The result object of a function call shall not be of an incomplete view.
8766 A prefix shall not denote a subprogram having a formal parameter of an
8767 untagged incomplete view, nor a return type that is an incomplete view.
8768
8769 Paragraph 11 was deleted.
8770
8771 _Dynamic Semantics_
8772
8773 12
8774 The elaboration of an incomplete_type_declaration has no effect.
8775
8776 NOTES
8777
8778 13
8779 86 Within a declarative_part, an incomplete_type_declaration and a
8780 corresponding full_type_declaration cannot be separated by an
8781 intervening body. This is because a type has to be completely
8782 defined before it is frozen, and a body freezes all types declared
8783 prior to it in the same declarative_part (see *note 13.14::).
8784
8785 13.1/3
8786 87 A name that denotes an object of an incomplete view is defined
8787 to be of a limited type. Hence, the target of an assignment
8788 statement cannot be of an incomplete view.
8789
8790 _Examples_
8791
8792 14
8793 Example of a recursive type:
8794
8795 15
8796 type Cell; -- incomplete type declaration
8797 type Link is access Cell;
8798
8799 16
8800 type Cell is
8801 record
8802 Value : Integer;
8803 Succ : Link;
8804 Pred : Link;
8805 end record;
8806
8807 17
8808 Head : Link := new Cell'(0, null, null);
8809 Next : Link := Head.Succ;
8810
8811 18
8812 Examples of mutually dependent access types:
8813
8814 19/2
8815 type Person(<>); -- incomplete type declaration
8816 type Car is tagged; -- incomplete type declaration
8817
8818 20/2
8819 type Person_Name is access Person;
8820 type Car_Name is access all Car'Class;
8821
8822 21/2
8823 type Car is tagged
8824 record
8825 Number : Integer;
8826 Owner : Person_Name;
8827 end record;
8828
8829 22
8830 type Person(Sex : Gender) is
8831 record
8832 Name : String(1 .. 20);
8833 Birth : Date;
8834 Age : Integer range 0 .. 130;
8835 Vehicle : Car_Name;
8836 case Sex is
8837 when M => Wife : Person_Name(Sex => F);
8838 when F => Husband : Person_Name(Sex => M);
8839 end case;
8840 end record;
8841
8842 23
8843 My_Car, Your_Car, Next_Car : Car_Name := new Car; -- see *note 4.8::
8844 George : Person_Name := new Person(M);
8845 ...
8846 George.Vehicle := Your_Car;
8847
8848 \1f
8849 File: arm2012.info, Node: 3.10.2, Prev: 3.10.1, Up: 3.10
8850
8851 3.10.2 Operations of Access Types
8852 ---------------------------------
8853
8854 1/3
8855 The attribute Access is used to create access values designating aliased
8856 objects and nonintrinsic subprograms. The "accessibility" rules prevent
8857 dangling references (in the absence of uses of certain unchecked
8858 features -- see Clause *note 13::).
8859
8860 _Name Resolution Rules_
8861
8862 2/2
8863 For an attribute_reference with attribute_designator Access (or
8864 Unchecked_Access -- see *note 13.10::), the expected type shall be a
8865 single access type A such that:
8866
8867 2.1/2
8868 * A is an access-to-object type with designated type D and the type
8869 of the prefix is D'Class or is covered by D, or
8870
8871 2.2/2
8872 * A is an access-to-subprogram type whose designated profile is type
8873 conformant with that of the prefix.
8874
8875 2.3/2
8876 The prefix of such an attribute_reference is never interpreted as an
8877 implicit_dereference or a parameterless function_call (see *note
8878 4.1.4::). The designated type or profile of the expected type of the
8879 attribute_reference is the expected type or profile for the prefix.
8880
8881 _Static Semantics_
8882
8883 3/2
8884 The accessibility rules, which prevent dangling references, are written
8885 in terms of accessibility levels, which reflect the run-time nesting of
8886 masters. As explained in *note 7.6.1::, a master is the execution of a
8887 certain construct, such as a subprogram_body. An accessibility level is
8888 deeper than another if it is more deeply nested at run time. For
8889 example, an object declared local to a called subprogram has a deeper
8890 accessibility level than an object declared local to the calling
8891 subprogram. The accessibility rules for access types require that the
8892 accessibility level of an object designated by an access value be no
8893 deeper than that of the access type. This ensures that the object will
8894 live at least as long as the access type, which in turn ensures that the
8895 access value cannot later designate an object that no longer exists.
8896 The Unchecked_Access attribute may be used to circumvent the
8897 accessibility rules.
8898
8899 4
8900 A given accessibility level is said to be statically deeper than another
8901 if the given level is known at compile time (as defined below) to be
8902 deeper than the other for all possible executions. In most cases,
8903 accessibility is enforced at compile time by Legality Rules. Run-time
8904 accessibility checks are also used, since the Legality Rules do not
8905 cover certain cases involving access parameters and generic packages.
8906
8907 5
8908 Each master, and each entity and view created by it, has an
8909 accessibility level:
8910
8911 6
8912 * The accessibility level of a given master is deeper than that of
8913 each dynamically enclosing master, and deeper than that of each
8914 master upon which the task executing the given master directly
8915 depends (see *note 9.3::).
8916
8917 7/3
8918 * An entity or view defined by a declaration and created as part of
8919 its elaboration has the same accessibility level as the innermost
8920 master of the declaration except in the cases of renaming and
8921 derived access types described below. Other than for an explicitly
8922 aliased parameter, a formal parameter of a callable entity has the
8923 same accessibility level as the master representing the invocation
8924 of the entity.
8925
8926 8
8927 * The accessibility level of a view of an object or subprogram
8928 defined by a renaming_declaration is the same as that of the
8929 renamed view.
8930
8931 9/2
8932 * The accessibility level of a view conversion, qualified_expression,
8933 or parenthesized expression, is the same as that of the operand.
8934
8935 9.1/3
8936 * The accessibility level of a conditional_expression is the
8937 accessibility level of the evaluated dependent_expression.
8938
8939 10/3
8940 * The accessibility level of an aggregate that is used (in its
8941 entirety) to directly initialize part of an object is that of the
8942 object being initialized. In other contexts, the accessibility
8943 level of an aggregate is that of the innermost master that
8944 evaluates the aggregate.
8945
8946 10.1/3
8947 * The accessibility level of the result of a function call is that of
8948 the master of the function call, which is determined by the point
8949 of call as follows:
8950
8951 10.2/3
8952 * If the result is used (in its entirety) to directly
8953 initialize part of an object, the master is that of the
8954 object being initialized. In the case where the
8955 initialized object is a coextension (see below) that
8956 becomes a coextension of another object, the master is
8957 that of the eventual object to which the coextension will
8958 be transferred.
8959
8960 10.3/3
8961 * If the result is of an anonymous access type and is the
8962 operand of an explicit conversion, the master is that of
8963 the target type of the conversion;
8964
8965 10.4/3
8966 * If the result is of an anonymous access type and defines
8967 an access discriminant, the master is the same as that
8968 for an object created by an anonymous allocator that
8969 defines an access discriminant (even if the access result
8970 is of an access-to-subprogram type).
8971
8972 10.5/3
8973 * If the call itself defines the result of a function to
8974 which one of the above rules applies, these rules are
8975 applied recursively;
8976
8977 10.6/3
8978 * In other cases, the master of the call is that of the
8979 innermost master that evaluates the function call.
8980
8981 10.7/3
8982 In the case of a call to a function whose result type is an
8983 anonymous access type, the accessibility level of the type of the
8984 result of the function call is also determined by the point of call
8985 as described above.
8986
8987 10.8/3
8988 * Within a return statement, the accessibility level of the return
8989 object is that of the execution of the return statement. If the
8990 return statement completes normally by returning from the function,
8991 then prior to leaving the function, the accessibility level of the
8992 return object changes to be a level determined by the point of
8993 call, as does the level of any coextensions (see below) of the
8994 return object.
8995
8996 11
8997 * The accessibility level of a derived access type is the same as
8998 that of its ultimate ancestor.
8999
9000 11.1/2
9001 * The accessibility level of the anonymous access type defined by an
9002 access_definition of an object_renaming_declaration is the same as
9003 that of the renamed view.
9004
9005 12/2
9006 * The accessibility level of the anonymous access type of an access
9007 discriminant in the subtype_indication or qualified_expression of
9008 an allocator, or in the expression or return_subtype_indication
9009 (*note 6.5: S0187.) of a return statement is determined as follows:
9010
9011 12.1/2
9012 * If the value of the access discriminant is determined by
9013 a discriminant_association in a subtype_indication, the
9014 accessibility level of the object or subprogram
9015 designated by the associated value (or library level if
9016 the value is null);
9017
9018 12.2/3
9019 * If the value of the access discriminant is determined by
9020 a default_expression in the declaration of the
9021 discriminant, the level of the object or subprogram
9022 designated by the associated value (or library level if
9023 null);
9024
9025 12.3/3
9026 * If the value of the access discriminant is determined by
9027 a record_component_association in an aggregate, the
9028 accessibility level of the object or subprogram
9029 designated by the associated value (or library level if
9030 the value is null);
9031
9032 12.4/3
9033 * In other cases, where the value of the access
9034 discriminant is determined by an object with an
9035 unconstrained nominal subtype, the accessibility level of
9036 the object.
9037
9038 12.5/3
9039 * The accessibility level of the anonymous access type of an access
9040 discriminant in any other context is that of the enclosing object.
9041
9042 13/3
9043 * The accessibility level of the anonymous access type of an access
9044 parameter specifying an access-to-object type is the same as that
9045 of the view designated by the actual (or library-level if the
9046 actual is null).
9047
9048 13.1/2
9049 * The accessibility level of the anonymous access type of an access
9050 parameter specifying an access-to-subprogram type is deeper than
9051 that of any master; all such anonymous access types have this same
9052 level.
9053
9054 13.2/3
9055 * The accessibility level of the type of a stand-alone object of an
9056 anonymous access-to-object type is the same as the accessibility
9057 level of the type of the access value most recently assigned to the
9058 object; accessibility checks ensure that this is never deeper than
9059 that of the declaration of the stand-alone object.
9060
9061 13.3/3
9062 * The accessibility level of an explicitly aliased (see *note 6.1::)
9063 formal parameter in a function body is determined by the point of
9064 call; it is the same level that the return object ultimately will
9065 have.
9066
9067 14/3
9068 * The accessibility level of an object created by an allocator is the
9069 same as that of the access type, except for an allocator of an
9070 anonymous access type (an anonymous allocator) in certain contexts,
9071 as follows: For an anonymous allocator that defines the result of a
9072 function with an access result, the accessibility level is
9073 determined as though the allocator were in place of the call of the
9074 function; in the special case of a call that is the operand of a
9075 type conversion, the level is that of the target access type of the
9076 conversion. For an anonymous allocator defining the value of an
9077 access parameter, the accessibility level is that of the innermost
9078 master of the call. For an anonymous allocator whose type is that
9079 of a stand-alone object of an anonymous access-to-object type, the
9080 accessibility level is that of the declaration of the stand-alone
9081 object. For one defining an access discriminant, the accessibility
9082 level is determined as follows:
9083
9084 14.1/3
9085 * for an allocator used to define the discriminant of an
9086 object, the level of the object;
9087
9088 14.2/3
9089 * for an allocator used to define the constraint in a
9090 subtype_indication in any other context, the level of the
9091 master that elaborates the subtype_indication.
9092
9093 14.3/3
9094 * This paragraph was deleted.
9095
9096 14.4/3
9097 In the first case, the allocated object is said to be a coextension
9098 of the object whose discriminant designates it, as well as of any
9099 object of which the discriminated object is itself a coextension or
9100 subcomponent. If the allocated object is a coextension of an
9101 anonymous object representing the result of an aggregate or
9102 function call that is used (in its entirety) to directly initialize
9103 a part of an object, after the result is assigned, the coextension
9104 becomes a coextension of the object being initialized and is no
9105 longer considered a coextension of the anonymous object. All
9106 coextensions of an object (which have not thus been transfered by
9107 such an initialization) are finalized when the object is finalized
9108 (see *note 7.6.1::).
9109
9110 14.5/3
9111 * Within a return statement, the accessibility level of the anonymous
9112 access type of an access result is that of the master of the call.
9113
9114 15/3
9115 * The accessibility level of a view of an object or subprogram
9116 designated by an access value is the same as that of the access
9117 type.
9118
9119 16
9120 * The accessibility level of a component, protected subprogram, or
9121 entry of (a view of) a composite object is the same as that of (the
9122 view of) the composite object.
9123
9124 16.1/3
9125 In the above rules, the operand of a view conversion, parenthesized
9126 expression or qualified_expression is considered to be used in a context
9127 if the view conversion, parenthesized expression or qualified_expression
9128 itself is used in that context. Similarly, a dependent_expression of a
9129 conditional_expression is considered to be used in a context if the
9130 conditional_expression itself is used in that context.
9131
9132 17
9133 One accessibility level is defined to be statically deeper than another
9134 in the following cases:
9135
9136 18
9137 * For a master that is statically nested within another master, the
9138 accessibility level of the inner master is statically deeper than
9139 that of the outer master.
9140
9141 18.1/2
9142 * The accessibility level of the anonymous access type of an access
9143 parameter specifying an access-to-subprogram type is statically
9144 deeper than that of any master; all such anonymous access types
9145 have this same level.
9146
9147 19/3
9148 * The statically deeper relationship does not apply to the
9149 accessibility level of the anonymous type of an access parameter
9150 specifying an access-to-object type nor does it apply to a
9151 descendant of a generic formal type; that is, such an accessibility
9152 level is not considered to be statically deeper, nor statically
9153 shallower, than any other.
9154
9155 19.1/3
9156 * The statically deeper relationship does not apply to the
9157 accessibility level of the type of a stand-alone object of an
9158 anonymous access-to-object type; that is, such an accessibility
9159 level is not considered to be statically deeper, nor statically
9160 shallower, than any other.
9161
9162 19.2/3
9163 * Inside a return statement that applies to a function F, when
9164 determining whether the accessibility level of an explicitly
9165 aliased parameter of F is statically deeper than the level of the
9166 return object of F, the level of the return object is considered to
9167 be the same as that of the level of the explicitly aliased
9168 parameter; for statically comparing with the level of other
9169 entities, an explicitly aliased parameter of F is considered to
9170 have the accessibility level of the body of F.
9171
9172 19.3/3
9173 * For determining whether a level is statically deeper than the level
9174 of the anonymous access type of an access result of a function,
9175 when within a return statement that applies to the function, the
9176 level of the master of the call is presumed to be the same as that
9177 of the level of the master that elaborated the function body.
9178
9179 20
9180 * For determining whether one level is statically deeper than another
9181 when within a generic package body, the generic package is presumed
9182 to be instantiated at the same level as where it was declared;
9183 run-time checks are needed in the case of more deeply nested
9184 instantiations.
9185
9186 21
9187 * For determining whether one level is statically deeper than another
9188 when within the declarative region of a type_declaration, the
9189 current instance of the type is presumed to be an object created at
9190 a deeper level than that of the type.
9191
9192 22
9193 The accessibility level of all library units is called the library
9194 level; a library-level declaration or entity is one whose accessibility
9195 level is the library level.
9196
9197 23
9198 The following attribute is defined for a prefix X that denotes an
9199 aliased view of an object:
9200
9201 24/1
9202 X'Access
9203 X'Access yields an access value that designates the
9204 object denoted by X. The type of X'Access is an
9205 access-to-object type, as determined by the expected
9206 type. The expected type shall be a general access type.
9207 X shall denote an aliased view of an object, including
9208 possibly the current instance (see *note 8.6::) of a
9209 limited type within its definition, or a formal parameter
9210 or generic formal object of a tagged type. The view
9211 denoted by the prefix X shall satisfy the following
9212 additional requirements, presuming the expected type for
9213 X'Access is the general access type A with designated
9214 type D:
9215
9216 25
9217 * If A is an access-to-variable type, then the view
9218 shall be a variable; on the other hand, if A is an
9219 access-to-constant type, the view may be either a
9220 constant or a variable.
9221
9222 26/3
9223 * The view shall not be a subcomponent that depends on
9224 discriminants of an object unless the object is
9225 known to be constrained.
9226
9227 27/2
9228 * If A is a named access type and D is a tagged type,
9229 then the type of the view shall be covered by D; if
9230 A is anonymous and D is tagged, then the type of the
9231 view shall be either D'Class or a type covered by D;
9232 if D is untagged, then the type of the view shall be
9233 D, and either:
9234
9235 27.1/2
9236 * the designated subtype of A shall
9237 statically match the nominal subtype of
9238 the view; or
9239
9240 27.2/3
9241 * D shall be discriminated in its full view
9242 and unconstrained in any partial view, and
9243 the designated subtype of A shall be
9244 unconstrained. For the purposes of
9245 determining within a generic body whether
9246 D is unconstrained in any partial view, a
9247 discriminated subtype is considered to
9248 have a constrained partial view if it is a
9249 descendant of an untagged generic formal
9250 private or derived type.
9251
9252 28/3
9253 * The accessibility level of the view shall not be
9254 statically deeper than that of the access type A.
9255
9256 28.1/3
9257 In addition to the places where Legality Rules normally
9258 apply (see *note 12.3::), these requirements apply also
9259 in the private part of an instance of a generic unit.
9260
9261 29
9262 A check is made that the accessibility level of X is not
9263 deeper than that of the access type A. If this check
9264 fails, Program_Error is raised.
9265
9266 30
9267 If the nominal subtype of X does not statically match the
9268 designated subtype of A, a view conversion of X to the
9269 designated subtype is evaluated (which might raise
9270 Constraint_Error -- see *note 4.6::) and the value of
9271 X'Access designates that view.
9272
9273 31
9274 The following attribute is defined for a prefix P that denotes a
9275 subprogram:
9276
9277 32/3
9278 P'Access
9279 P'Access yields an access value that designates the
9280 subprogram denoted by P. The type of P'Access is an
9281 access-to-subprogram type (S), as determined by the
9282 expected type. The accessibility level of P shall not be
9283 statically deeper than that of S. In addition to the
9284 places where Legality Rules normally apply (see *note
9285 12.3::), this rule applies also in the private part of an
9286 instance of a generic unit. The profile of P shall be
9287 subtype conformant with the designated profile of S, and
9288 shall not be Intrinsic. If the subprogram denoted by P
9289 is declared within a generic unit, and the expression
9290 P'Access occurs within the body of that generic unit or
9291 within the body of a generic unit declared within the
9292 declarative region of the generic unit, then the ultimate
9293 ancestor of S shall be either a nonformal type declared
9294 within the generic unit or an anonymous access type of an
9295 access parameter.
9296
9297 _Legality Rules_
9298
9299 32.1/3
9300 An expression is said to have distributed accessibility if it is
9301
9302 32.2/3
9303 * a conditional_expression (see *note 4.5.7::); or
9304
9305 32.3/3
9306 * a view conversion, qualified_expression, or parenthesized
9307 expression whose operand has distributed accessibility.
9308
9309 32.4/3
9310 The statically deeper relationship does not apply to the accessibility
9311 level of an expression having distributed accessibility; that is, such
9312 an accessibility level is not considered to be statically deeper, nor
9313 statically shallower, than any other.
9314
9315 32.5/3
9316 Any static accessibility requirement that is imposed on an expression
9317 that has distributed accessibility (or on its type) is instead imposed
9318 on the dependent_expressions of the underlying conditional_expression.
9319 This rule is applied recursively if a dependent_expression also has
9320 distributed accessibility.
9321
9322 NOTES
9323
9324 33
9325 88 The Unchecked_Access attribute yields the same result as the
9326 Access attribute for objects, but has fewer restrictions (see *note
9327 13.10::). There are other predefined operations that yield access
9328 values: an allocator can be used to create an object, and return an
9329 access value that designates it (see *note 4.8::); evaluating the
9330 literal null yields a null access value that designates no entity
9331 at all (see *note 4.2::).
9332
9333 34/2
9334 89 The predefined operations of an access type also include the
9335 assignment operation, qualification, and membership tests.
9336 Explicit conversion is allowed between general access types with
9337 matching designated subtypes; explicit conversion is allowed
9338 between access-to-subprogram types with subtype conformant profiles
9339 (see *note 4.6::). Named access types have predefined equality
9340 operators; anonymous access types do not, but they can use the
9341 predefined equality operators for universal_access (see *note
9342 4.5.2::).
9343
9344 35
9345 90 The object or subprogram designated by an access value can be
9346 named with a dereference, either an explicit_dereference (*note
9347 4.1: S0094.) or an implicit_dereference. See *note 4.1::.
9348
9349 36
9350 91 A call through the dereference of an access-to-subprogram value
9351 is never a dispatching call.
9352
9353 37/2
9354 92 The Access attribute for subprograms and parameters of an
9355 anonymous access-to-subprogram type may together be used to
9356 implement "downward closures" -- that is, to pass a more-nested
9357 subprogram as a parameter to a less-nested subprogram, as might be
9358 appropriate for an iterator abstraction or numerical integration.
9359 Downward closures can also be implemented using generic formal
9360 subprograms (see *note 12.6::). Note that Unchecked_Access is not
9361 allowed for subprograms.
9362
9363 38
9364 93 Note that using an access-to-class-wide tagged type with a
9365 dispatching operation is a potentially more structured alternative
9366 to using an access-to-subprogram type.
9367
9368 39
9369 94 An implementation may consider two access-to-subprogram values
9370 to be unequal, even though they designate the same subprogram.
9371 This might be because one points directly to the subprogram, while
9372 the other points to a special prologue that performs an
9373 Elaboration_Check and then jumps to the subprogram. See *note
9374 4.5.2::.
9375
9376 _Examples_
9377
9378 40
9379 Example of use of the Access attribute:
9380
9381 41
9382 Martha : Person_Name := new Person(F); -- see *note 3.10.1::
9383 Cars : array (1..2) of aliased Car;
9384 ...
9385 Martha.Vehicle := Cars(1)'Access;
9386 George.Vehicle := Cars(2)'Access;
9387
9388 \1f
9389 File: arm2012.info, Node: 3.11, Prev: 3.10, Up: 3
9390
9391 3.11 Declarative Parts
9392 ======================
9393
9394 1
9395 A declarative_part contains declarative_items (possibly none).
9396
9397 _Syntax_
9398
9399 2
9400 declarative_part ::= {declarative_item}
9401
9402 3
9403 declarative_item ::=
9404 basic_declarative_item | body
9405
9406 4/1
9407 basic_declarative_item ::=
9408 basic_declaration | aspect_clause | use_clause
9409
9410 5
9411 body ::= proper_body | body_stub
9412
9413 6
9414 proper_body ::=
9415 subprogram_body | package_body | task_body | protected_body
9416
9417 _Static Semantics_
9418
9419 6.1/2
9420 The list of declarative_items of a declarative_part is called the
9421 declaration list of the declarative_part.
9422
9423 _Dynamic Semantics_
9424
9425 7
9426 The elaboration of a declarative_part consists of the elaboration of the
9427 declarative_items, if any, in the order in which they are given in the
9428 declarative_part.
9429
9430 8
9431 An elaborable construct is in the elaborated state after the normal
9432 completion of its elaboration. Prior to that, it is not yet elaborated.
9433
9434 9
9435 For a construct that attempts to use a body, a check (Elaboration_Check)
9436 is performed, as follows:
9437
9438 10/1
9439 * For a call to a (non-protected) subprogram that has an explicit
9440 body, a check is made that the body is already elaborated. This
9441 check and the evaluations of any actual parameters of the call are
9442 done in an arbitrary order.
9443
9444 11/3
9445 * For a call to a protected operation of a protected type (that has a
9446 body -- no check is performed if the protected type is imported --
9447 see *note B.1::), a check is made that the protected_body is
9448 already elaborated. This check and the evaluations of any actual
9449 parameters of the call are done in an arbitrary order.
9450
9451 12
9452 * For the activation of a task, a check is made by the activator that
9453 the task_body is already elaborated. If two or more tasks are
9454 being activated together (see *note 9.2::), as the result of the
9455 elaboration of a declarative_part or the initialization for the
9456 object created by an allocator, this check is done for all of them
9457 before activating any of them.
9458
9459 13
9460 * For the instantiation of a generic unit that has a body, a check is
9461 made that this body is already elaborated. This check and the
9462 evaluation of any explicit_generic_actual_parameters of the
9463 instantiation are done in an arbitrary order.
9464
9465 14
9466 The exception Program_Error is raised if any of these checks fails.
9467
9468 * Menu:
9469
9470 * 3.11.1 :: Completions of Declarations
9471
9472 \1f
9473 File: arm2012.info, Node: 3.11.1, Up: 3.11
9474
9475 3.11.1 Completions of Declarations
9476 ----------------------------------
9477
9478 1/3
9479 Declarations sometimes come in two parts. A declaration that requires a
9480 second part is said to require completion. The second part is called
9481 the completion of the declaration (and of the entity declared), and is
9482 either another declaration, a body, or a pragma. A body is a body, an
9483 entry_body, a null_procedure_declaration or an
9484 expression_function_declaration that completes another declaration, or a
9485 renaming-as-body (see *note 8.5.4::).
9486
9487 _Name Resolution Rules_
9488
9489 2
9490 A construct that can be a completion is interpreted as the completion of
9491 a prior declaration only if:
9492
9493 3
9494 * The declaration and the completion occur immediately within the
9495 same declarative region;
9496
9497 4
9498 * The defining name or defining_program_unit_name in the completion
9499 is the same as in the declaration, or in the case of a pragma, the
9500 pragma applies to the declaration;
9501
9502 5
9503 * If the declaration is overloadable, then the completion either has
9504 a type-conformant profile, or is a pragma.
9505
9506 _Legality Rules_
9507
9508 6/3
9509 An implicit declaration shall not have a completion. For any explicit
9510 declaration that is specified to require completion, there shall be a
9511 corresponding explicit completion, unless the declared entity is
9512 imported (see *note B.1::).
9513
9514 7
9515 At most one completion is allowed for a given declaration. Additional
9516 requirements on completions appear where each kind of completion is
9517 defined.
9518
9519 8
9520 A type is completely defined at a place that is after its full type
9521 definition (if it has one) and after all of its subcomponent types are
9522 completely defined. A type shall be completely defined before it is
9523 frozen (see *note 13.14:: and *note 7.3::).
9524
9525 NOTES
9526
9527 9/3
9528 95 Completions are in principle allowed for any kind of explicit
9529 declaration. However, for some kinds of declaration, the only
9530 allowed completion is an implementation-defined pragma, and
9531 implementations are not required to have any such pragmas.
9532
9533 10
9534 96 There are rules that prevent premature uses of declarations
9535 that have a corresponding completion. The Elaboration_Checks of
9536 *note 3.11:: prevent such uses at run time for subprograms,
9537 protected operations, tasks, and generic units. The rules of *note
9538 13.14::, "*note 13.14:: Freezing Rules" prevent, at compile time,
9539 premature uses of other entities such as private types and deferred
9540 constants.
9541
9542 \1f
9543 File: arm2012.info, Node: 4, Next: 5, Prev: 3, Up: Top
9544
9545 4 Names and Expressions
9546 ***********************
9547
9548 1/3
9549 The rules applicable to the different forms of name and expression, and
9550 to their evaluation, are given in this clause.
9551
9552 * Menu:
9553
9554 * 4.1 :: Names
9555 * 4.2 :: Literals
9556 * 4.3 :: Aggregates
9557 * 4.4 :: Expressions
9558 * 4.5 :: Operators and Expression Evaluation
9559 * 4.6 :: Type Conversions
9560 * 4.7 :: Qualified Expressions
9561 * 4.8 :: Allocators
9562 * 4.9 :: Static Expressions and Static Subtypes
9563
9564 \1f
9565 File: arm2012.info, Node: 4.1, Next: 4.2, Up: 4
9566
9567 4.1 Names
9568 =========
9569
9570 1
9571 Names can denote declared entities, whether declared explicitly or
9572 implicitly (see *note 3.1::). Names can also denote objects or
9573 subprograms designated by access values; the results of type_conversions
9574 or function_calls; subcomponents and slices of objects and values;
9575 protected subprograms, single entries, entry families, and entries in
9576 families of entries. Finally, names can denote attributes of any of the
9577 foregoing.
9578
9579 _Syntax_
9580
9581 2/3
9582 name ::=
9583 direct_name | explicit_dereference
9584 | indexed_component | slice
9585 | selected_component | attribute_reference
9586 | type_conversion | function_call
9587 | character_literal | qualified_expression
9588 | generalized_reference | generalized_indexing
9589
9590 3
9591 direct_name ::= identifier | operator_symbol
9592
9593 4
9594 prefix ::= name | implicit_dereference
9595
9596 5
9597 explicit_dereference ::= name.all
9598
9599 6
9600 implicit_dereference ::= name
9601
9602 7/3
9603 Certain forms of name (indexed_components, selected_components, slices,
9604 and attribute_references) include a prefix that is either itself a name
9605 that denotes some related entity, or an implicit_dereference of an
9606 access value that designates some related entity.
9607
9608 _Name Resolution Rules_
9609
9610 8
9611 The name in a dereference (either an implicit_dereference or an
9612 explicit_dereference) is expected to be of any access type.
9613
9614 _Static Semantics_
9615
9616 9/3
9617 If the type of the name in a dereference is some access-to-object type
9618 T, then the dereference denotes a view of an object, the nominal subtype
9619 of the view being the designated subtype of T. If the designated subtype
9620 has unconstrained discriminants, the (actual) subtype of the view is
9621 constrained by the values of the discriminants of the designated object,
9622 except when there is a partial view of the type of the designated
9623 subtype that does not have discriminants, in which case the dereference
9624 is not constrained by its discriminant values.
9625
9626 10
9627 If the type of the name in a dereference is some access-to-subprogram
9628 type S, then the dereference denotes a view of a subprogram, the profile
9629 of the view being the designated profile of S.
9630
9631 _Dynamic Semantics_
9632
9633 11/2
9634 The evaluation of a name determines the entity denoted by the name.
9635 This evaluation has no other effect for a name that is a direct_name or
9636 a character_literal.
9637
9638 12
9639 The evaluation of a name that has a prefix includes the evaluation of
9640 the prefix. The evaluation of a prefix consists of the evaluation of
9641 the name or the implicit_dereference. The prefix denotes the entity
9642 denoted by the name or the implicit_dereference.
9643
9644 13
9645 The evaluation of a dereference consists of the evaluation of the name
9646 and the determination of the object or subprogram that is designated by
9647 the value of the name. A check is made that the value of the name is
9648 not the null access value. Constraint_Error is raised if this check
9649 fails. The dereference denotes the object or subprogram designated by
9650 the value of the name.
9651
9652 _Examples_
9653
9654 14
9655 Examples of direct names:
9656
9657 15
9658 Pi -- the direct name of a number (see *note 3.3.2::)
9659 Limit -- the direct name of a constant (see *note 3.3.1::)
9660 Count -- the direct name of a scalar variable (see *note 3.3.1::)
9661 Board -- the direct name of an array variable (see *note 3.6.1::)
9662 Matrix -- the direct name of a type (see *note 3.6::)
9663 Random -- the direct name of a function (see *note 6.1::)
9664 Error -- the direct name of an exception (see *note 11.1::)
9665
9666 16
9667 Examples of dereferences:
9668
9669 17
9670 Next_Car.all -- explicit dereference denoting the object designated by
9671 -- the access variable Next_Car (see *note 3.10.1::)
9672 Next_Car.Owner -- selected component with implicit dereference;
9673 -- same as Next_Car.all.Owner
9674
9675 * Menu:
9676
9677 * 4.1.1 :: Indexed Components
9678 * 4.1.2 :: Slices
9679 * 4.1.3 :: Selected Components
9680 * 4.1.4 :: Attributes
9681 * 4.1.5 :: User-Defined References
9682 * 4.1.6 :: User-Defined Indexing
9683
9684 \1f
9685 File: arm2012.info, Node: 4.1.1, Next: 4.1.2, Up: 4.1
9686
9687 4.1.1 Indexed Components
9688 ------------------------
9689
9690 1
9691 An indexed_component denotes either a component of an array or an entry
9692 in a family of entries.
9693
9694 _Syntax_
9695
9696 2
9697 indexed_component ::= prefix(expression {, expression})
9698
9699 _Name Resolution Rules_
9700
9701 3
9702 The prefix of an indexed_component with a given number of expressions
9703 shall resolve to denote an array (after any implicit dereference) with
9704 the corresponding number of index positions, or shall resolve to denote
9705 an entry family of a task or protected object (in which case there shall
9706 be only one expression).
9707
9708 4
9709 The expected type for each expression is the corresponding index type.
9710
9711 _Static Semantics_
9712
9713 5
9714 When the prefix denotes an array, the indexed_component denotes the
9715 component of the array with the specified index value(s). The nominal
9716 subtype of the indexed_component is the component subtype of the array
9717 type.
9718
9719 6
9720 When the prefix denotes an entry family, the indexed_component denotes
9721 the individual entry of the entry family with the specified index value.
9722
9723 _Dynamic Semantics_
9724
9725 7
9726 For the evaluation of an indexed_component, the prefix and the
9727 expressions are evaluated in an arbitrary order. The value of each
9728 expression is converted to the corresponding index type. A check is
9729 made that each index value belongs to the corresponding index range of
9730 the array or entry family denoted by the prefix. Constraint_Error is
9731 raised if this check fails.
9732
9733 _Examples_
9734
9735 8
9736 Examples of indexed components:
9737
9738 9
9739 My_Schedule(Sat) -- a component of a one-dimensional array (see *note 3.6.1::)
9740 Page(10) -- a component of a one-dimensional array (see *note 3.6::)
9741 Board(M, J + 1) -- a component of a two-dimensional array (see *note 3.6.1::)
9742 Page(10)(20) -- a component of a component (see *note 3.6::)
9743 Request(Medium) -- an entry in a family of entries (see *note 9.1::)
9744 Next_Frame(L)(M, N) -- a component of a function call (see *note 6.1::)
9745
9746 NOTES
9747
9748 10
9749 1 Notes on the examples: Distinct notations are used for
9750 components of multidimensional arrays (such as Board) and arrays of
9751 arrays (such as Page). The components of an array of arrays are
9752 arrays and can therefore be indexed. Thus Page(10)(20) denotes the
9753 20th component of Page(10). In the last example Next_Frame(L) is a
9754 function call returning an access value that designates a
9755 two-dimensional array.
9756
9757 \1f
9758 File: arm2012.info, Node: 4.1.2, Next: 4.1.3, Prev: 4.1.1, Up: 4.1
9759
9760 4.1.2 Slices
9761 ------------
9762
9763 1
9764 A slice denotes a one-dimensional array formed by a sequence of
9765 consecutive components of a one-dimensional array. A slice of a
9766 variable is a variable; a slice of a constant is a constant; a slice of
9767 a value is a value.
9768
9769 _Syntax_
9770
9771 2
9772 slice ::= prefix(discrete_range)
9773
9774 _Name Resolution Rules_
9775
9776 3
9777 The prefix of a slice shall resolve to denote a one-dimensional array
9778 (after any implicit dereference).
9779
9780 4
9781 The expected type for the discrete_range of a slice is the index type of
9782 the array type.
9783
9784 _Static Semantics_
9785
9786 5
9787 A slice denotes a one-dimensional array formed by the sequence of
9788 consecutive components of the array denoted by the prefix, corresponding
9789 to the range of values of the index given by the discrete_range.
9790
9791 6
9792 The type of the slice is that of the prefix. Its bounds are those
9793 defined by the discrete_range.
9794
9795 _Dynamic Semantics_
9796
9797 7
9798 For the evaluation of a slice, the prefix and the discrete_range are
9799 evaluated in an arbitrary order. If the slice is not a null slice (a
9800 slice where the discrete_range is a null range), then a check is made
9801 that the bounds of the discrete_range belong to the index range of the
9802 array denoted by the prefix. Constraint_Error is raised if this check
9803 fails.
9804
9805 NOTES
9806
9807 8
9808 2 A slice is not permitted as the prefix of an Access
9809 attribute_reference, even if the components or the array as a whole
9810 are aliased. See *note 3.10.2::.
9811
9812 9
9813 3 For a one-dimensional array A, the slice A(N .. N) denotes an
9814 array that has only one component; its type is the type of A. On
9815 the other hand, A(N) denotes a component of the array A and has the
9816 corresponding component type.
9817
9818 _Examples_
9819
9820 10
9821 Examples of slices:
9822
9823 11
9824 Stars(1 .. 15) -- a slice of 15 characters (see *note 3.6.3::)
9825 Page(10 .. 10 + Size) -- a slice of 1 + Size components (see *note 3.6::)
9826 Page(L)(A .. B) -- a slice of the array Page(L) (see *note 3.6::)
9827 Stars(1 .. 0) -- a null slice (see *note 3.6.3::)
9828 My_Schedule(Weekday) -- bounds given by subtype (see *note 3.6.1:: and *note 3.5.1::)
9829 Stars(5 .. 15)(K) -- same as Stars(K) (see *note 3.6.3::)
9830 -- provided that K is in 5 .. 15
9831
9832 \1f
9833 File: arm2012.info, Node: 4.1.3, Next: 4.1.4, Prev: 4.1.2, Up: 4.1
9834
9835 4.1.3 Selected Components
9836 -------------------------
9837
9838 1
9839 Selected_components are used to denote components (including
9840 discriminants), entries, entry families, and protected subprograms; they
9841 are also used as expanded names as described below.
9842
9843 _Syntax_
9844
9845 2
9846 selected_component ::= prefix . selector_name
9847
9848 3
9849 selector_name ::= identifier | character_literal | operator_symbol
9850
9851 _Name Resolution Rules_
9852
9853 4
9854 A selected_component is called an expanded name if, according to the
9855 visibility rules, at least one possible interpretation of its prefix
9856 denotes a package or an enclosing named construct (directly, not through
9857 a subprogram_renaming_declaration or generic_renaming_declaration).
9858
9859 5
9860 A selected_component that is not an expanded name shall resolve to
9861 denote one of the following:
9862
9863 6
9864 * A component (including a discriminant):
9865
9866 7
9867 The prefix shall resolve to denote an object or value of some
9868 non-array composite type (after any implicit dereference). The
9869 selector_name shall resolve to denote a discriminant_specification
9870 of the type, or, unless the type is a protected type, a
9871 component_declaration of the type. The selected_component denotes
9872 the corresponding component of the object or value.
9873
9874 8
9875 * A single entry, an entry family, or a protected subprogram:
9876
9877 9
9878 The prefix shall resolve to denote an object or value of some task
9879 or protected type (after any implicit dereference). The
9880 selector_name shall resolve to denote an entry_declaration or
9881 subprogram_declaration occurring (implicitly or explicitly) within
9882 the visible part of that type. The selected_component denotes the
9883 corresponding entry, entry family, or protected subprogram.
9884
9885 9.1/2
9886 * A view of a subprogram whose first formal parameter is of a tagged
9887 type or is an access parameter whose designated type is tagged:
9888
9889 9.2/3
9890 The prefix (after any implicit dereference) shall resolve to denote
9891 an object or value of a specific tagged type T or class-wide type
9892 T'Class. The selector_name shall resolve to denote a view of a
9893 subprogram declared immediately within the declarative region in
9894 which an ancestor of the type T is declared. The first formal
9895 parameter of the subprogram shall be of type T, or a class-wide
9896 type that covers T, or an access parameter designating one of these
9897 types. The designator of the subprogram shall not be the same as
9898 that of a component of the tagged type visible at the point of the
9899 selected_component. The subprogram shall not be an implicitly
9900 declared primitive operation of type T that overrides an inherited
9901 subprogram implemented by an entry or protected subprogram visible
9902 at the point of the selected_component. The selected_component
9903 denotes a view of this subprogram that omits the first formal
9904 parameter. This view is called a prefixed view of the subprogram,
9905 and the prefix of the selected_component (after any implicit
9906 dereference) is called the prefix of the prefixed view.
9907
9908 10
9909 An expanded name shall resolve to denote a declaration that occurs
9910 immediately within a named declarative region, as follows:
9911
9912 11
9913 * The prefix shall resolve to denote either a package (including the
9914 current instance of a generic package, or a rename of a package),
9915 or an enclosing named construct.
9916
9917 12
9918 * The selector_name shall resolve to denote a declaration that occurs
9919 immediately within the declarative region of the package or
9920 enclosing construct (the declaration shall be visible at the place
9921 of the expanded name -- see *note 8.3::). The expanded name
9922 denotes that declaration.
9923
9924 13
9925 * If the prefix does not denote a package, then it shall be a
9926 direct_name or an expanded name, and it shall resolve to denote a
9927 program unit (other than a package), the current instance of a
9928 type, a block_statement, a loop_statement, or an accept_statement
9929 (*note 9.5.2: S0219.) (in the case of an accept_statement (*note
9930 9.5.2: S0219.) or entry_body (*note 9.5.2: S0221.), no family index
9931 is allowed); the expanded name shall occur within the declarative
9932 region of this construct. Further, if this construct is a callable
9933 construct and the prefix denotes more than one such enclosing
9934 callable construct, then the expanded name is ambiguous,
9935 independently of the selector_name.
9936
9937 _Legality Rules_
9938
9939 13.1/2
9940 For a subprogram whose first parameter is an access parameter, the
9941 prefix of any prefixed view shall denote an aliased view of an object.
9942
9943 13.2/2
9944 For a subprogram whose first parameter is of mode in out or out, or of
9945 an anonymous access-to-variable type, the prefix of any prefixed view
9946 shall denote a variable.
9947
9948 _Dynamic Semantics_
9949
9950 14
9951 The evaluation of a selected_component includes the evaluation of the
9952 prefix.
9953
9954 15
9955 For a selected_component that denotes a component of a variant, a check
9956 is made that the values of the discriminants are such that the value or
9957 object denoted by the prefix has this component. The exception
9958 Constraint_Error is raised if this check fails.
9959
9960 _Examples_
9961
9962 16
9963 Examples of selected components:
9964
9965 17/2
9966 Tomorrow.Month -- a record component (see *note 3.8::)
9967 Next_Car.Owner -- a record component (see *note 3.10.1::)
9968 Next_Car.Owner.Age -- a record component (see *note 3.10.1::)
9969 -- the previous two lines involve implicit dereferences
9970 Writer.Unit -- a record component (a discriminant) (see *note 3.8.1::)
9971 Min_Cell(H).Value -- a record component of the result (see *note 6.1::)
9972 -- of the function call Min_Cell(H)
9973 Cashier.Append -- a prefixed view of a procedure (see *note 3.9.4::)
9974 Control.Seize -- an entry of a protected object (see *note 9.4::)
9975 Pool(K).Write -- an entry of the task Pool(K) (see *note 9.4::)
9976
9977 18
9978 Examples of expanded names:
9979
9980 19
9981 Key_Manager."<" -- an operator of the visible part of a package (see *note 7.3.1::)
9982 Dot_Product.Sum -- a variable declared in a function body (see *note 6.1::)
9983 Buffer.Pool -- a variable declared in a protected unit (see *note 9.11::)
9984 Buffer.Read -- an entry of a protected unit (see *note 9.11::)
9985 Swap.Temp -- a variable declared in a block statement (see *note 5.6::)
9986 Standard.Boolean -- the name of a predefined type (see *note A.1::)
9987
9988 \1f
9989 File: arm2012.info, Node: 4.1.4, Next: 4.1.5, Prev: 4.1.3, Up: 4.1
9990
9991 4.1.4 Attributes
9992 ----------------
9993
9994 1
9995 An attribute is a characteristic of an entity that can be queried via an
9996 attribute_reference (*note 4.1.4: S0100.) or a range_attribute_reference
9997 (*note 4.1.4: S0102.).
9998
9999 _Syntax_
10000
10001 2
10002 attribute_reference ::= prefix'attribute_designator
10003
10004 3/2
10005 attribute_designator ::=
10006 identifier[(static_expression)]
10007 | Access | Delta | Digits | Mod
10008
10009 4
10010 range_attribute_reference ::= prefix'range_attribute_designator
10011
10012 5
10013 range_attribute_designator ::= Range[(static_expression)]
10014
10015 _Name Resolution Rules_
10016
10017 6
10018 In an attribute_reference, if the attribute_designator is for an
10019 attribute defined for (at least some) objects of an access type, then
10020 the prefix is never interpreted as an implicit_dereference; otherwise
10021 (and for all range_attribute_references), if the type of the name within
10022 the prefix is of an access type, the prefix is interpreted as an
10023 implicit_dereference. Similarly, if the attribute_designator is for an
10024 attribute defined for (at least some) functions, then the prefix is
10025 never interpreted as a parameterless function_call; otherwise (and for
10026 all range_attribute_references), if the prefix consists of a name that
10027 denotes a function, it is interpreted as a parameterless function_call.
10028
10029 7
10030 The expression, if any, in an attribute_designator or
10031 range_attribute_designator is expected to be of any integer type.
10032
10033 _Legality Rules_
10034
10035 8
10036 The expression, if any, in an attribute_designator or
10037 range_attribute_designator shall be static.
10038
10039 _Static Semantics_
10040
10041 9/3
10042 An attribute_reference denotes a value, an object, a subprogram, or some
10043 other kind of program entity. For an attribute_reference that denotes a
10044 value or an object, if its type is scalar, then its nominal subtype is
10045 the base subtype of the type; if its type is tagged, its nominal subtype
10046 is the first subtype of the type; otherwise, its nominal subtype is a
10047 subtype of the type without any constraint or null_exclusion.
10048 Similarly, unless explicitly specified otherwise, for an
10049 attribute_reference that denotes a function, when its result type is
10050 scalar, its result subtype is the base subtype of the type, when its
10051 result type is tagged, the result subtype is the first subtype of the
10052 type, and when the result type is some other type, the result subtype is
10053 a subtype of the type without any constraint or null_exclusion.
10054
10055 10
10056 A range_attribute_reference X'Range(N) is equivalent to the range
10057 X'First(N) .. X'Last(N), except that the prefix is only evaluated once.
10058 Similarly, X'Range is equivalent to X'First .. X'Last, except that the
10059 prefix is only evaluated once.
10060
10061 _Dynamic Semantics_
10062
10063 11
10064 The evaluation of an attribute_reference (or range_attribute_reference)
10065 consists of the evaluation of the prefix.
10066
10067 _Implementation Permissions_
10068
10069 12/1
10070 An implementation may provide implementation-defined attributes; the
10071 identifier for an implementation-defined attribute shall differ from
10072 those of the language-defined attributes unless supplied for
10073 compatibility with a previous edition of this International Standard.
10074
10075 NOTES
10076
10077 13
10078 4 Attributes are defined throughout this International Standard,
10079 and are summarized in *note K.2::.
10080
10081 14/2
10082 5 In general, the name in a prefix of an attribute_reference (or a
10083 range_attribute_reference) has to be resolved without using any
10084 context. However, in the case of the Access attribute, the
10085 expected type for the attribute_reference has to be a single access
10086 type, and the resolution of the name can use the fact that the type
10087 of the object or the profile of the callable entity denoted by the
10088 prefix has to match the designated type or be type conformant with
10089 the designated profile of the access type.
10090
10091 _Examples_
10092
10093 15
10094 Examples of attributes:
10095
10096 16
10097 Color'First -- minimum value of the enumeration type Color (see *note 3.5.1::)
10098 Rainbow'Base'First -- same as Color'First (see *note 3.5.1::)
10099 Real'Digits -- precision of the type Real (see *note 3.5.7::)
10100 Board'Last(2) -- upper bound of the second dimension of Board (see *note 3.6.1::)
10101 Board'Range(1) -- index range of the first dimension of Board (see *note 3.6.1::)
10102 Pool(K)'Terminated -- True if task Pool(K) is terminated (see *note 9.1::)
10103 Date'Size -- number of bits for records of type Date (see *note 3.8::)
10104 Message'Address -- address of the record variable Message (see *note 3.7.1::)
10105
10106 \1f
10107 File: arm2012.info, Node: 4.1.5, Next: 4.1.6, Prev: 4.1.4, Up: 4.1
10108
10109 4.1.5 User-Defined References
10110 -----------------------------
10111
10112 _Static Semantics_
10113
10114 1/3
10115 Given a discriminated type T, the following type-related operational
10116 aspect may be specified:
10117
10118 2/3
10119 Implicit_Dereference
10120 This aspect is specified by a name that denotes an access
10121 discriminant declared for the type T.
10122
10123 3/3
10124 A (view of a) type with a specified Implicit_Dereference aspect is a
10125 reference type. A reference object is an object of a reference type.
10126 The discriminant named by the Implicit_Dereference aspect is the
10127 reference discriminant of the reference type or reference object. A
10128 generalized_reference is a name that identifies a reference object, and
10129 denotes the object or subprogram designated by the reference
10130 discriminant of the reference object.
10131
10132 _Syntax_
10133
10134 4/3
10135 generalized_reference ::= reference_object_name
10136
10137 _Name Resolution Rules_
10138
10139 5/3
10140 The expected type for the reference_object_name in a
10141 generalized_reference is any reference type.
10142
10143 _Static Semantics_
10144
10145 6/3
10146 A generalized_reference denotes a view equivalent to that of a
10147 dereference of the reference discriminant of the reference object.
10148
10149 7/3
10150 Given a reference type T, the Implicit_Dereference aspect is inherited
10151 by descendants of type T if not overridden. If a descendant type
10152 constrains the value of the reference discriminant of T by a new
10153 discriminant, that new discriminant is the reference discriminant of the
10154 descendant. If the descendant type constrains the value of the
10155 reference discriminant of T by an expression other than the name of a
10156 new discriminant, a generalized_reference that identifies an object of
10157 the descendant type denotes the object or subprogram designated by the
10158 value of this constraining expression.
10159
10160 _Dynamic Semantics_
10161
10162 8/3
10163 The evaluation of a generalized_reference consists of the evaluation of
10164 the reference_object_name and a determination of the object or
10165 subprogram designated by the reference discriminant of the named
10166 reference object. A check is made that the value of the reference
10167 discriminant is not the null access value. Constraint_Error is raised
10168 if this check fails. The generalized_reference denotes the object or
10169 subprogram designated by the value of the reference discriminant of the
10170 named reference object.
10171
10172 _Examples_
10173
10174 9/3
10175 type Barrel is tagged ... -- holds objects of type Element
10176
10177 10/3
10178 type Ref_Element(Data : access Element) is limited private
10179 with Implicit_Dereference => Data;
10180 -- This Ref_Element type is a "reference" type.
10181 -- "Data" is its reference discriminant.
10182
10183 11/3
10184 function Find (B : aliased in out Barrel; Key : String) return Ref_Element;
10185 -- Return a reference to an element of a barrel.
10186
10187 12/3
10188 B: aliased Barrel;
10189
10190 13/3
10191 ...
10192
10193 14/3
10194 Find (B, "grape") := Element'(...); -- Assign through a reference.
10195
10196 15/3
10197 -- This is equivalent to:
10198 Find (B, "grape").Data.all := Element'(...);
10199
10200 \1f
10201 File: arm2012.info, Node: 4.1.6, Prev: 4.1.5, Up: 4.1
10202
10203 4.1.6 User-Defined Indexing
10204 ---------------------------
10205
10206 _Static Semantics_
10207
10208 1/3
10209 Given a tagged type T, the following type-related, operational aspects
10210 may be specified:
10211
10212 2/3
10213 Constant_Indexing
10214 This aspect shall be specified by a name that denotes one
10215 or more functions declared immediately within the same
10216 declaration list in which T is declared. All such
10217 functions shall have at least two parameters, the first
10218 of which is of type T or T'Class, or is an
10219 access-to-constant parameter with designated type T or
10220 T'Class.
10221
10222 3/3
10223 Variable_Indexing
10224 This aspect shall be specified by a name that denotes one
10225 or more functions declared immediately within the same
10226 declaration list in which T is declared. All such
10227 functions shall have at least two parameters, the first
10228 of which is of type T or T'Class, or is an access
10229 parameter with designated type T or T'Class. All such
10230 functions shall have a return type that is a reference
10231 type (see *note 4.1.5::), whose reference discriminant is
10232 of an access-to-variable type.
10233
10234 4/3
10235 These aspects are inherited by descendants of T (including the
10236 class-wide type T'Class). The aspects shall not be overridden, but the
10237 functions they denote may be.
10238
10239 5/3
10240 An indexable container type is (a view of) a tagged type with at least
10241 one of the aspects Constant_Indexing or Variable_Indexing specified. An
10242 indexable container object is an object of an indexable container type.
10243 A generalized_indexing is a name that denotes the result of calling a
10244 function named by a Constant_Indexing or Variable_Indexing aspect.
10245
10246 _Legality Rules_
10247
10248 6/3
10249 The Constant_Indexing or Variable_Indexing aspect shall not be
10250 specified:
10251
10252 7/3
10253 * on a derived type if the parent type has the corresponding aspect
10254 specified or inherited; or
10255
10256 8/3
10257 * on a full_type_declaration if the type has a tagged partial view.
10258
10259 9/3
10260 In addition to the places where Legality Rules normally apply (see *note
10261 12.3::), these rules apply also in the private part of an instance of a
10262 generic unit.
10263
10264 _Syntax_
10265
10266 10/3
10267 generalized_indexing ::= indexable_container_object_prefix
10268 actual_parameter_part
10269
10270 _Name Resolution Rules_
10271
10272 11/3
10273 The expected type for the indexable_container_object_prefix of a
10274 generalized_indexing is any indexable container type.
10275
10276 12/3
10277 If the Constant_Indexing aspect is specified for the type of the
10278 indexable_container_object_prefix of a generalized_indexing, then the
10279 generalized_indexing is interpreted as a constant indexing under the
10280 following circumstances:
10281
10282 13/3
10283 * when the Variable_Indexing aspect is not specified for the type of
10284 the indexable_container_object_prefix;
10285
10286 14/3
10287 * when the indexable_container_object_prefix denotes a constant;
10288
10289 15/3
10290 * when the generalized_indexing is used within a primary where a name
10291 denoting a constant is permitted.
10292
10293 16/3
10294 Otherwise, the generalized_indexing is interpreted as a variable
10295 indexing.
10296
10297 17/3
10298 When a generalized_indexing is interpreted as a constant (or variable)
10299 indexing, it is equivalent to a call on a prefixed view of one of the
10300 functions named by the Constant_Indexing (or Variable_Indexing) aspect
10301 of the type of the indexable_container_object_prefix with the given
10302 actual_parameter_part, and with the indexable_container_object_prefix as
10303 the prefix of the prefixed view.
10304
10305 _Examples_
10306
10307 18/3
10308 type Indexed_Barrel is tagged ...
10309 with Variable_Indexing => Find;
10310 -- Indexed_Barrel is an indexable container type,
10311 -- Find is the generalized indexing operation.
10312
10313 19/3
10314 function Find (B : aliased in out Indexed_Barrel; Key : String) return Ref_Element;
10315 -- Return a reference to an element of a barrel (see *note 4.1.5::).
10316
10317 20/3
10318 IB: aliased Indexed_Barrel;
10319
10320 21/3
10321 -- All of the following calls are then equivalent:
10322 Find (IB,"pear").Data.all := Element'(...); -- Traditional call
10323 IB.Find ("pear").Data.all := Element'(...); -- Call of prefixed view
10324 IB.Find ("pear") := Element'(...); -- Implicit dereference (see *note 4.1.5::)
10325 IB ("pear") := Element'(...); -- Implicit indexing and dereference
10326 IB ("pear").Data.all := Element'(...); -- Implicit indexing only
10327
10328 \1f
10329 File: arm2012.info, Node: 4.2, Next: 4.3, Prev: 4.1, Up: 4
10330
10331 4.2 Literals
10332 ============
10333
10334 1
10335 A literal represents a value literally, that is, by means of notation
10336 suited to its kind. A literal is either a numeric_literal, a
10337 character_literal, the literal null, or a string_literal.
10338
10339 _Name Resolution Rules_
10340
10341 2/2
10342 This paragraph was deleted.
10343
10344 3
10345 For a name that consists of a character_literal, either its expected
10346 type shall be a single character type, in which case it is interpreted
10347 as a parameterless function_call that yields the corresponding value of
10348 the character type, or its expected profile shall correspond to a
10349 parameterless function with a character result type, in which case it is
10350 interpreted as the name of the corresponding parameterless function
10351 declared as part of the character type's definition (see *note 3.5.1::).
10352 In either case, the character_literal denotes the
10353 enumeration_literal_specification.
10354
10355 4
10356 The expected type for a primary that is a string_literal shall be a
10357 single string type.
10358
10359 _Legality Rules_
10360
10361 5
10362 A character_literal that is a name shall correspond to a
10363 defining_character_literal of the expected type, or of the result type
10364 of the expected profile.
10365
10366 6
10367 For each character of a string_literal with a given expected string
10368 type, there shall be a corresponding defining_character_literal of the
10369 component type of the expected string type.
10370
10371 7/2
10372 This paragraph was deleted.
10373
10374 _Static Semantics_
10375
10376 8/2
10377 An integer literal is of type universal_integer. A real literal is of
10378 type universal_real. The literal null is of type universal_access.
10379
10380 _Dynamic Semantics_
10381
10382 9
10383 The evaluation of a numeric literal, or the literal null, yields the
10384 represented value.
10385
10386 10
10387 The evaluation of a string_literal that is a primary yields an array
10388 value containing the value of each character of the sequence of
10389 characters of the string_literal, as defined in *note 2.6::. The bounds
10390 of this array value are determined according to the rules for
10391 positional_array_aggregates (see *note 4.3.3::), except that for a null
10392 string literal, the upper bound is the predecessor of the lower bound.
10393
10394 11
10395 For the evaluation of a string_literal of type T, a check is made that
10396 the value of each character of the string_literal belongs to the
10397 component subtype of T. For the evaluation of a null string literal, a
10398 check is made that its lower bound is greater than the lower bound of
10399 the base range of the index type. The exception Constraint_Error is
10400 raised if either of these checks fails.
10401
10402 NOTES
10403
10404 12
10405 6 Enumeration literals that are identifiers rather than
10406 character_literals follow the normal rules for identifiers when
10407 used in a name (see *note 4.1:: and *note 4.1.3::).
10408 Character_literals used as selector_names follow the normal rules
10409 for expanded names (see *note 4.1.3::).
10410
10411 _Examples_
10412
10413 13
10414 Examples of literals:
10415
10416 14
10417 3.14159_26536 -- a real literal
10418 1_345 -- an integer literal
10419 'A' -- a character literal
10420 "Some Text" -- a string literal
10421
10422 \1f
10423 File: arm2012.info, Node: 4.3, Next: 4.4, Prev: 4.2, Up: 4
10424
10425 4.3 Aggregates
10426 ==============
10427
10428 1
10429 An aggregate combines component values into a composite value of an
10430 array type, record type, or record extension.
10431
10432 _Syntax_
10433
10434 2
10435 aggregate ::= record_aggregate | extension_aggregate |
10436 array_aggregate
10437
10438 _Name Resolution Rules_
10439
10440 3/2
10441 The expected type for an aggregate shall be a single array type, record
10442 type, or record extension.
10443
10444 _Legality Rules_
10445
10446 4
10447 An aggregate shall not be of a class-wide type.
10448
10449 _Dynamic Semantics_
10450
10451 5
10452 For the evaluation of an aggregate, an anonymous object is created and
10453 values for the components or ancestor part are obtained (as described in
10454 the subsequent subclause for each kind of the aggregate) and assigned
10455 into the corresponding components or ancestor part of the anonymous
10456 object. Obtaining the values and the assignments occur in an arbitrary
10457 order. The value of the aggregate is the value of this object.
10458
10459 6
10460 If an aggregate is of a tagged type, a check is made that its value
10461 belongs to the first subtype of the type. Constraint_Error is raised if
10462 this check fails.
10463
10464 * Menu:
10465
10466 * 4.3.1 :: Record Aggregates
10467 * 4.3.2 :: Extension Aggregates
10468 * 4.3.3 :: Array Aggregates
10469
10470 \1f
10471 File: arm2012.info, Node: 4.3.1, Next: 4.3.2, Up: 4.3
10472
10473 4.3.1 Record Aggregates
10474 -----------------------
10475
10476 1
10477 In a record_aggregate, a value is specified for each component of the
10478 record or record extension value, using either a named or a positional
10479 association.
10480
10481 _Syntax_
10482
10483 2
10484 record_aggregate ::= (record_component_association_list)
10485
10486 3
10487 record_component_association_list ::=
10488 record_component_association {, record_component_association}
10489 | null record
10490
10491 4/2
10492 record_component_association ::=
10493 [component_choice_list =>] expression
10494 | component_choice_list => <>
10495
10496 5
10497 component_choice_list ::=
10498 component_selector_name {| component_selector_name}
10499 | others
10500
10501 6
10502 A record_component_association (*note 4.3.1: S0109.) is a named
10503 component association if it has a component_choice_list; otherwise,
10504 it is a positional component association. Any positional component
10505 associations shall precede any named component associations. If
10506 there is a named association with a component_choice_list of
10507 others, it shall come last.
10508
10509 7
10510 In the record_component_association_list (*note 4.3.1: S0108.) for
10511 a record_aggregate (*note 4.3.1: S0107.), if there is only one
10512 association, it shall be a named association.
10513
10514 _Name Resolution Rules_
10515
10516 8/2
10517 The expected type for a record_aggregate shall be a single record type
10518 or record extension.
10519
10520 9
10521 For the record_component_association_list (*note 4.3.1: S0108.) of a
10522 record_aggregate (*note 4.3.1: S0107.), all components of the composite
10523 value defined by the aggregate are needed; for the association list of
10524 an extension_aggregate, only those components not determined by the
10525 ancestor expression or subtype are needed (see *note 4.3.2::). Each
10526 selector_name (*note 4.1.3: S0099.) in a record_component_association
10527 (*note 4.3.1: S0109.) shall denote a needed component (including
10528 possibly a discriminant).
10529
10530 10
10531 The expected type for the expression of a record_component_association
10532 (*note 4.3.1: S0109.) is the type of the associated component(s); the
10533 associated component(s) are as follows:
10534
10535 11
10536 * For a positional association, the component (including possibly a
10537 discriminant) in the corresponding relative position (in the
10538 declarative region of the type), counting only the needed
10539 components;
10540
10541 12
10542 * For a named association with one or more component_selector_names,
10543 the named component(s);
10544
10545 13
10546 * For a named association with the reserved word others, all needed
10547 components that are not associated with some previous association.
10548
10549 _Legality Rules_
10550
10551 14
10552 If the type of a record_aggregate is a record extension, then it shall
10553 be a descendant of a record type, through one or more record extensions
10554 (and no private extensions).
10555
10556 15/3
10557 The reserved words null record may appear only if there are no
10558 components needed in a given record_component_association_list (*note
10559 4.3.1: S0108.).
10560
10561 16/3
10562 Each record_component_association other than an others choice with a <>
10563 shall have at least one associated component, and each needed component
10564 shall be associated with exactly one record_component_association (*note
10565 4.3.1: S0109.). If a record_component_association (*note 4.3.1: S0109.)
10566 with an expression has two or more associated components, all of them
10567 shall be of the same type, or all of them shall be of anonymous access
10568 types whose subtypes statically match.
10569
10570 17/3
10571 The value of a discriminant that governs a variant_part P shall be given
10572 by a static expression, unless P is nested within a variant V that is
10573 not selected by the discriminant value governing the variant_part
10574 enclosing V.
10575
10576 17.1/2
10577 A record_component_association for a discriminant without a
10578 default_expression shall have an expression rather than <>.
10579
10580 _Dynamic Semantics_
10581
10582 18
10583 The evaluation of a record_aggregate consists of the evaluation of the
10584 record_component_association_list (*note 4.3.1: S0108.).
10585
10586 19
10587 For the evaluation of a record_component_association_list (*note 4.3.1:
10588 S0108.), any per-object constraints (see *note 3.8::) for components
10589 specified in the association list are elaborated and any expressions are
10590 evaluated and converted to the subtype of the associated component. Any
10591 constraint elaborations and expression evaluations (and conversions)
10592 occur in an arbitrary order, except that the expression for a
10593 discriminant is evaluated (and converted) prior to the elaboration of
10594 any per-object constraint that depends on it, which in turn occurs prior
10595 to the evaluation and conversion of the expression for the component
10596 with the per-object constraint.
10597
10598 19.1/2
10599 For a record_component_association with an expression, the expression
10600 defines the value for the associated component(s). For a
10601 record_component_association with <>, if the component_declaration has a
10602 default_expression, that default_expression defines the value for the
10603 associated component(s); otherwise, the associated component(s) are
10604 initialized by default as for a stand-alone object of the component
10605 subtype (see *note 3.3.1::).
10606
10607 20
10608 The expression of a record_component_association is evaluated (and
10609 converted) once for each associated component.
10610
10611 NOTES
10612
10613 21
10614 7 For a record_aggregate with positional associations, expressions
10615 specifying discriminant values appear first since the
10616 known_discriminant_part is given first in the declaration of the
10617 type; they have to be in the same order as in the
10618 known_discriminant_part.
10619
10620 _Examples_
10621
10622 22
10623 Example of a record aggregate with positional associations:
10624
10625 23
10626 (4, July, 1776) -- see *note 3.8::
10627
10628 24
10629 Examples of record aggregates with named associations:
10630
10631 25
10632 (Day => 4, Month => July, Year => 1776)
10633 (Month => July, Day => 4, Year => 1776)
10634
10635 26
10636 (Disk, Closed, Track => 5, Cylinder => 12) -- see *note 3.8.1::
10637 (Unit => Disk, Status => Closed, Cylinder => 9, Track => 1)
10638
10639 27/2
10640 Examples of component associations with several choices:
10641
10642 28
10643 (Value => 0, Succ|Pred => new Cell'(0, null, null)) -- see *note 3.10.1::
10644
10645 29
10646 -- The allocator is evaluated twice: Succ and Pred designate different cells
10647
10648 29.1/2
10649 (Value => 0, Succ|Pred => <>) -- see *note 3.10.1::
10650
10651 29.2/2
10652 -- Succ and Pred will be set to null
10653
10654 30
10655 Examples of record aggregates for tagged types (see *note 3.9:: and
10656 *note 3.9.1::):
10657
10658 31
10659 Expression'(null record)
10660 Literal'(Value => 0.0)
10661 Painted_Point'(0.0, Pi/2.0, Paint => Red)
10662
10663 \1f
10664 File: arm2012.info, Node: 4.3.2, Next: 4.3.3, Prev: 4.3.1, Up: 4.3
10665
10666 4.3.2 Extension Aggregates
10667 --------------------------
10668
10669 1
10670 An extension_aggregate specifies a value for a type that is a record
10671 extension by specifying a value or subtype for an ancestor of the type,
10672 followed by associations for any components not determined by the
10673 ancestor_part.
10674
10675 _Syntax_
10676
10677 2
10678 extension_aggregate ::=
10679 (ancestor_part with record_component_association_list)
10680
10681 3
10682 ancestor_part ::= expression | subtype_mark
10683
10684 _Name Resolution Rules_
10685
10686 4/2
10687 The expected type for an extension_aggregate shall be a single type that
10688 is a record extension. If the ancestor_part is an expression, it is
10689 expected to be of any tagged type.
10690
10691 _Legality Rules_
10692
10693 5/3
10694 If the ancestor_part is a subtype_mark, it shall denote a specific
10695 tagged subtype. If the ancestor_part is an expression, it shall not be
10696 dynamically tagged. The type of the extension_aggregate shall be a
10697 descendant of the type of the ancestor_part (the ancestor type), through
10698 one or more record extensions (and no private extensions). If the
10699 ancestor_part is a subtype_mark, the view of the ancestor type from
10700 which the type is descended (see *note 7.3.1::) shall not have unknown
10701 discriminants.
10702
10703 5.1/3
10704 If the type of the ancestor_part is limited and at least one component
10705 is needed in the record_component_association_list, then the
10706 ancestor_part shall not be:
10707
10708 5.2/3
10709 * a call to a function with an unconstrained result subtype; nor
10710
10711 5.3/3
10712 * a parenthesized or qualified expression whose operand would violate
10713 this rule; nor
10714
10715 5.4/3
10716 * a conditional_expression having at least one dependent_expression
10717 that would violate this rule.
10718
10719 _Static Semantics_
10720
10721 6
10722 For the record_component_association_list (*note 4.3.1: S0108.) of an
10723 extension_aggregate (*note 4.3.2: S0111.), the only components needed
10724 are those of the composite value defined by the aggregate that are not
10725 inherited from the type of the ancestor_part (*note 4.3.2: S0112.), plus
10726 any inherited discriminants if the ancestor_part (*note 4.3.2: S0112.)
10727 is a subtype_mark (*note 3.2.2: S0028.) that denotes an unconstrained
10728 subtype.
10729
10730 _Dynamic Semantics_
10731
10732 7
10733 For the evaluation of an extension_aggregate, the
10734 record_component_association_list (*note 4.3.1: S0108.) is evaluated.
10735 If the ancestor_part is an expression, it is also evaluated; if the
10736 ancestor_part is a subtype_mark, the components of the value of the
10737 aggregate not given by the record_component_association_list (*note
10738 4.3.1: S0108.) are initialized by default as for an object of the
10739 ancestor type. Any implicit initializations or evaluations are
10740 performed in an arbitrary order, except that the expression for a
10741 discriminant is evaluated prior to any other evaluation or
10742 initialization that depends on it.
10743
10744 8/3
10745 If the type of the ancestor_part has discriminants and the ancestor_part
10746 is not a subtype_mark that denotes an unconstrained subtype, then a
10747 check is made that each discriminant determined by the ancestor_part has
10748 the value specified for a corresponding discriminant, if any, either in
10749 the record_component_association_list (*note 4.3.1: S0108.), or in the
10750 derived_type_definition for some ancestor of the type of the
10751 extension_aggregate. Constraint_Error is raised if this check fails.
10752
10753 NOTES
10754
10755 9
10756 8 If all components of the value of the extension_aggregate are
10757 determined by the ancestor_part, then the
10758 record_component_association_list (*note 4.3.1: S0108.) is required
10759 to be simply null record.
10760
10761 10
10762 9 If the ancestor_part is a subtype_mark, then its type can be
10763 abstract. If its type is controlled, then as the last step of
10764 evaluating the aggregate, the Initialize procedure of the ancestor
10765 type is called, unless the Initialize procedure is abstract (see
10766 *note 7.6::).
10767
10768 _Examples_
10769
10770 11
10771 Examples of extension aggregates (for types defined in *note 3.9.1::):
10772
10773 12
10774 Painted_Point'(Point with Red)
10775 (Point'(P) with Paint => Black)
10776
10777 13
10778 (Expression with Left => 1.2, Right => 3.4)
10779 Addition'(Binop with null record)
10780 -- presuming Binop is of type Binary_Operation
10781
10782 \1f
10783 File: arm2012.info, Node: 4.3.3, Prev: 4.3.2, Up: 4.3
10784
10785 4.3.3 Array Aggregates
10786 ----------------------
10787
10788 1
10789 In an array_aggregate, a value is specified for each component of an
10790 array, either positionally or by its index. For a
10791 positional_array_aggregate, the components are given in increasing-index
10792 order, with a final others, if any, representing any remaining
10793 components. For a named_array_aggregate, the components are identified
10794 by the values covered by the discrete_choices.
10795
10796 _Syntax_
10797
10798 2
10799 array_aggregate ::=
10800 positional_array_aggregate | named_array_aggregate
10801
10802 3/2
10803 positional_array_aggregate ::=
10804 (expression, expression {, expression})
10805 | (expression {, expression}, others => expression)
10806 | (expression {, expression}, others => <>)
10807
10808 4
10809 named_array_aggregate ::=
10810 (array_component_association {, array_component_association})
10811
10812 5/2
10813 array_component_association ::=
10814 discrete_choice_list => expression
10815 | discrete_choice_list => <>
10816
10817 6
10818 An n-dimensional array_aggregate is one that is written as n levels of
10819 nested array_aggregates (or at the bottom level, equivalent
10820 string_literals). For the multidimensional case (n >= 2) the
10821 array_aggregates (or equivalent string_literals) at the n-1 lower levels
10822 are called subaggregates of the enclosing n-dimensional array_aggregate.
10823 The expressions of the bottom level subaggregates (or of the
10824 array_aggregate itself if one-dimensional) are called the array
10825 component expressions of the enclosing n-dimensional array_aggregate.
10826
10827 _Name Resolution Rules_
10828
10829 7/2
10830 The expected type for an array_aggregate (that is not a subaggregate)
10831 shall be a single array type. The component type of this array type is
10832 the expected type for each array component expression of the
10833 array_aggregate.
10834
10835 8
10836 The expected type for each discrete_choice in any discrete_choice_list
10837 of a named_array_aggregate is the type of the corresponding index; the
10838 corresponding index for an array_aggregate that is not a subaggregate is
10839 the first index of its type; for an (n-m)-dimensional subaggregate
10840 within an array_aggregate of an n-dimensional type, the corresponding
10841 index is the index in position m+1.
10842
10843 _Legality Rules_
10844
10845 9
10846 An array_aggregate of an n-dimensional array type shall be written as an
10847 n-dimensional array_aggregate.
10848
10849 10
10850 An others choice is allowed for an array_aggregate only if an applicable
10851 index constraint applies to the array_aggregate. An applicable index
10852 constraint is a constraint provided by certain contexts where an
10853 array_aggregate is permitted that can be used to determine the bounds of
10854 the array value specified by the aggregate. Each of the following
10855 contexts (and none other) defines an applicable index constraint:
10856
10857 11/2
10858 * For an explicit_actual_parameter, an
10859 explicit_generic_actual_parameter, the expression of a return
10860 statement, the initialization expression in an object_declaration
10861 (*note 3.3.1: S0032.), or a default_expression (*note 3.7: S0063.)
10862 (for a parameter or a component), when the nominal subtype of the
10863 corresponding formal parameter, generic formal parameter, function
10864 return object, object, or component is a constrained array subtype,
10865 the applicable index constraint is the constraint of the subtype;
10866
10867 12
10868 * For the expression of an assignment_statement where the name
10869 denotes an array variable, the applicable index constraint is the
10870 constraint of the array variable;
10871
10872 13
10873 * For the operand of a qualified_expression whose subtype_mark
10874 denotes a constrained array subtype, the applicable index
10875 constraint is the constraint of the subtype;
10876
10877 14
10878 * For a component expression in an aggregate, if the component's
10879 nominal subtype is a constrained array subtype, the applicable
10880 index constraint is the constraint of the subtype;
10881
10882 15/3
10883 * For a parenthesized expression, the applicable index constraint is
10884 that, if any, defined for the expression;
10885
10886 15.1/3
10887 * For a conditional_expression, the applicable index constraint for
10888 each dependent_expression is that, if any, defined for the
10889 conditional_expression.
10890
10891 16
10892 The applicable index constraint applies to an array_aggregate that
10893 appears in such a context, as well as to any subaggregates thereof. In
10894 the case of an explicit_actual_parameter (or default_expression) for a
10895 call on a generic formal subprogram, no applicable index constraint is
10896 defined.
10897
10898 17/3
10899 The discrete_choice_list of an array_component_association is allowed to
10900 have a discrete_choice that is a nonstatic choice_expression or that is
10901 a subtype_indication or range that defines a nonstatic or null range,
10902 only if it is the single discrete_choice of its discrete_choice_list,
10903 and there is only one array_component_association in the
10904 array_aggregate.
10905
10906 18/3
10907 In a named_array_aggregate where all discrete_choices are static, no two
10908 discrete_choices are allowed to cover the same value (see *note
10909 3.8.1::); if there is no others choice, the discrete_choices taken
10910 together shall exactly cover a contiguous sequence of values of the
10911 corresponding index type.
10912
10913 19
10914 A bottom level subaggregate of a multidimensional array_aggregate of a
10915 given array type is allowed to be a string_literal only if the component
10916 type of the array type is a character type; each character of such a
10917 string_literal shall correspond to a defining_character_literal of the
10918 component type.
10919
10920 _Static Semantics_
10921
10922 20
10923 A subaggregate that is a string_literal is equivalent to one that is a
10924 positional_array_aggregate of the same length, with each expression
10925 being the character_literal for the corresponding character of the
10926 string_literal.
10927
10928 _Dynamic Semantics_
10929
10930 21
10931 The evaluation of an array_aggregate of a given array type proceeds in
10932 two steps:
10933
10934 22
10935 1. Any discrete_choices of this aggregate and of its subaggregates
10936 are evaluated in an arbitrary order, and converted to the
10937 corresponding index type;
10938
10939 23
10940 2. The array component expressions of the aggregate are evaluated
10941 in an arbitrary order and their values are converted to the
10942 component subtype of the array type; an array component expression
10943 is evaluated once for each associated component.
10944
10945 23.1/2
10946 Each expression in an array_component_association defines the value for
10947 the associated component(s). For an array_component_association with
10948 <>, the associated component(s) are initialized by default as for a
10949 stand-alone object of the component subtype (see *note 3.3.1::).
10950
10951 24
10952 The bounds of the index range of an array_aggregate (including a
10953 subaggregate) are determined as follows:
10954
10955 25
10956 * For an array_aggregate with an others choice, the bounds are those
10957 of the corresponding index range from the applicable index
10958 constraint;
10959
10960 26
10961 * For a positional_array_aggregate (or equivalent string_literal)
10962 without an others choice, the lower bound is that of the
10963 corresponding index range in the applicable index constraint, if
10964 defined, or that of the corresponding index subtype, if not; in
10965 either case, the upper bound is determined from the lower bound and
10966 the number of expressions (or the length of the string_literal);
10967
10968 27
10969 * For a named_array_aggregate without an others choice, the bounds
10970 are determined by the smallest and largest index values covered by
10971 any discrete_choice_list.
10972
10973 28
10974 For an array_aggregate, a check is made that the index range defined by
10975 its bounds is compatible with the corresponding index subtype.
10976
10977 29/3
10978 For an array_aggregate with an others choice, a check is made that no
10979 expression or <> is specified for an index value outside the bounds
10980 determined by the applicable index constraint.
10981
10982 30
10983 For a multidimensional array_aggregate, a check is made that all
10984 subaggregates that correspond to the same index have the same bounds.
10985
10986 31
10987 The exception Constraint_Error is raised if any of the above checks
10988 fail.
10989
10990 NOTES
10991
10992 32/3
10993 10 In an array_aggregate, positional notation may only be used
10994 with two or more expressions; a single expression in parentheses is
10995 interpreted as a parenthesized expression. A
10996 named_array_aggregate, such as (1 => X), may be used to specify an
10997 array with a single component.
10998
10999 _Examples_
11000
11001 33
11002 Examples of array aggregates with positional associations:
11003
11004 34
11005 (7, 9, 5, 1, 3, 2, 4, 8, 6, 0)
11006 Table'(5, 8, 4, 1, others => 0) -- see *note 3.6::
11007
11008 35
11009 Examples of array aggregates with named associations:
11010
11011 36
11012 (1 .. 5 => (1 .. 8 => 0.0)) -- two-dimensional
11013 (1 .. N => new Cell) -- N new cells, in particular for N = 0
11014
11015 37
11016 Table'(2 | 4 | 10 => 1, others => 0)
11017 Schedule'(Mon .. Fri => True, others => False) -- see *note 3.6::
11018 Schedule'(Wed | Sun => False, others => True)
11019 Vector'(1 => 2.5) -- single-component vector
11020
11021 38
11022 Examples of two-dimensional array aggregates:
11023
11024 39
11025 -- Three aggregates for the same value of subtype Matrix(1..2,1..3) (see *note 3.6::):
11026
11027 40
11028 ((1.1, 1.2, 1.3), (2.1, 2.2, 2.3))
11029 (1 => (1.1, 1.2, 1.3), 2 => (2.1, 2.2, 2.3))
11030 (1 => (1 => 1.1, 2 => 1.2, 3 => 1.3), 2 => (1 => 2.1, 2 => 2.2, 3 => 2.3))
11031
11032 41
11033 Examples of aggregates as initial values:
11034
11035 42
11036 A : Table := (7, 9, 5, 1, 3, 2, 4, 8, 6, 0); -- A(1)=7, A(10)=0
11037 B : Table := (2 | 4 | 10 => 1, others => 0); -- B(1)=0, B(10)=1
11038 C : constant Matrix := (1 .. 5 => (1 .. 8 => 0.0)); -- C'Last(1)=5, C'Last(2)=8
11039
11040 43
11041 D : Bit_Vector(M .. N) := (M .. N => True); -- see *note 3.6::
11042 E : Bit_Vector(M .. N) := (others => True);
11043 F : String(1 .. 1) := (1 => 'F'); -- a one component aggregate: same as "F"
11044
11045 44/2
11046 Example of an array aggregate with defaulted others choice and with an
11047 applicable index constraint provided by an enclosing record aggregate:
11048
11049 45/2
11050 Buffer'(Size => 50, Pos => 1, Value => String'('x', others => <>)) -- see *note 3.7::
11051
11052 \1f
11053 File: arm2012.info, Node: 4.4, Next: 4.5, Prev: 4.3, Up: 4
11054
11055 4.4 Expressions
11056 ===============
11057
11058 1/3
11059 An expression is a formula that defines the computation or retrieval of
11060 a value. In this International Standard, the term "expression" refers
11061 to a construct of the syntactic category expression or of any of the
11062 following categories: choice_expression, choice_relation, relation,
11063 simple_expression, term, factor, primary, conditional_expression,
11064 quantified_expression.
11065
11066 _Syntax_
11067
11068 2
11069 expression ::=
11070 relation {and relation} | relation {and then relation}
11071 | relation {or relation} | relation {or else relation}
11072 | relation {xor relation}
11073
11074 2.1/3
11075 choice_expression ::=
11076 choice_relation {and choice_relation}
11077 | choice_relation {or choice_relation}
11078 | choice_relation {xor choice_relation}
11079 | choice_relation {and then choice_relation}
11080 | choice_relation {or else choice_relation}
11081
11082 2.2/3
11083 choice_relation ::=
11084 simple_expression [relational_operator simple_expression]
11085
11086 3/3
11087 relation ::=
11088 simple_expression [relational_operator simple_expression]
11089 | simple_expression [not] in membership_choice_list
11090
11091 3.1/3
11092 membership_choice_list ::= membership_choice {| membership_choice}
11093
11094 3.2/3
11095 membership_choice ::= choice_expression | range | subtype_mark
11096
11097 4
11098 simple_expression ::= [unary_adding_operator] term {
11099 binary_adding_operator term}
11100
11101 5
11102 term ::= factor {multiplying_operator factor}
11103
11104 6
11105 factor ::= primary [** primary] | abs primary | not primary
11106
11107 7/3
11108 primary ::=
11109 numeric_literal | null | string_literal | aggregate
11110 | name | allocator | (expression)
11111 | (conditional_expression) | (quantified_expression)
11112
11113 _Name Resolution Rules_
11114
11115 8
11116 A name used as a primary shall resolve to denote an object or a value.
11117
11118 _Static Semantics_
11119
11120 9
11121 Each expression has a type; it specifies the computation or retrieval of
11122 a value of that type.
11123
11124 _Dynamic Semantics_
11125
11126 10
11127 The value of a primary that is a name denoting an object is the value of
11128 the object.
11129
11130 _Implementation Permissions_
11131
11132 11
11133 For the evaluation of a primary that is a name denoting an object of an
11134 unconstrained numeric subtype, if the value of the object is outside the
11135 base range of its type, the implementation may either raise
11136 Constraint_Error or return the value of the object.
11137
11138 _Examples_
11139
11140 12
11141 Examples of primaries:
11142
11143 13
11144 4.0 -- real literal
11145 Pi -- named number
11146 (1 .. 10 => 0) -- array aggregate
11147 Sum -- variable
11148 Integer'Last -- attribute
11149 Sine(X) -- function call
11150 Color'(Blue) -- qualified expression
11151 Real(M*N) -- conversion
11152 (Line_Count + 10) -- parenthesized expression
11153
11154 14
11155 Examples of expressions:
11156
11157 15/2
11158 Volume -- primary
11159 not Destroyed -- factor
11160 2*Line_Count -- term
11161 -4.0 -- simple expression
11162 -4.0 + A -- simple expression
11163 B**2 - 4.0*A*C -- simple expression
11164 R*Sin([Unicode 952])*Cos([Unicode 966]) -- simple expression
11165 Password(1 .. 3) = "Bwv" -- relation
11166 Count in Small_Int -- relation
11167 Count not in Small_Int -- relation
11168 Index = 0 or Item_Hit -- expression
11169 (Cold and Sunny) or Warm -- expression (parentheses are required)
11170 A**(B**C) -- expression (parentheses are required)
11171
11172 \1f
11173 File: arm2012.info, Node: 4.5, Next: 4.6, Prev: 4.4, Up: 4
11174
11175 4.5 Operators and Expression Evaluation
11176 =======================================
11177
11178 1
11179 The language defines the following six categories of operators (given in
11180 order of increasing precedence). The corresponding operator_symbols,
11181 and only those, can be used as designators in declarations of functions
11182 for user-defined operators. See *note 6.6::, "*note 6.6:: Overloading
11183 of Operators".
11184
11185 _Syntax_
11186
11187 2
11188 logical_operator ::= and | or | xor
11189
11190 3
11191 relational_operator ::= = | /= | < | <= | > | >=
11192
11193 4
11194 binary_adding_operator ::= + | - | &
11195
11196 5
11197 unary_adding_operator ::= + | -
11198
11199 6
11200 multiplying_operator ::= * | / | mod | rem
11201
11202 7
11203 highest_precedence_operator ::= ** | abs | not
11204
11205 _Static Semantics_
11206
11207 8
11208 For a sequence of operators of the same precedence level, the operators
11209 are associated with their operands in textual order from left to right.
11210 Parentheses can be used to impose specific associations.
11211
11212 9
11213 For each form of type definition, certain of the above operators are
11214 predefined; that is, they are implicitly declared immediately after the
11215 type definition. For each such implicit operator declaration, the
11216 parameters are called Left and Right for binary operators; the single
11217 parameter is called Right for unary operators. An expression of the
11218 form X op Y, where op is a binary operator, is equivalent to a
11219 function_call of the form "op"(X, Y). An expression of the form op Y,
11220 where op is a unary operator, is equivalent to a function_call of the
11221 form "op"(Y). The predefined operators and their effects are described
11222 in subclauses *note 4.5.1:: through *note 4.5.6::.
11223
11224 _Dynamic Semantics_
11225
11226 10
11227 The predefined operations on integer types either yield the
11228 mathematically correct result or raise the exception Constraint_Error.
11229 For implementations that support the Numerics Annex, the predefined
11230 operations on real types yield results whose accuracy is defined in
11231 *note Annex G::, or raise the exception Constraint_Error.
11232
11233 _Implementation Requirements_
11234
11235 11
11236 The implementation of a predefined operator that delivers a result of an
11237 integer or fixed point type may raise Constraint_Error only if the
11238 result is outside the base range of the result type.
11239
11240 12
11241 The implementation of a predefined operator that delivers a result of a
11242 floating point type may raise Constraint_Error only if the result is
11243 outside the safe range of the result type.
11244
11245 _Implementation Permissions_
11246
11247 13
11248 For a sequence of predefined operators of the same precedence level (and
11249 in the absence of parentheses imposing a specific association), an
11250 implementation may impose any association of the operators with operands
11251 so long as the result produced is an allowed result for the
11252 left-to-right association, but ignoring the potential for failure of
11253 language-defined checks in either the left-to-right or chosen order of
11254 association.
11255
11256 NOTES
11257
11258 14
11259 11 The two operands of an expression of the form X op Y, where op
11260 is a binary operator, are evaluated in an arbitrary order, as for
11261 any function_call (see *note 6.4::).
11262
11263 _Examples_
11264
11265 15
11266 Examples of precedence:
11267
11268 16
11269 not Sunny or Warm -- same as (not Sunny) or Warm
11270 X > 4.0 and Y > 0.0 -- same as (X > 4.0) and (Y > 0.0)
11271
11272 17
11273 -4.0*A**2 -- same as -(4.0 * (A**2))
11274 abs(1 + A) + B -- same as (abs (1 + A)) + B
11275 Y**(-3) -- parentheses are necessary
11276 A / B * C -- same as (A/B)*C
11277 A + (B + C) -- evaluate B + C before adding it to A
11278
11279 * Menu:
11280
11281 * 4.5.1 :: Logical Operators and Short-circuit Control Forms
11282 * 4.5.2 :: Relational Operators and Membership Tests
11283 * 4.5.3 :: Binary Adding Operators
11284 * 4.5.4 :: Unary Adding Operators
11285 * 4.5.5 :: Multiplying Operators
11286 * 4.5.6 :: Highest Precedence Operators
11287 * 4.5.7 :: Conditional Expressions
11288 * 4.5.8 :: Quantified Expressions
11289
11290 \1f
11291 File: arm2012.info, Node: 4.5.1, Next: 4.5.2, Up: 4.5
11292
11293 4.5.1 Logical Operators and Short-circuit Control Forms
11294 -------------------------------------------------------
11295
11296 _Name Resolution Rules_
11297
11298 1
11299 An expression consisting of two relations connected by and then or or
11300 else (a short-circuit control form) shall resolve to be of some boolean
11301 type; the expected type for both relations is that same boolean type.
11302
11303 _Static Semantics_
11304
11305 2
11306 The following logical operators are predefined for every boolean type T,
11307 for every modular type T, and for every one-dimensional array type T
11308 whose component type is a boolean type:
11309
11310 3
11311 function "and"(Left, Right : T) return T
11312 function "or" (Left, Right : T) return T
11313 function "xor"(Left, Right : T) return T
11314
11315 4
11316 For boolean types, the predefined logical operators and, or, and xor
11317 perform the conventional operations of conjunction, inclusive
11318 disjunction, and exclusive disjunction, respectively.
11319
11320 5
11321 For modular types, the predefined logical operators are defined on a
11322 bit-by-bit basis, using the binary representation of the value of the
11323 operands to yield a binary representation for the result, where zero
11324 represents False and one represents True. If this result is outside the
11325 base range of the type, a final subtraction by the modulus is performed
11326 to bring the result into the base range of the type.
11327
11328 6
11329 The logical operators on arrays are performed on a
11330 component-by-component basis on matching components (as for equality --
11331 see *note 4.5.2::), using the predefined logical operator for the
11332 component type. The bounds of the resulting array are those of the left
11333 operand.
11334
11335 _Dynamic Semantics_
11336
11337 7
11338 The short-circuit control forms and then and or else deliver the same
11339 result as the corresponding predefined and and or operators for boolean
11340 types, except that the left operand is always evaluated first, and the
11341 right operand is not evaluated if the value of the left operand
11342 determines the result.
11343
11344 8
11345 For the logical operators on arrays, a check is made that for each
11346 component of the left operand there is a matching component of the right
11347 operand, and vice versa. Also, a check is made that each component of
11348 the result belongs to the component subtype. The exception
11349 Constraint_Error is raised if either of the above checks fails.
11350
11351 NOTES
11352
11353 9
11354 12 The conventional meaning of the logical operators is given by
11355 the following truth table:
11356
11357 10
11358 A B (A and B) (A or B) (A xor B)
11359
11360 True True True True False
11361 True False False True True
11362 False True False True True
11363 False False False False False
11364
11365 _Examples_
11366
11367 11
11368 Examples of logical operators:
11369
11370 12
11371 Sunny or Warm
11372 Filter(1 .. 10) and Filter(15 .. 24) -- see *note 3.6.1::
11373
11374 13
11375 Examples of short-circuit control forms:
11376
11377 14
11378 Next_Car.Owner /= null and then Next_Car.Owner.Age > 25 -- see *note 3.10.1::
11379 N = 0 or else A(N) = Hit_Value
11380
11381 \1f
11382 File: arm2012.info, Node: 4.5.2, Next: 4.5.3, Prev: 4.5.1, Up: 4.5
11383
11384 4.5.2 Relational Operators and Membership Tests
11385 -----------------------------------------------
11386
11387 1
11388 The equality operators = (equals) and /= (not equals) are predefined for
11389 nonlimited types. The other relational_operators are the ordering
11390 operators < (less than), <= (less than or equal), > (greater than), and
11391 >= (greater than or equal). The ordering operators are predefined for
11392 scalar types, and for discrete array types, that is, one-dimensional
11393 array types whose components are of a discrete type.
11394
11395 2/3
11396 A membership test, using in or not in, determines whether or not a value
11397 belongs to any given subtype or range, is equal to any given value, has
11398 a tag that identifies a type that is covered by a given type, or is
11399 convertible to and has an accessibility level appropriate for a given
11400 access type. Membership tests are allowed for all types.
11401
11402 _Name Resolution Rules_
11403
11404 3/3
11405 The tested type of a membership test is determined by the
11406 membership_choices of the membership_choice_list. Either all
11407 membership_choices of the membership_choice_list shall resolve to the
11408 same type, which is the tested type; or each membership_choice shall be
11409 of an elementary type, and the tested type shall be covered by each of
11410 these elementary types.
11411
11412 3.1/3
11413 If the tested type is tagged, then the simple_expression shall resolve
11414 to be of a type that is convertible (see *note 4.6::) to the tested
11415 type; if untagged, the expected type for the simple_expression is the
11416 tested type. The expected type of a choice_expression in a
11417 membership_choice, and of a simple_expression of a range in a
11418 membership_choice, is the tested type of the membership operation.
11419
11420 _Legality Rules_
11421
11422 4
11423 For a membership test, if the simple_expression is of a tagged
11424 class-wide type, then the tested type shall be (visibly) tagged.
11425
11426 4.1/3
11427 If a membership test includes one or more choice_expressions and the
11428 tested type of the membership test is limited, then the tested type of
11429 the membership test shall have a visible primitive equality operator.
11430
11431 _Static Semantics_
11432
11433 5
11434 The result type of a membership test is the predefined type Boolean.
11435
11436 6
11437 The equality operators are predefined for every specific type T that is
11438 not limited, and not an anonymous access type, with the following
11439 specifications:
11440
11441 7
11442 function "=" (Left, Right : T) return Boolean
11443 function "/="(Left, Right : T) return Boolean
11444
11445 7.1/2
11446 The following additional equality operators for the universal_access
11447 type are declared in package Standard for use with anonymous access
11448 types:
11449
11450 7.2/2
11451 function "=" (Left, Right : universal_access) return Boolean
11452 function "/="(Left, Right : universal_access) return Boolean
11453
11454 8
11455 The ordering operators are predefined for every specific scalar type T,
11456 and for every discrete array type T, with the following specifications:
11457
11458 9
11459 function "<" (Left, Right : T) return Boolean
11460 function "<="(Left, Right : T) return Boolean
11461 function ">" (Left, Right : T) return Boolean
11462 function ">="(Left, Right : T) return Boolean
11463
11464 _Name Resolution Rules_
11465
11466 9.1/2
11467 At least one of the operands of an equality operator for
11468 universal_access shall be of a specific anonymous access type. Unless
11469 the predefined equality operator is identified using an expanded name
11470 with prefix denoting the package Standard, neither operand shall be of
11471 an access-to-object type whose designated type is D or D'Class, where D
11472 has a user-defined primitive equality operator such that:
11473
11474 9.2/2
11475 * its result type is Boolean;
11476
11477 9.3/3
11478 * it is declared immediately within the same declaration list as D or
11479 any partial or incomplete view of D; and
11480
11481 9.4/2
11482 * at least one of its operands is an access parameter with designated
11483 type D.
11484
11485 _Legality Rules_
11486
11487 9.5/2
11488 At least one of the operands of the equality operators for
11489 universal_access shall be of type universal_access, or both shall be of
11490 access-to-object types, or both shall be of access-to-subprogram types.
11491 Further:
11492
11493 9.6/2
11494 * When both are of access-to-object types, the designated types shall
11495 be the same or one shall cover the other, and if the designated
11496 types are elementary or array types, then the designated subtypes
11497 shall statically match;
11498
11499 9.7/2
11500 * When both are of access-to-subprogram types, the designated
11501 profiles shall be subtype conformant.
11502
11503 9.8/3
11504 If the profile of an explicitly declared primitive equality operator of
11505 an untagged record type is type conformant with that of the
11506 corresponding predefined equality operator, the declaration shall occur
11507 before the type is frozen. In addition, if the untagged record type has
11508 a nonlimited partial view, then the declaration shall occur in the
11509 visible part of the enclosing package. In addition to the places where
11510 Legality Rules normally apply (see *note 12.3::), this rule applies also
11511 in the private part of an instance of a generic unit.
11512
11513 _Dynamic Semantics_
11514
11515 10
11516 For discrete types, the predefined relational operators are defined in
11517 terms of corresponding mathematical operations on the position numbers
11518 of the values of the operands.
11519
11520 11
11521 For real types, the predefined relational operators are defined in terms
11522 of the corresponding mathematical operations on the values of the
11523 operands, subject to the accuracy of the type.
11524
11525 12
11526 Two access-to-object values are equal if they designate the same object,
11527 or if both are equal to the null value of the access type.
11528
11529 13
11530 Two access-to-subprogram values are equal if they are the result of the
11531 same evaluation of an Access attribute_reference, or if both are equal
11532 to the null value of the access type. Two access-to-subprogram values
11533 are unequal if they designate different subprograms. It is unspecified
11534 whether two access values that designate the same subprogram but are the
11535 result of distinct evaluations of Access attribute_references are equal
11536 or unequal.
11537
11538 14/3
11539 For a type extension, predefined equality is defined in terms of the
11540 primitive (possibly user-defined) equals operator for the parent type
11541 and for any components that have a record type in the extension part,
11542 and predefined equality for any other components not inherited from the
11543 parent type.
11544
11545 14.1/3
11546 For a derived type whose parent is an untagged record type, predefined
11547 equality is defined in terms of the primitive (possibly user-defined)
11548 equals operator of the parent type.
11549
11550 15/3
11551 For a private type, if its full type is a record type, predefined
11552 equality is defined in terms of the primitive equals operator of the
11553 full type; otherwise, predefined equality for the private type is that
11554 of its full type.
11555
11556 16
11557 For other composite types, the predefined equality operators (and
11558 certain other predefined operations on composite types -- see *note
11559 4.5.1:: and *note 4.6::) are defined in terms of the corresponding
11560 operation on matching components, defined as follows:
11561
11562 17
11563 * For two composite objects or values of the same non-array type,
11564 matching components are those that correspond to the same
11565 component_declaration or discriminant_specification;
11566
11567 18
11568 * For two one-dimensional arrays of the same type, matching
11569 components are those (if any) whose index values match in the
11570 following sense: the lower bounds of the index ranges are defined
11571 to match, and the successors of matching indices are defined to
11572 match;
11573
11574 19
11575 * For two multidimensional arrays of the same type, matching
11576 components are those whose index values match in successive index
11577 positions.
11578
11579 20
11580 The analogous definitions apply if the types of the two objects or
11581 values are convertible, rather than being the same.
11582
11583 21
11584 Given the above definition of matching components, the result of the
11585 predefined equals operator for composite types (other than for those
11586 composite types covered earlier) is defined as follows:
11587
11588 22
11589 * If there are no components, the result is defined to be True;
11590
11591 23
11592 * If there are unmatched components, the result is defined to be
11593 False;
11594
11595 24/3
11596 * Otherwise, the result is defined in terms of the primitive equals
11597 operator for any matching components that are records, and the
11598 predefined equals for any other matching components.
11599
11600 24.1/3
11601 If the primitive equals operator for an untagged record type is
11602 abstract, then Program_Error is raised at the point of any (implicit)
11603 call to that abstract subprogram.
11604
11605 24.2/1
11606 For any composite type, the order in which "=" is called for components
11607 is unspecified. Furthermore, if the result can be determined before
11608 calling "=" on some components, it is unspecified whether "=" is called
11609 on those components.
11610
11611 25
11612 The predefined "/=" operator gives the complementary result to the
11613 predefined "=" operator.
11614
11615 26/3
11616 For a discrete array type, the predefined ordering operators correspond
11617 to lexicographic order using the predefined order relation of the
11618 component type: A null array is lexicographically less than any array
11619 having at least one component. In the case of nonnull arrays, the left
11620 operand is lexicographically less than the right operand if the first
11621 component of the left operand is less than that of the right; otherwise,
11622 the left operand is lexicographically less than the right operand only
11623 if their first components are equal and the tail of the left operand is
11624 lexicographically less than that of the right (the tail consists of the
11625 remaining components beyond the first and can be null).
11626
11627 26.1/3
11628 An individual membership test is the membership test of a single
11629 membership_choice.
11630
11631 27/3
11632 For the evaluation of a membership test using in whose
11633 membership_choice_list has a single membership_choice, the
11634 simple_expression and the membership_choice are evaluated in an
11635 arbitrary order; the result is the result of the individual membership
11636 test for the membership_choice.
11637
11638 27.1/3
11639 For the evaluation of a membership test using in whose
11640 membership_choice_list has more than one membership_choice, the
11641 simple_expression of the membership test is evaluated first and the
11642 result of the operation is equivalent to that of a sequence consisting
11643 of an individual membership test on each membership_choice combined with
11644 the short-circuit control form or else.
11645
11646 28/3
11647 An individual membership test yields the result True if:
11648
11649 28.1/3
11650 * The membership_choice is a choice_expression, and the
11651 simple_expression is equal to the value of the membership_choice.
11652 If the tested type is a record type or a limited type, the test
11653 uses the primitive equality for the type; otherwise, the test uses
11654 predefined equality.
11655
11656 28.2/3
11657 * The membership_choice is a range and the value of the
11658 simple_expression belongs to the given range.
11659
11660 29/3
11661 * The membership_choice is a subtype_mark, the tested type is scalar,
11662 the value of the simple_expression belongs to the range of the
11663 named subtype, and the predicate of the named subtype evaluates to
11664 True.
11665
11666 30/3
11667 * The membership_choice is a subtype_mark, the tested type is not
11668 scalar, the value of the simple_expression satisfies any
11669 constraints of the named subtype, the predicate of the named
11670 subtype evaluates to True, and:
11671
11672 30.1/2
11673 * if the type of the simple_expression is class-wide, the
11674 value has a tag that identifies a type covered by the
11675 tested type;
11676
11677 30.2/3
11678 * if the tested type is an access type and the named
11679 subtype excludes null, the value of the simple_expression
11680 is not null;
11681
11682 30.3/3
11683 * if the tested type is a general access-to-object type,
11684 the type of the simple_expression is convertible to the
11685 tested type and its accessibility level is no deeper than
11686 that of the tested type; further, if the designated type
11687 of the tested type is tagged and the simple_expression is
11688 nonnull, the tag of the object designated by the value of
11689 the simple_expression is covered by the designated type
11690 of the tested type.
11691
11692 31/3
11693 Otherwise, the test yields the result False.
11694
11695 32
11696 A membership test using not in gives the complementary result to the
11697 corresponding membership test using in.
11698
11699 _Implementation Requirements_
11700
11701 32.1/1
11702 For all nonlimited types declared in language-defined packages, the "="
11703 and "/=" operators of the type shall behave as if they were the
11704 predefined equality operators for the purposes of the equality of
11705 composite types and generic formal types.
11706
11707 NOTES
11708
11709 33/2
11710 This paragraph was deleted.
11711
11712 34
11713 13 If a composite type has components that depend on
11714 discriminants, two values of this type have matching components if
11715 and only if their discriminants are equal. Two nonnull arrays have
11716 matching components if and only if the length of each dimension is
11717 the same for both.
11718
11719 _Examples_
11720
11721 35
11722 Examples of expressions involving relational operators and membership
11723 tests:
11724
11725 36
11726 X /= Y
11727
11728 37
11729 "" < "A" and "A" < "Aa" -- True
11730 "Aa" < "B" and "A" < "A " -- True
11731
11732 38/3
11733 My_Car = null -- True if My_Car has been set to null (see *note 3.10.1::)
11734 My_Car = Your_Car -- True if we both share the same car
11735 My_Car.all = Your_Car.all -- True if the two cars are identical
11736
11737 39/3
11738 N not in 1 .. 10 -- range membership test
11739 Today in Mon .. Fri -- range membership test
11740 Today in Weekday -- subtype membership test (see *note 3.5.1::)
11741 Card in Clubs | Spades -- list membership test (see *note 3.5.1::)
11742 Archive in Disk_Unit -- subtype membership test (see *note 3.8.1::)
11743 Tree.all in Addition'Class -- class membership test (see *note 3.9.1::)
11744
11745 \1f
11746 File: arm2012.info, Node: 4.5.3, Next: 4.5.4, Prev: 4.5.2, Up: 4.5
11747
11748 4.5.3 Binary Adding Operators
11749 -----------------------------
11750
11751 _Static Semantics_
11752
11753 1
11754 The binary adding operators + (addition) and - (subtraction) are
11755 predefined for every specific numeric type T with their conventional
11756 meaning. They have the following specifications:
11757
11758 2
11759 function "+"(Left, Right : T) return T
11760 function "-"(Left, Right : T) return T
11761
11762 3
11763 The concatenation operators & are predefined for every nonlimited,
11764 one-dimensional array type T with component type C. They have the
11765 following specifications:
11766
11767 4
11768 function "&"(Left : T; Right : T) return T
11769 function "&"(Left : T; Right : C) return T
11770 function "&"(Left : C; Right : T) return T
11771 function "&"(Left : C; Right : C) return T
11772
11773 _Dynamic Semantics_
11774
11775 5
11776 For the evaluation of a concatenation with result type T, if both
11777 operands are of type T, the result of the concatenation is a
11778 one-dimensional array whose length is the sum of the lengths of its
11779 operands, and whose components comprise the components of the left
11780 operand followed by the components of the right operand. If the left
11781 operand is a null array, the result of the concatenation is the right
11782 operand. Otherwise, the lower bound of the result is determined as
11783 follows:
11784
11785 6
11786 * If the ultimate ancestor of the array type was defined by a
11787 constrained_array_definition, then the lower bound of the result is
11788 that of the index subtype;
11789
11790 7
11791 * If the ultimate ancestor of the array type was defined by an
11792 unconstrained_array_definition, then the lower bound of the result
11793 is that of the left operand.
11794
11795 8
11796 The upper bound is determined by the lower bound and the length. A
11797 check is made that the upper bound of the result of the concatenation
11798 belongs to the range of the index subtype, unless the result is a null
11799 array. Constraint_Error is raised if this check fails.
11800
11801 9
11802 If either operand is of the component type C, the result of the
11803 concatenation is given by the above rules, using in place of such an
11804 operand an array having this operand as its only component (converted to
11805 the component subtype) and having the lower bound of the index subtype
11806 of the array type as its lower bound.
11807
11808 10
11809 The result of a concatenation is defined in terms of an assignment to an
11810 anonymous object, as for any function call (see *note 6.5::).
11811
11812 NOTES
11813
11814 11
11815 14 As for all predefined operators on modular types, the binary
11816 adding operators + and - on modular types include a final reduction
11817 modulo the modulus if the result is outside the base range of the
11818 type.
11819
11820 _Examples_
11821
11822 12
11823 Examples of expressions involving binary adding operators:
11824
11825 13
11826 Z + 0.1 -- Z has to be of a real type
11827
11828 14
11829 "A" & "BCD" -- concatenation of two string literals
11830 'A' & "BCD" -- concatenation of a character literal and a string literal
11831 'A' & 'A' -- concatenation of two character literals
11832
11833 \1f
11834 File: arm2012.info, Node: 4.5.4, Next: 4.5.5, Prev: 4.5.3, Up: 4.5
11835
11836 4.5.4 Unary Adding Operators
11837 ----------------------------
11838
11839 _Static Semantics_
11840
11841 1
11842 The unary adding operators + (identity) and - (negation) are predefined
11843 for every specific numeric type T with their conventional meaning. They
11844 have the following specifications:
11845
11846 2
11847 function "+"(Right : T) return T
11848 function "-"(Right : T) return T
11849
11850 NOTES
11851
11852 3
11853 15 For modular integer types, the unary adding operator -, when
11854 given a nonzero operand, returns the result of subtracting the
11855 value of the operand from the modulus; for a zero operand, the
11856 result is zero.
11857
11858 \1f
11859 File: arm2012.info, Node: 4.5.5, Next: 4.5.6, Prev: 4.5.4, Up: 4.5
11860
11861 4.5.5 Multiplying Operators
11862 ---------------------------
11863
11864 _Static Semantics_
11865
11866 1
11867 The multiplying operators * (multiplication), / (division), mod
11868 (modulus), and rem (remainder) are predefined for every specific integer
11869 type T:
11870
11871 2
11872 function "*" (Left, Right : T) return T
11873 function "/" (Left, Right : T) return T
11874 function "mod"(Left, Right : T) return T
11875 function "rem"(Left, Right : T) return T
11876
11877 3
11878 Signed integer multiplication has its conventional meaning.
11879
11880 4
11881 Signed integer division and remainder are defined by the relation:
11882
11883 5
11884 A = (A/B)*B + (A rem B)
11885
11886 6
11887 where (A rem B) has the sign of A and an absolute value less than the
11888 absolute value of B. Signed integer division satisfies the identity:
11889
11890 7
11891 (-A)/B = -(A/B) = A/(-B)
11892
11893 8/3
11894 The signed integer modulus operator is defined such that the result of A
11895 mod B is either zero, or has the sign of B and an absolute value less
11896 than the absolute value of B; in addition, for some signed integer value
11897 N, this result satisfies the relation:
11898
11899 9
11900 A = B*N + (A mod B)
11901
11902 10
11903 The multiplying operators on modular types are defined in terms of the
11904 corresponding signed integer operators, followed by a reduction modulo
11905 the modulus if the result is outside the base range of the type (which
11906 is only possible for the "*" operator).
11907
11908 11
11909 Multiplication and division operators are predefined for every specific
11910 floating point type T:
11911
11912 12
11913 function "*"(Left, Right : T) return T
11914 function "/"(Left, Right : T) return T
11915
11916 13
11917 The following multiplication and division operators, with an operand of
11918 the predefined type Integer, are predefined for every specific fixed
11919 point type T:
11920
11921 14
11922 function "*"(Left : T; Right : Integer) return T
11923 function "*"(Left : Integer; Right : T) return T
11924 function "/"(Left : T; Right : Integer) return T
11925
11926 15
11927 All of the above multiplying operators are usable with an operand of an
11928 appropriate universal numeric type. The following additional
11929 multiplying operators for root_real are predefined, and are usable when
11930 both operands are of an appropriate universal or root numeric type, and
11931 the result is allowed to be of type root_real, as in a
11932 number_declaration:
11933
11934 16
11935 function "*"(Left, Right : root_real) return root_real
11936 function "/"(Left, Right : root_real) return root_real
11937
11938 17
11939 function "*"(Left : root_real; Right : root_integer) return root_real
11940 function "*"(Left : root_integer; Right : root_real) return root_real
11941 function "/"(Left : root_real; Right : root_integer) return root_real
11942
11943 18
11944 Multiplication and division between any two fixed point types are
11945 provided by the following two predefined operators:
11946
11947 19
11948 function "*"(Left, Right : universal_fixed) return universal_fixed
11949 function "/"(Left, Right : universal_fixed) return universal_fixed
11950
11951 _Name Resolution Rules_
11952
11953 19.1/2
11954 The above two fixed-fixed multiplying operators shall not be used in a
11955 context where the expected type for the result is itself universal_fixed
11956 -- the context has to identify some other numeric type to which the
11957 result is to be converted, either explicitly or implicitly. Unless the
11958 predefined universal operator is identified using an expanded name with
11959 prefix denoting the package Standard, an explicit conversion is required
11960 on the result when using the above fixed-fixed multiplication operator
11961 if either operand is of a type having a user-defined primitive
11962 multiplication operator such that:
11963
11964 19.2/3
11965 * it is declared immediately within the same declaration list as the
11966 type or any partial or incomplete view thereof; and
11967
11968 19.3/2
11969 * both of its formal parameters are of a fixed-point type.
11970
11971 19.4/2
11972 A corresponding requirement applies to the universal fixed-fixed
11973 division operator.
11974
11975 Paragraph 20 was deleted.
11976
11977 _Dynamic Semantics_
11978
11979 21
11980 The multiplication and division operators for real types have their
11981 conventional meaning. For floating point types, the accuracy of the
11982 result is determined by the precision of the result type. For decimal
11983 fixed point types, the result is truncated toward zero if the
11984 mathematical result is between two multiples of the small of the
11985 specific result type (possibly determined by context); for ordinary
11986 fixed point types, if the mathematical result is between two multiples
11987 of the small, it is unspecified which of the two is the result.
11988
11989 22
11990 The exception Constraint_Error is raised by integer division, rem, and
11991 mod if the right operand is zero. Similarly, for a real type T with
11992 T'Machine_Overflows True, division by zero raises Constraint_Error.
11993
11994 NOTES
11995
11996 23
11997 16 For positive A and B, A/B is the quotient and A rem B is the
11998 remainder when A is divided by B. The following relations are
11999 satisfied by the rem operator:
12000
12001 24
12002 A rem (-B) = A rem B
12003 (-A) rem B = -(A rem B)
12004
12005 25
12006 17 For any signed integer K, the following identity holds:
12007
12008 26
12009 A mod B = (A + K*B) mod B
12010
12011 27
12012 The relations between signed integer division, remainder, and
12013 modulus are illustrated by the following table:
12014
12015 28
12016 A B A/B A rem B A mod B A B A/B A rem B A mod B
12017
12018 29
12019 10 5 2 0 0 -10 5 -2 0 0
12020 11 5 2 1 1 -11 5 -2 -1 4
12021 12 5 2 2 2 -12 5 -2 -2 3
12022 13 5 2 3 3 -13 5 -2 -3 2
12023 14 5 2 4 4 -14 5 -2 -4 1
12024
12025 30
12026 A B A/B A rem B A mod B A B A/B A rem B A mod B
12027
12028 10 -5 -2 0 0 -10 -5 2 0 0
12029 11 -5 -2 1 -4 -11 -5 2 -1 -1
12030 12 -5 -2 2 -3 -12 -5 2 -2 -2
12031 13 -5 -2 3 -2 -13 -5 2 -3 -3
12032 14 -5 -2 4 -1 -14 -5 2 -4 -4
12033
12034 _Examples_
12035
12036 31
12037 Examples of expressions involving multiplying operators:
12038
12039 32
12040 I : Integer := 1;
12041 J : Integer := 2;
12042 K : Integer := 3;
12043
12044 33
12045 X : Real := 1.0; -- see *note 3.5.7::
12046 Y : Real := 2.0;
12047
12048 34
12049 F : Fraction := 0.25; -- see *note 3.5.9::
12050 G : Fraction := 0.5;
12051
12052 35
12053 Expression Value Result Type
12054
12055 I*J 2 same as I and J, that is, Integer
12056 K/J 1 same as K and J, that is, Integer
12057 K mod J 1 same as K and J, that is, Integer
12058
12059 X/Y 0.5 same as X and Y, that is, Real
12060 F/2 0.125 same as F, that is, Fraction
12061
12062 3*F 0.75 same as F, that is, Fraction
12063 0.75*G 0.375 universal_fixed, implicitly convertible
12064 to any fixed point type
12065 Fraction(F*G) 0.125 Fraction, as stated by the conversion
12066 Real(J)*Y 4.0 Real, the type of both operands after
12067 conversion of J
12068
12069 \1f
12070 File: arm2012.info, Node: 4.5.6, Next: 4.5.7, Prev: 4.5.5, Up: 4.5
12071
12072 4.5.6 Highest Precedence Operators
12073 ----------------------------------
12074
12075 _Static Semantics_
12076
12077 1
12078 The highest precedence unary operator abs (absolute value) is predefined
12079 for every specific numeric type T, with the following specification:
12080
12081 2
12082 function "abs"(Right : T) return T
12083
12084 3
12085 The highest precedence unary operator not (logical negation) is
12086 predefined for every boolean type T, every modular type T, and for every
12087 one-dimensional array type T whose components are of a boolean type,
12088 with the following specification:
12089
12090 4
12091 function "not"(Right : T) return T
12092
12093 5
12094 The result of the operator not for a modular type is defined as the
12095 difference between the high bound of the base range of the type and the
12096 value of the operand. For a binary modulus, this corresponds to a
12097 bit-wise complement of the binary representation of the value of the
12098 operand.
12099
12100 6
12101 The operator not that applies to a one-dimensional array of boolean
12102 components yields a one-dimensional boolean array with the same bounds;
12103 each component of the result is obtained by logical negation of the
12104 corresponding component of the operand (that is, the component that has
12105 the same index value). A check is made that each component of the
12106 result belongs to the component subtype; the exception Constraint_Error
12107 is raised if this check fails.
12108
12109 7
12110 The highest precedence exponentiation operator ** is predefined for
12111 every specific integer type T with the following specification:
12112
12113 8
12114 function "**"(Left : T; Right : Natural) return T
12115
12116 9
12117 Exponentiation is also predefined for every specific floating point type
12118 as well as root_real, with the following specification (where T is
12119 root_real or the floating point type):
12120
12121 10
12122 function "**"(Left : T; Right : Integer'Base) return T
12123
12124 11/3
12125 The right operand of an exponentiation is the exponent. The value of
12126 X**N with the value of the exponent N positive is the same as the value
12127 of X*X*...X (with N-1 multiplications) except that the multiplications
12128 are associated in an arbitrary order. With N equal to zero, the result
12129 is one. With the value of N negative (only defined for a floating point
12130 operand), the result is the reciprocal of the result using the absolute
12131 value of N as the exponent.
12132
12133 _Implementation Permissions_
12134
12135 12
12136 The implementation of exponentiation for the case of a negative exponent
12137 is allowed to raise Constraint_Error if the intermediate result of the
12138 repeated multiplications is outside the safe range of the type, even
12139 though the final result (after taking the reciprocal) would not be.
12140 (The best machine approximation to the final result in this case would
12141 generally be 0.0.)
12142
12143 NOTES
12144
12145 13
12146 18 As implied by the specification given above for exponentiation
12147 of an integer type, a check is made that the exponent is not
12148 negative. Constraint_Error is raised if this check fails.
12149
12150 \1f
12151 File: arm2012.info, Node: 4.5.7, Next: 4.5.8, Prev: 4.5.6, Up: 4.5
12152
12153 4.5.7 Conditional Expressions
12154 -----------------------------
12155
12156 1/3
12157 A conditional_expression selects for evaluation at most one of the
12158 enclosed dependent_expressions, depending on a decision among the
12159 alternatives. One kind of conditional_expression is the if_expression,
12160 which selects for evaluation a dependent_expression depending on the
12161 value of one or more corresponding conditions. The other kind of
12162 conditional_expression is the case_expression, which selects for
12163 evaluation one of a number of alternative dependent_expressions; the
12164 chosen alternative is determined by the value of a selecting_expression.
12165
12166 _Syntax_
12167
12168 2/3
12169 conditional_expression ::= if_expression | case_expression
12170
12171 3/3
12172 if_expression ::=
12173 if condition then dependent_expression
12174 {elsif condition then dependent_expression}
12175 [else dependent_expression]
12176
12177 4/3
12178 condition ::= boolean_expression
12179
12180 5/3
12181 case_expression ::=
12182 case selecting_expression is
12183 case_expression_alternative {,
12184 case_expression_alternative}
12185
12186 6/3
12187 case_expression_alternative ::=
12188 when discrete_choice_list =>
12189 dependent_expression
12190
12191 7/3
12192 Wherever the Syntax Rules allow an expression, a
12193 conditional_expression may be used in place of the expression, so
12194 long as it is immediately surrounded by parentheses.
12195
12196 _Name Resolution Rules_
12197
12198 8/3
12199 If a conditional_expression is expected to be of a type T, then each
12200 dependent_expression of the conditional_expression is expected to be of
12201 type T. Similarly, if a conditional_expression is expected to be of some
12202 class of types, then each dependent_expression of the
12203 conditional_expression is subject to the same expectation. If a
12204 conditional_expression shall resolve to be of a type T, then each
12205 dependent_expression shall resolve to be of type T.
12206
12207 9/3
12208 The possible types of a conditional_expression are further determined as
12209 follows:
12210
12211 10/3
12212 * If the conditional_expression is the operand of a type conversion,
12213 the type of the conditional_expression is the target type of the
12214 conversion; otherwise,
12215
12216 11/3
12217 * If all of the dependent_expressions are of the same type, the type
12218 of the conditional_expression is that type; otherwise,
12219
12220 12/3
12221 * If a dependent_expression is of an elementary type, the type of the
12222 conditional_expression shall be covered by that type; otherwise,
12223
12224 13/3
12225 * If the conditional_expression is expected to be of type T or shall
12226 resolve to type T, then the conditional_expression is of type T.
12227
12228 14/3
12229 A condition is expected to be of any boolean type.
12230
12231 15/3
12232 The expected type for the selecting_expression and the discrete_choices
12233 are as for case statements (see *note 5.4::).
12234
12235 _Legality Rules_
12236
12237 16/3
12238 All of the dependent_expressions shall be convertible (see *note 4.6::)
12239 to the type of the conditional_expression.
12240
12241 17/3
12242 If the expected type of a conditional_expression is a specific tagged
12243 type, all of the dependent_expressions of the conditional_expression
12244 shall be dynamically tagged, or none shall be dynamically tagged. In
12245 this case, the conditional_expression is dynamically tagged if all of
12246 the dependent_expressions are dynamically tagged, is tag-indeterminate
12247 if all of the dependent_expressions are tag-indeterminate, and is
12248 statically tagged otherwise.
12249
12250 18/3
12251 If there is no else dependent_expression, the if_expression shall be of
12252 a boolean type.
12253
12254 19/3
12255 All Legality Rules that apply to the discrete_choices of a
12256 case_statement (see *note 5.4::) also apply to the discrete_choices of a
12257 case_expression except within an instance of a generic unit.
12258
12259 _Dynamic Semantics_
12260
12261 20/3
12262 For the evaluation of an if_expression, the condition specified after
12263 if, and any conditions specified after elsif, are evaluated in
12264 succession (treating a final else as elsif True then), until one
12265 evaluates to True or all conditions are evaluated and yield False. If a
12266 condition evaluates to True, the associated dependent_expression is
12267 evaluated, converted to the type of the if_expression, and the resulting
12268 value is the value of the if_expression. Otherwise (when there is no
12269 else clause), the value of the if_expression is True.
12270
12271 21/3
12272 For the evaluation of a case_expression, the selecting_expression is
12273 first evaluated. If the value of the selecting_expression is covered by
12274 the discrete_choice_list of some case_expression_alternative, then the
12275 dependent_expression of the case_expression_alternative is evaluated,
12276 converted to the type of the case_expression, and the resulting value is
12277 the value of the case_expression. Otherwise (the value is not covered
12278 by any discrete_choice_list, perhaps due to being outside the base
12279 range), Constraint_Error is raised.
12280
12281 \1f
12282 File: arm2012.info, Node: 4.5.8, Prev: 4.5.7, Up: 4.5
12283
12284 4.5.8 Quantified Expressions
12285 ----------------------------
12286
12287 _Syntax_
12288
12289 1/3
12290 quantified_expression ::= for quantifier
12291 loop_parameter_specification => predicate
12292 | for quantifier iterator_specification => predicate
12293
12294 2/3
12295 quantifier ::= all | some
12296
12297 3/3
12298 predicate ::= boolean_expression
12299
12300 4/3
12301 Wherever the Syntax Rules allow an expression, a
12302 quantified_expression may be used in place of the expression, so
12303 long as it is immediately surrounded by parentheses.
12304
12305 _Name Resolution Rules_
12306
12307 5/3
12308 The expected type of a quantified_expression is any Boolean type. The
12309 predicate in a quantified_expression is expected to be of the same type.
12310
12311 _Dynamic Semantics_
12312
12313 6/3
12314 For the evaluation of a quantified_expression, the
12315 loop_parameter_specification or iterator_specification is first
12316 elaborated. The evaluation of a quantified_expression then evaluates
12317 the predicate for each value of the loop parameter. These values are
12318 examined in the order specified by the loop_parameter_specification (see
12319 *note 5.5::) or iterator_specification (see *note 5.5.2::).
12320
12321 7/3
12322 The value of the quantified_expression is determined as follows:
12323
12324 8/3
12325 * If the quantifier is all, the expression is True if the evaluation
12326 of the predicate yields True for each value of the loop parameter.
12327 It is False otherwise. Evaluation of the quantified_expression
12328 stops when all values of the domain have been examined, or when the
12329 predicate yields False for a given value. Any exception raised by
12330 evaluation of the predicate is propagated.
12331
12332 9/3
12333 * If the quantifier is some, the expression is True if the evaluation
12334 of the predicate yields True for some value of the loop parameter.
12335 It is False otherwise. Evaluation of the quantified_expression
12336 stops when all values of the domain have been examined, or when the
12337 predicate yields True for a given value. Any exception raised by
12338 evaluation of the predicate is propagated.
12339
12340 _Examples_
12341
12342 10/3
12343 The postcondition for a sorting routine on an array A with an index
12344 subtype T can be written:
12345
12346 11/3
12347 Post => (A'Length < 2 or else
12348 (for all I in A'First .. T'Pred(A'Last) => A (I) <= A (T'Succ (I))))
12349
12350 12/3
12351 The assertion that a positive number is composite (as opposed to prime)
12352 can be written:
12353
12354 13/3
12355 pragma Assert (for some X in 2 .. N / 2 => N mod X = 0);
12356
12357 \1f
12358 File: arm2012.info, Node: 4.6, Next: 4.7, Prev: 4.5, Up: 4
12359
12360 4.6 Type Conversions
12361 ====================
12362
12363 1/3
12364 Explicit type conversions, both value conversions and view conversions,
12365 are allowed between closely related types as defined below. This
12366 subclause also defines rules for value and view conversions to a
12367 particular subtype of a type, both explicit ones and those implicit in
12368 other constructs.
12369
12370 _Syntax_
12371
12372 2
12373 type_conversion ::=
12374 subtype_mark(expression)
12375 | subtype_mark(name)
12376
12377 3
12378 The target subtype of a type_conversion is the subtype denoted by the
12379 subtype_mark. The operand of a type_conversion is the expression or
12380 name within the parentheses; its type is the operand type.
12381
12382 4/3
12383 One type is convertible to a second type if a type_conversion with the
12384 first type as operand type and the second type as target type is legal
12385 according to the rules of this subclause. Two types are convertible if
12386 each is convertible to the other.
12387
12388 5/2
12389 A type_conversion whose operand is the name of an object is called a
12390 view conversion if both its target type and operand type are tagged, or
12391 if it appears in a call as an actual parameter of mode out or in out;
12392 other type_conversions are called value conversions.
12393
12394 _Name Resolution Rules_
12395
12396 6
12397 The operand of a type_conversion is expected to be of any type.
12398
12399 7
12400 The operand of a view conversion is interpreted only as a name; the
12401 operand of a value conversion is interpreted as an expression.
12402
12403 _Legality Rules_
12404
12405 8/2
12406 In a view conversion for an untagged type, the target type shall be
12407 convertible (back) to the operand type.
12408
12409 Paragraphs 9 through 20 were reorganized and moved below.
12410
12411 21/3
12412 If there is a type (other than a root numeric type) that is an ancestor
12413 of both the target type and the operand type, or both types are
12414 class-wide types, then at least one of the following rules shall apply:
12415
12416 21.1/2
12417 * The target type shall be untagged; or
12418
12419 22
12420 * The operand type shall be covered by or descended from the target
12421 type; or
12422
12423 23/2
12424 * The operand type shall be a class-wide type that covers the target
12425 type; or
12426
12427 23.1/2
12428 * The operand and target types shall both be class-wide types and the
12429 specific type associated with at least one of them shall be an
12430 interface type.
12431
12432 24/3
12433 If there is no type (other than a root numeric type) that is the
12434 ancestor of both the target type and the operand type, and they are not
12435 both class-wide types, one of the following rules shall apply:
12436
12437 24.1/2
12438 * If the target type is a numeric type, then the operand type shall
12439 be a numeric type.
12440
12441 24.2/2
12442 * If the target type is an array type, then the operand type shall be
12443 an array type. Further:
12444
12445 24.3/2
12446 * The types shall have the same dimensionality;
12447
12448 24.4/2
12449 * Corresponding index types shall be convertible;
12450
12451 24.5/2
12452 * The component subtypes shall statically match;
12453
12454 24.6/2
12455 * If the component types are anonymous access types, then
12456 the accessibility level of the operand type shall not be
12457 statically deeper than that of the target type;
12458
12459 24.7/2
12460 * Neither the target type nor the operand type shall be
12461 limited;
12462
12463 24.8/2
12464 * If the target type of a view conversion has aliased
12465 components, then so shall the operand type; and
12466
12467 24.9/2
12468 * The operand type of a view conversion shall not have a
12469 tagged, private, or volatile subcomponent.
12470
12471 24.10/2
12472 * If the target type is universal_access, then the operand type shall
12473 be an access type.
12474
12475 24.11/2
12476 * If the target type is a general access-to-object type, then the
12477 operand type shall be universal_access or an access-to-object type.
12478 Further, if the operand type is not universal_access:
12479
12480 24.12/2
12481 * If the target type is an access-to-variable type, then
12482 the operand type shall be an access-to-variable type;
12483
12484 24.13/2
12485 * If the target designated type is tagged, then the operand
12486 designated type shall be convertible to the target
12487 designated type;
12488
12489 24.14/2
12490 * If the target designated type is not tagged, then the
12491 designated types shall be the same, and either:
12492
12493 24.15/2
12494 * the designated subtypes shall statically match; or
12495
12496 24.16/2
12497 * the designated type shall be discriminated in its
12498 full view and unconstrained in any partial view, and
12499 one of the designated subtypes shall be
12500 unconstrained;
12501
12502 24.17/3
12503 * The accessibility level of the operand type shall not be
12504 statically deeper than that of the target type, unless
12505 the target type is an anonymous access type of a
12506 stand-alone object. If the target type is that of such a
12507 stand-alone object, the accessibility level of the
12508 operand type shall not be statically deeper than that of
12509 the declaration of the stand-alone object. In addition
12510 to the places where Legality Rules normally apply (see
12511 *note 12.3::), this rule applies also in the private part
12512 of an instance of a generic unit.
12513
12514 24.18/2
12515 * If the target type is a pool-specific access-to-object type, then
12516 the operand type shall be universal_access.
12517
12518 24.19/2
12519 * If the target type is an access-to-subprogram type, then the
12520 operand type shall be universal_access or an access-to-subprogram
12521 type. Further, if the operand type is not universal_access:
12522
12523 24.20/3
12524 * The designated profiles shall be subtype conformant.
12525
12526 24.21/2
12527 * The accessibility level of the operand type shall not be
12528 statically deeper than that of the target type. In
12529 addition to the places where Legality Rules normally
12530 apply (see *note 12.3::), this rule applies also in the
12531 private part of an instance of a generic unit. If the
12532 operand type is declared within a generic body, the
12533 target type shall be declared within the generic body.
12534
12535 _Static Semantics_
12536
12537 25
12538 A type_conversion that is a value conversion denotes the value that is
12539 the result of converting the value of the operand to the target subtype.
12540
12541 26/3
12542 A type_conversion that is a view conversion denotes a view of the object
12543 denoted by the operand. This view is a variable of the target type if
12544 the operand denotes a variable; otherwise, it is a constant of the
12545 target type.
12546
12547 27
12548 The nominal subtype of a type_conversion is its target subtype.
12549
12550 _Dynamic Semantics_
12551
12552 28
12553 For the evaluation of a type_conversion that is a value conversion, the
12554 operand is evaluated, and then the value of the operand is converted to
12555 a corresponding value of the target type, if any. If there is no value
12556 of the target type that corresponds to the operand value,
12557 Constraint_Error is raised; this can only happen on conversion to a
12558 modular type, and only when the operand value is outside the base range
12559 of the modular type. Additional rules follow:
12560
12561 29
12562 * Numeric Type Conversion
12563
12564 30
12565 * If the target and the operand types are both integer
12566 types, then the result is the value of the target type
12567 that corresponds to the same mathematical integer as the
12568 operand.
12569
12570 31
12571 * If the target type is a decimal fixed point type, then
12572 the result is truncated (toward 0) if the value of the
12573 operand is not a multiple of the small of the target
12574 type.
12575
12576 32
12577 * If the target type is some other real type, then the
12578 result is within the accuracy of the target type (see
12579 *note G.2::, "*note G.2:: Numeric Performance
12580 Requirements", for implementations that support the
12581 Numerics Annex).
12582
12583 33
12584 * If the target type is an integer type and the operand
12585 type is real, the result is rounded to the nearest
12586 integer (away from zero if exactly halfway between two
12587 integers).
12588
12589 34
12590 * Enumeration Type Conversion
12591
12592 35
12593 * The result is the value of the target type with the same
12594 position number as that of the operand value.
12595
12596 36
12597 * Array Type Conversion
12598
12599 37
12600 * If the target subtype is a constrained array subtype,
12601 then a check is made that the length of each dimension of
12602 the value of the operand equals the length of the
12603 corresponding dimension of the target subtype. The
12604 bounds of the result are those of the target subtype.
12605
12606 38
12607 * If the target subtype is an unconstrained array subtype,
12608 then the bounds of the result are obtained by converting
12609 each bound of the value of the operand to the
12610 corresponding index type of the target type. For each
12611 nonnull index range, a check is made that the bounds of
12612 the range belong to the corresponding index subtype.
12613
12614 39
12615 * In either array case, the value of each component of the
12616 result is that of the matching component of the operand
12617 value (see *note 4.5.2::).
12618
12619 39.1/2
12620 * If the component types of the array types are anonymous
12621 access types, then a check is made that the accessibility
12622 level of the operand type is not deeper than that of the
12623 target type.
12624
12625 40
12626 * Composite (Non-Array) Type Conversion
12627
12628 41
12629 * The value of each nondiscriminant component of the result
12630 is that of the matching component of the operand value.
12631
12632 42
12633 * The tag of the result is that of the operand. If the
12634 operand type is class-wide, a check is made that the tag
12635 of the operand identifies a (specific) type that is
12636 covered by or descended from the target type.
12637
12638 43
12639 * For each discriminant of the target type that corresponds
12640 to a discriminant of the operand type, its value is that
12641 of the corresponding discriminant of the operand value;
12642 if it corresponds to more than one discriminant of the
12643 operand type, a check is made that all these
12644 discriminants are equal in the operand value.
12645
12646 44
12647 * For each discriminant of the target type that corresponds
12648 to a discriminant that is specified by the
12649 derived_type_definition for some ancestor of the operand
12650 type (or if class-wide, some ancestor of the specific
12651 type identified by the tag of the operand), its value in
12652 the result is that specified by the
12653 derived_type_definition.
12654
12655 45
12656 * For each discriminant of the operand type that
12657 corresponds to a discriminant that is specified by the
12658 derived_type_definition for some ancestor of the target
12659 type, a check is made that in the operand value it equals
12660 the value specified for it.
12661
12662 46
12663 * For each discriminant of the result, a check is made that
12664 its value belongs to its subtype.
12665
12666 47
12667 * Access Type Conversion
12668
12669 48/3
12670 * For an access-to-object type, a check is made that the
12671 accessibility level of the operand type is not deeper
12672 than that of the target type, unless the target type is
12673 an anonymous access type of a stand-alone object. If the
12674 target type is that of such a stand-alone object, a check
12675 is made that the accessibility level of the operand type
12676 is not deeper than that of the declaration of the
12677 stand-alone object; then if the check succeeds, the
12678 accessibility level of the target type becomes that of
12679 the operand type.
12680
12681 49/2
12682 * If the operand value is null, the result of the
12683 conversion is the null value of the target type.
12684
12685 50
12686 * If the operand value is not null, then the result
12687 designates the same object (or subprogram) as is
12688 designated by the operand value, but viewed as being of
12689 the target designated subtype (or profile); any checks
12690 associated with evaluating a conversion to the target
12691 designated subtype are performed.
12692
12693 51/3
12694 After conversion of the value to the target type, if the target subtype
12695 is constrained, a check is performed that the value satisfies this
12696 constraint. If the target subtype excludes null, then a check is made
12697 that the value is not null. If predicate checks are enabled for the
12698 target subtype (see *note 3.2.4::), a check is performed that the
12699 predicate of the target subtype is satisfied for the value.
12700
12701 52
12702 For the evaluation of a view conversion, the operand name is evaluated,
12703 and a new view of the object denoted by the operand is created, whose
12704 type is the target type; if the target type is composite, checks are
12705 performed as above for a value conversion.
12706
12707 53
12708 The properties of this new view are as follows:
12709
12710 54/1
12711 * If the target type is composite, the bounds or discriminants (if
12712 any) of the view are as defined above for a value conversion; each
12713 nondiscriminant component of the view denotes the matching
12714 component of the operand object; the subtype of the view is
12715 constrained if either the target subtype or the operand object is
12716 constrained, or if the target subtype is indefinite, or if the
12717 operand type is a descendant of the target type and has
12718 discriminants that were not inherited from the target type;
12719
12720 55
12721 * If the target type is tagged, then an assignment to the view
12722 assigns to the corresponding part of the object denoted by the
12723 operand; otherwise, an assignment to the view assigns to the
12724 object, after converting the assigned value to the subtype of the
12725 object (which might raise Constraint_Error);
12726
12727 56
12728 * Reading the value of the view yields the result of converting the
12729 value of the operand object to the target subtype (which might
12730 raise Constraint_Error), except if the object is of an access type
12731 and the view conversion is passed as an out parameter; in this
12732 latter case, the value of the operand object is used to initialize
12733 the formal parameter without checking against any constraint of the
12734 target subtype (see *note 6.4.1::).
12735
12736 57/3
12737 If an Accessibility_Check fails, Program_Error is raised. If a
12738 predicate check fails, Assertions.Assertion_Error is raised. Any other
12739 check associated with a conversion raises Constraint_Error if it fails.
12740
12741 58
12742 Conversion to a type is the same as conversion to an unconstrained
12743 subtype of the type.
12744
12745 NOTES
12746
12747 59
12748 19 In addition to explicit type_conversions, type conversions are
12749 performed implicitly in situations where the expected type and the
12750 actual type of a construct differ, as is permitted by the type
12751 resolution rules (see *note 8.6::). For example, an integer
12752 literal is of the type universal_integer, and is implicitly
12753 converted when assigned to a target of some specific integer type.
12754 Similarly, an actual parameter of a specific tagged type is
12755 implicitly converted when the corresponding formal parameter is of
12756 a class-wide type.
12757
12758 60
12759 Even when the expected and actual types are the same, implicit
12760 subtype conversions are performed to adjust the array bounds (if
12761 any) of an operand to match the desired target subtype, or to raise
12762 Constraint_Error if the (possibly adjusted) value does not satisfy
12763 the constraints of the target subtype.
12764
12765 61/2
12766 20 A ramification of the overload resolution rules is that the
12767 operand of an (explicit) type_conversion cannot be an allocator, an
12768 aggregate, a string_literal, a character_literal, or an
12769 attribute_reference for an Access or Unchecked_Access attribute.
12770 Similarly, such an expression enclosed by parentheses is not
12771 allowed. A qualified_expression (see *note 4.7::) can be used
12772 instead of such a type_conversion.
12773
12774 62
12775 21 The constraint of the target subtype has no effect for a
12776 type_conversion of an elementary type passed as an out parameter.
12777 Hence, it is recommended that the first subtype be specified as the
12778 target to minimize confusion (a similar recommendation applies to
12779 renaming and generic formal in out objects).
12780
12781 _Examples_
12782
12783 63
12784 Examples of numeric type conversion:
12785
12786 64
12787 Real(2*J) -- value is converted to floating point
12788 Integer(1.6) -- value is 2
12789 Integer(-0.4) -- value is 0
12790
12791 65
12792 Example of conversion between derived types:
12793
12794 66
12795 type A_Form is new B_Form;
12796
12797 67
12798 X : A_Form;
12799 Y : B_Form;
12800
12801 68
12802 X := A_Form(Y);
12803 Y := B_Form(X); -- the reverse conversion
12804
12805 69
12806 Examples of conversions between array types:
12807
12808 70
12809 type Sequence is array (Integer range <>) of Integer;
12810 subtype Dozen is Sequence(1 .. 12);
12811 Ledger : array(1 .. 100) of Integer;
12812
12813 71
12814 Sequence(Ledger) -- bounds are those of Ledger
12815 Sequence(Ledger(31 .. 42)) -- bounds are 31 and 42
12816 Dozen(Ledger(31 .. 42)) -- bounds are those of Dozen
12817
12818 \1f
12819 File: arm2012.info, Node: 4.7, Next: 4.8, Prev: 4.6, Up: 4
12820
12821 4.7 Qualified Expressions
12822 =========================
12823
12824 1
12825 A qualified_expression is used to state explicitly the type, and to
12826 verify the subtype, of an operand that is either an expression or an
12827 aggregate.
12828
12829 _Syntax_
12830
12831 2
12832 qualified_expression ::=
12833 subtype_mark'(expression) | subtype_mark'aggregate
12834
12835 _Name Resolution Rules_
12836
12837 3
12838 The operand (the expression or aggregate) shall resolve to be of the
12839 type determined by the subtype_mark (*note 3.2.2: S0028.), or a
12840 universal type that covers it.
12841
12842 _Static Semantics_
12843
12844 3.1/3
12845 If the operand of a qualified_expression denotes an object, the
12846 qualified_expression denotes a constant view of that object. The
12847 nominal subtype of a qualified_expression is the subtype denoted by the
12848 subtype_mark.
12849
12850 _Dynamic Semantics_
12851
12852 4
12853 The evaluation of a qualified_expression evaluates the operand (and if
12854 of a universal type, converts it to the type determined by the
12855 subtype_mark) and checks that its value belongs to the subtype denoted
12856 by the subtype_mark. The exception Constraint_Error is raised if this
12857 check fails.
12858
12859 NOTES
12860
12861 5
12862 22 When a given context does not uniquely identify an expected
12863 type, a qualified_expression can be used to do so. In particular,
12864 if an overloaded name or aggregate is passed to an overloaded
12865 subprogram, it might be necessary to qualify the operand to resolve
12866 its type.
12867
12868 _Examples_
12869
12870 6
12871 Examples of disambiguating expressions using qualification:
12872
12873 7
12874 type Mask is (Fix, Dec, Exp, Signif);
12875 type Code is (Fix, Cla, Dec, Tnz, Sub);
12876
12877 8
12878 Print (Mask'(Dec)); -- Dec is of type Mask
12879 Print (Code'(Dec)); -- Dec is of type Code
12880
12881 9
12882 for J in Code'(Fix) .. Code'(Dec) loop ... -- qualification needed for either Fix or Dec
12883 for J in Code range Fix .. Dec loop ... -- qualification unnecessary
12884 for J in Code'(Fix) .. Dec loop ... -- qualification unnecessary for Dec
12885
12886 10
12887 Dozen'(1 | 3 | 5 | 7 => 2, others => 0) -- see *note 4.6::
12888
12889 \1f
12890 File: arm2012.info, Node: 4.8, Next: 4.9, Prev: 4.7, Up: 4
12891
12892 4.8 Allocators
12893 ==============
12894
12895 1
12896 The evaluation of an allocator creates an object and yields an access
12897 value that designates the object.
12898
12899 _Syntax_
12900
12901 2/3
12902 allocator ::=
12903 new [subpool_specification] subtype_indication
12904 | new [subpool_specification] qualified_expression
12905
12906 2.1/3
12907 subpool_specification ::= (subpool_handle_name)
12908
12909 2.2/3
12910 For an allocator with a subtype_indication, the subtype_indication
12911 shall not specify a null_exclusion.
12912
12913 _Name Resolution Rules_
12914
12915 3/3
12916 The expected type for an allocator shall be a single access-to-object
12917 type with designated type D such that either D covers the type
12918 determined by the subtype_mark of the subtype_indication (*note 3.2.2:
12919 S0027.) or qualified_expression (*note 4.7: S0142.), or the expected
12920 type is anonymous and the determined type is D'Class. A
12921 subpool_handle_name is expected to be of any type descended from
12922 Subpool_Handle, which is the type used to identify a subpool, declared
12923 in package System.Storage_Pools.Subpools (see *note 13.11.4::).
12924
12925 _Legality Rules_
12926
12927 4
12928 An initialized allocator is an allocator with a qualified_expression.
12929 An uninitialized allocator is one with a subtype_indication. In the
12930 subtype_indication of an uninitialized allocator, a constraint is
12931 permitted only if the subtype_mark denotes an unconstrained composite
12932 subtype; if there is no constraint, then the subtype_mark shall denote a
12933 definite subtype.
12934
12935 5/2
12936 If the type of the allocator is an access-to-constant type, the
12937 allocator shall be an initialized allocator.
12938
12939 5.1/3
12940 If a subpool_specification is given, the type of the storage pool of the
12941 access type shall be a descendant of Root_Storage_Pool_With_Subpools.
12942
12943 5.2/3
12944 If the designated type of the type of the allocator is class-wide, the
12945 accessibility level of the type determined by the subtype_indication or
12946 qualified_expression shall not be statically deeper than that of the
12947 type of the allocator.
12948
12949 5.3/3
12950 If the subtype determined by the subtype_indication or
12951 qualified_expression of the allocator has one or more access
12952 discriminants, then the accessibility level of the anonymous access type
12953 of each access discriminant shall not be statically deeper than that of
12954 the type of the allocator (see *note 3.10.2::).
12955
12956 5.4/3
12957 An allocator shall not be of an access type for which the Storage_Size
12958 has been specified by a static expression with value zero or is defined
12959 by the language to be zero.
12960
12961 5.5/3
12962 If the designated type of the type of the allocator is limited, then the
12963 allocator shall not be used to define the value of an access
12964 discriminant, unless the discriminated type is immutably limited (see
12965 *note 7.5::).
12966
12967 5.6/3
12968 In addition to the places where Legality Rules normally apply (see *note
12969 12.3::), these rules apply also in the private part of an instance of a
12970 generic unit.
12971
12972 _Static Semantics_
12973
12974 6/3
12975 If the designated type of the type of the allocator is elementary, then
12976 the subtype of the created object is the designated subtype. If the
12977 designated type is composite, then the subtype of the created object is
12978 the designated subtype when the designated subtype is constrained or
12979 there is an ancestor of the designated type that has a constrained
12980 partial view; otherwise, the created object is constrained by its
12981 initial value (even if the designated subtype is unconstrained with
12982 defaults).
12983
12984 _Dynamic Semantics_
12985
12986 7/2
12987 For the evaluation of an initialized allocator, the evaluation of the
12988 qualified_expression is performed first. An object of the designated
12989 type is created and the value of the qualified_expression is converted
12990 to the designated subtype and assigned to the object.
12991
12992 8
12993 For the evaluation of an uninitialized allocator, the elaboration of the
12994 subtype_indication is performed first. Then:
12995
12996 9/2
12997 * If the designated type is elementary, an object of the designated
12998 subtype is created and any implicit initial value is assigned;
12999
13000 10/2
13001 * If the designated type is composite, an object of the designated
13002 type is created with tag, if any, determined by the subtype_mark of
13003 the subtype_indication. This object is then initialized by default
13004 (see *note 3.3.1::) using the subtype_indication to determine its
13005 nominal subtype. A check is made that the value of the object
13006 belongs to the designated subtype. Constraint_Error is raised if
13007 this check fails. This check and the initialization of the object
13008 are performed in an arbitrary order.
13009
13010 10.1/3
13011 For any allocator, if the designated type of the type of the allocator
13012 is class-wide, then a check is made that the master of the type
13013 determined by the subtype_indication, or by the tag of the value of the
13014 qualified_expression, includes the elaboration of the type of the
13015 allocator. If any part of the subtype determined by the
13016 subtype_indication or qualified_expression of the allocator (or by the
13017 tag of the value if the type of the qualified_expression is class-wide)
13018 has one or more access discriminants, then a check is made that the
13019 accessibility level of the anonymous access type of each access
13020 discriminant is not deeper than that of the type of the allocator.
13021 Program_Error is raised if either such check fails.
13022
13023 10.2/2
13024 If the object to be created by an allocator has a controlled or
13025 protected part, and the finalization of the collection of the type of
13026 the allocator (see *note 7.6.1::) has started, Program_Error is raised.
13027
13028 10.3/2
13029 If the object to be created by an allocator contains any tasks, and the
13030 master of the type of the allocator is completed, and all of the
13031 dependent tasks of the master are terminated (see *note 9.3::), then
13032 Program_Error is raised.
13033
13034 10.4/3
13035 If the allocator includes a subpool_handle_name, Constraint_Error is
13036 raised if the subpool handle is null. Program_Error is raised if the
13037 subpool does not belong (see *note 13.11.4::) to the storage pool of the
13038 access type of the allocator.
13039
13040 11
13041 If the created object contains any tasks, they are activated (see *note
13042 9.2::). Finally, an access value that designates the created object is
13043 returned.
13044
13045 _Bounded (Run-Time) Errors_
13046
13047 11.1/2
13048 It is a bounded error if the finalization of the collection of the type
13049 (see *note 7.6.1::) of the allocator has started. If the error is
13050 detected, Program_Error is raised. Otherwise, the allocation proceeds
13051 normally.
13052
13053 NOTES
13054
13055 12
13056 23 Allocators cannot create objects of an abstract type. See
13057 *note 3.9.3::.
13058
13059 13
13060 24 If any part of the created object is controlled, the
13061 initialization includes calls on corresponding Initialize or Adjust
13062 procedures. See *note 7.6::.
13063
13064 14
13065 25 As explained in *note 13.11::, "*note 13.11:: Storage
13066 Management", the storage for an object allocated by an allocator
13067 comes from a storage pool (possibly user defined). The exception
13068 Storage_Error is raised by an allocator if there is not enough
13069 storage. Instances of Unchecked_Deallocation may be used to
13070 explicitly reclaim storage.
13071
13072 15/3
13073 26 Implementations are permitted, but not required, to provide
13074 garbage collection.
13075
13076 _Examples_
13077
13078 16
13079 Examples of allocators:
13080
13081 17
13082 new Cell'(0, null, null) -- initialized explicitly, see *note 3.10.1::
13083 new Cell'(Value => 0, Succ => null, Pred => null) -- initialized explicitly
13084 new Cell -- not initialized
13085
13086 18
13087 new Matrix(1 .. 10, 1 .. 20) -- the bounds only are given
13088 new Matrix'(1 .. 10 => (1 .. 20 => 0.0)) -- initialized explicitly
13089
13090 19
13091 new Buffer(100) -- the discriminant only is given
13092 new Buffer'(Size => 80, Pos => 0, Value => (1 .. 80 => 'A')) -- initialized explicitly
13093
13094 20
13095 Expr_Ptr'(new Literal) -- allocator for access-to-class-wide type, see *note 3.9.1::
13096 Expr_Ptr'(new Literal'(Expression with 3.5)) -- initialized explicitly
13097
13098 \1f
13099 File: arm2012.info, Node: 4.9, Prev: 4.8, Up: 4
13100
13101 4.9 Static Expressions and Static Subtypes
13102 ==========================================
13103
13104 1
13105 Certain expressions of a scalar or string type are defined to be static.
13106 Similarly, certain discrete ranges are defined to be static, and certain
13107 scalar and string subtypes are defined to be static subtypes. Static
13108 means determinable at compile time, using the declared properties or
13109 values of the program entities.
13110
13111 2
13112 A static expression is a scalar or string expression that is one of the
13113 following:
13114
13115 3
13116 * a numeric_literal;
13117
13118 4
13119 * a string_literal of a static string subtype;
13120
13121 5
13122 * a name that denotes the declaration of a named number or a static
13123 constant;
13124
13125 6
13126 * a function_call whose function_name or function_prefix statically
13127 denotes a static function, and whose actual parameters, if any
13128 (whether given explicitly or by default), are all static
13129 expressions;
13130
13131 7
13132 * an attribute_reference that denotes a scalar value, and whose
13133 prefix denotes a static scalar subtype;
13134
13135 8
13136 * an attribute_reference whose prefix statically denotes a statically
13137 constrained array object or array subtype, and whose
13138 attribute_designator is First, Last, or Length, with an optional
13139 dimension;
13140
13141 9
13142 * a type_conversion whose subtype_mark denotes a static scalar
13143 subtype, and whose operand is a static expression;
13144
13145 10
13146 * a qualified_expression whose subtype_mark denotes a static (scalar
13147 or string) subtype, and whose operand is a static expression;
13148
13149 11/3
13150 * a membership test whose simple_expression is a static expression,
13151 and whose membership_choice_list consists only of
13152 membership_choices that are either static choice_expressions,
13153 static ranges, or subtype_marks that denote a static (scalar or
13154 string) subtype;
13155
13156 12
13157 * a short-circuit control form both of whose relations are static
13158 expressions;
13159
13160 12.1/3
13161 * a conditional_expression all of whose conditions,
13162 selecting_expressions, and dependent_expressions are static
13163 expressions;
13164
13165 13
13166 * a static expression enclosed in parentheses.
13167
13168 14
13169 A name statically denotes an entity if it denotes the entity and:
13170
13171 15
13172 * It is a direct_name, expanded name, or character_literal, and it
13173 denotes a declaration other than a renaming_declaration; or
13174
13175 16
13176 * It is an attribute_reference whose prefix statically denotes some
13177 entity; or
13178
13179 17
13180 * It denotes a renaming_declaration with a name that statically
13181 denotes the renamed entity.
13182
13183 18
13184 A static function is one of the following:
13185
13186 19
13187 * a predefined operator whose parameter and result types are all
13188 scalar types none of which are descendants of formal scalar types;
13189
13190 20
13191 * a predefined concatenation operator whose result type is a string
13192 type;
13193
13194 21
13195 * an enumeration literal;
13196
13197 22
13198 * a language-defined attribute that is a function, if the prefix
13199 denotes a static scalar subtype, and if the parameter and result
13200 types are scalar.
13201
13202 23
13203 In any case, a generic formal subprogram is not a static function.
13204
13205 24
13206 A static constant is a constant view declared by a full constant
13207 declaration or an object_renaming_declaration (*note 8.5.1: S0200.) with
13208 a static nominal subtype, having a value defined by a static scalar
13209 expression or by a static string expression whose value has a length not
13210 exceeding the maximum length of a string_literal (*note 2.6: S0016.) in
13211 the implementation.
13212
13213 25
13214 A static range is a range whose bounds are static expressions, or a
13215 range_attribute_reference (*note 4.1.4: S0102.) that is equivalent to
13216 such a range. A static discrete_range (*note 3.6.1: S0058.) is one that
13217 is a static range or is a subtype_indication (*note 3.2.2: S0027.) that
13218 defines a static scalar subtype. The base range of a scalar type is a
13219 static range, unless the type is a descendant of a formal scalar type.
13220
13221 26/3
13222 A static subtype is either a static scalar subtype or a static string
13223 subtype. A static scalar subtype is an unconstrained scalar subtype
13224 whose type is not a descendant of a formal type, or a constrained scalar
13225 subtype formed by imposing a compatible static constraint on a static
13226 scalar subtype. A static string subtype is an unconstrained string
13227 subtype whose index subtype and component subtype are static, or a
13228 constrained string subtype formed by imposing a compatible static
13229 constraint on a static string subtype. In any case, the subtype of a
13230 generic formal object of mode in out, and the result subtype of a
13231 generic formal function, are not static. Also, a subtype is not static
13232 if any Dynamic_Predicate specifications apply to it.
13233
13234 27
13235 The different kinds of static constraint are defined as follows:
13236
13237 28
13238 * A null constraint is always static;
13239
13240 29
13241 * A scalar constraint is static if it has no range_constraint, or one
13242 with a static range;
13243
13244 30
13245 * An index constraint is static if each discrete_range is static, and
13246 each index subtype of the corresponding array type is static;
13247
13248 31
13249 * A discriminant constraint is static if each expression of the
13250 constraint is static, and the subtype of each discriminant is
13251 static.
13252
13253 31.1/2
13254 In any case, the constraint of the first subtype of a scalar formal type
13255 is neither static nor null.
13256
13257 32
13258 A subtype is statically constrained if it is constrained, and its
13259 constraint is static. An object is statically constrained if its
13260 nominal subtype is statically constrained, or if it is a static string
13261 constant.
13262
13263 _Legality Rules_
13264
13265 32.1/3
13266 An expression is statically unevaluated if it is part of:
13267
13268 32.2/3
13269 * the right operand of a static short-circuit control form whose
13270 value is determined by its left operand; or
13271
13272 32.3/3
13273 * a dependent_expression of an if_expression whose associated
13274 condition is static and equals False; or
13275
13276 32.4/3
13277 * a condition or dependent_expression of an if_expression where the
13278 condition corresponding to at least one preceding
13279 dependent_expression of the if_expression is static and equals
13280 True; or
13281
13282 32.5/3
13283 * a dependent_expression of a case_expression whose
13284 selecting_expression is static and whose value is not covered by
13285 the corresponding discrete_choice_list; or
13286
13287 32.6/3
13288 * a choice_expression (or a simple_expression of a range that occurs
13289 as a membership_choice of a membership_choice_list) of a static
13290 membership test that is preceded in the enclosing
13291 membership_choice_list by another item whose individual membership
13292 test (see *note 4.5.2::) statically yields True.
13293
13294 33/3
13295 A static expression is evaluated at compile time except when it is
13296 statically unevaluated. The compile-time evaluation of a static
13297 expression is performed exactly, without performing Overflow_Checks.
13298 For a static expression that is evaluated:
13299
13300 34/3
13301 * The expression is illegal if its evaluation fails a
13302 language-defined check other than Overflow_Check. For the purposes
13303 of this evaluation, the assertion policy is assumed to be Check.
13304
13305 35/2
13306 * If the expression is not part of a larger static expression and the
13307 expression is expected to be of a single specific type, then its
13308 value shall be within the base range of its expected type.
13309 Otherwise, the value may be arbitrarily large or small.
13310
13311 36/2
13312 * If the expression is of type universal_real and its expected type
13313 is a decimal fixed point type, then its value shall be a multiple
13314 of the small of the decimal type. This restriction does not apply
13315 if the expected type is a descendant of a formal scalar type (or a
13316 corresponding actual type in an instance).
13317
13318 37/2
13319 In addition to the places where Legality Rules normally apply (see *note
13320 12.3::), the above restrictions also apply in the private part of an
13321 instance of a generic unit.
13322
13323 _Implementation Requirements_
13324
13325 38/2
13326 For a real static expression that is not part of a larger static
13327 expression, and whose expected type is not a descendant of a formal
13328 type, the implementation shall round or truncate the value (according to
13329 the Machine_Rounds attribute of the expected type) to the nearest
13330 machine number of the expected type; if the value is exactly half-way
13331 between two machine numbers, the rounding performed is
13332 implementation-defined. If the expected type is a descendant of a
13333 formal type, or if the static expression appears in the body of an
13334 instance of a generic unit and the corresponding expression is nonstatic
13335 in the corresponding generic body, then no special rounding or
13336 truncating is required -- normal accuracy rules apply (see *note Annex
13337 G::).
13338
13339 _Implementation Advice_
13340
13341 38.1/2
13342 For a real static expression that is not part of a larger static
13343 expression, and whose expected type is not a descendant of a formal
13344 type, the rounding should be the same as the default rounding for the
13345 target system.
13346
13347 NOTES
13348
13349 39
13350 27 An expression can be static even if it occurs in a context
13351 where staticness is not required.
13352
13353 40
13354 28 A static (or run-time) type_conversion from a real type to an
13355 integer type performs rounding. If the operand value is exactly
13356 half-way between two integers, the rounding is performed away from
13357 zero.
13358
13359 _Examples_
13360
13361 41
13362 Examples of static expressions:
13363
13364 42
13365 1 + 1 -- 2
13366 abs(-10)*3 -- 30
13367
13368 43
13369 Kilo : constant := 1000;
13370 Mega : constant := Kilo*Kilo; -- 1_000_000
13371 Long : constant := Float'Digits*2;
13372
13373 44
13374 Half_Pi : constant := Pi/2; -- see *note 3.3.2::
13375 Deg_To_Rad : constant := Half_Pi/90;
13376 Rad_To_Deg : constant := 1.0/Deg_To_Rad; -- equivalent to 1.0/((3.14159_26536/2)/90)
13377
13378 * Menu:
13379
13380 * 4.9.1 :: Statically Matching Constraints and Subtypes
13381
13382 \1f
13383 File: arm2012.info, Node: 4.9.1, Up: 4.9
13384
13385 4.9.1 Statically Matching Constraints and Subtypes
13386 --------------------------------------------------
13387
13388 _Static Semantics_
13389
13390 1/2
13391 A constraint statically matches another constraint if:
13392
13393 1.1/2
13394 * both are null constraints;
13395
13396 1.2/2
13397 * both are static and have equal corresponding bounds or discriminant
13398 values;
13399
13400 1.3/2
13401 * both are nonstatic and result from the same elaboration of a
13402 constraint of a subtype_indication (*note 3.2.2: S0027.) or the
13403 same evaluation of a range of a discrete_subtype_definition (*note
13404 3.6: S0055.); or
13405
13406 1.4/2
13407 * both are nonstatic and come from the same formal_type_declaration.
13408
13409 2/3
13410 A subtype statically matches another subtype of the same type if they
13411 have statically matching constraints, all predicate specifications that
13412 apply to them come from the same declarations, and, for access subtypes,
13413 either both or neither exclude null. Two anonymous access-to-object
13414 subtypes statically match if their designated subtypes statically match,
13415 and either both or neither exclude null, and either both or neither are
13416 access-to-constant. Two anonymous access-to-subprogram subtypes
13417 statically match if their designated profiles are subtype conformant,
13418 and either both or neither exclude null.
13419
13420 3
13421 Two ranges of the same type statically match if both result from the
13422 same evaluation of a range, or if both are static and have equal
13423 corresponding bounds.
13424
13425 4/3
13426 A constraint is statically compatible with a scalar subtype if it
13427 statically matches the constraint of the subtype, or if both are static
13428 and the constraint is compatible with the subtype. A constraint is
13429 statically compatible with an access or composite subtype if it
13430 statically matches the constraint of the subtype, or if the subtype is
13431 unconstrained.
13432
13433 5/3
13434 Two statically matching subtypes are statically compatible with each
13435 other. In addition, a subtype S1 is statically compatible with a
13436 subtype S2 if:
13437
13438 6/3
13439 * the constraint of S1 is statically compatible with S2, and
13440
13441 7/3
13442 * if S2 excludes null, so does S1, and
13443
13444 8/3
13445 * either:
13446
13447 9/3
13448 * all predicate specifications that apply to S2 apply also
13449 to S1, or
13450
13451 10/3
13452 * both subtypes are static, every value that satisfies the
13453 predicate of S1 also satisfies the predicate of S2, and
13454 it is not the case that both types each have at least one
13455 applicable predicate specification, predicate checks are
13456 enabled (see *note 11.4.2::) for S2, and predicate checks
13457 are not enabled for S1.
13458
13459 \1f
13460 File: arm2012.info, Node: 5, Next: 6, Prev: 4, Up: Top
13461
13462 5 Statements
13463 ************
13464
13465 1
13466 A statement defines an action to be performed upon its execution.
13467
13468 2/3
13469 This clause describes the general rules applicable to all statements.
13470 Some statements are discussed in later clauses: Procedure_call_statement
13471 (*note 6.4: S0178.)s and return statements are described in *note 6::,
13472 "*note 6:: Subprograms". Entry_call_statement (*note 9.5.3: S0225.)s,
13473 requeue_statement (*note 9.5.4: S0226.)s, delay_statement (*note 9.6:
13474 S0227.)s, accept_statement (*note 9.5.2: S0219.)s, select_statement
13475 (*note 9.7: S0230.)s, and abort_statement (*note 9.8: S0245.)s are
13476 described in *note 9::, "*note 9:: Tasks and Synchronization".
13477 Raise_statement (*note 11.3: S0269.)s are described in *note 11::,
13478 "*note 11:: Exceptions", and code_statement (*note 13.8: S0317.)s in
13479 *note 13::. The remaining forms of statements are presented in this
13480 clause.
13481
13482 * Menu:
13483
13484 * 5.1 :: Simple and Compound Statements - Sequences of Statements
13485 * 5.2 :: Assignment Statements
13486 * 5.3 :: If Statements
13487 * 5.4 :: Case Statements
13488 * 5.5 :: Loop Statements
13489 * 5.6 :: Block Statements
13490 * 5.7 :: Exit Statements
13491 * 5.8 :: Goto Statements
13492
13493 \1f
13494 File: arm2012.info, Node: 5.1, Next: 5.2, Up: 5
13495
13496 5.1 Simple and Compound Statements - Sequences of Statements
13497 ============================================================
13498
13499 1
13500 A statement is either simple or compound. A simple_statement encloses
13501 no other statement. A compound_statement can enclose simple_statements
13502 and other compound_statements.
13503
13504 _Syntax_
13505
13506 2/3
13507 sequence_of_statements ::= statement {statement} {label}
13508
13509 3
13510 statement ::=
13511 {label} simple_statement | {label} compound_statement
13512
13513 4/2
13514 simple_statement ::= null_statement
13515 | assignment_statement | exit_statement
13516 | goto_statement | procedure_call_statement
13517 | simple_return_statement | entry_call_statement
13518 | requeue_statement | delay_statement
13519 | abort_statement | raise_statement
13520 | code_statement
13521
13522 5/2
13523 compound_statement ::=
13524 if_statement | case_statement
13525 | loop_statement | block_statement
13526 | extended_return_statement
13527 | accept_statement | select_statement
13528
13529 6
13530 null_statement ::= null;
13531
13532 7
13533 label ::= <<label_statement_identifier>>
13534
13535 8
13536 statement_identifier ::= direct_name
13537
13538 9
13539 The direct_name of a statement_identifier shall be an identifier
13540 (not an operator_symbol).
13541
13542 _Name Resolution Rules_
13543
13544 10
13545 The direct_name of a statement_identifier shall resolve to denote its
13546 corresponding implicit declaration (see below).
13547
13548 _Legality Rules_
13549
13550 11
13551 Distinct identifiers shall be used for all statement_identifiers that
13552 appear in the same body, including inner block_statements but excluding
13553 inner program units.
13554
13555 _Static Semantics_
13556
13557 12
13558 For each statement_identifier, there is an implicit declaration (with
13559 the specified identifier) at the end of the declarative_part of the
13560 innermost block_statement or body that encloses the
13561 statement_identifier. The implicit declarations occur in the same order
13562 as the statement_identifiers occur in the source text. If a usage name
13563 denotes such an implicit declaration, the entity it denotes is the
13564 label, loop_statement, or block_statement with the given
13565 statement_identifier.
13566
13567 12.1/3
13568 If one or more labels end a sequence_of_statements, an implicit
13569 null_statement follows the labels before any following constructs.
13570
13571 _Dynamic Semantics_
13572
13573 13
13574 The execution of a null_statement has no effect.
13575
13576 14/2
13577 A transfer of control is the run-time action of an exit_statement,
13578 return statement, goto_statement, or requeue_statement, selection of a
13579 terminate_alternative, raising of an exception, or an abort, which
13580 causes the next action performed to be one other than what would
13581 normally be expected from the other rules of the language. As explained
13582 in *note 7.6.1::, a transfer of control can cause the execution of
13583 constructs to be completed and then left, which may trigger
13584 finalization.
13585
13586 15
13587 The execution of a sequence_of_statements consists of the execution of
13588 the individual statements in succession until the sequence_ is
13589 completed.
13590
13591 NOTES
13592
13593 16
13594 1 A statement_identifier that appears immediately within the
13595 declarative region of a named loop_statement or an accept_statement
13596 is nevertheless implicitly declared immediately within the
13597 declarative region of the innermost enclosing body or
13598 block_statement; in other words, the expanded name for a named
13599 statement is not affected by whether the statement occurs inside or
13600 outside a named loop or an accept_statement -- only nesting within
13601 block_statements is relevant to the form of its expanded name.
13602
13603 _Examples_
13604
13605 17
13606 Examples of labeled statements:
13607
13608 18
13609 <<Here>> <<Ici>> <<Aqui>> <<Hier>> null;
13610
13611 19
13612 <<After>> X := 1;
13613
13614 \1f
13615 File: arm2012.info, Node: 5.2, Next: 5.3, Prev: 5.1, Up: 5
13616
13617 5.2 Assignment Statements
13618 =========================
13619
13620 1
13621 An assignment_statement replaces the current value of a variable with
13622 the result of evaluating an expression.
13623
13624 _Syntax_
13625
13626 2
13627 assignment_statement ::=
13628 variable_name := expression;
13629
13630 3
13631 The execution of an assignment_statement includes the evaluation of the
13632 expression and the assignment of the value of the expression into the
13633 target. An assignment operation (as opposed to an assignment_statement
13634 (*note 5.2: S0152.)) is performed in other contexts as well, including
13635 object initialization and by-copy parameter passing. The target of an
13636 assignment operation is the view of the object to which a value is being
13637 assigned; the target of an assignment_statement (*note 5.2: S0152.) is
13638 the variable denoted by the variable_name.
13639
13640 _Name Resolution Rules_
13641
13642 4/2
13643 The variable_name of an assignment_statement is expected to be of any
13644 type. The expected type for the expression is the type of the target.
13645
13646 _Legality Rules_
13647
13648 5/2
13649 The target denoted by the variable_name shall be a variable of a
13650 nonlimited type.
13651
13652 6
13653 If the target is of a tagged class-wide type T'Class, then the
13654 expression shall either be dynamically tagged, or of type T and
13655 tag-indeterminate (see *note 3.9.2::).
13656
13657 _Dynamic Semantics_
13658
13659 7
13660 For the execution of an assignment_statement, the variable_name and the
13661 expression are first evaluated in an arbitrary order.
13662
13663 8
13664 When the type of the target is class-wide:
13665
13666 9
13667 * If the expression is tag-indeterminate (see *note 3.9.2::), then
13668 the controlling tag value for the expression is the tag of the
13669 target;
13670
13671 10
13672 * Otherwise (the expression is dynamically tagged), a check is made
13673 that the tag of the value of the expression is the same as that of
13674 the target; if this check fails, Constraint_Error is raised.
13675
13676 11
13677 The value of the expression is converted to the subtype of the target.
13678 The conversion might raise an exception (see *note 4.6::).
13679
13680 12
13681 In cases involving controlled types, the target is finalized, and an
13682 anonymous object might be used as an intermediate in the assignment, as
13683 described in *note 7.6.1::, "*note 7.6.1:: Completion and Finalization".
13684 In any case, the converted value of the expression is then assigned to
13685 the target, which consists of the following two steps:
13686
13687 13
13688 * The value of the target becomes the converted value.
13689
13690 14/3
13691 * If any part of the target is controlled, its value is adjusted as
13692 explained in subclause *note 7.6::.
13693
13694 NOTES
13695
13696 15
13697 2 The tag of an object never changes; in particular, an
13698 assignment_statement does not change the tag of the target.
13699
13700 16/2
13701 This paragraph was deleted.
13702
13703 _Examples_
13704
13705 17
13706 Examples of assignment statements:
13707
13708 18
13709 Value := Max_Value - 1;
13710 Shade := Blue;
13711
13712 19
13713 Next_Frame(F)(M, N) := 2.5; -- see *note 4.1.1::
13714 U := Dot_Product(V, W); -- see *note 6.3::
13715
13716 20
13717 Writer := (Status => Open, Unit => Printer, Line_Count => 60); -- see *note 3.8.1::
13718 Next_Car.all := (72074, null); -- see *note 3.10.1::
13719
13720 21
13721 Examples involving scalar subtype conversions:
13722
13723 22
13724 I, J : Integer range 1 .. 10 := 5;
13725 K : Integer range 1 .. 20 := 15;
13726 ...
13727
13728 23
13729 I := J; -- identical ranges
13730 K := J; -- compatible ranges
13731 J := K; -- will raise Constraint_Error if K > 10
13732
13733 24
13734 Examples involving array subtype conversions:
13735
13736 25
13737 A : String(1 .. 31);
13738 B : String(3 .. 33);
13739 ...
13740
13741 26
13742 A := B; -- same number of components
13743
13744 27
13745 A(1 .. 9) := "tar sauce";
13746 A(4 .. 12) := A(1 .. 9); -- A(1 .. 12) = "tartar sauce"
13747
13748 NOTES
13749
13750 28
13751 3 Notes on the examples: Assignment_statements are allowed even in
13752 the case of overlapping slices of the same array, because the
13753 variable_name and expression are both evaluated before copying the
13754 value into the variable. In the above example, an implementation
13755 yielding A(1 .. 12) = "tartartartar" would be incorrect.
13756
13757 \1f
13758 File: arm2012.info, Node: 5.3, Next: 5.4, Prev: 5.2, Up: 5
13759
13760 5.3 If Statements
13761 =================
13762
13763 1
13764 An if_statement selects for execution at most one of the enclosed
13765 sequences_of_statements, depending on the (truth) value of one or more
13766 corresponding conditions.
13767
13768 _Syntax_
13769
13770 2
13771 if_statement ::=
13772 if condition then
13773 sequence_of_statements
13774 {elsif condition then
13775 sequence_of_statements}
13776 [else
13777 sequence_of_statements]
13778 end if;
13779
13780 Paragraphs 3 and 4 were deleted.
13781
13782 _Dynamic Semantics_
13783
13784 5/3
13785 For the execution of an if_statement, the condition specified after if,
13786 and any conditions specified after elsif, are evaluated in succession
13787 (treating a final else as elsif True then), until one evaluates to True
13788 or all conditions are evaluated and yield False. If a condition
13789 evaluates to True, then the corresponding sequence_of_statements is
13790 executed; otherwise, none of them is executed.
13791
13792 _Examples_
13793
13794 6
13795 Examples of if statements:
13796
13797 7
13798 if Month = December and Day = 31 then
13799 Month := January;
13800 Day := 1;
13801 Year := Year + 1;
13802 end if;
13803
13804 8
13805 if Line_Too_Short then
13806 raise Layout_Error;
13807 elsif Line_Full then
13808 New_Line;
13809 Put(Item);
13810 else
13811 Put(Item);
13812 end if;
13813
13814 9
13815 if My_Car.Owner.Vehicle /= My_Car then -- see *note 3.10.1::
13816 Report ("Incorrect data");
13817 end if;
13818
13819 \1f
13820 File: arm2012.info, Node: 5.4, Next: 5.5, Prev: 5.3, Up: 5
13821
13822 5.4 Case Statements
13823 ===================
13824
13825 1
13826 A case_statement selects for execution one of a number of alternative
13827 sequences_of_statements; the chosen alternative is defined by the value
13828 of an expression.
13829
13830 _Syntax_
13831
13832 2/3
13833 case_statement ::=
13834 case selecting_expression is
13835 case_statement_alternative
13836 {case_statement_alternative}
13837 end case;
13838
13839 3
13840 case_statement_alternative ::=
13841 when discrete_choice_list =>
13842 sequence_of_statements
13843
13844 _Name Resolution Rules_
13845
13846 4/3
13847 The selecting_expression is expected to be of any discrete type. The
13848 expected type for each discrete_choice is the type of the
13849 selecting_expression.
13850
13851 _Legality Rules_
13852
13853 5/3
13854 The choice_expressions, subtype_indications, and ranges given as
13855 discrete_choices of a case_statement shall be static. A discrete_choice
13856 others, if present, shall appear alone and in the last
13857 discrete_choice_list.
13858
13859 6/3
13860 The possible values of the selecting_expression shall be covered (see
13861 *note 3.8.1::) as follows:
13862
13863 7/3
13864 * If the selecting_expression is a name (including a type_conversion,
13865 qualified_expression, or function_call) having a static and
13866 constrained nominal subtype, then each non-others discrete_choice
13867 shall cover only values in that subtype that satisfy its predicate
13868 (see *note 3.2.4::), and each value of that subtype that satisfies
13869 its predicate shall be covered by some discrete_choice (either
13870 explicitly or by others).
13871
13872 8/3
13873 * If the type of the selecting_expression is root_integer,
13874 universal_integer, or a descendant of a formal scalar type, then
13875 the case_statement shall have an others discrete_choice.
13876
13877 9/3
13878 * Otherwise, each value of the base range of the type of the
13879 selecting_expression shall be covered (either explicitly or by
13880 others).
13881
13882 10
13883 Two distinct discrete_choices of a case_statement shall not cover the
13884 same value.
13885
13886 _Dynamic Semantics_
13887
13888 11/3
13889 For the execution of a case_statement the selecting_expression is first
13890 evaluated.
13891
13892 12/3
13893 If the value of the selecting_expression is covered by the
13894 discrete_choice_list (*note 3.8.1: S0073.) of some
13895 case_statement_alternative (*note 5.4: S0155.), then the
13896 sequence_of_statements (*note 5.1: S0145.) of the _alternative is
13897 executed.
13898
13899 13
13900 Otherwise (the value is not covered by any discrete_choice_list, perhaps
13901 due to being outside the base range), Constraint_Error is raised.
13902
13903 NOTES
13904
13905 14
13906 4 The execution of a case_statement chooses one and only one
13907 alternative. Qualification of the expression of a case_statement
13908 by a static subtype can often be used to limit the number of
13909 choices that need be given explicitly.
13910
13911 _Examples_
13912
13913 15
13914 Examples of case statements:
13915
13916 16
13917 case Sensor is
13918 when Elevation => Record_Elevation(Sensor_Value);
13919 when Azimuth => Record_Azimuth (Sensor_Value);
13920 when Distance => Record_Distance (Sensor_Value);
13921 when others => null;
13922 end case;
13923
13924 17
13925 case Today is
13926 when Mon => Compute_Initial_Balance;
13927 when Fri => Compute_Closing_Balance;
13928 when Tue .. Thu => Generate_Report(Today);
13929 when Sat .. Sun => null;
13930 end case;
13931
13932 18
13933 case Bin_Number(Count) is
13934 when 1 => Update_Bin(1);
13935 when 2 => Update_Bin(2);
13936 when 3 | 4 =>
13937 Empty_Bin(1);
13938 Empty_Bin(2);
13939 when others => raise Error;
13940 end case;
13941
13942 \1f
13943 File: arm2012.info, Node: 5.5, Next: 5.6, Prev: 5.4, Up: 5
13944
13945 5.5 Loop Statements
13946 ===================
13947
13948 1
13949 A loop_statement includes a sequence_of_statements that is to be
13950 executed repeatedly, zero or more times.
13951
13952 _Syntax_
13953
13954 2
13955 loop_statement ::=
13956 [loop_statement_identifier:]
13957 [iteration_scheme] loop
13958 sequence_of_statements
13959 end loop [loop_identifier];
13960
13961 3/3
13962 iteration_scheme ::= while condition
13963 | for loop_parameter_specification
13964 | for iterator_specification
13965
13966 4
13967 loop_parameter_specification ::=
13968 defining_identifier in [reverse] discrete_subtype_definition
13969
13970 5
13971 If a loop_statement has a loop_statement_identifier, then the
13972 identifier shall be repeated after the end loop; otherwise, there
13973 shall not be an identifier after the end loop.
13974
13975 _Static Semantics_
13976
13977 6
13978 A loop_parameter_specification declares a loop parameter, which is an
13979 object whose subtype is that defined by the discrete_subtype_definition.
13980
13981 _Dynamic Semantics_
13982
13983 7
13984 For the execution of a loop_statement, the sequence_of_statements is
13985 executed repeatedly, zero or more times, until the loop_statement is
13986 complete. The loop_statement is complete when a transfer of control
13987 occurs that transfers control out of the loop, or, in the case of an
13988 iteration_scheme, as specified below.
13989
13990 8
13991 For the execution of a loop_statement with a while iteration_scheme, the
13992 condition is evaluated before each execution of the
13993 sequence_of_statements (*note 5.1: S0145.); if the value of the
13994 condition is True, the sequence_of_statements (*note 5.1: S0145.) is
13995 executed; if False, the execution of the loop_statement (*note 5.5:
13996 S0156.) is complete.
13997
13998 9/3
13999 For the execution of a loop_statement with the iteration_scheme being
14000 for loop_parameter_specification (*note 5.5: S0158.), the
14001 loop_parameter_specification (*note 5.5: S0158.) is first elaborated.
14002 This elaboration creates the loop parameter and elaborates the
14003 discrete_subtype_definition (*note 3.6: S0055.). If the
14004 discrete_subtype_definition (*note 3.6: S0055.) defines a subtype with a
14005 null range, the execution of the loop_statement is complete. Otherwise,
14006 the sequence_of_statements (*note 5.1: S0145.) is executed once for each
14007 value of the discrete subtype defined by the discrete_subtype_definition
14008 (*note 3.6: S0055.) that satisfies the predicate of the subtype (or
14009 until the loop is left as a consequence of a transfer of control).
14010 Prior to each such iteration, the corresponding value of the discrete
14011 subtype is assigned to the loop parameter. These values are assigned in
14012 increasing order unless the reserved word reverse is present, in which
14013 case the values are assigned in decreasing order.
14014
14015 9.1/3
14016 For details about the execution of a loop_statement with the
14017 iteration_scheme being for iterator_specification, see *note 5.5.2::.
14018
14019 NOTES
14020
14021 10
14022 5 A loop parameter is a constant; it cannot be updated within the
14023 sequence_of_statements of the loop (see *note 3.3::).
14024
14025 11
14026 6 An object_declaration should not be given for a loop parameter,
14027 since the loop parameter is automatically declared by the
14028 loop_parameter_specification. The scope of a loop parameter
14029 extends from the loop_parameter_specification to the end of the
14030 loop_statement, and the visibility rules are such that a loop
14031 parameter is only visible within the sequence_of_statements of the
14032 loop.
14033
14034 12
14035 7 The discrete_subtype_definition of a for loop is elaborated just
14036 once. Use of the reserved word reverse does not alter the discrete
14037 subtype defined, so that the following iteration_schemes are not
14038 equivalent; the first has a null range.
14039
14040 13
14041 for J in reverse 1 .. 0
14042 for J in 0 .. 1
14043
14044 _Examples_
14045
14046 14
14047 Example of a loop statement without an iteration scheme:
14048
14049 15
14050 loop
14051 Get(Current_Character);
14052 exit when Current_Character = '*';
14053 end loop;
14054
14055 16
14056 Example of a loop statement with a while iteration scheme:
14057
14058 17
14059 while Bid(N).Price < Cut_Off.Price loop
14060 Record_Bid(Bid(N).Price);
14061 N := N + 1;
14062 end loop;
14063
14064 18
14065 Example of a loop statement with a for iteration scheme:
14066
14067 19
14068 for J in Buffer'Range loop -- works even with a null range
14069 if Buffer(J) /= Space then
14070 Put(Buffer(J));
14071 end if;
14072 end loop;
14073
14074 20
14075 Example of a loop statement with a name:
14076
14077 21
14078 Summation:
14079 while Next /= Head loop -- see *note 3.10.1::
14080 Sum := Sum + Next.Value;
14081 Next := Next.Succ;
14082 end loop Summation;
14083
14084 * Menu:
14085
14086 * 5.5.1 :: User-Defined Iterator Types
14087 * 5.5.2 :: Generalized Loop Iteration
14088
14089 \1f
14090 File: arm2012.info, Node: 5.5.1, Next: 5.5.2, Up: 5.5
14091
14092 5.5.1 User-Defined Iterator Types
14093 ---------------------------------
14094
14095 _Static Semantics_
14096
14097 1/3
14098 The following language-defined generic library package exists:
14099
14100 2/3
14101 generic
14102 type Cursor;
14103 with function Has_Element (Position : Cursor) return Boolean;
14104 package Ada.Iterator_Interfaces is
14105 pragma Pure (Iterator_Interfaces);
14106
14107 3/3
14108 type Forward_Iterator is limited interface;
14109 function First (Object : Forward_Iterator) return Cursor is abstract;
14110 function Next (Object : Forward_Iterator; Position : Cursor)
14111 return Cursor is abstract;
14112
14113 4/3
14114 type Reversible_Iterator is limited interface and Forward_Iterator;
14115 function Last (Object : Reversible_Iterator) return Cursor is abstract;
14116 function Previous (Object : Reversible_Iterator; Position : Cursor)
14117 return Cursor is abstract;
14118
14119 5/3
14120 end Ada.Iterator_Interfaces;
14121
14122 6/3
14123 An iterator type is a type descended from the Forward_Iterator interface
14124 from some instance of Ada.Iterator_Interfaces. A reversible iterator
14125 type is a type descended from the Reversible_Iterator interface from
14126 some instance of Ada.Iterator_Interfaces. An iterator object is an
14127 object of an iterator type. A reversible iterator object is an object
14128 of a reversible iterator type. The formal subtype Cursor from the
14129 associated instance of Ada.Iterator_Interfaces is the iteration cursor
14130 subtype for the iterator type.
14131
14132 7/3
14133 The following type-related operational aspects may be specified for an
14134 indexable container type T (see *note 4.1.6::):
14135
14136 8/3
14137 Default_Iterator
14138 This aspect is specified by a name that denotes exactly
14139 one function declared immediately within the same
14140 declaration list in which T is declared, whose first
14141 parameter is of type T or T'Class or an access parameter
14142 whose designated type is type T or T'Class, whose other
14143 parameters, if any, have default expressions, and whose
14144 result type is an iterator type. This function is the
14145 default iterator function for T. Its result subtype is
14146 the default iterator subtype for T. The iteration cursor
14147 subtype for the default iterator subtype is the default
14148 cursor subtype for T.
14149
14150 9/3
14151 Iterator_Element
14152 This aspect is specified by a name that denotes a
14153 subtype. This is the default element subtype for T.
14154
14155 10/3
14156 These aspects are inherited by descendants of type T (including
14157 T'Class).
14158
14159 11/3
14160 An iterable container type is an indexable container type with specified
14161 Default_Iterator and Iterator_Element aspects. A reversible iterable
14162 container type is an iterable container type with the default iterator
14163 type being a reversible iterator type. An iterable container object is
14164 an object of an iterable container type. A reversible iterable
14165 container object is an object of a reversible iterable container type.
14166
14167 _Legality Rules_
14168
14169 12/3
14170 The Constant_Indexing aspect (if any) of an iterable container type T
14171 shall denote exactly one function with the following properties:
14172
14173 13/3
14174 * the result type of the function is covered by the default element
14175 type of T or is a reference type (see *note 4.1.5::) with an access
14176 discriminant designating a type covered by the default element type
14177 of T;
14178
14179 14/3
14180 * the type of the second parameter of the function covers the default
14181 cursor type for T;
14182
14183 15/3
14184 * if there are more than two parameters, the additional parameters
14185 all have default expressions.
14186
14187 16/3
14188 This function (if any) is the default constant indexing function for T.
14189
14190 17/3
14191 The Variable_Indexing aspect (if any) of an iterable container type T
14192 shall denote exactly one function with the following properties:
14193
14194 18/3
14195 * the result type of the function is a reference type (see *note
14196 4.1.5::) with an access discriminant designating a type covered by
14197 the default element type of T;
14198
14199 19/3
14200 * the type of the second parameter of the function covers the default
14201 cursor type for T;
14202
14203 20/3
14204 * if there are more than two parameters, the additional parameters
14205 all have default expressions.
14206
14207 21/3
14208 This function (if any) is the default variable indexing function for T.
14209
14210 \1f
14211 File: arm2012.info, Node: 5.5.2, Prev: 5.5.1, Up: 5.5
14212
14213 5.5.2 Generalized Loop Iteration
14214 --------------------------------
14215
14216 1/3
14217 Generalized forms of loop iteration are provided by an
14218 iterator_specification.
14219
14220 _Syntax_
14221
14222 2/3
14223 iterator_specification ::=
14224 defining_identifier in [reverse] iterator_name
14225 | defining_identifier [:
14226 subtype_indication] of [reverse] iterable_name
14227
14228 _Name Resolution Rules_
14229
14230 3/3
14231 For the first form of iterator_specification, called a generalized
14232 iterator, the expected type for the iterator_name is any iterator type.
14233 For the second form of iterator_specification, the expected type for the
14234 iterable_name is any array or iterable container type. If the
14235 iterable_name denotes an array object, the iterator_specification is
14236 called an array component iterator; otherwise it is called a container
14237 element iterator.
14238
14239 _Legality Rules_
14240
14241 4/3
14242 If the reserved word reverse appears, the iterator_specification is a
14243 reverse iterator; otherwise it is a forward iterator. In a reverse
14244 generalized iterator, the iterator_name shall be of a reversible
14245 iterator type. In a reverse container element iterator, the default
14246 iterator type for the type of the iterable_name shall be a reversible
14247 iterator type.
14248
14249 5/3
14250 The type of the subtype_indication, if any, of an array component
14251 iterator shall cover the component type of the type of the
14252 iterable_name. The type of the subtype_indication, if any, of a
14253 container element iterator shall cover the default element type for the
14254 type of the iterable_name.
14255
14256 6/3
14257 In a container element iterator whose iterable_name has type T, if the
14258 iterable_name denotes a constant or the Variable_Indexing aspect is not
14259 specified for T, then the Constant_Indexing aspect shall be specified
14260 for T.
14261
14262 _Static Semantics_
14263
14264 7/3
14265 An iterator_specification declares a loop parameter. In a generalized
14266 iterator, the nominal subtype of the loop parameter is the iteration
14267 cursor subtype. In an array component iterator or a container element
14268 iterator, if a subtype_indication is present, it determines the nominal
14269 subtype of the loop parameter. In an array component iterator, if a
14270 subtype_indication is not present, the nominal subtype of the loop
14271 parameter is the component subtype of the type of the iterable_name. In
14272 a container element iterator, if a subtype_indication is not present,
14273 the nominal subtype of the loop parameter is the default element subtype
14274 for the type of the iterable_name.
14275
14276 8/3
14277 In a generalized iterator, the loop parameter is a constant. In an
14278 array component iterator, the loop parameter is a constant if the
14279 iterable_name denotes a constant; otherwise it denotes a variable. In a
14280 container element iterator, the loop parameter is a constant if the
14281 iterable_name denotes a constant, or if the Variable_Indexing aspect is
14282 not specified for the type of the iterable_name; otherwise it is a
14283 variable.
14284
14285 _Dynamic Semantics_
14286
14287 9/3
14288 For the execution of a loop_statement with an iterator_specification,
14289 the iterator_specification is first elaborated. This elaboration
14290 elaborates the subtype_indication, if any.
14291
14292 10/3
14293 For a generalized iterator, the loop parameter is created, the
14294 iterator_name is evaluated, and the denoted iterator object becomes the
14295 loop iterator. In a forward generalized iterator, the operation First
14296 of the iterator type is called on the loop iterator, to produce the
14297 initial value for the loop parameter. If the result of calling
14298 Has_Element on the initial value is False, then the execution of the
14299 loop_statement is complete. Otherwise, the sequence_of_statements is
14300 executed and then the Next operation of the iterator type is called with
14301 the loop iterator and the current value of the loop parameter to produce
14302 the next value to be assigned to the loop parameter. This repeats until
14303 the result of calling Has_Element on the loop parameter is False, or the
14304 loop is left as a consequence of a transfer of control. For a reverse
14305 generalized iterator, the operations Last and Previous are called rather
14306 than First and Next.
14307
14308 11/3
14309 For an array component iterator, the iterable_name is evaluated and the
14310 denoted array object becomes the array for the loop. If the array for
14311 the loop is a null array, then the execution of the loop_statement is
14312 complete. Otherwise, the sequence_of_statements is executed with the
14313 loop parameter denoting each component of the array for the loop, using
14314 a canonical order of components, which is last dimension varying fastest
14315 (unless the array has convention Fortran, in which case it is first
14316 dimension varying fastest). For a forward array component iterator, the
14317 iteration starts with the component whose index values are each the
14318 first in their index range, and continues in the canonical order. For a
14319 reverse array component iterator, the iteration starts with the
14320 component whose index values are each the last in their index range, and
14321 continues in the reverse of the canonical order. The loop iteration
14322 proceeds until the sequence_of_statements has been executed for each
14323 component of the array for the loop, or until the loop is left as a
14324 consequence of a transfer of control.
14325
14326 12/3
14327 For a container element iterator, the iterable_name is evaluated and the
14328 denoted iterable container object becomes the iterable container object
14329 for the loop. The default iterator function for the type of the
14330 iterable container object for the loop is called on the iterable
14331 container object and the result is the loop iterator. An object of the
14332 default cursor subtype is created (the loop cursor).
14333
14334 13/3
14335 For a forward container element iterator, the operation First of the
14336 iterator type is called on the loop iterator, to produce the initial
14337 value for the loop cursor. If the result of calling Has_Element on the
14338 initial value is False, then the execution of the loop_statement is
14339 complete. Otherwise, the sequence_of_statements is executed with the
14340 loop parameter denoting an indexing (see *note 4.1.6::) into the
14341 iterable container object for the loop, with the only parameter to the
14342 indexing being the current value of the loop cursor; then the Next
14343 operation of the iterator type is called with the loop iterator and the
14344 loop cursor to produce the next value to be assigned to the loop cursor.
14345 This repeats until the result of calling Has_Element on the loop cursor
14346 is False, or until the loop is left as a consequence of a transfer of
14347 control. For a reverse container element iterator, the operations Last
14348 and Previous are called rather than First and Next. If the loop
14349 parameter is a constant (see above), then the indexing uses the default
14350 constant indexing function for the type of the iterable container object
14351 for the loop; otherwise it uses the default variable indexing function.
14352
14353 _Examples_
14354
14355 14/3
14356 -- Array component iterator example:
14357 for Element of Board loop -- See *note 3.6.1::.
14358 Element := Element * 2.0; -- Double each element of Board, a two-dimensional array.
14359 end loop;
14360
14361 15/3
14362 For examples of use of generalized iterators, see *note A.18.32:: and
14363 the corresponding container packages in *note A.18.2:: and *note
14364 A.18.3::.
14365
14366 \1f
14367 File: arm2012.info, Node: 5.6, Next: 5.7, Prev: 5.5, Up: 5
14368
14369 5.6 Block Statements
14370 ====================
14371
14372 1
14373 A block_statement encloses a handled_sequence_of_statements optionally
14374 preceded by a declarative_part.
14375
14376 _Syntax_
14377
14378 2
14379 block_statement ::=
14380 [block_statement_identifier:]
14381 [declare
14382 declarative_part]
14383 begin
14384 handled_sequence_of_statements
14385 end [block_identifier];
14386
14387 3
14388 If a block_statement has a block_statement_identifier, then the
14389 identifier shall be repeated after the end; otherwise, there shall
14390 not be an identifier after the end.
14391
14392 _Static Semantics_
14393
14394 4
14395 A block_statement that has no explicit declarative_part has an implicit
14396 empty declarative_part.
14397
14398 _Dynamic Semantics_
14399
14400 5
14401 The execution of a block_statement consists of the elaboration of its
14402 declarative_part followed by the execution of its
14403 handled_sequence_of_statements.
14404
14405 _Examples_
14406
14407 6
14408 Example of a block statement with a local variable:
14409
14410 7
14411 Swap:
14412 declare
14413 Temp : Integer;
14414 begin
14415 Temp := V; V := U; U := Temp;
14416 end Swap;
14417
14418 \1f
14419 File: arm2012.info, Node: 5.7, Next: 5.8, Prev: 5.6, Up: 5
14420
14421 5.7 Exit Statements
14422 ===================
14423
14424 1
14425 An exit_statement is used to complete the execution of an enclosing
14426 loop_statement; the completion is conditional if the exit_statement
14427 includes a condition.
14428
14429 _Syntax_
14430
14431 2
14432 exit_statement ::=
14433 exit [loop_name] [when condition];
14434
14435 _Name Resolution Rules_
14436
14437 3
14438 The loop_name, if any, in an exit_statement shall resolve to denote a
14439 loop_statement.
14440
14441 _Legality Rules_
14442
14443 4
14444 Each exit_statement (*note 5.7: S0161.) applies to a loop_statement
14445 (*note 5.5: S0156.); this is the loop_statement (*note 5.5: S0156.)
14446 being exited. An exit_statement (*note 5.7: S0161.) with a name is only
14447 allowed within the loop_statement (*note 5.5: S0156.) denoted by the
14448 name, and applies to that loop_statement (*note 5.5: S0156.). An
14449 exit_statement (*note 5.7: S0161.) without a name is only allowed within
14450 a loop_statement (*note 5.5: S0156.), and applies to the innermost
14451 enclosing one. An exit_statement (*note 5.7: S0161.) that applies to a
14452 given loop_statement (*note 5.5: S0156.) shall not appear within a body
14453 or accept_statement (*note 9.5.2: S0219.), if this construct is itself
14454 enclosed by the given loop_statement.
14455
14456 _Dynamic Semantics_
14457
14458 5
14459 For the execution of an exit_statement, the condition, if present, is
14460 first evaluated. If the value of the condition is True, or if there is
14461 no condition, a transfer of control is done to complete the
14462 loop_statement (*note 5.5: S0156.). If the value of the condition is
14463 False, no transfer of control takes place.
14464
14465 NOTES
14466
14467 6
14468 8 Several nested loops can be exited by an exit_statement that
14469 names the outer loop.
14470
14471 _Examples_
14472
14473 7
14474 Examples of loops with exit statements:
14475
14476 8
14477 for N in 1 .. Max_Num_Items loop
14478 Get_New_Item(New_Item);
14479 Merge_Item(New_Item, Storage_File);
14480 exit when New_Item = Terminal_Item;
14481 end loop;
14482
14483 9
14484 Main_Cycle:
14485 loop
14486 -- initial statements
14487 exit Main_Cycle when Found;
14488 -- final statements
14489 end loop Main_Cycle;
14490
14491 \1f
14492 File: arm2012.info, Node: 5.8, Prev: 5.7, Up: 5
14493
14494 5.8 Goto Statements
14495 ===================
14496
14497 1
14498 A goto_statement specifies an explicit transfer of control from this
14499 statement to a target statement with a given label.
14500
14501 _Syntax_
14502
14503 2
14504 goto_statement ::= goto label_name;
14505
14506 _Name Resolution Rules_
14507
14508 3
14509 The label_name shall resolve to denote a label; the statement with that
14510 label is the target statement.
14511
14512 _Legality Rules_
14513
14514 4
14515 The innermost sequence_of_statements that encloses the target statement
14516 shall also enclose the goto_statement. Furthermore, if a goto_statement
14517 is enclosed by an accept_statement or a body, then the target statement
14518 shall not be outside this enclosing construct.
14519
14520 _Dynamic Semantics_
14521
14522 5
14523 The execution of a goto_statement transfers control to the target
14524 statement, completing the execution of any compound_statement that
14525 encloses the goto_statement but does not enclose the target.
14526
14527 NOTES
14528
14529 6
14530 9 The above rules allow transfer of control to a statement of an
14531 enclosing sequence_of_statements but not the reverse. Similarly,
14532 they prohibit transfers of control such as between alternatives of
14533 a case_statement, if_statement, or select_statement; between
14534 exception_handlers; or from an exception_handler of a
14535 handled_sequence_of_statements back to its sequence_of_statements.
14536
14537 _Examples_
14538
14539 7
14540 Example of a loop containing a goto statement:
14541
14542 8
14543 <<Sort>>
14544 for I in 1 .. N-1 loop
14545 if A(I) > A(I+1) then
14546 Exchange(A(I), A(I+1));
14547 goto Sort;
14548 end if;
14549 end loop;
14550
14551 \1f
14552 File: arm2012.info, Node: 6, Next: 7, Prev: 5, Up: Top
14553
14554 6 Subprograms
14555 *************
14556
14557 1
14558 A subprogram is a program unit or intrinsic operation whose execution is
14559 invoked by a subprogram call. There are two forms of subprogram:
14560 procedures and functions. A procedure call is a statement; a function
14561 call is an expression and returns a value. The definition of a
14562 subprogram can be given in two parts: a subprogram declaration defining
14563 its interface, and a subprogram_body defining its execution. Operators
14564 and enumeration literals are functions.
14565
14566 2/3
14567 A callable entity is a subprogram or entry (see Section 9). A callable
14568 entity is invoked by a call; that is, a subprogram call or entry call.
14569 A callable construct is a construct that defines the action of a call
14570 upon a callable entity: a subprogram_body, entry_body, or
14571 accept_statement.
14572
14573 * Menu:
14574
14575 * 6.1 :: Subprogram Declarations
14576 * 6.2 :: Formal Parameter Modes
14577 * 6.3 :: Subprogram Bodies
14578 * 6.4 :: Subprogram Calls
14579 * 6.5 :: Return Statements
14580 * 6.6 :: Overloading of Operators
14581 * 6.7 :: Null Procedures
14582 * 6.8 :: Expression Functions
14583
14584 \1f
14585 File: arm2012.info, Node: 6.1, Next: 6.2, Up: 6
14586
14587 6.1 Subprogram Declarations
14588 ===========================
14589
14590 1
14591 A subprogram_declaration declares a procedure or function.
14592
14593 _Syntax_
14594
14595 2/3
14596 subprogram_declaration ::=
14597 [overriding_indicator]
14598 subprogram_specification
14599 [aspect_specification];
14600
14601 3/2
14602 This paragraph was deleted.
14603
14604 4/2
14605 subprogram_specification ::=
14606 procedure_specification
14607 | function_specification
14608
14609 4.1/2
14610 procedure_specification ::= procedure defining_program_unit_name
14611 parameter_profile
14612
14613 4.2/2
14614 function_specification ::= function defining_designator
14615 parameter_and_result_profile
14616
14617 5
14618 designator ::= [parent_unit_name . ]identifier | operator_symbol
14619
14620 6
14621 defining_designator ::= defining_program_unit_name |
14622 defining_operator_symbol
14623
14624 7
14625 defining_program_unit_name ::= [parent_unit_name . ]
14626 defining_identifier
14627
14628 8
14629 The optional parent_unit_name is only allowed for library units
14630 (see *note 10.1.1::).
14631
14632 9
14633 operator_symbol ::= string_literal
14634
14635 10/3
14636 The sequence of characters in an operator_symbol shall form a
14637 reserved word, a delimiter, or compound delimiter that corresponds
14638 to an operator belonging to one of the six categories of operators
14639 defined in subclause *note 4.5::.
14640
14641 11
14642 defining_operator_symbol ::= operator_symbol
14643
14644 12
14645 parameter_profile ::= [formal_part]
14646
14647 13/2
14648 parameter_and_result_profile ::=
14649 [formal_part] return [null_exclusion] subtype_mark
14650 | [formal_part] return access_definition
14651
14652 14
14653 formal_part ::=
14654 (parameter_specification {; parameter_specification})
14655
14656 15/3
14657 parameter_specification ::=
14658 defining_identifier_list : [aliased] mode [null_exclusion]
14659 subtype_mark [:= default_expression]
14660 | defining_identifier_list : access_definition [:=
14661 default_expression]
14662
14663 16
14664 mode ::= [in] | in out | out
14665
14666 _Name Resolution Rules_
14667
14668 17
14669 A formal parameter is an object directly visible within a
14670 subprogram_body that represents the actual parameter passed to the
14671 subprogram in a call; it is declared by a parameter_specification. For
14672 a formal parameter, the expected type for its default_expression, if
14673 any, is that of the formal parameter.
14674
14675 _Legality Rules_
14676
14677 18/3
14678 The parameter mode of a formal parameter conveys the direction of
14679 information transfer with the actual parameter: in, in out, or out.
14680 Mode in is the default, and is the mode of a parameter defined by an
14681 access_definition.
14682
14683 19
14684 A default_expression is only allowed in a parameter_specification for a
14685 formal parameter of mode in.
14686
14687 20/3
14688 A subprogram_declaration or a generic_subprogram_declaration requires a
14689 completion unless the Import aspect (see *note B.1::) is True for the
14690 declaration; the completion shall be a body or a renaming_declaration
14691 (see *note 8.5::). A completion is not allowed for an
14692 abstract_subprogram_declaration (see *note 3.9.3::), a
14693 null_procedure_declaration (see *note 6.7::), or an
14694 expression_function_declaration (see *note 6.8::).
14695
14696 21
14697 A name that denotes a formal parameter is not allowed within the
14698 formal_part in which it is declared, nor within the formal_part of a
14699 corresponding body or accept_statement.
14700
14701 _Static Semantics_
14702
14703 22
14704 The profile of (a view of) a callable entity is either a
14705 parameter_profile or parameter_and_result_profile; it embodies
14706 information about the interface to that entity -- for example, the
14707 profile includes information about parameters passed to the callable
14708 entity. All callable entities have a profile -- enumeration literals,
14709 other subprograms, and entries. An access-to-subprogram type has a
14710 designated profile. Associated with a profile is a calling convention.
14711 A subprogram_declaration declares a procedure or a function, as
14712 indicated by the initial reserved word, with name and profile as given
14713 by its specification.
14714
14715 23/2
14716 The nominal subtype of a formal parameter is the subtype determined by
14717 the optional null_exclusion and the subtype_mark, or defined by the
14718 access_definition, in the parameter_specification. The nominal subtype
14719 of a function result is the subtype determined by the optional
14720 null_exclusion and the subtype_mark, or defined by the
14721 access_definition, in the parameter_and_result_profile.
14722
14723 23.1/3
14724 An explicitly aliased parameter is a formal parameter whose
14725 parameter_specification includes the reserved word aliased.
14726
14727 24/2
14728 An access parameter is a formal in parameter specified by an
14729 access_definition. An access result type is a function result type
14730 specified by an access_definition. An access parameter or result type
14731 is of an anonymous access type (see *note 3.10::). Access parameters of
14732 an access-to-object type allow dispatching calls to be controlled by
14733 access values. Access parameters of an access-to-subprogram type permit
14734 calls to subprograms passed as parameters irrespective of their
14735 accessibility level.
14736
14737 25
14738 The subtypes of a profile are:
14739
14740 26
14741 * For any non-access parameters, the nominal subtype of the
14742 parameter.
14743
14744 27/2
14745 * For any access parameters of an access-to-object type, the
14746 designated subtype of the parameter type.
14747
14748 27.1/3
14749 * For any access parameters of an access-to-subprogram type, the
14750 subtypes of the designated profile of the parameter type.
14751
14752 28/2
14753 * For any non-access result, the nominal subtype of the function
14754 result.
14755
14756 28.1/2
14757 * For any access result type of an access-to-object type, the
14758 designated subtype of the result type.
14759
14760 28.2/3
14761 * For any access result type of an access-to-subprogram type, the
14762 subtypes of the designated profile of the result type.
14763
14764 29
14765 The types of a profile are the types of those subtypes.
14766
14767 30/3
14768 A subprogram declared by an abstract_subprogram_declaration is abstract;
14769 a subprogram declared by a subprogram_declaration is not. See *note
14770 3.9.3::, "*note 3.9.3:: Abstract Types and Subprograms". Similarly, a
14771 procedure declared by a null_procedure_declaration is a null procedure;
14772 a procedure declared by a subprogram_declaration is not. See *note
14773 6.7::, "*note 6.7:: Null Procedures". Finally, a function declared by
14774 an expression_function_declaration is an expression function; a function
14775 declared by a subprogram_declaration is not. See *note 6.8::, "*note
14776 6.8:: Expression Functions".
14777
14778 30.1/2
14779 An overriding_indicator is used to indicate whether overriding is
14780 intended. See *note 8.3.1::, "*note 8.3.1:: Overriding Indicators".
14781
14782 _Dynamic Semantics_
14783
14784 31/2
14785 The elaboration of a subprogram_declaration has no effect.
14786
14787 NOTES
14788
14789 32
14790 1 A parameter_specification with several identifiers is equivalent
14791 to a sequence of single parameter_specifications, as explained in
14792 *note 3.3::.
14793
14794 33
14795 2 Abstract subprograms do not have bodies, and cannot be used in a
14796 nondispatching call (see *note 3.9.3::, "*note 3.9.3:: Abstract
14797 Types and Subprograms").
14798
14799 34
14800 3 The evaluation of default_expressions is caused by certain
14801 calls, as described in *note 6.4.1::. They are not evaluated
14802 during the elaboration of the subprogram declaration.
14803
14804 35
14805 4 Subprograms can be called recursively and can be called
14806 concurrently from multiple tasks.
14807
14808 _Examples_
14809
14810 36
14811 Examples of subprogram declarations:
14812
14813 37
14814 procedure Traverse_Tree;
14815 procedure Increment(X : in out Integer);
14816 procedure Right_Indent(Margin : out Line_Size); -- see *note 3.5.4::
14817 procedure Switch(From, To : in out Link); -- see *note 3.10.1::
14818
14819 38
14820 function Random return Probability; -- see *note 3.5.7::
14821
14822 39
14823 function Min_Cell(X : Link) return Cell; -- see *note 3.10.1::
14824 function Next_Frame(K : Positive) return Frame; -- see *note 3.10::
14825 function Dot_Product(Left, Right : Vector) return Real; -- see *note 3.6::
14826
14827 40
14828 function "*"(Left, Right : Matrix) return Matrix; -- see *note 3.6::
14829
14830 41
14831 Examples of in parameters with default expressions:
14832
14833 42
14834 procedure Print_Header(Pages : in Natural;
14835 Header : in Line := (1 .. Line'Last => ' '); -- see *note 3.6::
14836 Center : in Boolean := True);
14837
14838 * Menu:
14839
14840 * 6.1.1 :: Preconditions and Postconditions
14841
14842 \1f
14843 File: arm2012.info, Node: 6.1.1, Up: 6.1
14844
14845 6.1.1 Preconditions and Postconditions
14846 --------------------------------------
14847
14848 1/3
14849 For a subprogram or entry, the following language-defined aspects may be
14850 specified with an aspect_specification (see *note 13.1.1::):
14851
14852 2/3
14853 Pre
14854 This aspect specifies a specific precondition for a
14855 callable entity; it shall be specified by an expression,
14856 called a specific precondition expression. If not
14857 specified for an entity, the specific precondition
14858 expression for the entity is the enumeration literal
14859 True.
14860
14861 3/3
14862 Pre'Class
14863 This aspect specifies a class-wide precondition for an
14864 operation of a tagged type and its descendants; it shall
14865 be specified by an expression, called a class-wide
14866 precondition expression. If not specified for an entity,
14867 then if no other class-wide precondition applies to the
14868 entity, the class-wide precondition expression for the
14869 entity is the enumeration literal True.
14870
14871 4/3
14872 Post
14873 This aspect specifies a specific postcondition for a
14874 callable entity; it shall be specified by an expression,
14875 called a specific postcondition expression. If not
14876 specified for an entity, the specific postcondition
14877 expression for the entity is the enumeration literal
14878 True.
14879
14880 5/3
14881 Post'Class
14882 This aspect specifies a class-wide postcondition for an
14883 operation of a tagged type and its descendants; it shall
14884 be specified by an expression, called a class-wide
14885 postcondition expression. If not specified for an
14886 entity, the class-wide postcondition expression for the
14887 entity is the enumeration literal True.
14888
14889 _Name Resolution Rules_
14890
14891 6/3
14892 The expected type for a precondition or postcondition expression is any
14893 boolean type.
14894
14895 7/3
14896 Within the expression for a Pre'Class or Post'Class aspect for a
14897 primitive subprogram of a tagged type T, a name that denotes a formal
14898 parameter of type T is interpreted as having type T'Class. Similarly, a
14899 name that denotes a formal access parameter of type access-to-T is
14900 interpreted as having type access-to-T'Class. This ensures that the
14901 expression is well-defined for a primitive subprogram of a type
14902 descended from T.
14903
14904 8/3
14905 For an attribute_reference with attribute_designator Old, if the
14906 attribute reference has an expected type or shall resolve to a given
14907 type, the same applies to the prefix; otherwise, the prefix shall be
14908 resolved independently of context.
14909
14910 _Legality Rules_
14911
14912 9/3
14913 The Pre or Post aspect shall not be specified for an abstract subprogram
14914 or a null procedure. Only the Pre'Class and Post'Class aspects may be
14915 specified for such a subprogram.
14916
14917 10/3
14918 If a type T has an implicitly declared subprogram P inherited from a
14919 parent type T1 and a homograph (see *note 8.3::) of P from a progenitor
14920 type T2, and
14921
14922 11/3
14923 * the corresponding primitive subprogram P1 of type T1 is neither
14924 null nor abstract; and
14925
14926 12/3
14927 * the class-wide precondition expression True does not apply to P1
14928 (implicitly or explicitly); and
14929
14930 13/3
14931 * there is a class-wide precondition expression that applies to the
14932 corresponding primitive subprogram P2 of T2 that does not fully
14933 conform to any class-wide precondition expression that applies to
14934 P1,
14935
14936 14/3
14937 then:
14938
14939 15/3
14940 * If the type T is abstract, the implicitly declared subprogram P is
14941 abstract.
14942
14943 16/3
14944 * Otherwise, the subprogram P requires overriding and shall be
14945 overridden with a nonabstract subprogram.
14946
14947 17/3
14948 If a renaming of a subprogram or entry S1 overrides an inherited
14949 subprogram S2, then the overriding is illegal unless each class-wide
14950 precondition expression that applies to S1 fully conforms to some
14951 class-wide precondition expression that applies to S2 and each
14952 class-wide precondition expression that applies to S2 fully conforms to
14953 some class-wide precondition expression that applies to S1.
14954
14955 _Static Semantics_
14956
14957 18/3
14958 If a Pre'Class or Post'Class aspect is specified for a primitive
14959 subprogram of a tagged type T, then the associated expression also
14960 applies to the corresponding primitive subprogram of each descendant of
14961 T.
14962
14963 19/3
14964 If performing checks is required by the Pre, Pre'Class, Post, or
14965 Post'Class assertion policies (see *note 11.4.2::) in effect at the
14966 point of a corresponding aspect specification applicable to a given
14967 subprogram or entry, then the respective precondition or postcondition
14968 expressions are considered enabled.
14969
14970 20/3
14971 An expression is potentially unevaluated if it occurs within:
14972
14973 21/3
14974 * any part of an if_expression other than the first condition;
14975
14976 22/3
14977 * a dependent_expression of a case_expression;
14978
14979 23/3
14980 * the right operand of a short-circuit control form; or
14981
14982 24/3
14983 * a membership_choice other than the first of a membership operation.
14984
14985 25/3
14986 For a prefix X that denotes an object of a nonlimited type, the
14987 following attribute is defined:
14988
14989 26/3
14990 X'Old
14991 For each X'Old in a postcondition expression that is
14992 enabled, a constant is implicitly declared at the
14993 beginning of the subprogram or entry. The constant is of
14994 the type of X and is initialized to the result of
14995 evaluating X (as an expression) at the point of the
14996 constant declaration. The value of X'Old in the
14997 postcondition expression is the value of this constant;
14998 the type of X'Old is the type of X. These implicit
14999 constant declarations occur in an arbitrary order.
15000
15001 27/3
15002 Reference to this attribute is only allowed within a
15003 postcondition expression. The prefix of an Old
15004 attribute_reference shall not contain a Result
15005 attribute_reference, nor an Old attribute_reference, nor
15006 a use of an entity declared within the postcondition
15007 expression but not within prefix itself (for example, the
15008 loop parameter of an enclosing quantified_expression).
15009 The prefix of an Old attribute_reference that is
15010 potentially unevaluated shall statically denote an
15011 entity.
15012
15013 28/3
15014 For a prefix F that denotes a function declaration, the following
15015 attribute is defined:
15016
15017 29/3
15018 F'Result
15019 Within a postcondition expression for function F, denotes
15020 the result object of the function. The type of this
15021 attribute is that of the function result except within a
15022 Post'Class postcondition expression for a function with a
15023 controlling result or with a controlling access result.
15024 For a controlling result, the type of the attribute is
15025 T'Class, where T is the function result type. For a
15026 controlling access result, the type of the attribute is
15027 an anonymous access type whose designated type is
15028 T'Class, where T is the designated type of the function
15029 result type.
15030
15031 30/3
15032 Use of this attribute is allowed only within a
15033 postcondition expression for F.
15034
15035 _Dynamic Semantics_
15036
15037 31/3
15038 Upon a call of the subprogram or entry, after evaluating any actual
15039 parameters, precondition checks are performed as follows:
15040
15041 32/3
15042 * The specific precondition check begins with the evaluation of the
15043 specific precondition expression that applies to the subprogram or
15044 entry, if it is enabled; if the expression evaluates to False,
15045 Assertions.Assertion_Error is raised; if the expression is not
15046 enabled, the check succeeds.
15047
15048 33/3
15049 * The class-wide precondition check begins with the evaluation of any
15050 enabled class-wide precondition expressions that apply to the
15051 subprogram or entry. If and only if all the class-wide
15052 precondition expressions evaluate to False,
15053 Assertions.Assertion_Error is raised.
15054
15055 34/3
15056 The precondition checks are performed in an arbitrary order, and if any
15057 of the class-wide precondition expressions evaluate to True, it is not
15058 specified whether the other class-wide precondition expressions are
15059 evaluated. The precondition checks and any check for elaboration of the
15060 subprogram body are performed in an arbitrary order. It is not
15061 specified whether in a call on a protected operation, the checks are
15062 performed before or after starting the protected action. For an entry
15063 call, the checks are performed prior to checking whether the entry is
15064 open.
15065
15066 35/3
15067 Upon successful return from a call of the subprogram or entry, prior to
15068 copying back any by-copy in out or out parameters, the postcondition
15069 check is performed. This consists of the evaluation of any enabled
15070 specific and class-wide postcondition expressions that apply to the
15071 subprogram or entry. If any of the postcondition expressions evaluate
15072 to False, then Assertions.Assertion_Error is raised. The postcondition
15073 expressions are evaluated in an arbitrary order, and if any
15074 postcondition expression evaluates to False, it is not specified whether
15075 any other postcondition expressions are evaluated. The postcondition
15076 check, and any constraint or predicate checks associated with in out or
15077 out parameters are performed in an arbitrary order.
15078
15079 36/3
15080 If a precondition or postcondition check fails, the exception is raised
15081 at the point of the call; the exception cannot be handled inside the
15082 called subprogram or entry. Similarly, any exception raised by the
15083 evaluation of a precondition or postcondition expression is raised at
15084 the point of call.
15085
15086 37/3
15087 For any subprogram or entry call (including dispatching calls), the
15088 checks that are performed to verify specific precondition expressions
15089 and specific and class-wide postcondition expressions are determined by
15090 those for the subprogram or entry actually invoked. Note that the
15091 class-wide postcondition expressions verified by the postcondition check
15092 that is part of a call on a primitive subprogram of type T includes all
15093 class-wide postcondition expressions originating in any progenitor of T,
15094 even if the primitive subprogram called is inherited from a type T1 and
15095 some of the postcondition expressions do not apply to the corresponding
15096 primitive subprogram of T1.
15097
15098 38/3
15099 The class-wide precondition check for a call to a subprogram or entry
15100 consists solely of checking the class-wide precondition expressions that
15101 apply to the denoted callable entity (not necessarily the one that is
15102 invoked).
15103
15104 39/3
15105 For a call via an access-to-subprogram value, all precondition and
15106 postcondition checks performed are determined by the subprogram or entry
15107 denoted by the prefix of the Access attribute reference that produced
15108 the value.
15109
15110 NOTES
15111
15112 40/3
15113 5 A precondition is checked just before the call. If another task
15114 can change any value that the precondition expression depends on,
15115 the precondition need not hold within the subprogram or entry body.
15116
15117 \1f
15118 File: arm2012.info, Node: 6.2, Next: 6.3, Prev: 6.1, Up: 6
15119
15120 6.2 Formal Parameter Modes
15121 ==========================
15122
15123 1
15124 A parameter_specification declares a formal parameter of mode in, in
15125 out, or out.
15126
15127 _Static Semantics_
15128
15129 2
15130 A parameter is passed either by copy or by reference. When a parameter
15131 is passed by copy, the formal parameter denotes a separate object from
15132 the actual parameter, and any information transfer between the two
15133 occurs only before and after executing the subprogram. When a parameter
15134 is passed by reference, the formal parameter denotes (a view of) the
15135 object denoted by the actual parameter; reads and updates of the formal
15136 parameter directly reference the actual parameter object.
15137
15138 3/3
15139 A type is a by-copy type if it is an elementary type, or if it is a
15140 descendant of a private type whose full type is a by-copy type. A
15141 parameter of a by-copy type is passed by copy, unless the formal
15142 parameter is explicitly aliased.
15143
15144 4
15145 A type is a by-reference type if it is a descendant of one of the
15146 following:
15147
15148 5
15149 * a tagged type;
15150
15151 6
15152 * a task or protected type;
15153
15154 7/3
15155 * an explicitly limited record type;
15156
15157 8
15158 * a composite type with a subcomponent of a by-reference type;
15159
15160 9
15161 * a private type whose full type is a by-reference type.
15162
15163 10/3
15164 A parameter of a by-reference type is passed by reference, as is an
15165 explicitly aliased parameter of any type. Each value of a by-reference
15166 type has an associated object. For a parenthesized expression,
15167 qualified_expression, or type_conversion, this object is the one
15168 associated with the operand. For a conditional_expression, this object
15169 is the one associated with the evaluated dependent_expression.
15170
15171 11/3
15172 For other parameters, it is unspecified whether the parameter is passed
15173 by copy or by reference.
15174
15175 _Bounded (Run-Time) Errors_
15176
15177 12/3
15178 If one name denotes a part of a formal parameter, and a second name
15179 denotes a part of a distinct formal parameter or an object that is not
15180 part of a formal parameter, then the two names are considered distinct
15181 access paths. If an object is of a type for which the parameter passing
15182 mechanism is not specified and is not an explicitly aliased parameter,
15183 then it is a bounded error to assign to the object via one access path,
15184 and then read the value of the object via a distinct access path, unless
15185 the first access path denotes a part of a formal parameter that no
15186 longer exists at the point of the second access (due to leaving the
15187 corresponding callable construct). The possible consequences are that
15188 Program_Error is raised, or the newly assigned value is read, or some
15189 old value of the object is read.
15190
15191 NOTES
15192
15193 13
15194 6 A formal parameter of mode in is a constant view (see *note
15195 3.3::); it cannot be updated within the subprogram_body.
15196
15197 \1f
15198 File: arm2012.info, Node: 6.3, Next: 6.4, Prev: 6.2, Up: 6
15199
15200 6.3 Subprogram Bodies
15201 =====================
15202
15203 1
15204 A subprogram_body specifies the execution of a subprogram.
15205
15206 _Syntax_
15207
15208 2/3
15209 subprogram_body ::=
15210 [overriding_indicator]
15211 subprogram_specification
15212 [aspect_specification] is
15213 declarative_part
15214 begin
15215 handled_sequence_of_statements
15216 end [designator];
15217
15218 3
15219 If a designator appears at the end of a subprogram_body, it shall
15220 repeat the defining_designator of the subprogram_specification.
15221
15222 _Legality Rules_
15223
15224 4
15225 In contrast to other bodies, a subprogram_body need not be the
15226 completion of a previous declaration, in which case the body declares
15227 the subprogram. If the body is a completion, it shall be the completion
15228 of a subprogram_declaration or generic_subprogram_declaration. The
15229 profile of a subprogram_body that completes a declaration shall conform
15230 fully to that of the declaration.
15231
15232 _Static Semantics_
15233
15234 5
15235 A subprogram_body is considered a declaration. It can either complete a
15236 previous declaration, or itself be the initial declaration of the
15237 subprogram.
15238
15239 _Dynamic Semantics_
15240
15241 6
15242 The elaboration of a nongeneric subprogram_body has no other effect than
15243 to establish that the subprogram can from then on be called without
15244 failing the Elaboration_Check.
15245
15246 7
15247 The execution of a subprogram_body is invoked by a subprogram call. For
15248 this execution the declarative_part is elaborated, and the
15249 handled_sequence_of_statements is then executed.
15250
15251 _Examples_
15252
15253 8
15254 Example of procedure body:
15255
15256 9
15257 procedure Push(E : in Element_Type; S : in out Stack) is
15258 begin
15259 if S.Index = S.Size then
15260 raise Stack_Overflow;
15261 else
15262 S.Index := S.Index + 1;
15263 S.Space(S.Index) := E;
15264 end if;
15265 end Push;
15266
15267 10
15268 Example of a function body:
15269
15270 11
15271 function Dot_Product(Left, Right : Vector) return Real is
15272 Sum : Real := 0.0;
15273 begin
15274 Check(Left'First = Right'First and Left'Last = Right'Last);
15275 for J in Left'Range loop
15276 Sum := Sum + Left(J)*Right(J);
15277 end loop;
15278 return Sum;
15279 end Dot_Product;
15280
15281 * Menu:
15282
15283 * 6.3.1 :: Conformance Rules
15284 * 6.3.2 :: Inline Expansion of Subprograms
15285
15286 \1f
15287 File: arm2012.info, Node: 6.3.1, Next: 6.3.2, Up: 6.3
15288
15289 6.3.1 Conformance Rules
15290 -----------------------
15291
15292 1
15293 When subprogram profiles are given in more than one place, they are
15294 required to conform in one of four ways: type conformance, mode
15295 conformance, subtype conformance, or full conformance.
15296
15297 _Static Semantics_
15298
15299 2/1
15300 As explained in *note B.1::, "*note B.1:: Interfacing Aspects", a
15301 convention can be specified for an entity. Unless this International
15302 Standard states otherwise, the default convention of an entity is Ada.
15303 For a callable entity or access-to-subprogram type, the convention is
15304 called the calling convention. The following conventions are defined by
15305 the language:
15306
15307 3/3
15308 * The default calling convention for any subprogram not listed below
15309 is Ada. The Convention aspect may be specified to override the
15310 default calling convention (see *note B.1::).
15311
15312 4
15313 * The Intrinsic calling convention represents subprograms that are
15314 "built in" to the compiler. The default calling convention is
15315 Intrinsic for the following:
15316
15317 5
15318 * an enumeration literal;
15319
15320 6
15321 * a "/=" operator declared implicitly due to the
15322 declaration of "=" (see *note 6.6::);
15323
15324 7
15325 * any other implicitly declared subprogram unless it is a
15326 dispatching operation of a tagged type;
15327
15328 8
15329 * an inherited subprogram of a generic formal tagged type
15330 with unknown discriminants;
15331
15332 9
15333 * an attribute that is a subprogram;
15334
15335 10/2
15336 * a subprogram declared immediately within a
15337 protected_body;
15338
15339 10.1/2
15340 * any prefixed view of a subprogram (see *note 4.1.3::).
15341
15342 11
15343 The Access attribute is not allowed for Intrinsic subprograms.
15344
15345 12
15346 * The default calling convention is protected for a protected
15347 subprogram, and for an access-to-subprogram type with the reserved
15348 word protected in its definition.
15349
15350 13
15351 * The default calling convention is entry for an entry.
15352
15353 13.1/3
15354 * The calling convention for an anonymous access-to-subprogram
15355 parameter or anonymous access-to-subprogram result is protected if
15356 the reserved word protected appears in its definition; otherwise,
15357 it is the convention of the subprogram that contains the parameter.
15358
15359 13.2/1
15360 * If not specified above as Intrinsic, the calling convention for any
15361 inherited or overriding dispatching operation of a tagged type is
15362 that of the corresponding subprogram of the parent type. The
15363 default calling convention for a new dispatching operation of a
15364 tagged type is the convention of the type.
15365
15366 14/3
15367 Of these four conventions, only Ada and Intrinsic are allowed as a
15368 convention_identifier in the specification of a Convention aspect.
15369
15370 15/2
15371 Two profiles are type conformant if they have the same number of
15372 parameters, and both have a result if either does, and corresponding
15373 parameter and result types are the same, or, for access parameters or
15374 access results, corresponding designated types are the same, or
15375 corresponding designated profiles are type conformant.
15376
15377 16/3
15378 Two profiles are mode conformant if:
15379
15380 16.1/3
15381 * they are type conformant; and
15382
15383 16.2/3
15384 * corresponding parameters have identical modes and both or neither
15385 are explicitly aliased parameters; and
15386
15387 16.3/3
15388 * for corresponding access parameters and any access result type, the
15389 designated subtypes statically match and either both or neither are
15390 access-to-constant, or the designated profiles are subtype
15391 conformant.
15392
15393 17/3
15394 Two profiles are subtype conformant if they are mode conformant,
15395 corresponding subtypes of the profile statically match, and the
15396 associated calling conventions are the same. The profile of a generic
15397 formal subprogram is not subtype conformant with any other profile.
15398
15399 18/3
15400 Two profiles are fully conformant if they are subtype conformant, if
15401 they have access-to-subprogram results whose designated profiles are
15402 fully conformant, and for corresponding parameters:
15403
15404 18.1/3
15405 * they have the same names; and
15406
15407 18.2/3
15408 * both or neither have null_exclusions; and
15409
15410 18.3/3
15411 * neither have default_expressions, or they both have
15412 default_expressions that are fully conformant with one another; and
15413
15414 18.4/3
15415 * for access-to-subprogram parameters, the designated profiles are
15416 fully conformant.
15417
15418 19
15419 Two expressions are fully conformant if, after replacing each use of an
15420 operator with the equivalent function_call:
15421
15422 20
15423 * each constituent construct of one corresponds to an instance of the
15424 same syntactic category in the other, except that an expanded name
15425 may correspond to a direct_name (or character_literal) or to a
15426 different expanded name in the other; and
15427
15428 21
15429 * each direct_name, character_literal, and selector_name that is not
15430 part of the prefix of an expanded name in one denotes the same
15431 declaration as the corresponding direct_name, character_literal, or
15432 selector_name in the other; and
15433
15434 21.1/3
15435 * each attribute_designator in one is the same as the corresponding
15436 attribute_designator in the other; and
15437
15438 22
15439 * each primary that is a literal in one has the same value as the
15440 corresponding literal in the other.
15441
15442 23
15443 Two known_discriminant_parts are fully conformant if they have the same
15444 number of discriminants, and discriminants in the same positions have
15445 the same names, statically matching subtypes, and default_expressions
15446 that are fully conformant with one another.
15447
15448 24
15449 Two discrete_subtype_definitions are fully conformant if they are both
15450 subtype_indications or are both ranges, the subtype_marks (if any)
15451 denote the same subtype, and the corresponding simple_expressions of the
15452 ranges (if any) fully conform.
15453
15454 24.1/2
15455 The prefixed view profile of a subprogram is the profile obtained by
15456 omitting the first parameter of that subprogram. There is no prefixed
15457 view profile for a parameterless subprogram. For the purposes of
15458 defining subtype and mode conformance, the convention of a prefixed view
15459 profile is considered to match that of either an entry or a protected
15460 operation.
15461
15462 _Implementation Permissions_
15463
15464 25
15465 An implementation may declare an operator declared in a language-defined
15466 library unit to be intrinsic.
15467
15468 \1f
15469 File: arm2012.info, Node: 6.3.2, Prev: 6.3.1, Up: 6.3
15470
15471 6.3.2 Inline Expansion of Subprograms
15472 -------------------------------------
15473
15474 1
15475 Subprograms may be expanded in line at the call site.
15476
15477 Paragraphs 2 through 4 were moved to *note Annex J::, "*note Annex J::
15478 Obsolescent Features".
15479
15480 _Static Semantics_
15481
15482 5/3
15483 For a callable entity or a generic subprogram, the following
15484 language-defined representation aspect may be specified:
15485
15486 5.1/3
15487 Inline
15488 The type of aspect Inline is Boolean. When aspect Inline
15489 is True for a callable entity, inline expansion is
15490 desired for all calls to that entity. When aspect Inline
15491 is True for a generic subprogram, inline expansion is
15492 desired for all calls to all instances of that generic
15493 subprogram.
15494
15495 5.2/3
15496 If directly specified, the aspect_definition shall be a
15497 static expression. This aspect is never inherited; if
15498 not directly specified, the aspect is False.
15499
15500 _Implementation Permissions_
15501
15502 6/3
15503 For each call, an implementation is free to follow or to ignore the
15504 recommendation determined by the Inline aspect.
15505
15506 \1f
15507 File: arm2012.info, Node: 6.4, Next: 6.5, Prev: 6.3, Up: 6
15508
15509 6.4 Subprogram Calls
15510 ====================
15511
15512 1
15513 A subprogram call is either a procedure_call_statement or a
15514 function_call; it invokes the execution of the subprogram_body. The
15515 call specifies the association of the actual parameters, if any, with
15516 formal parameters of the subprogram.
15517
15518 _Syntax_
15519
15520 2
15521 procedure_call_statement ::=
15522 procedure_name;
15523 | procedure_prefix actual_parameter_part;
15524
15525 3
15526 function_call ::=
15527 function_name
15528 | function_prefix actual_parameter_part
15529
15530 4
15531 actual_parameter_part ::=
15532 (parameter_association {, parameter_association})
15533
15534 5
15535 parameter_association ::=
15536 [formal_parameter_selector_name =>] explicit_actual_parameter
15537
15538 6
15539 explicit_actual_parameter ::= expression | variable_name
15540
15541 7
15542 A parameter_association is named or positional according to whether
15543 or not the formal_parameter_selector_name (*note 4.1.3: S0099.) is
15544 specified. Any positional associations shall precede any named
15545 associations. Named associations are not allowed if the prefix in
15546 a subprogram call is an attribute_reference (*note 4.1.4: S0100.).
15547
15548 _Name Resolution Rules_
15549
15550 8/2
15551 The name or prefix given in a procedure_call_statement shall resolve to
15552 denote a callable entity that is a procedure, or an entry renamed as
15553 (viewed as) a procedure. The name or prefix given in a function_call
15554 shall resolve to denote a callable entity that is a function. The name
15555 or prefix shall not resolve to denote an abstract subprogram unless it
15556 is also a dispatching subprogram. When there is an
15557 actual_parameter_part (*note 6.4: S0180.), the prefix can be an
15558 implicit_dereference (*note 4.1: S0095.) of an access-to-subprogram
15559 value.
15560
15561 9
15562 A subprogram call shall contain at most one association for each formal
15563 parameter. Each formal parameter without an association shall have a
15564 default_expression (in the profile of the view denoted by the name or
15565 prefix). This rule is an overloading rule (see *note 8.6::).
15566
15567 _Dynamic Semantics_
15568
15569 10/2
15570 For the execution of a subprogram call, the name or prefix of the call
15571 is evaluated, and each parameter_association (*note 6.4: S0181.) is
15572 evaluated (see *note 6.4.1::). If a default_expression (*note 3.7:
15573 S0063.) is used, an implicit parameter_association (*note 6.4: S0181.)
15574 is assumed for this rule. These evaluations are done in an arbitrary
15575 order. The subprogram_body (*note 6.3: S0177.) is then executed, or a
15576 call on an entry or protected subprogram is performed (see *note
15577 3.9.2::). Finally, if the subprogram completes normally, then after it
15578 is left, any necessary assigning back of formal to actual parameters
15579 occurs (see *note 6.4.1::).
15580
15581 10.1/2
15582 If the name or prefix of a subprogram call denotes a prefixed view (see
15583 *note 4.1.3::), the subprogram call is equivalent to a call on the
15584 underlying subprogram, with the first actual parameter being provided by
15585 the prefix of the prefixed view (or the Access attribute of this prefix
15586 if the first formal parameter is an access parameter), and the remaining
15587 actual parameters given by the actual_parameter_part, if any.
15588
15589 11/2
15590 The exception Program_Error is raised at the point of a function_call if
15591 the function completes normally without executing a return statement.
15592
15593 12/2
15594 A function_call denotes a constant, as defined in *note 6.5::; the
15595 nominal subtype of the constant is given by the nominal subtype of the
15596 function result.
15597
15598 _Examples_
15599
15600 13
15601 Examples of procedure calls:
15602
15603 14
15604 Traverse_Tree; -- see *note 6.1::
15605 Print_Header(128, Title, True); -- see *note 6.1::
15606
15607 15
15608 Switch(From => X, To => Next); -- see *note 6.1::
15609 Print_Header(128, Header => Title, Center => True); -- see *note 6.1::
15610 Print_Header(Header => Title, Center => True, Pages => 128); -- see *note 6.1::
15611
15612 16
15613 Examples of function calls:
15614
15615 17
15616 Dot_Product(U, V) -- see *note 6.1:: and *note 6.3::
15617 Clock -- see *note 9.6::
15618 F.all -- presuming F is of an access-to-subprogram type -- see *note 3.10::
15619
15620 18
15621 Examples of procedures with default expressions:
15622
15623 19
15624 procedure Activate(Process : in Process_Name;
15625 After : in Process_Name := No_Process;
15626 Wait : in Duration := 0.0;
15627 Prior : in Boolean := False);
15628
15629 20/3
15630 procedure Pair(Left, Right : in Person_Name := new Person(M)); -- see *note 3.10.1::
15631
15632 21
15633 Examples of their calls:
15634
15635 22
15636 Activate(X);
15637 Activate(X, After => Y);
15638 Activate(X, Wait => 60.0, Prior => True);
15639 Activate(X, Y, 10.0, False);
15640
15641 23/3
15642 Pair;
15643 Pair(Left => new Person(F), Right => new Person(M));
15644
15645 NOTES
15646
15647 24
15648 7 If a default_expression is used for two or more parameters in a
15649 multiple parameter_specification (*note 6.1: S0175.), the
15650 default_expression (*note 3.7: S0063.) is evaluated once for each
15651 omitted parameter. Hence in the above examples, the two calls of
15652 Pair are equivalent.
15653
15654 _Examples_
15655
15656 25
15657 Examples of overloaded subprograms:
15658
15659 26
15660 procedure Put(X : in Integer);
15661 procedure Put(X : in String);
15662
15663 27
15664 procedure Set(Tint : in Color);
15665 procedure Set(Signal : in Light);
15666
15667 28
15668 Examples of their calls:
15669
15670 29
15671 Put(28);
15672 Put("no possible ambiguity here");
15673
15674 30
15675 Set(Tint => Red);
15676 Set(Signal => Red);
15677 Set(Color'(Red));
15678
15679 31
15680 -- Set(Red) would be ambiguous since Red may
15681 -- denote a value either of type Color or of type Light
15682
15683 * Menu:
15684
15685 * 6.4.1 :: Parameter Associations
15686
15687 \1f
15688 File: arm2012.info, Node: 6.4.1, Up: 6.4
15689
15690 6.4.1 Parameter Associations
15691 ----------------------------
15692
15693 1
15694 A parameter association defines the association between an actual
15695 parameter and a formal parameter.
15696
15697 _Name Resolution Rules_
15698
15699 2/3
15700 The formal_parameter_selector_name of a named parameter_association
15701 (*note 6.4: S0181.) shall resolve to denote a parameter_specification
15702 (*note 6.1: S0175.) of the view being called; this is the formal
15703 parameter of the association. The formal parameter for a positional
15704 parameter_association (*note 6.4: S0181.) is the parameter with the
15705 corresponding position in the formal part of the view being called.
15706
15707 3
15708 The actual parameter is either the explicit_actual_parameter given in a
15709 parameter_association for a given formal parameter, or the corresponding
15710 default_expression if no parameter_association is given for the formal
15711 parameter. The expected type for an actual parameter is the type of the
15712 corresponding formal parameter.
15713
15714 4
15715 If the mode is in, the actual is interpreted as an expression;
15716 otherwise, the actual is interpreted only as a name, if possible.
15717
15718 _Legality Rules_
15719
15720 5
15721 If the mode is in out or out, the actual shall be a name that denotes a
15722 variable.
15723
15724 6/3
15725 If the formal parameter is an explicitly aliased parameter, the type of
15726 the actual parameter shall be tagged or the actual parameter shall be an
15727 aliased view of an object. Further, if the formal parameter subtype F
15728 is untagged:
15729
15730 6.1/3
15731 * the subtype F shall statically match the nominal subtype of the
15732 actual object; or
15733
15734 6.2/3
15735 * the subtype F shall be unconstrained, discriminated in its full
15736 view, and unconstrained in any partial view.
15737
15738 6.3/3
15739 In a function call, the accessibility level of the actual object for
15740 each explicitly aliased parameter shall not be statically deeper than
15741 the accessibility level of the master of the call (see *note 3.10.2::).
15742
15743 6.4/3
15744 Two names are known to denote the same object if:
15745
15746 6.5/3
15747 * both names statically denote the same stand-alone object or
15748 parameter; or
15749
15750 6.6/3
15751 * both names are selected_components, their prefixes are known to
15752 denote the same object, and their selector_names denote the same
15753 component; or
15754
15755 6.7/3
15756 * both names are dereferences (implicit or explicit) and the
15757 dereferenced names are known to denote the same object; or
15758
15759 6.8/3
15760 * both names are indexed_components, their prefixes are known to
15761 denote the same object, and each of the pairs of corresponding
15762 index values are either both static expressions with the same
15763 static value or both names that are known to denote the same
15764 object; or
15765
15766 6.9/3
15767 * both names are slices, their prefixes are known to denote the same
15768 object, and the two slices have statically matching index
15769 constraints; or
15770
15771 6.10/3
15772 * one of the two names statically denotes a renaming declaration
15773 whose renamed object_name is known to denote the same object as the
15774 other, the prefix of any dereference within the renamed object_name
15775 is not a variable, and any expression within the renamed
15776 object_name contains no references to variables nor calls on
15777 nonstatic functions.
15778
15779 6.11/3
15780 Two names are known to refer to the same object if
15781
15782 6.12/3
15783 * The two names are known to denote the same object; or
15784
15785 6.13/3
15786 * One of the names is a selected_component, indexed_component, or
15787 slice and its prefix is known to refer to the same object as the
15788 other name; or
15789
15790 6.14/3
15791 * One of the two names statically denotes a renaming declaration
15792 whose renamed object_name is known to refer to the same object as
15793 the other name.
15794
15795 6.15/3
15796 If a call C has two or more parameters of mode in out or out that are of
15797 an elementary type, then the call is legal only if:
15798
15799 6.16/3
15800 * For each name N that is passed as a parameter of mode in out or out
15801 to the call C, there is no other name among the other parameters of
15802 mode in out or out to C that is known to denote the same object.
15803
15804 6.17/3
15805 If a construct C has two or more direct constituents that are names or
15806 expressions whose evaluation may occur in an arbitrary order, at least
15807 one of which contains a function call with an in out or out parameter,
15808 then the construct is legal only if:
15809
15810 6.18/3
15811 * For each name N that is passed as a parameter of mode in out or out
15812 to some inner function call C2 (not including the construct C
15813 itself), there is no other name anywhere within a direct
15814 constituent of the construct C other than the one containing C2,
15815 that is known to refer to the same object.
15816
15817 6.19/3
15818 For the purposes of checking this rule:
15819
15820 6.20/3
15821 * For an array aggregate, an expression associated with a
15822 discrete_choice_list that has two or more discrete choices, or that
15823 has a nonstatic range, is considered as two or more separate
15824 occurrences of the expression;
15825
15826 6.21/3
15827 * For a record aggregate:
15828
15829 6.22/3
15830 * The expression of a record_component_association is
15831 considered to occur once for each associated component;
15832 and
15833
15834 6.23/3
15835 * The default_expression for each
15836 record_component_association with <> for which the
15837 associated component has a default_expression is
15838 considered part of the aggregate;
15839
15840 6.24/3
15841 * For a call, any default_expression evaluated as part of the call is
15842 considered part of the call.
15843
15844 _Dynamic Semantics_
15845
15846 7
15847 For the evaluation of a parameter_association:
15848
15849 8
15850 * The actual parameter is first evaluated.
15851
15852 9
15853 * For an access parameter, the access_definition is elaborated, which
15854 creates the anonymous access type.
15855
15856 10
15857 * For a parameter (of any mode) that is passed by reference (see
15858 *note 6.2::), a view conversion of the actual parameter to the
15859 nominal subtype of the formal parameter is evaluated, and the
15860 formal parameter denotes that conversion.
15861
15862 11
15863 * For an in or in out parameter that is passed by copy (see *note
15864 6.2::), the formal parameter object is created, and the value of
15865 the actual parameter is converted to the nominal subtype of the
15866 formal parameter and assigned to the formal.
15867
15868 12
15869 * For an out parameter that is passed by copy, the formal parameter
15870 object is created, and:
15871
15872 13/3
15873 * For an access type, the formal parameter is initialized from
15874 the value of the actual, without checking that the value
15875 satisfies any constraint, any predicate, or any exclusion of
15876 the null value;
15877
15878 13.1/3
15879 * For a scalar type that has the Default_Value aspect specified,
15880 the formal parameter is initialized from the value of the
15881 actual, without checking that the value satisfies any
15882 constraint or any predicate;
15883
15884 14
15885 * For a composite type with discriminants or that has implicit
15886 initial values for any subcomponents (see *note 3.3.1::), the
15887 behavior is as for an in out parameter passed by copy.
15888
15889 15
15890 * For any other type, the formal parameter is uninitialized. If
15891 composite, a view conversion of the actual parameter to the
15892 nominal subtype of the formal is evaluated (which might raise
15893 Constraint_Error), and the actual subtype of the formal is
15894 that of the view conversion. If elementary, the actual
15895 subtype of the formal is given by its nominal subtype.
15896
15897 15.1/3
15898 * In a function call, for each explicitly aliased parameter, a check
15899 is made that the accessibility level of the master of the actual
15900 object is not deeper than that of the master of the call (see *note
15901 3.10.2::).
15902
15903 16
15904 A formal parameter of mode in out or out with discriminants is
15905 constrained if either its nominal subtype or the actual parameter is
15906 constrained.
15907
15908 17
15909 After normal completion and leaving of a subprogram, for each in out or
15910 out parameter that is passed by copy, the value of the formal parameter
15911 is converted to the subtype of the variable given as the actual
15912 parameter and assigned to it. These conversions and assignments occur
15913 in an arbitrary order.
15914
15915 _Erroneous Execution_
15916
15917 18/3
15918 If the nominal subtype of a formal parameter with discriminants is
15919 constrained or indefinite, and the parameter is passed by reference,
15920 then the execution of the call is erroneous if the value of any
15921 discriminant of the actual is changed while the formal parameter exists
15922 (that is, before leaving the corresponding callable construct).
15923
15924 \1f
15925 File: arm2012.info, Node: 6.5, Next: 6.6, Prev: 6.4, Up: 6
15926
15927 6.5 Return Statements
15928 =====================
15929
15930 1/2
15931 A simple_return_statement (*note 6.5: S0183.) or
15932 extended_return_statement (*note 6.5: S0186.) (collectively called a
15933 return statement) is used to complete the execution of the innermost
15934 enclosing subprogram_body (*note 6.3: S0177.), entry_body (*note 9.5.2:
15935 S0221.), or accept_statement (*note 9.5.2: S0219.).
15936
15937 _Syntax_
15938
15939 2/2
15940 simple_return_statement ::= return [expression];
15941
15942 2.1/3
15943 extended_return_object_declaration ::=
15944 defining_identifier : [aliased][constant]
15945 return_subtype_indication [:= expression]
15946
15947 2.2/3
15948 extended_return_statement ::=
15949 return extended_return_object_declaration [do
15950 handled_sequence_of_statements
15951 end return];
15952
15953 2.3/2
15954 return_subtype_indication ::= subtype_indication |
15955 access_definition
15956
15957 _Name Resolution Rules_
15958
15959 3/2
15960 The result subtype of a function is the subtype denoted by the
15961 subtype_mark, or defined by the access_definition, after the reserved
15962 word return in the profile of the function. The expected type for the
15963 expression, if any, of a simple_return_statement (*note 6.5: S0183.) is
15964 the result type of the corresponding function. The expected type for
15965 the expression of an extended_return_statement is that of the
15966 return_subtype_indication (*note 6.5: S0187.).
15967
15968 _Legality Rules_
15969
15970 4/2
15971 A return statement shall be within a callable construct, and it applies
15972 to the innermost callable construct or extended_return_statement that
15973 contains it. A return statement shall not be within a body that is
15974 within the construct to which the return statement applies.
15975
15976 5/3
15977 A function body shall contain at least one return statement that applies
15978 to the function body, unless the function contains code_statements. A
15979 simple_return_statement (*note 6.5: S0183.) shall include an expression
15980 if and only if it applies to a function body. An
15981 extended_return_statement shall apply to a function body. An
15982 extended_return_statement with the reserved word constant shall include
15983 an expression.
15984
15985 5.1/2
15986 For an extended_return_statement (*note 6.5: S0186.) that applies to a
15987 function body:
15988
15989 5.2/3
15990 * If the result subtype of the function is defined by a subtype_mark,
15991 the return_subtype_indication (*note 6.5: S0187.) shall be a
15992 subtype_indication. The type of the subtype_indication shall be
15993 covered by the result type of the function. The subtype defined by
15994 the subtype_indication shall be statically compatible with the
15995 result subtype of the function; if the result type of the function
15996 is elementary, the two subtypes shall statically match. If the
15997 result subtype of the function is indefinite, then the subtype
15998 defined by the subtype_indication shall be a definite subtype, or
15999 there shall be an expression.
16000
16001 5.3/2
16002 * If the result subtype of the function is defined by an
16003 access_definition, the return_subtype_indication (*note 6.5:
16004 S0187.) shall be an access_definition. The subtype defined by the
16005 access_definition shall statically match the result subtype of the
16006 function. The accessibility level of this anonymous access subtype
16007 is that of the result subtype.
16008
16009 5.4/3
16010 * If the result subtype of the function is class-wide, the
16011 accessibility level of the type of the subtype defined by the
16012 return_subtype_indication shall not be statically deeper than that
16013 of the master that elaborated the function body.
16014
16015 5.5/3
16016 For any return statement that applies to a function body:
16017
16018 5.6/3
16019 * If the result subtype of the function is limited, then the
16020 expression of the return statement (if any) shall meet the
16021 restrictions described in *note 7.5::.
16022
16023 5.7/3
16024 * If the result subtype of the function is class-wide, the
16025 accessibility level of the type of the expression (if any) of the
16026 return statement shall not be statically deeper than that of the
16027 master that elaborated the function body.
16028
16029 5.8/3
16030 * If the subtype determined by the expression of the
16031 simple_return_statement or by the return_subtype_indication has one
16032 or more access discriminants, the accessibility level of the
16033 anonymous access type of each access discriminant shall not be
16034 statically deeper than that of the master that elaborated the
16035 function body.
16036
16037 5.9/3
16038 If the keyword aliased is present in an
16039 extended_return_object_declaration, the type of the extended return
16040 object shall be immutably limited.
16041
16042 _Static Semantics_
16043
16044 5.10/3
16045 Within an extended_return_statement, the return object is declared with
16046 the given defining_identifier, with the nominal subtype defined by the
16047 return_subtype_indication (*note 6.5: S0187.). An
16048 extended_return_statement with the reserved word constant is a full
16049 constant declaration that declares the return object to be a constant
16050 object.
16051
16052 _Dynamic Semantics_
16053
16054 5.11/3
16055 For the execution of an extended_return_statement, the
16056 subtype_indication or access_definition is elaborated. This creates the
16057 nominal subtype of the return object. If there is an expression, it is
16058 evaluated and converted to the nominal subtype (which might raise
16059 Constraint_Error -- see *note 4.6::); the return object is created and
16060 the converted value is assigned to the return object. Otherwise, the
16061 return object is created and initialized by default as for a stand-alone
16062 object of its nominal subtype (see *note 3.3.1::). If the nominal
16063 subtype is indefinite, the return object is constrained by its initial
16064 value. A check is made that the value of the return object belongs to
16065 the function result subtype. Constraint_Error is raised if this check
16066 fails.
16067
16068 6/2
16069 For the execution of a simple_return_statement (*note 6.5: S0183.), the
16070 expression (if any) is first evaluated, converted to the result subtype,
16071 and then is assigned to the anonymous return object.
16072
16073 7/2
16074 If the return object has any parts that are tasks, the activation of
16075 those tasks does not occur until after the function returns (see *note
16076 9.2::).
16077
16078 8/3
16079 If the result type of a function is a specific tagged type, the tag of
16080 the return object is that of the result type. If the result type is
16081 class-wide, the tag of the return object is that of the type of the
16082 subtype_indication if it is specific, or otherwise that of the value of
16083 the expression. A check is made that the master of the type identified
16084 by the tag of the result includes the elaboration of the master that
16085 elaborated the function body. If this check fails, Program_Error is
16086 raised.
16087
16088 8.1/3
16089 If the result subtype of the function is defined by an access_definition
16090 designating a specific tagged type T, a check is made that the result
16091 value is null or the tag of the object designated by the result value
16092 identifies T. Constraint_Error is raised if this check fails.
16093
16094 Paragraphs 9 through 20 were deleted.
16095
16096 21/3
16097 If any part of the specific type of the return object of a function (or
16098 coextension thereof) has one or more access discriminants whose value is
16099 not constrained by the result subtype of the function, a check is made
16100 that the accessibility level of the anonymous access type of each access
16101 discriminant, as determined by the expression or the
16102 return_subtype_indication (*note 6.5: S0187.) of the return statement,
16103 is not deeper than the level of the master of the call (see *note
16104 3.10.2::). If this check fails, Program_Error is raised.
16105
16106 22/3
16107 For the execution of an extended_return_statement (*note 6.5: S0186.),
16108 the handled_sequence_of_statements (*note 11.2: S0265.) is executed.
16109 Within this handled_sequence_of_statements (*note 11.2: S0265.), the
16110 execution of a simple_return_statement (*note 6.5: S0183.) that applies
16111 to the extended_return_statement (*note 6.5: S0186.) causes a transfer
16112 of control that completes the extended_return_statement (*note 6.5:
16113 S0186.). Upon completion of a return statement that applies to a
16114 callable construct by the normal completion of a simple_return_statement
16115 (*note 6.5: S0183.) or by reaching the end return of an
16116 extended_return_statement (*note 6.5: S0186.), a transfer of control is
16117 performed which completes the execution of the callable construct, and
16118 returns to the caller.
16119
16120 23/2
16121 In the case of a function, the function_call denotes a constant view of
16122 the return object.
16123
16124 _Implementation Permissions_
16125
16126 24/3
16127 For a function call used to initialize a composite object with a
16128 constrained nominal subtype or used to initialize a return object that
16129 is built in place into such an object:
16130
16131 24.1/3
16132 * If the result subtype of the function is constrained, and
16133 conversion of an object of this subtype to the subtype of the
16134 object being initialized would raise Constraint_Error, then
16135 Constraint_Error may be raised before calling the function.
16136
16137 24.2/3
16138 * If the result subtype of the function is unconstrained, and a
16139 return statement is executed such that the return object is known
16140 to be constrained, and conversion of the return object to the
16141 subtype of the object being initialized would raise
16142 Constraint_Error, then Constraint_Error may be raised at the point
16143 of the call (after abandoning the execution of the function body).
16144
16145 _Examples_
16146
16147 25
16148 Examples of return statements:
16149
16150 26/2
16151 return; -- in a procedure body, entry_body,
16152 -- accept_statement, or extended_return_statement
16153
16154 27
16155 return Key_Value(Last_Index); -- in a function body
16156
16157 28/2
16158 return Node : Cell do -- in a function body, see *note 3.10.1:: for Cell
16159 Node.Value := Result;
16160 Node.Succ := Next_Node;
16161 end return;
16162
16163 * Menu:
16164
16165 * 6.5.1 :: Nonreturning Procedures
16166
16167 \1f
16168 File: arm2012.info, Node: 6.5.1, Up: 6.5
16169
16170 6.5.1 Nonreturning Procedures
16171 -----------------------------
16172
16173 1/3
16174 Specifying aspect No_Return to have the value True indicates that a
16175 procedure cannot return normally; it may propagate an exception or loop
16176 forever.
16177
16178 Paragraphs 2 and 3 were moved to *note Annex J::, "*note Annex J::
16179 Obsolescent Features".
16180
16181 _Static Semantics_
16182
16183 3.1/3
16184 For a procedure or generic procedure, the following language-defined
16185 representation aspect may be specified:
16186
16187 3.2/3
16188 No_Return
16189 The type of aspect No_Return is Boolean. When aspect
16190 No_Return is True for an entity, the entity is said to be
16191 nonreturning.
16192
16193 3.3/3
16194 If directly specified, the aspect_definition shall be a
16195 static expression. This aspect is never inherited; if
16196 not directly specified, the aspect is False.
16197
16198 3.4/3
16199 If a generic procedure is nonreturning, then so are its instances. If a
16200 procedure declared within a generic unit is nonreturning, then so are
16201 the corresponding copies of that procedure in instances.
16202
16203 _Legality Rules_
16204
16205 4/3
16206 Aspect No_Return shall not be specified for a null procedure nor an
16207 instance of a generic unit.
16208
16209 5/2
16210 A return statement shall not apply to a nonreturning procedure or
16211 generic procedure.
16212
16213 6/2
16214 A procedure shall be nonreturning if it overrides a dispatching
16215 nonreturning procedure. In addition to the places where Legality Rules
16216 normally apply (see *note 12.3::), this rule applies also in the private
16217 part of an instance of a generic unit.
16218
16219 7/2
16220 If a renaming-as-body completes a nonreturning procedure declaration,
16221 then the renamed procedure shall be nonreturning.
16222
16223 Paragraph 8 was deleted.
16224
16225 _Dynamic Semantics_
16226
16227 9/2
16228 If the body of a nonreturning procedure completes normally,
16229 Program_Error is raised at the point of the call.
16230
16231 _Examples_
16232
16233 10/3
16234 procedure Fail(Msg : String) -- raises Fatal_Error exception
16235 with No_Return;
16236 -- Inform compiler and reader that procedure never returns normally
16237
16238 \1f
16239 File: arm2012.info, Node: 6.6, Next: 6.7, Prev: 6.5, Up: 6
16240
16241 6.6 Overloading of Operators
16242 ============================
16243
16244 1
16245 An operator is a function whose designator is an operator_symbol.
16246 Operators, like other functions, may be overloaded.
16247
16248 _Name Resolution Rules_
16249
16250 2
16251 Each use of a unary or binary operator is equivalent to a function_call
16252 with function_prefix being the corresponding operator_symbol, and with
16253 (respectively) one or two positional actual parameters being the
16254 operand(s) of the operator (in order).
16255
16256 _Legality Rules_
16257
16258 3/3
16259 The subprogram_specification of a unary or binary operator shall have
16260 one or two parameters, respectively. The parameters shall be of mode
16261 in. A generic function instantiation whose designator is an
16262 operator_symbol is only allowed if the specification of the generic
16263 function has the corresponding number of parameters, and they are all of
16264 mode in.
16265
16266 4
16267 Default_expressions are not allowed for the parameters of an operator
16268 (whether the operator is declared with an explicit
16269 subprogram_specification or by a generic_instantiation).
16270
16271 5
16272 An explicit declaration of "/=" shall not have a result type of the
16273 predefined type Boolean.
16274
16275 _Static Semantics_
16276
16277 6/3
16278 An explicit declaration of "=" whose result type is Boolean implicitly
16279 declares an operator "/=" that gives the complementary result.
16280
16281 NOTES
16282
16283 7
16284 8 The operators "+" and "-" are both unary and binary operators,
16285 and hence may be overloaded with both one- and two-parameter
16286 functions.
16287
16288 _Examples_
16289
16290 8
16291 Examples of user-defined operators:
16292
16293 9
16294 function "+" (Left, Right : Matrix) return Matrix;
16295 function "+" (Left, Right : Vector) return Vector;
16296
16297 -- assuming that A, B, and C are of the type Vector
16298 -- the following two statements are equivalent:
16299
16300 A := B + C;
16301 A := "+"(B, C);
16302
16303 \1f
16304 File: arm2012.info, Node: 6.7, Next: 6.8, Prev: 6.6, Up: 6
16305
16306 6.7 Null Procedures
16307 ===================
16308
16309 1/2
16310 A null_procedure_declaration provides a shorthand to declare a procedure
16311 with an empty body.
16312
16313 _Syntax_
16314
16315 2/3
16316 null_procedure_declaration ::=
16317 [overriding_indicator]
16318 procedure_specification is null
16319 [aspect_specification];
16320
16321 _Legality Rules_
16322
16323 2.1/3
16324 If a null_procedure_declaration is a completion, it shall be the
16325 completion of a subprogram_declaration or
16326 generic_subprogram_declaration. The profile of a
16327 null_procedure_declaration that completes a declaration shall conform
16328 fully to that of the declaration.
16329
16330 _Static Semantics_
16331
16332 3/3
16333 A null_procedure_declaration declares a null procedure. A completion is
16334 not allowed for a null_procedure_declaration; however, a
16335 null_procedure_declaration can complete a previous declaration.
16336
16337 _Dynamic Semantics_
16338
16339 4/2
16340 The execution of a null procedure is invoked by a subprogram call. For
16341 the execution of a subprogram call on a null procedure, the execution of
16342 the subprogram_body has no effect.
16343
16344 5/3
16345 The elaboration of a null_procedure_declaration has no other effect than
16346 to establish that the null procedure can be called without failing the
16347 Elaboration_Check.
16348
16349 _Examples_
16350
16351 6/2
16352 procedure Simplify(Expr : in out Expression) is null; -- see *note 3.9::
16353 -- By default, Simplify does nothing, but it may be overridden in extensions of Expression
16354
16355 \1f
16356 File: arm2012.info, Node: 6.8, Prev: 6.7, Up: 6
16357
16358 6.8 Expression Functions
16359 ========================
16360
16361 1/3
16362 An expression_function_declaration provides a shorthand to declare a
16363 function whose body consists of a single return statement.
16364
16365 _Syntax_
16366
16367 2/3
16368 expression_function_declaration ::=
16369 [overriding_indicator]
16370 function_specification is
16371 (expression)
16372 [aspect_specification];
16373
16374 _Name Resolution Rules_
16375
16376 3/3
16377 The expected type for the expression of an
16378 expression_function_declaration (*note 6.8: S0189.) is the result type
16379 (see *note 6.5::) of the function.
16380
16381 _Legality Rules_
16382
16383 4/3
16384 If an expression_function_declaration (*note 6.8: S0189.) is a
16385 completion, it shall be the completion of a subprogram_declaration or
16386 generic_subprogram_declaration. The profile of an
16387 expression_function_declaration (*note 6.8: S0189.) that completes a
16388 declaration shall conform fully to that of the declaration.
16389
16390 5/3
16391 If the result subtype has one or more unconstrained access
16392 discriminants, the accessibility level of the anonymous access type of
16393 each access discriminant, as determined by the expression of the
16394 expression function, shall not be statically deeper than that of the
16395 master that elaborated the expression_function_declaration (*note 6.8:
16396 S0189.).
16397
16398 _Static Semantics_
16399
16400 6/3
16401 An expression_function_declaration (*note 6.8: S0189.) declares an
16402 expression function. A completion is not allowed for an
16403 expression_function_declaration (*note 6.8: S0189.); however, an
16404 expression_function_declaration (*note 6.8: S0189.) can complete a
16405 previous declaration.
16406
16407 _Dynamic Semantics_
16408
16409 7/3
16410 The execution of an expression function is invoked by a subprogram call.
16411 For the execution of a subprogram call on an expression function, the
16412 execution of the subprogram_body executes an implicit function body
16413 containing only a simple_return_statement whose expression is that of
16414 the expression function.
16415
16416 8/3
16417 The elaboration of an expression_function_declaration (*note 6.8:
16418 S0189.) has no other effect than to establish that the expression
16419 function can be called without failing the Elaboration_Check.
16420
16421 _Examples_
16422
16423 9/3
16424 function Is_Origin (P : in Point) return Boolean is -- see *note 3.9::
16425 (P.X = 0.0 and P.Y = 0.0);
16426
16427 \1f
16428 File: arm2012.info, Node: 7, Next: 8, Prev: 6, Up: Top
16429
16430 7 Packages
16431 **********
16432
16433 1
16434 Packages are program units that allow the specification of groups of
16435 logically related entities. Typically, a package contains the
16436 declaration of a type (often a private type or private extension) along
16437 with the declarations of primitive subprograms of the type, which can be
16438 called from outside the package, while their inner workings remain
16439 hidden from outside users.
16440
16441 * Menu:
16442
16443 * 7.1 :: Package Specifications and Declarations
16444 * 7.2 :: Package Bodies
16445 * 7.3 :: Private Types and Private Extensions
16446 * 7.4 :: Deferred Constants
16447 * 7.5 :: Limited Types
16448 * 7.6 :: Assignment and Finalization
16449
16450 \1f
16451 File: arm2012.info, Node: 7.1, Next: 7.2, Up: 7
16452
16453 7.1 Package Specifications and Declarations
16454 ===========================================
16455
16456 1
16457 A package is generally provided in two parts: a package_specification
16458 and a package_body. Every package has a package_specification, but not
16459 all packages have a package_body.
16460
16461 _Syntax_
16462
16463 2
16464 package_declaration ::= package_specification;
16465
16466 3/3
16467 package_specification ::=
16468 package defining_program_unit_name
16469 [aspect_specification] is
16470 {basic_declarative_item}
16471 [private
16472 {basic_declarative_item}]
16473 end [[parent_unit_name.]identifier]
16474
16475 4
16476 If an identifier or parent_unit_name.identifier appears at the end
16477 of a package_specification, then this sequence of lexical elements
16478 shall repeat the defining_program_unit_name.
16479
16480 _Legality Rules_
16481
16482 5/2
16483 A package_declaration or generic_package_declaration requires a
16484 completion (a body) if it contains any basic_declarative_item that
16485 requires a completion, but whose completion is not in its
16486 package_specification.
16487
16488 _Static Semantics_
16489
16490 6/2
16491 The first list of basic_declarative_items of a package_specification of
16492 a package other than a generic formal package is called the visible part
16493 of the package. The optional list of basic_declarative_items after the
16494 reserved word private (of any package_specification) is called the
16495 private part of the package. If the reserved word private does not
16496 appear, the package has an implicit empty private part. Each list of
16497 basic_declarative_items of a package_specification forms a declaration
16498 list of the package.
16499
16500 7
16501 An entity declared in the private part of a package is visible only
16502 within the declarative region of the package itself (including any child
16503 units -- see *note 10.1.1::). In contrast, expanded names denoting
16504 entities declared in the visible part can be used even outside the
16505 package; furthermore, direct visibility of such entities can be achieved
16506 by means of use_clauses (see *note 4.1.3:: and *note 8.4::).
16507
16508 _Dynamic Semantics_
16509
16510 8
16511 The elaboration of a package_declaration consists of the elaboration of
16512 its basic_declarative_items in the given order.
16513
16514 NOTES
16515
16516 9
16517 1 The visible part of a package contains all the information that
16518 another program unit is able to know about the package.
16519
16520 10
16521 2 If a declaration occurs immediately within the specification of
16522 a package, and the declaration has a corresponding completion that
16523 is a body, then that body has to occur immediately within the body
16524 of the package.
16525
16526 _Examples_
16527
16528 11
16529 Example of a package declaration:
16530
16531 12
16532 package Rational_Numbers is
16533
16534 13
16535 type Rational is
16536 record
16537 Numerator : Integer;
16538 Denominator : Positive;
16539 end record;
16540
16541 14
16542 function "="(X,Y : Rational) return Boolean;
16543
16544 15
16545 function "/" (X,Y : Integer) return Rational; -- to construct a rational number
16546
16547 16
16548 function "+" (X,Y : Rational) return Rational;
16549 function "-" (X,Y : Rational) return Rational;
16550 function "*" (X,Y : Rational) return Rational;
16551 function "/" (X,Y : Rational) return Rational;
16552 end Rational_Numbers;
16553
16554 17
16555 There are also many examples of package declarations in the predefined
16556 language environment (see *note Annex A::).
16557
16558 \1f
16559 File: arm2012.info, Node: 7.2, Next: 7.3, Prev: 7.1, Up: 7
16560
16561 7.2 Package Bodies
16562 ==================
16563
16564 1
16565 In contrast to the entities declared in the visible part of a package,
16566 the entities declared in the package_body are visible only within the
16567 package_body itself. As a consequence, a package with a package_body
16568 can be used for the construction of a group of related subprograms in
16569 which the logical operations available to clients are clearly isolated
16570 from the internal entities.
16571
16572 _Syntax_
16573
16574 2/3
16575 package_body ::=
16576 package body defining_program_unit_name
16577 [aspect_specification] is
16578 declarative_part
16579 [begin
16580 handled_sequence_of_statements]
16581 end [[parent_unit_name.]identifier];
16582
16583 3
16584 If an identifier or parent_unit_name.identifier appears at the end
16585 of a package_body, then this sequence of lexical elements shall
16586 repeat the defining_program_unit_name.
16587
16588 _Legality Rules_
16589
16590 4
16591 A package_body shall be the completion of a previous package_declaration
16592 (*note 7.1: S0190.) or generic_package_declaration (*note 12.1: S0272.).
16593 A library package_declaration (*note 7.1: S0190.) or library
16594 generic_package_declaration (*note 12.1: S0272.) shall not have a body
16595 unless it requires a body; pragma Elaborate_Body can be used to require
16596 a library_unit_declaration (*note 10.1.1: S0249.) to have a body (see
16597 *note 10.2.1::) if it would not otherwise require one.
16598
16599 _Static Semantics_
16600
16601 5/3
16602 In any package_body without statements there is an implicit
16603 null_statement (*note 5.1: S0149.). For any package_declaration (*note
16604 7.1: S0190.) without an explicit completion, there is an implicit
16605 package_body (*note 7.2: S0192.) containing a single null_statement.
16606 For a noninstance, nonlibrary package, this body occurs at the end of
16607 the declarative_part (*note 3.11: S0086.) of the innermost enclosing
16608 program unit or block_statement (*note 5.6: S0160.); if there are
16609 several such packages, the order of the implicit package_bodies is
16610 unspecified. (For an instance, the implicit package_body (*note 7.2:
16611 S0192.) occurs at the place of the instantiation (see *note 12.3::).
16612 For a library package, the place is partially determined by the
16613 elaboration dependences (see Clause *note 10::).)
16614
16615 _Dynamic Semantics_
16616
16617 6
16618 For the elaboration of a nongeneric package_body, its declarative_part
16619 (*note 3.11: S0086.) is first elaborated, and its
16620 handled_sequence_of_statements (*note 11.2: S0265.) is then executed.
16621
16622 NOTES
16623
16624 7
16625 3 A variable declared in the body of a package is only visible
16626 within this body and, consequently, its value can only be changed
16627 within the package_body. In the absence of local tasks, the value
16628 of such a variable remains unchanged between calls issued from
16629 outside the package to subprograms declared in the visible part.
16630 The properties of such a variable are similar to those of a
16631 "static" variable of C.
16632
16633 8
16634 4 The elaboration of the body of a subprogram explicitly declared
16635 in the visible part of a package is caused by the elaboration of
16636 the body of the package. Hence a call of such a subprogram by an
16637 outside program unit raises the exception Program_Error if the call
16638 takes place before the elaboration of the package_body (see *note
16639 3.11::).
16640
16641 _Examples_
16642
16643 9
16644 Example of a package body (see *note 7.1::):
16645
16646 10
16647 package body Rational_Numbers is
16648
16649 11
16650 procedure Same_Denominator (X,Y : in out Rational) is
16651 begin
16652 -- reduces X and Y to the same denominator:
16653 ...
16654 end Same_Denominator;
16655
16656 12
16657 function "="(X,Y : Rational) return Boolean is
16658 U : Rational := X;
16659 V : Rational := Y;
16660 begin
16661 Same_Denominator (U,V);
16662 return U.Numerator = V.Numerator;
16663 end "=";
16664
16665 13
16666 function "/" (X,Y : Integer) return Rational is
16667 begin
16668 if Y > 0 then
16669 return (Numerator => X, Denominator => Y);
16670 else
16671 return (Numerator => -X, Denominator => -Y);
16672 end if;
16673 end "/";
16674
16675 14
16676 function "+" (X,Y : Rational) return Rational is ... end "+";
16677 function "-" (X,Y : Rational) return Rational is ... end "-";
16678 function "*" (X,Y : Rational) return Rational is ... end "*";
16679 function "/" (X,Y : Rational) return Rational is ... end "/";
16680
16681 15
16682 end Rational_Numbers;
16683
16684 \1f
16685 File: arm2012.info, Node: 7.3, Next: 7.4, Prev: 7.2, Up: 7
16686
16687 7.3 Private Types and Private Extensions
16688 ========================================
16689
16690 1
16691 The declaration (in the visible part of a package) of a type as a
16692 private type or private extension serves to separate the characteristics
16693 that can be used directly by outside program units (that is, the logical
16694 properties) from other characteristics whose direct use is confined to
16695 the package (the details of the definition of the type itself). See
16696 *note 3.9.1:: for an overview of type extensions.
16697
16698 _Syntax_
16699
16700 2/3
16701 private_type_declaration ::=
16702 type defining_identifier [
16703 discriminant_part] is [[abstract] tagged] [limited] private
16704 [aspect_specification];
16705
16706 3/3
16707 private_extension_declaration ::=
16708 type defining_identifier [discriminant_part] is
16709 [abstract] [limited | synchronized] new ancestor_
16710 subtype_indication
16711 [and interface_list] with private
16712 [aspect_specification];
16713
16714 _Legality Rules_
16715
16716 4
16717 A private_type_declaration or private_extension_declaration declares a
16718 partial view of the type; such a declaration is allowed only as a
16719 declarative_item of the visible part of a package, and it requires a
16720 completion, which shall be a full_type_declaration that occurs as a
16721 declarative_item of the private part of the package. The view of the
16722 type declared by the full_type_declaration is called the full view. A
16723 generic formal private type or a generic formal private extension is
16724 also a partial view.
16725
16726 5
16727 A type shall be completely defined before it is frozen (see *note
16728 3.11.1:: and *note 13.14::). Thus, neither the declaration of a
16729 variable of a partial view of a type, nor the creation by an allocator
16730 of an object of the partial view are allowed before the full declaration
16731 of the type. Similarly, before the full declaration, the name of the
16732 partial view cannot be used in a generic_instantiation or in a
16733 representation item.
16734
16735 6/2
16736 A private type is limited if its declaration includes the reserved word
16737 limited; a private extension is limited if its ancestor type is a
16738 limited type that is not an interface type, or if the reserved word
16739 limited or synchronized appears in its definition. If the partial view
16740 is nonlimited, then the full view shall be nonlimited. If a tagged
16741 partial view is limited, then the full view shall be limited. On the
16742 other hand, if an untagged partial view is limited, the full view may be
16743 limited or nonlimited.
16744
16745 7
16746 If the partial view is tagged, then the full view shall be tagged. On
16747 the other hand, if the partial view is untagged, then the full view may
16748 be tagged or untagged. In the case where the partial view is untagged
16749 and the full view is tagged, no derivatives of the partial view are
16750 allowed within the immediate scope of the partial view; derivatives of
16751 the full view are allowed.
16752
16753 7.1/2
16754 If a full type has a partial view that is tagged, then:
16755
16756 7.2/2
16757 * the partial view shall be a synchronized tagged type (see *note
16758 3.9.4::) if and only if the full type is a synchronized tagged
16759 type;
16760
16761 7.3/2
16762 * the partial view shall be a descendant of an interface type (see
16763 3.9.4) if and only if the full type is a descendant of the
16764 interface type.
16765
16766 8
16767 The ancestor subtype of a private_extension_declaration is the subtype
16768 defined by the ancestor_subtype_indication (*note 3.2.2: S0027.); the
16769 ancestor type shall be a specific tagged type. The full view of a
16770 private extension shall be derived (directly or indirectly) from the
16771 ancestor type. In addition to the places where Legality Rules normally
16772 apply (see *note 12.3::), the requirement that the ancestor be specific
16773 applies also in the private part of an instance of a generic unit.
16774
16775 8.1/2
16776 If the reserved word limited appears in a private_extension_declaration,
16777 the ancestor type shall be a limited type. If the reserved word
16778 synchronized appears in a private_extension_declaration, the ancestor
16779 type shall be a limited interface.
16780
16781 9
16782 If the declaration of a partial view includes a known_discriminant_part,
16783 then the full_type_declaration shall have a fully conforming (explicit)
16784 known_discriminant_part (see *note 6.3.1::, "*note 6.3.1:: Conformance
16785 Rules"). The ancestor subtype may be unconstrained; the parent subtype
16786 of the full view is required to be constrained (see *note 3.7::).
16787
16788 10
16789 If a private extension inherits known discriminants from the ancestor
16790 subtype, then the full view shall also inherit its discriminants from
16791 the ancestor subtype, and the parent subtype of the full view shall be
16792 constrained if and only if the ancestor subtype is constrained.
16793
16794 10.1/3
16795 If the full_type_declaration for a private extension includes a
16796 derived_type_definition, then the reserved word limited shall appear in
16797 the full_type_declaration if and only if it also appears in the
16798 private_extension_declaration.
16799
16800 11
16801 If a partial view has unknown discriminants, then the
16802 full_type_declaration may define a definite or an indefinite subtype,
16803 with or without discriminants.
16804
16805 12
16806 If a partial view has neither known nor unknown discriminants, then the
16807 full_type_declaration shall define a definite subtype.
16808
16809 13
16810 If the ancestor subtype of a private extension has constrained
16811 discriminants, then the parent subtype of the full view shall impose a
16812 statically matching constraint on those discriminants.
16813
16814 _Static Semantics_
16815
16816 14
16817 A private_type_declaration declares a private type and its first
16818 subtype. Similarly, a private_extension_declaration (*note 7.3: S0194.)
16819 declares a private extension and its first subtype.
16820
16821 15/3
16822 A declaration of a partial view and the corresponding
16823 full_type_declaration define two views of a single type. The
16824 declaration of a partial view together with the visible part define the
16825 operations that are available to outside program units; the declaration
16826 of the full view together with the private part define other operations
16827 whose direct use is possible only within the declarative region of the
16828 package itself. Moreover, within the scope of the declaration of the
16829 full view, the characteristics (see *note 3.4::) of the type are
16830 determined by the full view; in particular, within its scope, the full
16831 view determines the classes that include the type, which components,
16832 entries, and protected subprograms are visible, what attributes and
16833 other predefined operations are allowed, and whether the first subtype
16834 is static. See *note 7.3.1::.
16835
16836 16/3
16837 For a private extension, the characteristics (including components, but
16838 excluding discriminants if there is a new discriminant_part specified),
16839 predefined operators, and inherited user-defined primitive subprograms
16840 are determined by its ancestor type and its progenitor types (if any),
16841 in the same way that those of a record extension are determined by those
16842 of its parent type and its progenitor types (see *note 3.4:: and *note
16843 7.3.1::).
16844
16845 _Dynamic Semantics_
16846
16847 17
16848 The elaboration of a private_type_declaration creates a partial view of
16849 a type. The elaboration of a private_extension_declaration elaborates
16850 the ancestor_subtype_indication, and creates a partial view of a type.
16851
16852 NOTES
16853
16854 18
16855 5 The partial view of a type as declared by a
16856 private_type_declaration is defined to be a composite view (in
16857 *note 3.2::). The full view of the type might or might not be
16858 composite. A private extension is also composite, as is its full
16859 view.
16860
16861 19/2
16862 6 Declaring a private type with an unknown_discriminant_part is a
16863 way of preventing clients from creating uninitialized objects of
16864 the type; they are then forced to initialize each object by calling
16865 some operation declared in the visible part of the package.
16866
16867 20/2
16868 7 The ancestor type specified in a private_extension_declaration
16869 and the parent type specified in the corresponding declaration of a
16870 record extension given in the private part need not be the same.
16871 If the ancestor type is not an interface type, the parent type of
16872 the full view can be any descendant of the ancestor type. In this
16873 case, for a primitive subprogram that is inherited from the
16874 ancestor type and not overridden, the formal parameter names and
16875 default expressions (if any) come from the corresponding primitive
16876 subprogram of the specified ancestor type, while the body comes
16877 from the corresponding primitive subprogram of the parent type of
16878 the full view. See *note 3.9.2::.
16879
16880 20.1/2
16881 8 If the ancestor type specified in a
16882 private_extension_declaration is an interface type, the parent type
16883 can be any type so long as the full view is a descendant of the
16884 ancestor type. The progenitor types specified in a
16885 private_extension_declaration and the progenitor types specified in
16886 the corresponding declaration of a record extension given in the
16887 private part need not be the same -- the only requirement is that
16888 the private extension and the record extension be descended from
16889 the same set of interfaces.
16890
16891 _Examples_
16892
16893 21
16894 Examples of private type declarations:
16895
16896 22
16897 type Key is private;
16898 type File_Name is limited private;
16899
16900 23
16901 Example of a private extension declaration:
16902
16903 24
16904 type List is new Ada.Finalization.Controlled with private;
16905
16906 * Menu:
16907
16908 * 7.3.1 :: Private Operations
16909 * 7.3.2 :: Type Invariants
16910
16911 \1f
16912 File: arm2012.info, Node: 7.3.1, Next: 7.3.2, Up: 7.3
16913
16914 7.3.1 Private Operations
16915 ------------------------
16916
16917 1
16918 For a type declared in the visible part of a package or generic package,
16919 certain operations on the type do not become visible until later in the
16920 package -- either in the private part or the body. Such private
16921 operations are available only inside the declarative region of the
16922 package or generic package.
16923
16924 _Static Semantics_
16925
16926 2
16927 The predefined operators that exist for a given type are determined by
16928 the classes to which the type belongs. For example, an integer type has
16929 a predefined "+" operator. In most cases, the predefined operators of a
16930 type are declared immediately after the definition of the type; the
16931 exceptions are explained below. Inherited subprograms are also
16932 implicitly declared immediately after the definition of the type, except
16933 as stated below.
16934
16935 3/3
16936 For a composite type, the characteristics (see *note 7.3::) of the type
16937 are determined in part by the characteristics of its component types.
16938 At the place where the composite type is declared, the only
16939 characteristics of component types used are those characteristics
16940 visible at that place. If later immediately within the declarative
16941 region in which the composite type is declared additional
16942 characteristics become visible for a component type, then any
16943 corresponding characteristics become visible for the composite type.
16944 Any additional predefined operators are implicitly declared at that
16945 place. If there is no such place, then additional predefined operators
16946 are not declared at all, but they still exist.
16947
16948 4/1
16949 The corresponding rule applies to a type defined by a
16950 derived_type_definition, if there is a place immediately within the
16951 declarative region in which the type is declared where additional
16952 characteristics of its parent type become visible.
16953
16954 5/1
16955 For example, an array type whose component type is limited private
16956 becomes nonlimited if the full view of the component type is nonlimited
16957 and visible at some later place immediately within the declarative
16958 region in which the array type is declared. In such a case, the
16959 predefined "=" operator is implicitly declared at that place, and
16960 assignment is allowed after that place.
16961
16962 5.1/3
16963 A type is a descendant of the full view of some ancestor of its parent
16964 type only if the current view it has of its parent is a descendant of
16965 the full view of that ancestor. More generally, at any given place, a
16966 type is descended from the same view of an ancestor as that from which
16967 the current view of its parent is descended. This view determines what
16968 characteristics are inherited from the ancestor, and, for example,
16969 whether the type is considered to be a descendant of a record type, or a
16970 descendant only through record extensions of a more distant ancestor.
16971
16972 5.2/3
16973 It is possible for there to be places where a derived type is visibly a
16974 descendant of an ancestor type, but not a descendant of even a partial
16975 view of the ancestor type, because the parent of the derived type is not
16976 visibly a descendant of the ancestor. In this case, the derived type
16977 inherits no characteristics from that ancestor, but nevertheless is
16978 within the derivation class of the ancestor for the purposes of type
16979 conversion, the "covers" relationship, and matching against a formal
16980 derived type. In this case the derived type is considered to be a
16981 descendant of an incomplete view of the ancestor.
16982
16983 6/3
16984 Inherited primitive subprograms follow a different rule. For a
16985 derived_type_definition, each inherited primitive subprogram is
16986 implicitly declared at the earliest place, if any, immediately within
16987 the declarative region in which the type_declaration occurs, but after
16988 the type_declaration, where the corresponding declaration from the
16989 parent is visible. If there is no such place, then the inherited
16990 subprogram is not declared at all, but it still exists. For a tagged
16991 type, it is possible to dispatch to an inherited subprogram that is not
16992 declared at all.
16993
16994 7
16995 For a private_extension_declaration, each inherited subprogram is
16996 declared immediately after the private_extension_declaration if the
16997 corresponding declaration from the ancestor is visible at that place.
16998 Otherwise, the inherited subprogram is not declared for the private
16999 extension, though it might be for the full type.
17000
17001 8
17002 The Class attribute is defined for tagged subtypes in *note 3.9::. In
17003 addition, for every subtype S of an untagged private type whose full
17004 view is tagged, the following attribute is defined:
17005
17006 9
17007 S'Class
17008 Denotes the class-wide subtype corresponding to the full
17009 view of S. This attribute is allowed only from the
17010 beginning of the private part in which the full view is
17011 declared, until the declaration of the full view. After
17012 the full view, the Class attribute of the full view can
17013 be used.
17014
17015 NOTES
17016
17017 10
17018 9 Because a partial view and a full view are two different views
17019 of one and the same type, outside of the defining package the
17020 characteristics of the type are those defined by the visible part.
17021 Within these outside program units the type is just a private type
17022 or private extension, and any language rule that applies only to
17023 another class of types does not apply. The fact that the full
17024 declaration might implement a private type with a type of a
17025 particular class (for example, as an array type) is relevant only
17026 within the declarative region of the package itself including any
17027 child units.
17028
17029 11
17030 The consequences of this actual implementation are, however, valid
17031 everywhere. For example: any default initialization of components
17032 takes place; the attribute Size provides the size of the full view;
17033 finalization is still done for controlled components of the full
17034 view; task dependence rules still apply to components that are task
17035 objects.
17036
17037 12/2
17038 10 Partial views provide initialization, membership tests,
17039 selected components for the selection of discriminants and
17040 inherited components, qualification, and explicit conversion.
17041 Nonlimited partial views also allow use of assignment_statements.
17042
17043 13
17044 11 For a subtype S of a partial view, S'Size is defined (see *note
17045 13.3::). For an object A of a partial view, the attributes A'Size
17046 and A'Address are defined (see *note 13.3::). The Position,
17047 First_Bit, and Last_Bit attributes are also defined for
17048 discriminants and inherited components.
17049
17050 _Examples_
17051
17052 14
17053 Example of a type with private operations:
17054
17055 15
17056 package Key_Manager is
17057 type Key is private;
17058 Null_Key : constant Key; -- a deferred constant declaration (see *note 7.4::)
17059 procedure Get_Key(K : out Key);
17060 function "<" (X, Y : Key) return Boolean;
17061 private
17062 type Key is new Natural;
17063 Null_Key : constant Key := Key'First;
17064 end Key_Manager;
17065
17066 16
17067 package body Key_Manager is
17068 Last_Key : Key := Null_Key;
17069 procedure Get_Key(K : out Key) is
17070 begin
17071 Last_Key := Last_Key + 1;
17072 K := Last_Key;
17073 end Get_Key;
17074
17075 17
17076 function "<" (X, Y : Key) return Boolean is
17077 begin
17078 return Natural(X) < Natural(Y);
17079 end "<";
17080 end Key_Manager;
17081
17082 NOTES
17083
17084 18
17085 12 Notes on the example: Outside of the package Key_Manager, the
17086 operations available for objects of type Key include assignment,
17087 the comparison for equality or inequality, the procedure Get_Key
17088 and the operator "<"; they do not include other relational
17089 operators such as ">=", or arithmetic operators.
17090
17091 19
17092 The explicitly declared operator "<" hides the predefined operator
17093 "<" implicitly declared by the full_type_declaration. Within the
17094 body of the function, an explicit conversion of X and Y to the
17095 subtype Natural is necessary to invoke the "<" operator of the
17096 parent type. Alternatively, the result of the function could be
17097 written as not (X >= Y), since the operator ">=" is not redefined.
17098
17099 20
17100 The value of the variable Last_Key, declared in the package body,
17101 remains unchanged between calls of the procedure Get_Key. (See
17102 also the NOTES of *note 7.2::.)
17103
17104 \1f
17105 File: arm2012.info, Node: 7.3.2, Prev: 7.3.1, Up: 7.3
17106
17107 7.3.2 Type Invariants
17108 ---------------------
17109
17110 1/3
17111 For a private type or private extension, the following language-defined
17112 aspects may be specified with an aspect_specification (see *note
17113 13.1.1::):
17114
17115 2/3
17116 Type_Invariant
17117 This aspect shall be specified by an expression, called
17118 an invariant expression. Type_Invariant may be specified
17119 on a private_type_declaration (*note 7.3: S0193.), on a
17120 private_extension_declaration (*note 7.3: S0194.), or on
17121 a full_type_declaration (*note 3.2.1: S0024.) that
17122 declares the completion of a private type or private
17123 extension.
17124
17125 3/3
17126 Type_Invariant'Class
17127 This aspect shall be specified by an expression, called
17128 an invariant expression. Type_Invariant'Class may be
17129 specified on a private_type_declaration (*note 7.3:
17130 S0193.) or a private_extension_declaration (*note 7.3:
17131 S0194.).
17132
17133 _Name Resolution Rules_
17134
17135 4/3
17136 The expected type for an invariant expression is any boolean type.
17137
17138 5/3
17139 Within an invariant expression, the identifier of the first subtype of
17140 the associated type denotes the current instance of the type. Within an
17141 invariant expression associated with type T, the type of the current
17142 instance is T for the Type_Invariant aspect and T'Class for the
17143 Type_Invariant'Class aspect.
17144
17145 _Legality Rules_
17146
17147 6/3
17148 The Type_Invariant'Class aspect shall not be specified for an untagged
17149 type. The Type_Invariant aspect shall not be specified for an abstract
17150 type.
17151
17152 _Static Semantics_
17153
17154 7/3
17155 If the Type_Invariant aspect is specified for a type T, then the
17156 invariant expression applies to T.
17157
17158 8/3
17159 If the Type_Invariant'Class aspect is specified for a tagged type T,
17160 then the invariant expression applies to all descendants of T.
17161
17162 _Dynamic Semantics_
17163
17164 9/3
17165 If one or more invariant expressions apply to a type T, then an
17166 invariant check is performed at the following places, on the specified
17167 object(s):
17168
17169 10/3
17170 * After successful default initialization of an object of type T, the
17171 check is performed on the new object;
17172
17173 11/3
17174 * After successful conversion to type T, the check is performed on
17175 the result of the conversion;
17176
17177 12/3
17178 * For a view conversion, outside the immediate scope of T, that
17179 converts from a descendant of T (including T itself) to an ancestor
17180 of type T (other than T itself), a check is performed on the part
17181 of the object that is of type T:
17182
17183 13/3
17184 * after assigning to the view conversion; and
17185
17186 14/3
17187 * after successful return from a call that passes the view
17188 conversion as an in out or out parameter.
17189
17190 15/3
17191 * After a successful call on the Read or Input stream attribute of
17192 the type T, the check is performed on the object initialized by the
17193 stream attribute;
17194
17195 16/3
17196 * An invariant is checked upon successful return from a call on any
17197 subprogram or entry that:
17198
17199 17/3
17200 * is declared within the immediate scope of type T (or by an
17201 instance of a generic unit, and the generic is declared within
17202 the immediate scope of type T), and
17203
17204 18/3
17205 * is visible outside the immediate scope of type T or overrides
17206 an operation that is visible outside the immediate scope of T,
17207 and
17208
17209 19/3
17210 * has a result with a part of type T, or one or more parameters
17211 with a part of type T, or an access to variable parameter
17212 whose designated type has a part of type T.
17213
17214 20/3
17215 The check is performed on each such part of type T.
17216
17217 21/3
17218 If performing checks is required by the Invariant or Invariant'Class
17219 assertion policies (see *note 11.4.2::) in effect at the point of
17220 corresponding aspect specification applicable to a given type, then the
17221 respective invariant expression is considered enabled.
17222
17223 22/3
17224 The invariant check consists of the evaluation of each enabled invariant
17225 expression that applies to T, on each of the objects specified above.
17226 If any of these evaluate to False, Assertions.Assertion_Error is raised
17227 at the point of the object initialization, conversion, or call. If a
17228 given call requires more than one evaluation of an invariant expression,
17229 either for multiple objects of a single type or for multiple types with
17230 invariants, the evaluations are performed in an arbitrary order, and if
17231 one of them evaluates to False, it is not specified whether the others
17232 are evaluated. Any invariant check is performed prior to copying back
17233 any by-copy in out or out parameters. Invariant checks, any
17234 postcondition check, and any constraint or predicate checks associated
17235 with in out or out parameters are performed in an arbitrary order.
17236
17237 23/3
17238 The invariant checks performed on a call are determined by the
17239 subprogram or entry actually invoked, whether directly, as part of a
17240 dispatching call, or as part of a call through an access-to-subprogram
17241 value.
17242
17243 NOTES
17244
17245 24/3
17246 13 For a call of a primitive subprogram of type NT that is
17247 inherited from type T, the specified checks of the specific
17248 invariants of both the types NT and T are performed. For a call of
17249 a primitive subprogram of type NT that is overridden for type NT,
17250 the specified checks of the specific invariants of only type NT are
17251 performed.
17252
17253 \1f
17254 File: arm2012.info, Node: 7.4, Next: 7.5, Prev: 7.3, Up: 7
17255
17256 7.4 Deferred Constants
17257 ======================
17258
17259 1
17260 Deferred constant declarations may be used to declare constants in the
17261 visible part of a package, but with the value of the constant given in
17262 the private part. They may also be used to declare constants imported
17263 from other languages (see *note Annex B::).
17264
17265 _Legality Rules_
17266
17267 2/3
17268 A deferred constant declaration is an object_declaration with the
17269 reserved word constant but no initialization expression. The constant
17270 declared by a deferred constant declaration is called a deferred
17271 constant. Unless the Import aspect (see *note B.1::) is True for a
17272 deferred constant declaration, the deferred constant declaration
17273 requires a completion, which shall be a full constant declaration
17274 (called the full declaration of the deferred constant).
17275
17276 3
17277 A deferred constant declaration that is completed by a full constant
17278 declaration shall occur immediately within the visible part of a
17279 package_specification. For this case, the following additional rules
17280 apply to the corresponding full declaration:
17281
17282 4
17283 * The full declaration shall occur immediately within the private
17284 part of the same package;
17285
17286 5/2
17287 * The deferred and full constants shall have the same type, or shall
17288 have statically matching anonymous access subtypes;
17289
17290 6/3
17291 * If the deferred constant declaration includes a subtype_indication
17292 S that defines a constrained subtype, then the constraint defined
17293 by the subtype_indication in the full declaration shall match the
17294 constraint defined by S statically. On the other hand, if the
17295 subtype of the deferred constant is unconstrained, then the full
17296 declaration is still allowed to impose a constraint. The constant
17297 itself will be constrained, like all constants;
17298
17299 7/2
17300 * If the deferred constant declaration includes the reserved word
17301 aliased, then the full declaration shall also;
17302
17303 7.1/2
17304 * If the subtype of the deferred constant declaration excludes null,
17305 the subtype of the full declaration shall also exclude null.
17306
17307 8/3
17308 A deferred constant declaration for which the Import aspect is True need
17309 not appear in the visible part of a package_specification, and has no
17310 full constant declaration.
17311
17312 9/2
17313 The completion of a deferred constant declaration shall occur before the
17314 constant is frozen (see *note 13.14::).
17315
17316 _Dynamic Semantics_
17317
17318 10/3
17319 The elaboration of a deferred constant declaration elaborates the
17320 subtype_indication, access_definition, or (only allowed in the case of
17321 an imported constant) the array_type_definition.
17322
17323 NOTES
17324
17325 11
17326 14 The full constant declaration for a deferred constant that is
17327 of a given private type or private extension is not allowed before
17328 the corresponding full_type_declaration. This is a consequence of
17329 the freezing rules for types (see *note 13.14::).
17330
17331 _Examples_
17332
17333 12
17334 Examples of deferred constant declarations:
17335
17336 13
17337 Null_Key : constant Key; -- see *note 7.3.1::
17338
17339 14/3
17340 CPU_Identifier : constant String(1..8)
17341 with Import => True, Convention => Assembler, Link_Name => "CPU_ID";
17342 -- see *note B.1::
17343
17344 \1f
17345 File: arm2012.info, Node: 7.5, Next: 7.6, Prev: 7.4, Up: 7
17346
17347 7.5 Limited Types
17348 =================
17349
17350 1/2
17351 A limited type is (a view of) a type for which copying (such as for an
17352 assignment_statement) is not allowed. A nonlimited type is a (view of
17353 a) type for which copying is allowed.
17354
17355 _Legality Rules_
17356
17357 2/2
17358 If a tagged record type has any limited components, then the reserved
17359 word limited shall appear in its record_type_definition. If the
17360 reserved word limited appears in the definition of a
17361 derived_type_definition, its parent type and any progenitor interfaces
17362 shall be limited.
17363
17364 2.1/3
17365 In the following contexts, an expression of a limited type is not
17366 permitted unless it is an aggregate, a function_call, a parenthesized
17367 expression or qualified_expression whose operand is permitted by this
17368 rule, or a conditional_expression all of whose dependent_expressions are
17369 permitted by this rule:
17370
17371 2.2/2
17372 * the initialization expression of an object_declaration (see *note
17373 3.3.1::)
17374
17375 2.3/2
17376 * the default_expression of a component_declaration (see *note 3.8::)
17377
17378 2.4/2
17379 * the expression of a record_component_association (see *note
17380 4.3.1::)
17381
17382 2.5/2
17383 * the expression for an ancestor_part of an extension_aggregate (see
17384 *note 4.3.2::)
17385
17386 2.6/2
17387 * an expression of a positional_array_aggregate or the expression of
17388 an array_component_association (see *note 4.3.3::)
17389
17390 2.7/2
17391 * the qualified_expression of an initialized allocator (see *note
17392 4.8::)
17393
17394 2.8/2
17395 * the expression of a return statement (see *note 6.5::)
17396
17397 2.9/3
17398 * the expression of an expression_function_declaration (see *note
17399 6.8::)
17400
17401 2.10/3
17402 * the default_expression or actual parameter for a formal object of
17403 mode in (see *note 12.4::)
17404
17405 _Static Semantics_
17406
17407 3/3
17408 A view of a type is limited if it is one of the following:
17409
17410 4/2
17411 * a type with the reserved word limited, synchronized, task, or
17412 protected in its definition;
17413
17414 5/3
17415 * a class-wide type whose specific type is limited;
17416
17417 6/2
17418 * a composite type with a limited component;
17419
17420 6.1/3
17421 * an incomplete view;
17422
17423 6.2/2
17424 * a derived type whose parent is limited and is not an interface.
17425
17426 7
17427 Otherwise, the type is nonlimited.
17428
17429 8
17430 There are no predefined equality operators for a limited type.
17431
17432 8.1/3
17433 A type is immutably limited if it is one of the following:
17434
17435 8.2/3
17436 * An explicitly limited record type;
17437
17438 8.3/3
17439 * A record extension with the reserved word limited;
17440
17441 8.4/3
17442 * A nonformal limited private type that is tagged or has at least one
17443 access discriminant with a default_expression;
17444
17445 8.5/3
17446 * A task type, a protected type, or a synchronized interface;
17447
17448 8.6/3
17449 * A type derived from an immutably limited type.
17450
17451 8.7/3
17452 A descendant of a generic formal limited private type is presumed to be
17453 immutably limited except within the body of a generic unit or a body
17454 declared within the declarative region of a generic unit, if the formal
17455 type is declared within the formal part of the generic unit.
17456
17457 NOTES
17458
17459 9/3
17460 15 While it is allowed to write initializations of limited
17461 objects, such initializations never copy a limited object. The
17462 source of such an assignment operation must be an aggregate or
17463 function_call, and such aggregates and function_calls must be built
17464 directly in the target object (see *note 7.6::).
17465
17466 Paragraphs 10 through 15 were deleted.
17467
17468 16
17469 16 As illustrated in *note 7.3.1::, an untagged limited type can
17470 become nonlimited under certain circumstances.
17471
17472 _Examples_
17473
17474 17
17475 Example of a package with a limited type:
17476
17477 18
17478 package IO_Package is
17479 type File_Name is limited private;
17480
17481 19
17482 procedure Open (F : in out File_Name);
17483 procedure Close(F : in out File_Name);
17484 procedure Read (F : in File_Name; Item : out Integer);
17485 procedure Write(F : in File_Name; Item : in Integer);
17486 private
17487 type File_Name is
17488 limited record
17489 Internal_Name : Integer := 0;
17490 end record;
17491 end IO_Package;
17492
17493 20
17494 package body IO_Package is
17495 Limit : constant := 200;
17496 type File_Descriptor is record ... end record;
17497 Directory : array (1 .. Limit) of File_Descriptor;
17498 ...
17499 procedure Open (F : in out File_Name) is ... end;
17500 procedure Close(F : in out File_Name) is ... end;
17501 procedure Read (F : in File_Name; Item : out Integer) is ... end;
17502 procedure Write(F : in File_Name; Item : in Integer) is ... end;
17503 begin
17504 ...
17505 end IO_Package;
17506
17507 NOTES
17508
17509 21
17510 17 Notes on the example: In the example above, an outside
17511 subprogram making use of IO_Package may obtain a file name by
17512 calling Open and later use it in calls to Read and Write. Thus,
17513 outside the package, a file name obtained from Open acts as a kind
17514 of password; its internal properties (such as containing a numeric
17515 value) are not known and no other operations (such as addition or
17516 comparison of internal names) can be performed on a file name.
17517 Most importantly, clients of the package cannot make copies of
17518 objects of type File_Name.
17519
17520 22
17521 This example is characteristic of any case where complete control
17522 over the operations of a type is desired. Such packages serve a
17523 dual purpose. They prevent a user from making use of the internal
17524 structure of the type. They also implement the notion of an
17525 encapsulated data type where the only operations on the type are
17526 those given in the package specification.
17527
17528 23/2
17529 The fact that the full view of File_Name is explicitly declared
17530 limited means that parameter passing will always be by reference
17531 and function results will always be built directly in the result
17532 object (see *note 6.2:: and *note 6.5::).
17533
17534 \1f
17535 File: arm2012.info, Node: 7.6, Prev: 7.5, Up: 7
17536
17537 7.6 Assignment and Finalization
17538 ===============================
17539
17540 1
17541 Three kinds of actions are fundamental to the manipulation of objects:
17542 initialization, finalization, and assignment. Every object is
17543 initialized, either explicitly or by default, after being created (for
17544 example, by an object_declaration or allocator). Every object is
17545 finalized before being destroyed (for example, by leaving a
17546 subprogram_body containing an object_declaration, or by a call to an
17547 instance of Unchecked_Deallocation). An assignment operation is used as
17548 part of assignment_statements, explicit initialization, parameter
17549 passing, and other operations.
17550
17551 2
17552 Default definitions for these three fundamental operations are provided
17553 by the language, but a controlled type gives the user additional control
17554 over parts of these operations. In particular, the user can define, for
17555 a controlled type, an Initialize procedure which is invoked immediately
17556 after the normal default initialization of a controlled object, a
17557 Finalize procedure which is invoked immediately before finalization of
17558 any of the components of a controlled object, and an Adjust procedure
17559 which is invoked as the last step of an assignment to a (nonlimited)
17560 controlled object.
17561
17562 _Static Semantics_
17563
17564 3
17565 The following language-defined library package exists:
17566
17567 4/3
17568 package Ada.Finalization is
17569 pragma Pure(Finalization);
17570
17571 5/2
17572 type Controlled is abstract tagged private;
17573 pragma Preelaborable_Initialization(Controlled);
17574
17575 6/2
17576 procedure Initialize (Object : in out Controlled) is null;
17577 procedure Adjust (Object : in out Controlled) is null;
17578 procedure Finalize (Object : in out Controlled) is null;
17579
17580 7/2
17581 type Limited_Controlled is abstract tagged limited private;
17582 pragma Preelaborable_Initialization(Limited_Controlled);
17583
17584 8/2
17585 procedure Initialize (Object : in out Limited_Controlled) is null;
17586 procedure Finalize (Object : in out Limited_Controlled) is null;
17587 private
17588 ... -- not specified by the language
17589 end Ada.Finalization;
17590
17591 9/2
17592 A controlled type is a descendant of Controlled or Limited_Controlled.
17593 The predefined "=" operator of type Controlled always returns True,
17594 since this operator is incorporated into the implementation of the
17595 predefined equality operator of types derived from Controlled, as
17596 explained in *note 4.5.2::. The type Limited_Controlled is like
17597 Controlled, except that it is limited and it lacks the primitive
17598 subprogram Adjust.
17599
17600 9.1/2
17601 A type is said to need finalization if:
17602
17603 9.2/2
17604 * it is a controlled type, a task type or a protected type; or
17605
17606 9.3/3
17607 * it has a component whose type needs finalization; or
17608
17609 9.4/3
17610 * it is a class-wide type; or
17611
17612 9.5/3
17613 * it is a partial view whose full view needs finalization; or
17614
17615 9.6/2
17616 * it is one of a number of language-defined types that are explicitly
17617 defined to need finalization.
17618
17619 _Dynamic Semantics_
17620
17621 10/2
17622 During the elaboration or evaluation of a construct that causes an
17623 object to be initialized by default, for every controlled subcomponent
17624 of the object that is not assigned an initial value (as defined in *note
17625 3.3.1::), Initialize is called on that subcomponent. Similarly, if the
17626 object that is initialized by default as a whole is controlled,
17627 Initialize is called on the object.
17628
17629 11/2
17630 For an extension_aggregate whose ancestor_part is a subtype_mark
17631 denoting a controlled subtype, the Initialize procedure of the ancestor
17632 type is called, unless that Initialize procedure is abstract.
17633
17634 12
17635 Initialize and other initialization operations are done in an arbitrary
17636 order, except as follows. Initialize is applied to an object after
17637 initialization of its subcomponents, if any (including both implicit
17638 initialization and Initialize calls). If an object has a component with
17639 an access discriminant constrained by a per-object expression,
17640 Initialize is applied to this component after any components that do not
17641 have such discriminants. For an object with several components with
17642 such a discriminant, Initialize is applied to them in order of their
17643 component_declarations. For an allocator, any task activations follow
17644 all calls on Initialize.
17645
17646 13
17647 When a target object with any controlled parts is assigned a value,
17648 either when created or in a subsequent assignment_statement, the
17649 assignment operation proceeds as follows:
17650
17651 14
17652 * The value of the target becomes the assigned value.
17653
17654 15
17655 * The value of the target is adjusted.
17656
17657 16/3
17658 To adjust the value of a composite object, the values of the components
17659 of the object are first adjusted in an arbitrary order, and then, if the
17660 object is nonlimited controlled, Adjust is called. Adjusting the value
17661 of an elementary object has no effect, nor does adjusting the value of a
17662 composite object with no controlled parts.
17663
17664 17
17665 For an assignment_statement, after the name and expression have been
17666 evaluated, and any conversion (including constraint checking) has been
17667 done, an anonymous object is created, and the value is assigned into it;
17668 that is, the assignment operation is applied. (Assignment includes
17669 value adjustment.) The target of the assignment_statement is then
17670 finalized. The value of the anonymous object is then assigned into the
17671 target of the assignment_statement. Finally, the anonymous object is
17672 finalized. As explained below, the implementation may eliminate the
17673 intermediate anonymous object, so this description subsumes the one
17674 given in *note 5.2::, "*note 5.2:: Assignment Statements".
17675
17676 17.1/3
17677 When a function call or aggregate is used to initialize an object, the
17678 result of the function call or aggregate is an anonymous object, which
17679 is assigned into the newly-created object. For such an assignment, the
17680 anonymous object might be built in place, in which case the assignment
17681 does not involve any copying. Under certain circumstances, the
17682 anonymous object is required to be built in place. In particular:
17683
17684 17.2/3
17685 * If the full type of any part of the object is immutably limited,
17686 the anonymous object is built in place.
17687
17688 17.3/3
17689 * In the case of an aggregate, if the full type of any part of the
17690 newly-created object is controlled, the anonymous object is built
17691 in place.
17692
17693 17.4/3
17694 * In other cases, it is unspecified whether the anonymous object is
17695 built in place.
17696
17697 17.5/3
17698 Notwithstanding what this International Standard says elsewhere, if an
17699 object is built in place:
17700
17701 17.6/3
17702 * Upon successful completion of the return statement or aggregate,
17703 the anonymous object mutates into the newly-created object; that
17704 is, the anonymous object ceases to exist, and the newly-created
17705 object appears in its place.
17706
17707 17.7/3
17708 * Finalization is not performed on the anonymous object.
17709
17710 17.8/3
17711 * Adjustment is not performed on the newly-created object.
17712
17713 17.9/3
17714 * All access values that designate parts of the anonymous object now
17715 designate the corresponding parts of the newly-created object.
17716
17717 17.10/3
17718 * All renamings of parts of the anonymous object now denote views of
17719 the corresponding parts of the newly-created object.
17720
17721 17.11/3
17722 * Coextensions of the anonymous object become coextensions of the
17723 newly-created object.
17724
17725 _Implementation Permissions_
17726
17727 18/3
17728 An implementation is allowed to relax the above rules for
17729 assignment_statements in the following ways:
17730
17731 19/3
17732 * If an object is assigned the value of that same object, the
17733 implementation need not do anything.
17734
17735 20/3
17736 * For assignment of a noncontrolled type, the implementation may
17737 finalize and assign each component of the variable separately
17738 (rather than finalizing the entire variable and assigning the
17739 entire new value) unless a discriminant of the variable is changed
17740 by the assignment.
17741
17742 21/3
17743 * The implementation need not create an anonymous object if the value
17744 being assigned is the result of evaluating a name denoting an
17745 object (the source object) whose storage cannot overlap with the
17746 target. If the source object might overlap with the target object,
17747 then the implementation can avoid the need for an intermediary
17748 anonymous object by exercising one of the above permissions and
17749 perform the assignment one component at a time (for an overlapping
17750 array assignment), or not at all (for an assignment where the
17751 target and the source of the assignment are the same object).
17752
17753 22/2
17754 Furthermore, an implementation is permitted to omit implicit Initialize,
17755 Adjust, and Finalize calls and associated assignment operations on an
17756 object of a nonlimited controlled type provided that:
17757
17758 23/2
17759 * any omitted Initialize call is not a call on a user-defined
17760 Initialize procedure, and
17761
17762 24/2
17763 * any usage of the value of the object after the implicit Initialize
17764 or Adjust call and before any subsequent Finalize call on the
17765 object does not change the external effect of the program, and
17766
17767 25/2
17768 * after the omission of such calls and operations, any execution of
17769 the program that executes an Initialize or Adjust call on an object
17770 or initializes an object by an aggregate will also later execute a
17771 Finalize call on the object and will always do so prior to
17772 assigning a new value to the object, and
17773
17774 26/2
17775 * the assignment operations associated with omitted Adjust calls are
17776 also omitted.
17777
17778 27/2
17779 This permission applies to Adjust and Finalize calls even if the
17780 implicit calls have additional external effects.
17781
17782 * Menu:
17783
17784 * 7.6.1 :: Completion and Finalization
17785
17786 \1f
17787 File: arm2012.info, Node: 7.6.1, Up: 7.6
17788
17789 7.6.1 Completion and Finalization
17790 ---------------------------------
17791
17792 1
17793 This subclause defines completion and leaving of the execution of
17794 constructs and entities. A master is the execution of a construct that
17795 includes finalization of local objects after it is complete (and after
17796 waiting for any local tasks -- see *note 9.3::), but before leaving.
17797 Other constructs and entities are left immediately upon completion.
17798
17799 _Dynamic Semantics_
17800
17801 2/2
17802 The execution of a construct or entity is complete when the end of that
17803 execution has been reached, or when a transfer of control (see *note
17804 5.1::) causes it to be abandoned. Completion due to reaching the end of
17805 execution, or due to the transfer of control of an exit_statement,
17806 return statement, goto_statement, or requeue_statement or of the
17807 selection of a terminate_alternative is normal completion. Completion
17808 is abnormal otherwise -- when control is transferred out of a construct
17809 due to abort or the raising of an exception.
17810
17811 3/2
17812 After execution of a construct or entity is complete, it is left,
17813 meaning that execution continues with the next action, as defined for
17814 the execution that is taking place. Leaving an execution happens
17815 immediately after its completion, except in the case of a master: the
17816 execution of a body other than a package_body; the execution of a
17817 statement; or the evaluation of an expression, function_call, or range
17818 that is not part of an enclosing expression, function_call, range, or
17819 simple_statement (*note 5.1: S0147.) other than a
17820 simple_return_statement (*note 6.5: S0183.). A master is finalized
17821 after it is complete, and before it is left.
17822
17823 4
17824 For the finalization of a master, dependent tasks are first awaited, as
17825 explained in *note 9.3::. Then each object whose accessibility level is
17826 the same as that of the master is finalized if the object was
17827 successfully initialized and still exists. These actions are performed
17828 whether the master is left by reaching the last statement or via a
17829 transfer of control. When a transfer of control causes completion of an
17830 execution, each included master is finalized in order, from innermost
17831 outward.
17832
17833 5
17834 For the finalization of an object:
17835
17836 6/3
17837 * If the full type of the object is an elementary type, finalization
17838 has no effect;
17839
17840 7/3
17841 * If the full type of the object is a tagged type, and the tag of the
17842 object identifies a controlled type, the Finalize procedure of that
17843 controlled type is called;
17844
17845 8/3
17846 * If the full type of the object is a protected type, or if the full
17847 type of the object is a tagged type and the tag of the object
17848 identifies a protected type, the actions defined in *note 9.4:: are
17849 performed;
17850
17851 9/3
17852 * If the full type of the object is a composite type, then after
17853 performing the above actions, if any, every component of the object
17854 is finalized in an arbitrary order, except as follows: if the
17855 object has a component with an access discriminant constrained by a
17856 per-object expression, this component is finalized before any
17857 components that do not have such discriminants; for an object with
17858 several components with such a discriminant, they are finalized in
17859 the reverse of the order of their component_declarations;
17860
17861 9.1/2
17862 * If the object has coextensions (see *note 3.10.2::), each
17863 coextension is finalized after the object whose access discriminant
17864 designates it.
17865
17866 10
17867 Immediately before an instance of Unchecked_Deallocation reclaims the
17868 storage of an object, the object is finalized. If an instance of
17869 Unchecked_Deallocation is never applied to an object created by an
17870 allocator, the object will still exist when the corresponding master
17871 completes, and it will be finalized then.
17872
17873 11/3
17874 The finalization of a master performs finalization of objects created by
17875 declarations in the master in the reverse order of their creation.
17876 After the finalization of a master is complete, the objects finalized as
17877 part of its finalization cease to exist, as do any types and subtypes
17878 defined and created within the master.
17879
17880 11.1/3
17881 Each nonderived access type T has an associated collection, which is the
17882 set of objects created by allocators of T, or of types derived from T.
17883 Unchecked_Deallocation removes an object from its collection.
17884 Finalization of a collection consists of finalization of each object in
17885 the collection, in an arbitrary order. The collection of an access type
17886 is an object implicitly declared at the following place:
17887
17888 11.2/3
17889 * For a named access type, the first freezing point (see *note
17890 13.14::) of the type.
17891
17892 11.3/3
17893 * For the type of an access parameter, the call that contains the
17894 allocator.
17895
17896 11.4/3
17897 * For the type of an access result, within the master of the call
17898 (see *note 3.10.2::).
17899
17900 11.5/3
17901 * For any other anonymous access type, the first freezing point of
17902 the innermost enclosing declaration.
17903
17904 12/2
17905 The target of an assignment_statement is finalized before copying in the
17906 new value, as explained in *note 7.6::.
17907
17908 13/3
17909 The master of an object is the master enclosing its creation whose
17910 accessibility level (see *note 3.10.2::) is equal to that of the object,
17911 except in the case of an anonymous object representing the result of an
17912 aggregate or function call. If such an anonymous object is part of the
17913 result of evaluating the actual parameter expression for an explicitly
17914 aliased parameter of a function call, the master of the object is the
17915 innermost master enclosing the evaluation of the aggregate or function
17916 call, excluding the aggregate or function call itself. Otherwise, the
17917 master of such an anonymous object is the innermost master enclosing the
17918 evaluation of the aggregate or function call, which may be the aggregate
17919 or function call itself.
17920
17921 13.1/3
17922 In the case of an expression that is a master, finalization of any
17923 (anonymous) objects occurs after completing evaluation of the expression
17924 and all use of the objects, prior to starting the execution of any
17925 subsequent construct.
17926
17927 _Bounded (Run-Time) Errors_
17928
17929 14/1
17930 It is a bounded error for a call on Finalize or Adjust that occurs as
17931 part of object finalization or assignment to propagate an exception.
17932 The possible consequences depend on what action invoked the Finalize or
17933 Adjust operation:
17934
17935 15
17936 * For a Finalize invoked as part of an assignment_statement,
17937 Program_Error is raised at that point.
17938
17939 16/2
17940 * For an Adjust invoked as part of assignment operations other than
17941 those invoked as part of an assignment_statement, other adjustments
17942 due to be performed might or might not be performed, and then
17943 Program_Error is raised. During its propagation, finalization
17944 might or might not be applied to objects whose Adjust failed. For
17945 an Adjust invoked as part of an assignment_statement, any other
17946 adjustments due to be performed are performed, and then
17947 Program_Error is raised.
17948
17949 17
17950 * For a Finalize invoked as part of a call on an instance of
17951 Unchecked_Deallocation, any other finalizations due to be performed
17952 are performed, and then Program_Error is raised.
17953
17954 17.1/3
17955 * This paragraph was deleted.
17956
17957 17.2/1
17958 * For a Finalize invoked due to reaching the end of the execution of
17959 a master, any other finalizations associated with the master are
17960 performed, and Program_Error is raised immediately after leaving
17961 the master.
17962
17963 18/2
17964 * For a Finalize invoked by the transfer of control of an
17965 exit_statement, return statement, goto_statement, or
17966 requeue_statement (*note 9.5.4: S0226.), Program_Error is raised no
17967 earlier than after the finalization of the master being finalized
17968 when the exception occurred, and no later than the point where
17969 normal execution would have continued. Any other finalizations due
17970 to be performed up to that point are performed before raising
17971 Program_Error.
17972
17973 19
17974 * For a Finalize invoked by a transfer of control that is due to
17975 raising an exception, any other finalizations due to be performed
17976 for the same master are performed; Program_Error is raised
17977 immediately after leaving the master.
17978
17979 20
17980 * For a Finalize invoked by a transfer of control due to an abort or
17981 selection of a terminate alternative, the exception is ignored; any
17982 other finalizations due to be performed are performed.
17983
17984 _Implementation Permissions_
17985
17986 20.1/3
17987 If the execution of an allocator propagates an exception, any parts of
17988 the allocated object that were successfully initialized may be finalized
17989 as part of the finalization of the innermost master enclosing the
17990 allocator.
17991
17992 20.2/3
17993 The implementation may finalize objects created by allocators for an
17994 access type whose storage pool supports subpools (see *note 13.11.4::)
17995 as if the objects were created (in an arbitrary order) at the point
17996 where the storage pool was elaborated instead of at the first freezing
17997 point of the access type.
17998
17999 NOTES
18000
18001 21/3
18002 18 The rules of Clause 10 imply that immediately prior to
18003 partition termination, Finalize operations are applied to
18004 library-level controlled objects (including those created by
18005 allocators of library-level access types, except those already
18006 finalized). This occurs after waiting for library-level tasks to
18007 terminate.
18008
18009 22
18010 19 A constant is only constant between its initialization and
18011 finalization. Both initialization and finalization are allowed to
18012 change the value of a constant.
18013
18014 23
18015 20 Abort is deferred during certain operations related to
18016 controlled types, as explained in *note 9.8::. Those rules prevent
18017 an abort from causing a controlled object to be left in an
18018 ill-defined state.
18019
18020 24
18021 21 The Finalize procedure is called upon finalization of a
18022 controlled object, even if Finalize was called earlier, either
18023 explicitly or as part of an assignment; hence, if a controlled type
18024 is visibly controlled (implying that its Finalize primitive is
18025 directly callable), or is nonlimited (implying that assignment is
18026 allowed), its Finalize procedure should be designed to have no ill
18027 effect if it is applied a second time to the same object.
18028
18029 \1f
18030 File: arm2012.info, Node: 8, Next: 9, Prev: 7, Up: Top
18031
18032 8 Visibility Rules
18033 ******************
18034
18035 1/3
18036 The rules defining the scope of declarations and the rules defining
18037 which identifiers, character_literals, and operator_symbols are visible
18038 at (or from) various places in the text of the program are described in
18039 this clause. The formulation of these rules uses the notion of a
18040 declarative region.
18041
18042 2/3
18043 As explained in Clause *note 3::, a declaration declares a view of an
18044 entity and associates a defining name with that view. The view
18045 comprises an identification of the viewed entity, and possibly
18046 additional properties. A usage name denotes a declaration. It also
18047 denotes the view declared by that declaration, and denotes the entity of
18048 that view. Thus, two different usage names might denote two different
18049 views of the same entity; in this case they denote the same entity.
18050
18051 * Menu:
18052
18053 * 8.1 :: Declarative Region
18054 * 8.2 :: Scope of Declarations
18055 * 8.3 :: Visibility
18056 * 8.4 :: Use Clauses
18057 * 8.5 :: Renaming Declarations
18058 * 8.6 :: The Context of Overload Resolution
18059
18060 \1f
18061 File: arm2012.info, Node: 8.1, Next: 8.2, Up: 8
18062
18063 8.1 Declarative Region
18064 ======================
18065
18066 _Static Semantics_
18067
18068 1
18069 For each of the following constructs, there is a portion of the program
18070 text called its declarative region, within which nested declarations can
18071 occur:
18072
18073 2
18074 * any declaration, other than that of an enumeration type, that is
18075 not a completion of a previous declaration;
18076
18077 3
18078 * a block_statement;
18079
18080 4
18081 * a loop_statement;
18082
18083 4.1/3
18084 * a quantified_expression;
18085
18086 4.2/3
18087 * an extended_return_statement;
18088
18089 5
18090 * an accept_statement;
18091
18092 6
18093 * an exception_handler.
18094
18095 7
18096 The declarative region includes the text of the construct together with
18097 additional text determined (recursively), as follows:
18098
18099 8
18100 * If a declaration is included, so is its completion, if any.
18101
18102 9
18103 * If the declaration of a library unit (including Standard -- see
18104 *note 10.1.1::) is included, so are the declarations of any child
18105 units (and their completions, by the previous rule). The child
18106 declarations occur after the declaration.
18107
18108 10
18109 * If a body_stub is included, so is the corresponding subunit.
18110
18111 11
18112 * If a type_declaration is included, then so is a corresponding
18113 record_representation_clause, if any.
18114
18115 12
18116 The declarative region of a declaration is also called the declarative
18117 region of any view or entity declared by the declaration.
18118
18119 13
18120 A declaration occurs immediately within a declarative region if this
18121 region is the innermost declarative region that encloses the declaration
18122 (the immediately enclosing declarative region), not counting the
18123 declarative region (if any) associated with the declaration itself.
18124
18125 14
18126 A declaration is local to a declarative region if the declaration occurs
18127 immediately within the declarative region. An entity is local to a
18128 declarative region if the entity is declared by a declaration that is
18129 local to the declarative region.
18130
18131 15
18132 A declaration is global to a declarative region if the declaration
18133 occurs immediately within another declarative region that encloses the
18134 declarative region. An entity is global to a declarative region if the
18135 entity is declared by a declaration that is global to the declarative
18136 region.
18137
18138 NOTES
18139
18140 16
18141 1 The children of a parent library unit are inside the parent's
18142 declarative region, even though they do not occur inside the
18143 parent's declaration or body. This implies that one can use (for
18144 example) "P.Q" to refer to a child of P whose defining name is Q,
18145 and that after "use P;" Q can refer (directly) to that child.
18146
18147 17
18148 2 As explained above and in *note 10.1.1::, "*note 10.1.1::
18149 Compilation Units - Library Units", all library units are
18150 descendants of Standard, and so are contained in the declarative
18151 region of Standard. They are not inside the declaration or body of
18152 Standard, but they are inside its declarative region.
18153
18154 18
18155 3 For a declarative region that comes in multiple parts, the text
18156 of the declarative region does not contain any text that might
18157 appear between the parts. Thus, when a portion of a declarative
18158 region is said to extend from one place to another in the
18159 declarative region, the portion does not contain any text that
18160 might appear between the parts of the declarative region.
18161
18162 \1f
18163 File: arm2012.info, Node: 8.2, Next: 8.3, Prev: 8.1, Up: 8
18164
18165 8.2 Scope of Declarations
18166 =========================
18167
18168 1
18169 For each declaration, the language rules define a certain portion of the
18170 program text called the scope of the declaration. The scope of a
18171 declaration is also called the scope of any view or entity declared by
18172 the declaration. Within the scope of an entity, and only there, there
18173 are places where it is legal to refer to the declared entity. These
18174 places are defined by the rules of visibility and overloading.
18175
18176 _Static Semantics_
18177
18178 2
18179 The immediate scope of a declaration is a portion of the declarative
18180 region immediately enclosing the declaration. The immediate scope
18181 starts at the beginning of the declaration, except in the case of an
18182 overloadable declaration, in which case the immediate scope starts just
18183 after the place where the profile of the callable entity is determined
18184 (which is at the end of the _specification for the callable entity, or
18185 at the end of the generic_instantiation if an instance). The immediate
18186 scope extends to the end of the declarative region, with the following
18187 exceptions:
18188
18189 3
18190 * The immediate scope of a library_item includes only its semantic
18191 dependents.
18192
18193 4
18194 * The immediate scope of a declaration in the private part of a
18195 library unit does not include the visible part of any public
18196 descendant of that library unit.
18197
18198 5
18199 The visible part of (a view of) an entity is a portion of the text of
18200 its declaration containing declarations that are visible from outside.
18201 The private part of (a view of) an entity that has a visible part
18202 contains all declarations within the declaration of (the view of) the
18203 entity, except those in the visible part; these are not visible from
18204 outside. Visible and private parts are defined only for these kinds of
18205 entities: callable entities, other program units, and composite types.
18206
18207 6
18208 * The visible part of a view of a callable entity is its profile.
18209
18210 7
18211 * The visible part of a composite type other than a task or protected
18212 type consists of the declarations of all components declared
18213 (explicitly or implicitly) within the type_declaration.
18214
18215 8
18216 * The visible part of a generic unit includes the
18217 generic_formal_part. For a generic package, it also includes the
18218 first list of basic_declarative_items of the package_specification.
18219 For a generic subprogram, it also includes the profile.
18220
18221 9
18222 * The visible part of a package, task unit, or protected unit
18223 consists of declarations in the program unit's declaration other
18224 than those following the reserved word private, if any; see *note
18225 7.1:: and *note 12.7:: for packages, *note 9.1:: for task units,
18226 and *note 9.4:: for protected units.
18227
18228 10
18229 The scope of a declaration always contains the immediate scope of the
18230 declaration. In addition, for a given declaration that occurs
18231 immediately within the visible part of an outer declaration, or is a
18232 public child of an outer declaration, the scope of the given declaration
18233 extends to the end of the scope of the outer declaration, except that
18234 the scope of a library_item includes only its semantic dependents.
18235
18236 10.1/3
18237 The scope of an attribute_definition_clause is identical to the scope of
18238 a declaration that would occur at the point of the
18239 attribute_definition_clause. The scope of an aspect_specification is
18240 identical to the scope of the associated declaration.
18241
18242 11
18243 The immediate scope of a declaration is also the immediate scope of the
18244 entity or view declared by the declaration. Similarly, the scope of a
18245 declaration is also the scope of the entity or view declared by the
18246 declaration.
18247
18248 NOTES
18249
18250 12/3
18251 4 There are notations for denoting visible declarations that are
18252 not directly visible. For example, parameter_specification (*note
18253 6.1: S0175.)s are in the visible part of a subprogram_declaration
18254 (*note 6.1: S0163.) so that they can be used in named-notation
18255 calls appearing outside the called subprogram. For another
18256 example, declarations of the visible part of a package can be
18257 denoted by expanded names appearing outside the package, and can be
18258 made directly visible by a use_clause.
18259
18260 \1f
18261 File: arm2012.info, Node: 8.3, Next: 8.4, Prev: 8.2, Up: 8
18262
18263 8.3 Visibility
18264 ==============
18265
18266 1
18267 The visibility rules, given below, determine which declarations are
18268 visible and directly visible at each place within a program. The
18269 visibility rules apply to both explicit and implicit declarations.
18270
18271 _Static Semantics_
18272
18273 2
18274 A declaration is defined to be directly visible at places where a name
18275 consisting of only an identifier or operator_symbol is sufficient to
18276 denote the declaration; that is, no selected_component notation or
18277 special context (such as preceding => in a named association) is
18278 necessary to denote the declaration. A declaration is defined to be
18279 visible wherever it is directly visible, as well as at other places
18280 where some name (such as a selected_component) can denote the
18281 declaration.
18282
18283 3
18284 The syntactic category direct_name is used to indicate contexts where
18285 direct visibility is required. The syntactic category selector_name is
18286 used to indicate contexts where visibility, but not direct visibility,
18287 is required.
18288
18289 4
18290 There are two kinds of direct visibility: immediate visibility and
18291 use-visibility. A declaration is immediately visible at a place if it
18292 is directly visible because the place is within its immediate scope. A
18293 declaration is use-visible if it is directly visible because of a
18294 use_clause (see *note 8.4::). Both conditions can apply.
18295
18296 5
18297 A declaration can be hidden, either from direct visibility, or from all
18298 visibility, within certain parts of its scope. Where hidden from all
18299 visibility, it is not visible at all (neither using a direct_name nor a
18300 selector_name). Where hidden from direct visibility, only direct
18301 visibility is lost; visibility using a selector_name is still possible.
18302
18303 6
18304 Two or more declarations are overloaded if they all have the same
18305 defining name and there is a place where they are all directly visible.
18306
18307 7
18308 The declarations of callable entities (including enumeration literals)
18309 are overloadable, meaning that overloading is allowed for them.
18310
18311 8
18312 Two declarations are homographs if they have the same defining name,
18313 and, if both are overloadable, their profiles are type conformant. An
18314 inner declaration hides any outer homograph from direct visibility.
18315
18316 9/1
18317 Two homographs are not generally allowed immediately within the same
18318 declarative region unless one overrides the other (see Legality Rules
18319 below). The only declarations that are overridable are the implicit
18320 declarations for predefined operators and inherited primitive
18321 subprograms. A declaration overrides another homograph that occurs
18322 immediately within the same declarative region in the following cases:
18323
18324 10/1
18325 * A declaration that is not overridable overrides one that is
18326 overridable, regardless of which declaration occurs first;
18327
18328 11
18329 * The implicit declaration of an inherited operator overrides that of
18330 a predefined operator;
18331
18332 12
18333 * An implicit declaration of an inherited subprogram overrides a
18334 previous implicit declaration of an inherited subprogram.
18335
18336 12.1/2
18337 * If two or more homographs are implicitly declared at the same
18338 place:
18339
18340 12.2/2
18341 * If at least one is a subprogram that is neither a null
18342 procedure nor an abstract subprogram, and does not
18343 require overriding (see *note 3.9.3::), then they
18344 override those that are null procedures, abstract
18345 subprograms, or require overriding. If more than one
18346 such homograph remains that is not thus overridden, then
18347 they are all hidden from all visibility.
18348
18349 12.3/2
18350 * Otherwise (all are null procedures, abstract subprograms,
18351 or require overriding), then any null procedure overrides
18352 all abstract subprograms and all subprograms that require
18353 overriding; if more than one such homograph remains that
18354 is not thus overridden, then if they are all fully
18355 conformant with one another, one is chosen arbitrarily;
18356 if not, they are all hidden from all visibility.
18357
18358 13
18359 * For an implicit declaration of a primitive subprogram in a generic
18360 unit, there is a copy of this declaration in an instance. However,
18361 a whole new set of primitive subprograms is implicitly declared for
18362 each type declared within the visible part of the instance. These
18363 new declarations occur immediately after the type declaration, and
18364 override the copied ones. The copied ones can be called only from
18365 within the instance; the new ones can be called only from outside
18366 the instance, although for tagged types, the body of a new one can
18367 be executed by a call to an old one.
18368
18369 14
18370 A declaration is visible within its scope, except where hidden from all
18371 visibility, as follows:
18372
18373 15
18374 * An overridden declaration is hidden from all visibility within the
18375 scope of the overriding declaration.
18376
18377 16
18378 * A declaration is hidden from all visibility until the end of the
18379 declaration, except:
18380
18381 17
18382 * For a record type or record extension, the declaration is
18383 hidden from all visibility only until the reserved word
18384 record;
18385
18386 18/3
18387 * For a package_declaration, generic_package_declaration
18388 (*note 12.1: S0272.), subprogram_body (*note 6.3:
18389 S0177.), or expression_function_declaration (*note 6.8:
18390 S0189.), the declaration is hidden from all visibility
18391 only until the reserved word is of the declaration;
18392
18393 18.1/2
18394 * For a task declaration or protected declaration, the
18395 declaration is hidden from all visibility only until the
18396 reserved word with of the declaration if there is one, or
18397 the reserved word is of the declaration if there is no
18398 with.
18399
18400 19
18401 * If the completion of a declaration is a declaration, then within
18402 the scope of the completion, the first declaration is hidden from
18403 all visibility. Similarly, a discriminant_specification (*note
18404 3.7: S0062.) or parameter_specification (*note 6.1: S0175.) is
18405 hidden within the scope of a corresponding
18406 discriminant_specification (*note 3.7: S0062.) or
18407 parameter_specification (*note 6.1: S0175.) of a corresponding
18408 completion, or of a corresponding accept_statement (*note 9.5.2:
18409 S0219.).
18410
18411 20/2
18412 * The declaration of a library unit (including a
18413 library_unit_renaming_declaration) is hidden from all visibility at
18414 places outside its declarative region that are not within the scope
18415 of a nonlimited_with_clause that mentions it. The limited view of
18416 a library package is hidden from all visibility at places that are
18417 not within the scope of a limited_with_clause that mentions it; in
18418 addition, the limited view is hidden from all visibility within the
18419 declarative region of the package, as well as within the scope of
18420 any nonlimited_with_clause that mentions the package. Where the
18421 declaration of the limited view of a package is visible, any name
18422 that denotes the package denotes the limited view, including those
18423 provided by a package renaming.
18424
18425 20.1/2
18426 * For each declaration or renaming of a generic unit as a child of
18427 some parent generic package, there is a corresponding declaration
18428 nested immediately within each instance of the parent. Such a
18429 nested declaration is hidden from all visibility except at places
18430 that are within the scope of a with_clause that mentions the child.
18431
18432 21
18433 A declaration with a defining_identifier or defining_operator_symbol is
18434 immediately visible (and hence directly visible) within its immediate
18435 scope except where hidden from direct visibility, as follows:
18436
18437 22
18438 * A declaration is hidden from direct visibility within the immediate
18439 scope of a homograph of the declaration, if the homograph occurs
18440 within an inner declarative region;
18441
18442 23
18443 * A declaration is also hidden from direct visibility where hidden
18444 from all visibility.
18445
18446 23.1/3
18447 An attribute_definition_clause or an aspect_specification is visible
18448 everywhere within its scope.
18449
18450 _Name Resolution Rules_
18451
18452 24
18453 A direct_name shall resolve to denote a directly visible declaration
18454 whose defining name is the same as the direct_name. A selector_name
18455 shall resolve to denote a visible declaration whose defining name is the
18456 same as the selector_name.
18457
18458 25
18459 These rules on visibility and direct visibility do not apply in a
18460 context_clause, a parent_unit_name, or a pragma that appears at the
18461 place of a compilation_unit. For those contexts, see the rules in *note
18462 10.1.6::, "*note 10.1.6:: Environment-Level Visibility Rules".
18463
18464 _Legality Rules_
18465
18466 26/2
18467 A nonoverridable declaration is illegal if there is a homograph
18468 occurring immediately within the same declarative region that is visible
18469 at the place of the declaration, and is not hidden from all visibility
18470 by the nonoverridable declaration. In addition, a type extension is
18471 illegal if somewhere within its immediate scope it has two visible
18472 components with the same name. Similarly, the context_clause for a
18473 compilation unit is illegal if it mentions (in a with_clause) some
18474 library unit, and there is a homograph of the library unit that is
18475 visible at the place of the compilation unit, and the homograph and the
18476 mentioned library unit are both declared immediately within the same
18477 declarative region. These rules also apply to dispatching operations
18478 declared in the visible part of an instance of a generic unit. However,
18479 they do not apply to other overloadable declarations in an instance;
18480 such declarations may have type conformant profiles in the instance, so
18481 long as the corresponding declarations in the generic were not type
18482 conformant.
18483
18484 NOTES
18485
18486 27
18487 5 Visibility for compilation units follows from the definition of
18488 the environment in *note 10.1.4::, except that it is necessary to
18489 apply a with_clause to obtain visibility to a
18490 library_unit_declaration or library_unit_renaming_declaration.
18491
18492 28
18493 6 In addition to the visibility rules given above, the meaning of
18494 the occurrence of a direct_name or selector_name at a given place
18495 in the text can depend on the overloading rules (see *note 8.6::).
18496
18497 29
18498 7 Not all contexts where an identifier, character_literal, or
18499 operator_symbol are allowed require visibility of a corresponding
18500 declaration. Contexts where visibility is not required are
18501 identified by using one of these three syntactic categories
18502 directly in a syntax rule, rather than using direct_name or
18503 selector_name.
18504
18505 * Menu:
18506
18507 * 8.3.1 :: Overriding Indicators
18508
18509 \1f
18510 File: arm2012.info, Node: 8.3.1, Up: 8.3
18511
18512 8.3.1 Overriding Indicators
18513 ---------------------------
18514
18515 1/2
18516 An overriding_indicator is used to declare that an operation is intended
18517 to override (or not override) an inherited operation.
18518
18519 _Syntax_
18520
18521 2/2
18522 overriding_indicator ::= [not] overriding
18523
18524 _Legality Rules_
18525
18526 3/3
18527 If an abstract_subprogram_declaration (*note 3.9.3: S0076.),
18528 null_procedure_declaration (*note 6.7: S0188.),
18529 expression_function_declaration (*note 6.8: S0189.), subprogram_body,
18530 subprogram_body_stub (*note 10.1.3: S0259.),
18531 subprogram_renaming_declaration (*note 8.5.4: S0203.),
18532 generic_instantiation (*note 12.3: S0275.) of a subprogram, or
18533 subprogram_declaration (*note 6.1: S0163.) other than a protected
18534 subprogram has an overriding_indicator (*note 8.3.1: S0195.), then:
18535
18536 4/2
18537 * the operation shall be a primitive operation for some type;
18538
18539 5/2
18540 * if the overriding_indicator is overriding, then the operation shall
18541 override a homograph at the place of the declaration or body;
18542
18543 6/2
18544 * if the overriding_indicator is not overriding, then the operation
18545 shall not override any homograph (at any place).
18546
18547 7/2
18548 In addition to the places where Legality Rules normally apply, these
18549 rules also apply in the private part of an instance of a generic unit.
18550
18551 NOTES
18552
18553 8/2
18554 8 Rules for overriding_indicators of task and protected entries
18555 and of protected subprograms are found in *note 9.5.2:: and *note
18556 9.4::, respectively.
18557
18558 _Examples_
18559
18560 9/2
18561 The use of overriding_indicators allows the detection of errors at
18562 compile-time that otherwise might not be detected at all. For instance,
18563 we might declare a security queue derived from the Queue interface of
18564 3.9.4 as:
18565
18566 10/2
18567 type Security_Queue is new Queue with record ...;
18568
18569 11/2
18570 overriding
18571 procedure Append(Q : in out Security_Queue; Person : in Person_Name);
18572
18573 12/2
18574 overriding
18575 procedure Remove_First(Q : in out Security_Queue; Person : in Person_Name);
18576
18577 13/2
18578 overriding
18579 function Cur_Count(Q : in Security_Queue) return Natural;
18580
18581 14/2
18582 overriding
18583 function Max_Count(Q : in Security_Queue) return Natural;
18584
18585 15/2
18586 not overriding
18587 procedure Arrest(Q : in out Security_Queue; Person : in Person_Name);
18588
18589 16/2
18590 The first four subprogram declarations guarantee that these subprograms
18591 will override the four subprograms inherited from the Queue interface.
18592 A misspelling in one of these subprograms will be detected by the
18593 implementation. Conversely, the declaration of Arrest guarantees that
18594 this is a new operation.
18595
18596 \1f
18597 File: arm2012.info, Node: 8.4, Next: 8.5, Prev: 8.3, Up: 8
18598
18599 8.4 Use Clauses
18600 ===============
18601
18602 1
18603 A use_package_clause achieves direct visibility of declarations that
18604 appear in the visible part of a package; a use_type_clause achieves
18605 direct visibility of the primitive operators of a type.
18606
18607 _Syntax_
18608
18609 2
18610 use_clause ::= use_package_clause | use_type_clause
18611
18612 3
18613 use_package_clause ::= use package_name {, package_name};
18614
18615 4/3
18616 use_type_clause ::= use [all] type subtype_mark {, subtype_mark};
18617
18618 _Legality Rules_
18619
18620 5/2
18621 A package_name of a use_package_clause shall denote a nonlimited view of
18622 a package.
18623
18624 _Static Semantics_
18625
18626 6
18627 For each use_clause, there is a certain region of text called the scope
18628 of the use_clause. For a use_clause within a context_clause of a
18629 library_unit_declaration or library_unit_renaming_declaration, the scope
18630 is the entire declarative region of the declaration. For a use_clause
18631 within a context_clause of a body, the scope is the entire body and any
18632 subunits (including multiply nested subunits). The scope does not
18633 include context_clauses themselves.
18634
18635 7
18636 For a use_clause immediately within a declarative region, the scope is
18637 the portion of the declarative region starting just after the use_clause
18638 and extending to the end of the declarative region. However, the scope
18639 of a use_clause in the private part of a library unit does not include
18640 the visible part of any public descendant of that library unit.
18641
18642 7.1/2
18643 A package is named in a use_package_clause if it is denoted by a
18644 package_name of that clause. A type is named in a use_type_clause if it
18645 is determined by a subtype_mark of that clause.
18646
18647 8/3
18648 For each package named in a use_package_clause whose scope encloses a
18649 place, each declaration that occurs immediately within the declarative
18650 region of the package is potentially use-visible at this place if the
18651 declaration is visible at this place. For each type T or T'Class named
18652 in a use_type_clause whose scope encloses a place, the declaration of
18653 each primitive operator of type T is potentially use-visible at this
18654 place if its declaration is visible at this place. If a use_type_clause
18655 whose scope encloses a place includes the reserved word all, then the
18656 following entities are also potentially use-visible at this place if the
18657 declaration of the entity is visible at this place:
18658
18659 8.1/3
18660 * Each primitive subprogram of T including each enumeration literal
18661 (if any);
18662
18663 8.2/3
18664 * Each subprogram that is declared immediately within the declarative
18665 region in which an ancestor type of T is declared and that operates
18666 on a class-wide type that covers T.
18667
18668 8.3/3
18669 Certain implicit declarations may become potentially use-visible in
18670 certain contexts as described in *note 12.6::.
18671
18672 9
18673 A declaration is use-visible if it is potentially use-visible, except in
18674 these naming-conflict cases:
18675
18676 10
18677 * A potentially use-visible declaration is not use-visible if the
18678 place considered is within the immediate scope of a homograph of
18679 the declaration.
18680
18681 11
18682 * Potentially use-visible declarations that have the same identifier
18683 are not use-visible unless each of them is an overloadable
18684 declaration.
18685
18686 _Dynamic Semantics_
18687
18688 12
18689 The elaboration of a use_clause has no effect.
18690
18691 _Examples_
18692
18693 13
18694 Example of a use clause in a context clause:
18695
18696 14
18697 with Ada.Calendar; use Ada;
18698
18699 15
18700 Example of a use type clause:
18701
18702 16
18703 use type Rational_Numbers.Rational; -- see *note 7.1::
18704 Two_Thirds: Rational_Numbers.Rational := 2/3;
18705
18706 \1f
18707 File: arm2012.info, Node: 8.5, Next: 8.6, Prev: 8.4, Up: 8
18708
18709 8.5 Renaming Declarations
18710 =========================
18711
18712 1
18713 A renaming_declaration declares another name for an entity, such as an
18714 object, exception, package, subprogram, entry, or generic unit.
18715 Alternatively, a subprogram_renaming_declaration can be the completion
18716 of a previous subprogram_declaration.
18717
18718 _Syntax_
18719
18720 2
18721 renaming_declaration ::=
18722 object_renaming_declaration
18723 | exception_renaming_declaration
18724 | package_renaming_declaration
18725 | subprogram_renaming_declaration
18726 | generic_renaming_declaration
18727
18728 _Dynamic Semantics_
18729
18730 3
18731 The elaboration of a renaming_declaration evaluates the name that
18732 follows the reserved word renames and thereby determines the view and
18733 entity denoted by this name (the renamed view and renamed entity). A
18734 name that denotes the renaming_declaration denotes (a new view of) the
18735 renamed entity.
18736
18737 NOTES
18738
18739 4
18740 9 Renaming may be used to resolve name conflicts and to act as a
18741 shorthand. Renaming with a different identifier or operator_symbol
18742 does not hide the old name; the new name and the old name need not
18743 be visible at the same places.
18744
18745 5
18746 10 A task or protected object that is declared by an explicit
18747 object_declaration can be renamed as an object. However, a single
18748 task or protected object cannot be renamed since the corresponding
18749 type is anonymous (meaning it has no nameable subtypes). For
18750 similar reasons, an object of an anonymous array or access type
18751 cannot be renamed.
18752
18753 6
18754 11 A subtype defined without any additional constraint can be used
18755 to achieve the effect of renaming another subtype (including a task
18756 or protected subtype) as in
18757
18758 7
18759 subtype Mode is Ada.Text_IO.File_Mode;
18760
18761 * Menu:
18762
18763 * 8.5.1 :: Object Renaming Declarations
18764 * 8.5.2 :: Exception Renaming Declarations
18765 * 8.5.3 :: Package Renaming Declarations
18766 * 8.5.4 :: Subprogram Renaming Declarations
18767 * 8.5.5 :: Generic Renaming Declarations
18768
18769 \1f
18770 File: arm2012.info, Node: 8.5.1, Next: 8.5.2, Up: 8.5
18771
18772 8.5.1 Object Renaming Declarations
18773 ----------------------------------
18774
18775 1
18776 An object_renaming_declaration is used to rename an object.
18777
18778 _Syntax_
18779
18780 2/3
18781 object_renaming_declaration ::=
18782 defining_identifier : [null_exclusion]
18783 subtype_mark renames object_name
18784 [aspect_specification];
18785 | defining_identifier : access_definition renames object_name
18786 [aspect_specification];
18787
18788 _Name Resolution Rules_
18789
18790 3/2
18791 The type of the object_name shall resolve to the type determined by the
18792 subtype_mark, or in the case where the type is defined by an
18793 access_definition, to an anonymous access type. If the anonymous access
18794 type is an access-to-object type, the type of the object_name shall have
18795 the same designated type as that of the access_definition. If the
18796 anonymous access type is an access-to-subprogram type, the type of the
18797 object_name shall have a designated profile that is type conformant with
18798 that of the access_definition.
18799
18800 _Legality Rules_
18801
18802 4
18803 The renamed entity shall be an object.
18804
18805 4.1/2
18806 In the case where the type is defined by an access_definition, the type
18807 of the renamed object and the type defined by the access_definition:
18808
18809 4.2/2
18810 * shall both be access-to-object types with statically matching
18811 designated subtypes and with both or neither being
18812 access-to-constant types; or
18813
18814 4.3/2
18815 * shall both be access-to-subprogram types with subtype conformant
18816 designated profiles.
18817
18818 4.4/2
18819 For an object_renaming_declaration with a null_exclusion or an
18820 access_definition that has a null_exclusion:
18821
18822 4.5/2
18823 * if the object_name denotes a generic formal object of a generic
18824 unit G, and the object_renaming_declaration occurs within the body
18825 of G or within the body of a generic unit declared within the
18826 declarative region of G, then the declaration of the formal object
18827 of G shall have a null_exclusion;
18828
18829 4.6/2
18830 * otherwise, the subtype of the object_name shall exclude null. In
18831 addition to the places where Legality Rules normally apply (see
18832 *note 12.3::), this rule applies also in the private part of an
18833 instance of a generic unit.
18834
18835 5/3
18836 The renamed entity shall not be a subcomponent that depends on
18837 discriminants of an object whose nominal subtype is unconstrained unless
18838 the object is known to be constrained. A slice of an array shall not be
18839 renamed if this restriction disallows renaming of the array. In
18840 addition to the places where Legality Rules normally apply, these rules
18841 apply also in the private part of an instance of a generic unit.
18842
18843 _Static Semantics_
18844
18845 6/2
18846 An object_renaming_declaration declares a new view of the renamed object
18847 whose properties are identical to those of the renamed view. Thus, the
18848 properties of the renamed object are not affected by the
18849 renaming_declaration. In particular, its value and whether or not it is
18850 a constant are unaffected; similarly, the null exclusion or constraints
18851 that apply to an object are not affected by renaming (any constraint
18852 implied by the subtype_mark or access_definition of the
18853 object_renaming_declaration is ignored).
18854
18855 _Examples_
18856
18857 7
18858 Example of renaming an object:
18859
18860 8
18861 declare
18862 L : Person renames Leftmost_Person; -- see *note 3.10.1::
18863 begin
18864 L.Age := L.Age + 1;
18865 end;
18866
18867 \1f
18868 File: arm2012.info, Node: 8.5.2, Next: 8.5.3, Prev: 8.5.1, Up: 8.5
18869
18870 8.5.2 Exception Renaming Declarations
18871 -------------------------------------
18872
18873 1
18874 An exception_renaming_declaration is used to rename an exception.
18875
18876 _Syntax_
18877
18878 2/3
18879 exception_renaming_declaration ::=
18880 defining_identifier : exception renames exception_name
18881 [aspect_specification];
18882
18883 _Legality Rules_
18884
18885 3
18886 The renamed entity shall be an exception.
18887
18888 _Static Semantics_
18889
18890 4
18891 An exception_renaming_declaration declares a new view of the renamed
18892 exception.
18893
18894 _Examples_
18895
18896 5
18897 Example of renaming an exception:
18898
18899 6
18900 EOF : exception renames Ada.IO_Exceptions.End_Error; -- see *note A.13::
18901
18902 \1f
18903 File: arm2012.info, Node: 8.5.3, Next: 8.5.4, Prev: 8.5.2, Up: 8.5
18904
18905 8.5.3 Package Renaming Declarations
18906 -----------------------------------
18907
18908 1
18909 A package_renaming_declaration is used to rename a package.
18910
18911 _Syntax_
18912
18913 2/3
18914 package_renaming_declaration ::= package
18915 defining_program_unit_name renames package_name
18916 [aspect_specification];
18917
18918 _Legality Rules_
18919
18920 3
18921 The renamed entity shall be a package.
18922
18923 3.1/2
18924 If the package_name of a package_renaming_declaration denotes a limited
18925 view of a package P, then a name that denotes the
18926 package_renaming_declaration shall occur only within the immediate scope
18927 of the renaming or the scope of a with_clause that mentions the package
18928 P or, if P is a nested package, the innermost library package enclosing
18929 P.
18930
18931 _Static Semantics_
18932
18933 4
18934 A package_renaming_declaration declares a new view of the renamed
18935 package.
18936
18937 4.1/2
18938 At places where the declaration of the limited view of the renamed
18939 package is visible, a name that denotes the package_renaming_declaration
18940 denotes a limited view of the package (see *note 10.1.1::).
18941
18942 _Examples_
18943
18944 5
18945 Example of renaming a package:
18946
18947 6
18948 package TM renames Table_Manager;
18949
18950 \1f
18951 File: arm2012.info, Node: 8.5.4, Next: 8.5.5, Prev: 8.5.3, Up: 8.5
18952
18953 8.5.4 Subprogram Renaming Declarations
18954 --------------------------------------
18955
18956 1/3
18957 A subprogram_renaming_declaration can serve as the completion of a
18958 subprogram_declaration; such a renaming_declaration is called a
18959 renaming-as-body. A subprogram_renaming_declaration that is not a
18960 completion is called a renaming-as-declaration, and is used to rename a
18961 subprogram (possibly an enumeration literal) or an entry.
18962
18963 _Syntax_
18964
18965 2/3
18966 subprogram_renaming_declaration ::=
18967 [overriding_indicator]
18968 subprogram_specification renames callable_entity_name
18969 [aspect_specification];
18970
18971 _Name Resolution Rules_
18972
18973 3
18974 The expected profile for the callable_entity_name is the profile given
18975 in the subprogram_specification.
18976
18977 _Legality Rules_
18978
18979 4/3
18980 The profile of a renaming-as-declaration shall be mode conformant, with
18981 that of the renamed callable entity.
18982
18983 4.1/2
18984 For a parameter or result subtype of the subprogram_specification that
18985 has an explicit null_exclusion:
18986
18987 4.2/2
18988 * if the callable_entity_name denotes a generic formal subprogram of
18989 a generic unit G, and the subprogram_renaming_declaration occurs
18990 within the body of a generic unit G or within the body of a generic
18991 unit declared within the declarative region of the generic unit G,
18992 then the corresponding parameter or result subtype of the formal
18993 subprogram of G shall have a null_exclusion;
18994
18995 4.3/2
18996 * otherwise, the subtype of the corresponding parameter or result
18997 type of the renamed callable entity shall exclude null. In
18998 addition to the places where Legality Rules normally apply (see
18999 *note 12.3::), this rule applies also in the private part of an
19000 instance of a generic unit.
19001
19002 5/3
19003 The profile of a renaming-as-body shall conform fully to that of the
19004 declaration it completes. If the renaming-as-body completes that
19005 declaration before the subprogram it declares is frozen, the profile
19006 shall be mode conformant with that of the renamed callable entity and
19007 the subprogram it declares takes its convention from the renamed
19008 subprogram; otherwise, the profile shall be subtype conformant with that
19009 of the renamed callable entity and the convention of the renamed
19010 subprogram shall not be Intrinsic. A renaming-as-body is illegal if the
19011 declaration occurs before the subprogram whose declaration it completes
19012 is frozen, and the renaming renames the subprogram itself, through one
19013 or more subprogram renaming declarations, none of whose subprograms has
19014 been frozen.
19015
19016 5.1/2
19017 The callable_entity_name of a renaming shall not denote a subprogram
19018 that requires overriding (see *note 3.9.3::).
19019
19020 5.2/2
19021 The callable_entity_name of a renaming-as-body shall not denote an
19022 abstract subprogram.
19023
19024 6
19025 A name that denotes a formal parameter of the subprogram_specification
19026 is not allowed within the callable_entity_name.
19027
19028 _Static Semantics_
19029
19030 7
19031 A renaming-as-declaration declares a new view of the renamed entity.
19032 The profile of this new view takes its subtypes, parameter modes, and
19033 calling convention from the original profile of the callable entity,
19034 while taking the formal parameter names and default_expressions from the
19035 profile given in the subprogram_renaming_declaration. The new view is a
19036 function or procedure, never an entry.
19037
19038 _Dynamic Semantics_
19039
19040 7.1/1
19041 For a call to a subprogram whose body is given as a renaming-as-body,
19042 the execution of the renaming-as-body is equivalent to the execution of
19043 a subprogram_body that simply calls the renamed subprogram with its
19044 formal parameters as the actual parameters and, if it is a function,
19045 returns the value of the call.
19046
19047 8/3
19048 For a call on a renaming of a dispatching subprogram that is overridden,
19049 if the overriding occurred before the renaming, then the body executed
19050 is that of the overriding declaration, even if the overriding
19051 declaration is not visible at the place of the renaming; otherwise, the
19052 inherited or predefined subprogram is called. A corresponding rule
19053 applies to a call on a renaming of a predefined equality operator for an
19054 untagged record type.
19055
19056 _Bounded (Run-Time) Errors_
19057
19058 8.1/1
19059 If a subprogram directly or indirectly renames itself, then it is a
19060 bounded error to call that subprogram. Possible consequences are that
19061 Program_Error or Storage_Error is raised, or that the call results in
19062 infinite recursion.
19063
19064 NOTES
19065
19066 9
19067 12 A procedure can only be renamed as a procedure. A function
19068 whose defining_designator is either an identifier or an
19069 operator_symbol can be renamed with either an identifier or an
19070 operator_symbol; for renaming as an operator, the subprogram
19071 specification given in the renaming_declaration is subject to the
19072 rules given in *note 6.6:: for operator declarations. Enumeration
19073 literals can be renamed as functions; similarly,
19074 attribute_references that denote functions (such as references to
19075 Succ and Pred) can be renamed as functions. An entry can only be
19076 renamed as a procedure; the new name is only allowed to appear in
19077 contexts that allow a procedure name. An entry of a family can be
19078 renamed, but an entry family cannot be renamed as a whole.
19079
19080 10
19081 13 The operators of the root numeric types cannot be renamed
19082 because the types in the profile are anonymous, so the
19083 corresponding specifications cannot be written; the same holds for
19084 certain attributes, such as Pos.
19085
19086 11
19087 14 Calls with the new name of a renamed entry are
19088 procedure_call_statements and are not allowed at places where the
19089 syntax requires an entry_call_statement in conditional_ and
19090 timed_entry_calls, nor in an asynchronous_select; similarly, the
19091 Count attribute is not available for the new name.
19092
19093 12
19094 15 The primitiveness of a renaming-as-declaration is determined by
19095 its profile, and by where it occurs, as for any declaration of (a
19096 view of) a subprogram; primitiveness is not determined by the
19097 renamed view. In order to perform a dispatching call, the
19098 subprogram name has to denote a primitive subprogram, not a
19099 nonprimitive renaming of a primitive subprogram.
19100
19101 _Examples_
19102
19103 13
19104 Examples of subprogram renaming declarations:
19105
19106 14
19107 procedure My_Write(C : in Character) renames Pool(K).Write; -- see *note 4.1.3::
19108
19109 15
19110 function Real_Plus(Left, Right : Real ) return Real renames "+";
19111 function Int_Plus (Left, Right : Integer) return Integer renames "+";
19112
19113 16
19114 function Rouge return Color renames Red; -- see *note 3.5.1::
19115 function Rot return Color renames Red;
19116 function Rosso return Color renames Rouge;
19117
19118 17
19119 function Next(X : Color) return Color renames Color'Succ; -- see *note 3.5.1::
19120
19121 18
19122 Example of a subprogram renaming declaration with new parameter names:
19123
19124 19
19125 function "*" (X,Y : Vector) return Real renames Dot_Product; -- see *note 6.1::
19126
19127 20
19128 Example of a subprogram renaming declaration with a new default
19129 expression:
19130
19131 21
19132 function Minimum(L : Link := Head) return Cell renames Min_Cell; -- see *note 6.1::
19133
19134 \1f
19135 File: arm2012.info, Node: 8.5.5, Prev: 8.5.4, Up: 8.5
19136
19137 8.5.5 Generic Renaming Declarations
19138 -----------------------------------
19139
19140 1
19141 A generic_renaming_declaration is used to rename a generic unit.
19142
19143 _Syntax_
19144
19145 2/3
19146 generic_renaming_declaration ::=
19147 generic package
19148 defining_program_unit_name renames generic_package_name
19149 [aspect_specification];
19150 | generic procedure
19151 defining_program_unit_name renames generic_procedure_name
19152 [aspect_specification];
19153 | generic function
19154 defining_program_unit_name renames generic_function_name
19155 [aspect_specification];
19156
19157 _Legality Rules_
19158
19159 3
19160 The renamed entity shall be a generic unit of the corresponding kind.
19161
19162 _Static Semantics_
19163
19164 4
19165 A generic_renaming_declaration declares a new view of the renamed
19166 generic unit.
19167
19168 NOTES
19169
19170 5
19171 16 Although the properties of the new view are the same as those
19172 of the renamed view, the place where the
19173 generic_renaming_declaration occurs may affect the legality of
19174 subsequent renamings and instantiations that denote the
19175 generic_renaming_declaration, in particular if the renamed generic
19176 unit is a library unit (see *note 10.1.1::).
19177
19178 _Examples_
19179
19180 6
19181 Example of renaming a generic unit:
19182
19183 7
19184 generic package Enum_IO renames Ada.Text_IO.Enumeration_IO; -- see *note A.10.10::
19185
19186 \1f
19187 File: arm2012.info, Node: 8.6, Prev: 8.5, Up: 8
19188
19189 8.6 The Context of Overload Resolution
19190 ======================================
19191
19192 1/3
19193 Because declarations can be overloaded, it is possible for an occurrence
19194 of a usage name to have more than one possible interpretation; in most
19195 cases, ambiguity is disallowed. This subclause describes how the
19196 possible interpretations resolve to the actual interpretation.
19197
19198 2
19199 Certain rules of the language (the Name Resolution Rules) are considered
19200 "overloading rules". If a possible interpretation violates an
19201 overloading rule, it is assumed not to be the intended interpretation;
19202 some other possible interpretation is assumed to be the actual
19203 interpretation. On the other hand, violations of nonoverloading rules
19204 do not affect which interpretation is chosen; instead, they cause the
19205 construct to be illegal. To be legal, there usually has to be exactly
19206 one acceptable interpretation of a construct that is a "complete
19207 context", not counting any nested complete contexts.
19208
19209 3
19210 The syntax rules of the language and the visibility rules given in *note
19211 8.3:: determine the possible interpretations. Most type checking rules
19212 (rules that require a particular type, or a particular class of types,
19213 for example) are overloading rules. Various rules for the matching of
19214 formal and actual parameters are overloading rules.
19215
19216 _Name Resolution Rules_
19217
19218 4
19219 Overload resolution is applied separately to each complete context, not
19220 counting inner complete contexts. Each of the following constructs is a
19221 complete context:
19222
19223 5
19224 * A context_item.
19225
19226 6
19227 * A declarative_item or declaration.
19228
19229 7
19230 * A statement.
19231
19232 8
19233 * A pragma_argument_association.
19234
19235 9
19236 * The expression of a case_statement.
19237
19238 10
19239 An (overall) interpretation of a complete context embodies its meaning,
19240 and includes the following information about the constituents of the
19241 complete context, not including constituents of inner complete contexts:
19242
19243 11
19244 * for each constituent of the complete context, to which syntactic
19245 categories it belongs, and by which syntax rules; and
19246
19247 12
19248 * for each usage name, which declaration it denotes (and, therefore,
19249 which view and which entity it denotes); and
19250
19251 13
19252 * for a complete context that is a declarative_item, whether or not
19253 it is a completion of a declaration, and (if so) which declaration
19254 it completes.
19255
19256 14
19257 A possible interpretation is one that obeys the syntax rules and the
19258 visibility rules. An acceptable interpretation is a possible
19259 interpretation that obeys the overloading rules, that is, those rules
19260 that specify an expected type or expected profile, or specify how a
19261 construct shall resolve or be interpreted.
19262
19263 15
19264 The interpretation of a constituent of a complete context is determined
19265 from the overall interpretation of the complete context as a whole.
19266 Thus, for example, "interpreted as a function_call," means that the
19267 construct's interpretation says that it belongs to the syntactic
19268 category function_call.
19269
19270 16
19271 Each occurrence of a usage name denotes the declaration determined by
19272 its interpretation. It also denotes the view declared by its denoted
19273 declaration, except in the following cases:
19274
19275 17/3
19276 * If a usage name appears within the declarative region of a
19277 type_declaration and denotes that same type_declaration, then it
19278 denotes the current instance of the type (rather than the type
19279 itself); the current instance of a type is the object or value of
19280 the type that is associated with the execution that evaluates the
19281 usage name. Similarly, if a usage name appears within the
19282 declarative region of a subtype_declaration and denotes that same
19283 subtype_declaration, then it denotes the current instance of the
19284 subtype. These rules do not apply if the usage name appears within
19285 the subtype_mark of an access_definition for an access-to-object
19286 type, or within the subtype of a parameter or result of an
19287 access-to-subprogram type.
19288
19289 18
19290 * If a usage name appears within the declarative region of a
19291 generic_declaration (but not within its generic_formal_part) and it
19292 denotes that same generic_declaration, then it denotes the current
19293 instance of the generic unit (rather than the generic unit itself).
19294 See also *note 12.3::.
19295
19296 19
19297 A usage name that denotes a view also denotes the entity of that view.
19298
19299 20/2
19300 The expected type for a given expression, name, or other construct
19301 determines, according to the type resolution rules given below, the
19302 types considered for the construct during overload resolution. The type
19303 resolution rules provide support for class-wide programming, universal
19304 literals, dispatching operations, and anonymous access types:
19305
19306 21
19307 * If a construct is expected to be of any type in a class of types,
19308 or of the universal or class-wide type for a class, then the type
19309 of the construct shall resolve to a type in that class or to a
19310 universal type that covers the class.
19311
19312 22
19313 * If the expected type for a construct is a specific type T, then the
19314 type of the construct shall resolve either to T, or:
19315
19316 23
19317 * to T'Class; or
19318
19319 24
19320 * to a universal type that covers T; or
19321
19322 25/2
19323 * when T is a specific anonymous access-to-object type (see
19324 *note 3.10::) with designated type D, to an
19325 access-to-object type whose designated type is D'Class or
19326 is covered by D; or
19327
19328 25.1/3
19329 * when T is a named general access-to-object type (see
19330 *note 3.10::) with designated type D, to an anonymous
19331 access-to-object type whose designated type covers or is
19332 covered by D; or
19333
19334 25.2/3
19335 * when T is an anonymous access-to-subprogram type (see
19336 *note 3.10::), to an access-to-subprogram type whose
19337 designated profile is type conformant with that of T.
19338
19339 26
19340 In certain contexts, such as in a subprogram_renaming_declaration, the
19341 Name Resolution Rules define an expected profile for a given name; in
19342 such cases, the name shall resolve to the name of a callable entity
19343 whose profile is type conformant with the expected profile.
19344
19345 _Legality Rules_
19346
19347 27/2
19348 When a construct is one that requires that its expected type be a single
19349 type in a given class, the type of the construct shall be determinable
19350 solely from the context in which the construct appears, excluding the
19351 construct itself, but using the requirement that it be in the given
19352 class. Furthermore, the context shall not be one that expects any type
19353 in some class that contains types of the given class; in particular, the
19354 construct shall not be the operand of a type_conversion.
19355
19356 27.1/3
19357 Other than for the simple_expression of a membership test, if the
19358 expected type for a name or expression is not the same as the actual
19359 type of the name or expression, the actual type shall be convertible to
19360 the expected type (see *note 4.6::); further, if the expected type is a
19361 named access-to-object type with designated type D1 and the actual type
19362 is an anonymous access-to-object type with designated type D2, then D1
19363 shall cover D2, and the name or expression shall denote a view with an
19364 accessibility level for which the statically deeper relationship
19365 applies; in particular it shall not denote an access parameter nor a
19366 stand-alone access object.
19367
19368 28
19369 A complete context shall have at least one acceptable interpretation; if
19370 there is exactly one, then that one is chosen.
19371
19372 29
19373 There is a preference for the primitive operators (and ranges) of the
19374 root numeric types root_integer and root_real. In particular, if two
19375 acceptable interpretations of a constituent of a complete context differ
19376 only in that one is for a primitive operator (or range) of the type
19377 root_integer or root_real, and the other is not, the interpretation
19378 using the primitive operator (or range) of the root numeric type is
19379 preferred.
19380
19381 29.1/3
19382 Similarly, there is a preference for the equality operators of the
19383 universal_access type (see *note 4.5.2::). If two acceptable
19384 interpretations of a constituent of a complete context differ only in
19385 that one is for an equality operator of the universal_access type, and
19386 the other is not, the interpretation using the equality operator of the
19387 universal_access type is preferred.
19388
19389 30
19390 For a complete context, if there is exactly one overall acceptable
19391 interpretation where each constituent's interpretation is the same as or
19392 preferred (in the above sense) over those in all other overall
19393 acceptable interpretations, then that one overall acceptable
19394 interpretation is chosen. Otherwise, the complete context is ambiguous.
19395
19396 31
19397 A complete context other than a pragma_argument_association shall not be
19398 ambiguous.
19399
19400 32
19401 A complete context that is a pragma_argument_association is allowed to
19402 be ambiguous (unless otherwise specified for the particular pragma), but
19403 only if every acceptable interpretation of the pragma argument is as a
19404 name that statically denotes a callable entity. Such a name denotes all
19405 of the declarations determined by its interpretations, and all of the
19406 views declared by these declarations.
19407
19408 NOTES
19409
19410 33
19411 17 If a usage name has only one acceptable interpretation, then it
19412 denotes the corresponding entity. However, this does not mean that
19413 the usage name is necessarily legal since other requirements exist
19414 which are not considered for overload resolution; for example, the
19415 fact that an expression is static, whether an object is constant,
19416 mode and subtype conformance rules, freezing rules, order of
19417 elaboration, and so on.
19418
19419 34
19420 Similarly, subtypes are not considered for overload resolution (the
19421 violation of a constraint does not make a program illegal but
19422 raises an exception during program execution).
19423
19424 \1f
19425 File: arm2012.info, Node: 9, Next: 10, Prev: 8, Up: Top
19426
19427 9 Tasks and Synchronization
19428 ***************************
19429
19430 1/3
19431 The execution of an Ada program consists of the execution of one or more
19432 tasks. Each task represents a separate thread of control that proceeds
19433 independently and concurrently between the points where it interacts
19434 with other tasks. The various forms of task interaction are described
19435 in this clause, and include:
19436
19437 2
19438 * the activation and termination of a task;
19439
19440 3
19441 * a call on a protected subprogram of a protected object, providing
19442 exclusive read-write access, or concurrent read-only access to
19443 shared data;
19444
19445 4
19446 * a call on an entry, either of another task, allowing for
19447 synchronous communication with that task, or of a protected object,
19448 allowing for asynchronous communication with one or more other
19449 tasks using that same protected object;
19450
19451 5
19452 * a timed operation, including a simple delay statement, a timed
19453 entry call or accept, or a timed asynchronous select statement (see
19454 next item);
19455
19456 6
19457 * an asynchronous transfer of control as part of an asynchronous
19458 select statement, where a task stops what it is doing and begins
19459 execution at a different point in response to the completion of an
19460 entry call or the expiration of a delay;
19461
19462 7
19463 * an abort statement, allowing one task to cause the termination of
19464 another task.
19465
19466 8
19467 In addition, tasks can communicate indirectly by reading and updating
19468 (unprotected) shared variables, presuming the access is properly
19469 synchronized through some other kind of task interaction.
19470
19471 _Static Semantics_
19472
19473 9
19474 The properties of a task are defined by a corresponding task declaration
19475 and task_body, which together define a program unit called a task unit.
19476
19477 _Dynamic Semantics_
19478
19479 10
19480 Over time, tasks proceed through various states. A task is initially
19481 inactive; upon activation, and prior to its termination it is either
19482 blocked (as part of some task interaction) or ready to run. While
19483 ready, a task competes for the available execution resources that it
19484 requires to run.
19485
19486 NOTES
19487
19488 11
19489 1 Concurrent task execution may be implemented on multicomputers,
19490 multiprocessors, or with interleaved execution on a single physical
19491 processor. On the other hand, whenever an implementation can
19492 determine that the required semantic effects can be achieved when
19493 parts of the execution of a given task are performed by different
19494 physical processors acting in parallel, it may choose to perform
19495 them in this way.
19496
19497 * Menu:
19498
19499 * 9.1 :: Task Units and Task Objects
19500 * 9.2 :: Task Execution - Task Activation
19501 * 9.3 :: Task Dependence - Termination of Tasks
19502 * 9.4 :: Protected Units and Protected Objects
19503 * 9.5 :: Intertask Communication
19504 * 9.6 :: Delay Statements, Duration, and Time
19505 * 9.7 :: Select Statements
19506 * 9.8 :: Abort of a Task - Abort of a Sequence of Statements
19507 * 9.9 :: Task and Entry Attributes
19508 * 9.10 :: Shared Variables
19509 * 9.11 :: Example of Tasking and Synchronization
19510
19511 \1f
19512 File: arm2012.info, Node: 9.1, Next: 9.2, Up: 9
19513
19514 9.1 Task Units and Task Objects
19515 ===============================
19516
19517 1
19518 A task unit is declared by a task declaration, which has a corresponding
19519 task_body. A task declaration may be a task_type_declaration, in which
19520 case it declares a named task type; alternatively, it may be a
19521 single_task_declaration, in which case it defines an anonymous task
19522 type, as well as declaring a named task object of that type.
19523
19524 _Syntax_
19525
19526 2/3
19527 task_type_declaration ::=
19528 task type defining_identifier [known_discriminant_part]
19529 [aspect_specification] [is
19530 [new interface_list with]
19531 task_definition];
19532
19533 3/3
19534 single_task_declaration ::=
19535 task defining_identifier
19536 [aspect_specification][is
19537 [new interface_list with]
19538 task_definition];
19539
19540 4
19541 task_definition ::=
19542 {task_item}
19543 [ private
19544 {task_item}]
19545 end [task_identifier]
19546
19547 5/1
19548 task_item ::= entry_declaration | aspect_clause
19549
19550 6/3
19551 task_body ::=
19552 task body defining_identifier
19553 [aspect_specification] is
19554 declarative_part
19555 begin
19556 handled_sequence_of_statements
19557 end [task_identifier];
19558
19559 7
19560 If a task_identifier appears at the end of a task_definition or
19561 task_body, it shall repeat the defining_identifier.
19562
19563 Paragraph 8 was deleted.
19564
19565 _Static Semantics_
19566
19567 9
19568 A task_definition defines a task type and its first subtype. The first
19569 list of task_items of a task_definition (*note 9.1: S0207.), together
19570 with the known_discriminant_part (*note 3.7: S0061.), if any, is called
19571 the visible part of the task unit. The optional list of task_items
19572 after the reserved word private is called the private part of the task
19573 unit.
19574
19575 9.1/1
19576 For a task declaration without a task_definition, a task_definition
19577 without task_items is assumed.
19578
19579 9.2/3
19580 For a task declaration with an interface_list, the task type inherits
19581 user-defined primitive subprograms from each progenitor type (see *note
19582 3.9.4::), in the same way that a derived type inherits user-defined
19583 primitive subprograms from its progenitor types (see *note 3.4::). If
19584 the first parameter of a primitive inherited subprogram is of the task
19585 type or an access parameter designating the task type, and there is an
19586 entry_declaration for a single entry with the same identifier within the
19587 task declaration, whose profile is type conformant with the prefixed
19588 view profile of the inherited subprogram, the inherited subprogram is
19589 said to be implemented by the conforming task entry using an implicitly
19590 declared nonabstract subprogram which has the same profile as the
19591 inherited subprogram and which overrides it.
19592
19593 _Legality Rules_
19594
19595 9.3/2
19596 A task declaration requires a completion, which shall be a task_body,
19597 and every task_body shall be the completion of some task declaration.
19598
19599 9.4/2
19600 Each interface_subtype_mark of an interface_list appearing within a task
19601 declaration shall denote a limited interface type that is not a
19602 protected interface.
19603
19604 9.5/3
19605 The prefixed view profile of an explicitly declared primitive subprogram
19606 of a tagged task type shall not be type conformant with any entry of the
19607 task type, if the subprogram has the same defining name as the entry and
19608 the first parameter of the subprogram is of the task type or is an
19609 access parameter designating the task type.
19610
19611 9.6/2
19612 For each primitive subprogram inherited by the type declared by a task
19613 declaration, at most one of the following shall apply:
19614
19615 9.7/2
19616 * the inherited subprogram is overridden with a primitive subprogram
19617 of the task type, in which case the overriding subprogram shall be
19618 subtype conformant with the inherited subprogram and not abstract;
19619 or
19620
19621 9.8/2
19622 * the inherited subprogram is implemented by a single entry of the
19623 task type; in which case its prefixed view profile shall be subtype
19624 conformant with that of the task entry.
19625
19626 9.9/2
19627 If neither applies, the inherited subprogram shall be a null procedure.
19628 In addition to the places where Legality Rules normally apply (see *note
19629 12.3::), these rules also apply in the private part of an instance of a
19630 generic unit.
19631
19632 _Dynamic Semantics_
19633
19634 10
19635 The elaboration of a task declaration elaborates the task_definition.
19636 The elaboration of a single_task_declaration (*note 9.1: S0206.) also
19637 creates an object of an (anonymous) task type.
19638
19639 11
19640 The elaboration of a task_definition creates the task type and its first
19641 subtype; it also includes the elaboration of the entry_declarations in
19642 the given order.
19643
19644 12/1
19645 As part of the initialization of a task object, any aspect_clauses and
19646 any per-object constraints associated with entry_declaration (*note
19647 9.5.2: S0218.)s of the corresponding task_definition (*note 9.1: S0207.)
19648 are elaborated in the given order.
19649
19650 13
19651 The elaboration of a task_body has no effect other than to establish
19652 that tasks of the type can from then on be activated without failing the
19653 Elaboration_Check.
19654
19655 14
19656 The execution of a task_body is invoked by the activation of a task of
19657 the corresponding type (see *note 9.2::).
19658
19659 15
19660 The content of a task object of a given task type includes:
19661
19662 16
19663 * The values of the discriminants of the task object, if any;
19664
19665 17
19666 * An entry queue for each entry of the task object;
19667
19668 18
19669 * A representation of the state of the associated task.
19670
19671 NOTES
19672
19673 19/2
19674 2 Other than in an access_definition, the name of a task unit
19675 within the declaration or body of the task unit denotes the current
19676 instance of the unit (see *note 8.6::), rather than the first
19677 subtype of the corresponding task type (and thus the name cannot be
19678 used as a subtype_mark).
19679
19680 20
19681 3 The notation of a selected_component can be used to denote a
19682 discriminant of a task (see *note 4.1.3::). Within a task unit,
19683 the name of a discriminant of the task type denotes the
19684 corresponding discriminant of the current instance of the unit.
19685
19686 21/2
19687 4 A task type is a limited type (see *note 7.5::), and hence
19688 precludes use of assignment_statements and predefined equality
19689 operators. If an application needs to store and exchange task
19690 identities, it can do so by defining an access type designating the
19691 corresponding task objects and by using access values for
19692 identification purposes. Assignment is available for such an
19693 access type as for any access type. Alternatively, if the
19694 implementation supports the Systems Programming Annex, the Identity
19695 attribute can be used for task identification (see *note C.7.1::).
19696
19697 _Examples_
19698
19699 22
19700 Examples of declarations of task types:
19701
19702 23
19703 task type Server is
19704 entry Next_Work_Item(WI : in Work_Item);
19705 entry Shut_Down;
19706 end Server;
19707
19708 24/2
19709 task type Keyboard_Driver(ID : Keyboard_ID := New_ID) is
19710 new Serial_Device with -- see *note 3.9.4::
19711 entry Read (C : out Character);
19712 entry Write(C : in Character);
19713 end Keyboard_Driver;
19714
19715 25
19716 Examples of declarations of single tasks:
19717
19718 26
19719 task Controller is
19720 entry Request(Level)(D : Item); -- a family of entries
19721 end Controller;
19722
19723 27
19724 task Parser is
19725 entry Next_Lexeme(L : in Lexical_Element);
19726 entry Next_Action(A : out Parser_Action);
19727 end;
19728
19729 28
19730 task User; -- has no entries
19731
19732 29
19733 Examples of task objects:
19734
19735 30
19736 Agent : Server;
19737 Teletype : Keyboard_Driver(TTY_ID);
19738 Pool : array(1 .. 10) of Keyboard_Driver;
19739
19740 31
19741 Example of access type designating task objects:
19742
19743 32
19744 type Keyboard is access Keyboard_Driver;
19745 Terminal : Keyboard := new Keyboard_Driver(Term_ID);
19746
19747 \1f
19748 File: arm2012.info, Node: 9.2, Next: 9.3, Prev: 9.1, Up: 9
19749
19750 9.2 Task Execution - Task Activation
19751 ====================================
19752
19753 _Dynamic Semantics_
19754
19755 1
19756 The execution of a task of a given task type consists of the execution
19757 of the corresponding task_body. The initial part of this execution is
19758 called the activation of the task; it consists of the elaboration of the
19759 declarative_part of the task_body. Should an exception be propagated by
19760 the elaboration of its declarative_part, the activation of the task is
19761 defined to have failed, and it becomes a completed task.
19762
19763 2/2
19764 A task object (which represents one task) can be a part of a stand-alone
19765 object, of an object created by an allocator, or of an anonymous object
19766 of a limited type, or a coextension of one of these. All tasks that are
19767 part or coextensions of any of the stand-alone objects created by the
19768 elaboration of object_declaration (*note 3.3.1: S0032.)s (or
19769 generic_associations of formal objects of mode in) of a single
19770 declarative region are activated together. All tasks that are part or
19771 coextensions of a single object that is not a stand-alone object are
19772 activated together.
19773
19774 3/2
19775 For the tasks of a given declarative region, the activations are
19776 initiated within the context of the handled_sequence_of_statements
19777 (*note 11.2: S0265.) (and its associated exception_handler (*note 11.2:
19778 S0266.)s if any -- see *note 11.2::), just prior to executing the
19779 statements of the handled_sequence_of_statements. For a package without
19780 an explicit body or an explicit handled_sequence_of_statements (*note
19781 11.2: S0265.), an implicit body or an implicit null_statement (*note
19782 5.1: S0149.) is assumed, as defined in *note 7.2::.
19783
19784 4/2
19785 For tasks that are part or coextensions of a single object that is not a
19786 stand-alone object, activations are initiated after completing any
19787 initialization of the outermost object enclosing these tasks, prior to
19788 performing any other operation on the outermost object. In particular,
19789 for tasks that are part or coextensions of the object created by the
19790 evaluation of an allocator, the activations are initiated as the last
19791 step of evaluating the allocator, prior to returning the new access
19792 value. For tasks that are part or coextensions of an object that is the
19793 result of a function call, the activations are not initiated until after
19794 the function returns.
19795
19796 5
19797 The task that created the new tasks and initiated their activations (the
19798 activator) is blocked until all of these activations complete
19799 (successfully or not). Once all of these activations are complete, if
19800 the activation of any of the tasks has failed (due to the propagation of
19801 an exception), Tasking_Error is raised in the activator, at the place at
19802 which it initiated the activations. Otherwise, the activator proceeds
19803 with its execution normally. Any tasks that are aborted prior to
19804 completing their activation are ignored when determining whether to
19805 raise Tasking_Error.
19806
19807 6/3
19808 If the master that directly encloses the point where the activation of a
19809 task T would be initiated, completes before the activation of T is
19810 initiated, T becomes terminated and is never activated. Furthermore, if
19811 a return statement is left such that the return object is not returned
19812 to the caller, any task that was created as a part of the return object
19813 or one of its coextensions immediately becomes terminated and is never
19814 activated.
19815
19816 NOTES
19817
19818 7
19819 5 An entry of a task can be called before the task has been
19820 activated.
19821
19822 8
19823 6 If several tasks are activated together, the execution of any of
19824 these tasks need not await the end of the activation of the other
19825 tasks.
19826
19827 9
19828 7 A task can become completed during its activation either because
19829 of an exception or because it is aborted (see *note 9.8::).
19830
19831 _Examples_
19832
19833 10
19834 Example of task activation:
19835
19836 11
19837 procedure P is
19838 A, B : Server; -- elaborate the task objects A, B
19839 C : Server; -- elaborate the task object C
19840 begin
19841 -- the tasks A, B, C are activated together before the first statement
19842 ...
19843 end;
19844
19845 \1f
19846 File: arm2012.info, Node: 9.3, Next: 9.4, Prev: 9.2, Up: 9
19847
19848 9.3 Task Dependence - Termination of Tasks
19849 ==========================================
19850
19851 _Dynamic Semantics_
19852
19853 1
19854 Each task (other than an environment task -- see *note 10.2::) depends
19855 on one or more masters (see *note 7.6.1::), as follows:
19856
19857 2
19858 * If the task is created by the evaluation of an allocator for a
19859 given access type, it depends on each master that includes the
19860 elaboration of the declaration of the ultimate ancestor of the
19861 given access type.
19862
19863 3
19864 * If the task is created by the elaboration of an object_declaration,
19865 it depends on each master that includes this elaboration.
19866
19867 3.1/2
19868 * Otherwise, the task depends on the master of the outermost object
19869 of which it is a part (as determined by the accessibility level of
19870 that object -- see *note 3.10.2:: and *note 7.6.1::), as well as on
19871 any master whose execution includes that of the master of the
19872 outermost object.
19873
19874 4
19875 Furthermore, if a task depends on a given master, it is defined to
19876 depend on the task that executes the master, and (recursively) on any
19877 master of that task.
19878
19879 5
19880 A task is said to be completed when the execution of its corresponding
19881 task_body is completed. A task is said to be terminated when any
19882 finalization of the task_body has been performed (see *note 7.6.1::).
19883 The first step of finalizing a master (including a task_body) is to wait
19884 for the termination of any tasks dependent on the master. The task
19885 executing the master is blocked until all the dependents have
19886 terminated. Any remaining finalization is then performed and the master
19887 is left.
19888
19889 6/1
19890 Completion of a task (and the corresponding task_body) can occur when
19891 the task is blocked at a select_statement (*note 9.7: S0230.) with an
19892 open terminate_alternative (see *note 9.7.1::); the open
19893 terminate_alternative is selected if and only if the following
19894 conditions are satisfied:
19895
19896 7/2
19897 * The task depends on some completed master; and
19898
19899 8
19900 * Each task that depends on the master considered is either already
19901 terminated or similarly blocked at a select_statement with an open
19902 terminate_alternative.
19903
19904 9
19905 When both conditions are satisfied, the task considered becomes
19906 completed, together with all tasks that depend on the master considered
19907 that are not yet completed.
19908
19909 NOTES
19910
19911 10
19912 8 The full view of a limited private type can be a task type, or
19913 can have subcomponents of a task type. Creation of an object of
19914 such a type creates dependences according to the full type.
19915
19916 11
19917 9 An object_renaming_declaration defines a new view of an existing
19918 entity and hence creates no further dependence.
19919
19920 12
19921 10 The rules given for the collective completion of a group of
19922 tasks all blocked on select_statements with open
19923 terminate_alternatives ensure that the collective completion can
19924 occur only when there are no remaining active tasks that could call
19925 one of the tasks being collectively completed.
19926
19927 13
19928 11 If two or more tasks are blocked on select_statements with open
19929 terminate_alternatives, and become completed collectively, their
19930 finalization actions proceed concurrently.
19931
19932 14
19933 12 The completion of a task can occur due to any of the following:
19934
19935 15
19936 * the raising of an exception during the elaboration of the
19937 declarative_part of the corresponding task_body;
19938
19939 16
19940 * the completion of the handled_sequence_of_statements of the
19941 corresponding task_body;
19942
19943 17
19944 * the selection of an open terminate_alternative of a
19945 select_statement in the corresponding task_body;
19946
19947 18
19948 * the abort of the task.
19949
19950 _Examples_
19951
19952 19
19953 Example of task dependence:
19954
19955 20
19956 declare
19957 type Global is access Server; -- see *note 9.1::
19958 A, B : Server;
19959 G : Global;
19960 begin
19961 -- activation of A and B
19962 declare
19963 type Local is access Server;
19964 X : Global := new Server; -- activation of X.all
19965 L : Local := new Server; -- activation of L.all
19966 C : Server;
19967 begin
19968 -- activation of C
19969 G := X; -- both G and X designate the same task object
19970 ...
19971 end; -- await termination of C and L.all (but not X.all)
19972 ...
19973 end; -- await termination of A, B, and G.all
19974
19975 \1f
19976 File: arm2012.info, Node: 9.4, Next: 9.5, Prev: 9.3, Up: 9
19977
19978 9.4 Protected Units and Protected Objects
19979 =========================================
19980
19981 1
19982 A protected object provides coordinated access to shared data, through
19983 calls on its visible protected operations, which can be protected
19984 subprograms or protected entries. A protected unit is declared by a
19985 protected declaration, which has a corresponding protected_body. A
19986 protected declaration may be a protected_type_declaration, in which case
19987 it declares a named protected type; alternatively, it may be a
19988 single_protected_declaration, in which case it defines an anonymous
19989 protected type, as well as declaring a named protected object of that
19990 type.
19991
19992 _Syntax_
19993
19994 2/3
19995 protected_type_declaration ::=
19996 protected type defining_identifier [known_discriminant_part]
19997 [aspect_specification] is
19998 [new interface_list with]
19999 protected_definition;
20000
20001 3/3
20002 single_protected_declaration ::=
20003 protected defining_identifier
20004 [aspect_specification] is
20005 [new interface_list with]
20006 protected_definition;
20007
20008 4
20009 protected_definition ::=
20010 { protected_operation_declaration }
20011 [ private
20012 { protected_element_declaration } ]
20013 end [protected_identifier]
20014
20015 5/1
20016 protected_operation_declaration ::= subprogram_declaration
20017 | entry_declaration
20018 | aspect_clause
20019
20020 6
20021 protected_element_declaration ::= protected_operation_declaration
20022 | component_declaration
20023
20024 7/3
20025 protected_body ::=
20026 protected body defining_identifier
20027 [aspect_specification] is
20028 { protected_operation_item }
20029 end [protected_identifier];
20030
20031 8/1
20032 protected_operation_item ::= subprogram_declaration
20033 | subprogram_body
20034 | entry_body
20035 | aspect_clause
20036
20037 9
20038 If a protected_identifier appears at the end of a
20039 protected_definition or protected_body, it shall repeat the
20040 defining_identifier.
20041
20042 Paragraph 10 was deleted.
20043
20044 _Static Semantics_
20045
20046 11/2
20047 A protected_definition defines a protected type and its first subtype.
20048 The list of protected_operation_declaration (*note 9.4: S0213.)s of a
20049 protected_definition (*note 9.4: S0212.), together with the
20050 known_discriminant_part (*note 3.7: S0061.), if any, is called the
20051 visible part of the protected unit. The optional list of
20052 protected_element_declaration (*note 9.4: S0214.)s after the reserved
20053 word private is called the private part of the protected unit.
20054
20055 11.1/3
20056 For a protected declaration with an interface_list, the protected type
20057 inherits user-defined primitive subprograms from each progenitor type
20058 (see *note 3.9.4::), in the same way that a derived type inherits
20059 user-defined primitive subprograms from its progenitor types (see *note
20060 3.4::). If the first parameter of a primitive inherited subprogram is
20061 of the protected type or an access parameter designating the protected
20062 type, and there is a protected_operation_declaration for a protected
20063 subprogram or single entry with the same identifier within the protected
20064 declaration, whose profile is type conformant with the prefixed view
20065 profile of the inherited subprogram, the inherited subprogram is said to
20066 be implemented by the conforming protected subprogram or entry using an
20067 implicitly declared nonabstract subprogram which has the same profile as
20068 the inherited subprogram and which overrides it.
20069
20070 _Legality Rules_
20071
20072 11.2/2
20073 A protected declaration requires a completion, which shall be a
20074 protected_body (*note 9.4: S0215.), and every protected_body (*note 9.4:
20075 S0215.) shall be the completion of some protected declaration.
20076
20077 11.3/2
20078 Each interface_subtype_mark of an interface_list appearing within a
20079 protected declaration shall denote a limited interface type that is not
20080 a task interface.
20081
20082 11.4/3
20083 The prefixed view profile of an explicitly declared primitive subprogram
20084 of a tagged protected type shall not be type conformant with any
20085 protected operation of the protected type, if the subprogram has the
20086 same defining name as the protected operation and the first parameter of
20087 the subprogram is of the protected type or is an access parameter
20088 designating the protected type.
20089
20090 11.5/2
20091 For each primitive subprogram inherited by the type declared by a
20092 protected declaration, at most one of the following shall apply:
20093
20094 11.6/2
20095 * the inherited subprogram is overridden with a primitive subprogram
20096 of the protected type, in which case the overriding subprogram
20097 shall be subtype conformant with the inherited subprogram and not
20098 abstract; or
20099
20100 11.7/2
20101 * the inherited subprogram is implemented by a protected subprogram
20102 or single entry of the protected type, in which case its prefixed
20103 view profile shall be subtype conformant with that of the protected
20104 subprogram or entry.
20105
20106 11.8/2
20107 If neither applies, the inherited subprogram shall be a null procedure.
20108 In addition to the places where Legality Rules normally apply (see *note
20109 12.3::), these rules also apply in the private part of an instance of a
20110 generic unit.
20111
20112 11.9/3
20113 If an inherited subprogram is implemented by a protected procedure or an
20114 entry, then the first parameter of the inherited subprogram shall be of
20115 mode out or in out, or an access-to-variable parameter. If an inherited
20116 subprogram is implemented by a protected function, then the first
20117 parameter of the inherited subprogram shall be of mode in, but not an
20118 access-to-variable parameter.
20119
20120 11.10/2
20121 If a protected subprogram declaration has an overriding_indicator, then
20122 at the point of the declaration:
20123
20124 11.11/2
20125 * if the overriding_indicator is overriding, then the subprogram
20126 shall implement an inherited subprogram;
20127
20128 11.12/2
20129 * if the overriding_indicator is not overriding, then the subprogram
20130 shall not implement any inherited subprogram.
20131
20132 11.13/2
20133 In addition to the places where Legality Rules normally apply (see *note
20134 12.3::), these rules also apply in the private part of an instance of a
20135 generic unit.
20136
20137 _Dynamic Semantics_
20138
20139 12
20140 The elaboration of a protected declaration elaborates the
20141 protected_definition. The elaboration of a single_protected_declaration
20142 (*note 9.4: S0211.) also creates an object of an (anonymous) protected
20143 type.
20144
20145 13
20146 The elaboration of a protected_definition creates the protected type and
20147 its first subtype; it also includes the elaboration of the
20148 component_declarations and protected_operation_declarations in the given
20149 order.
20150
20151 14
20152 As part of the initialization of a protected object, any per-object
20153 constraints (see *note 3.8::) are elaborated.
20154
20155 15
20156 The elaboration of a protected_body has no other effect than to
20157 establish that protected operations of the type can from then on be
20158 called without failing the Elaboration_Check.
20159
20160 16
20161 The content of an object of a given protected type includes:
20162
20163 17
20164 * The values of the components of the protected object, including
20165 (implicitly) an entry queue for each entry declared for the
20166 protected object;
20167
20168 18
20169 * A representation of the state of the execution resource associated
20170 with the protected object (one such resource is associated with
20171 each protected object).
20172
20173 19
20174 The execution resource associated with a protected object has to be
20175 acquired to read or update any components of the protected object; it
20176 can be acquired (as part of a protected action -- see *note 9.5.1::)
20177 either for concurrent read-only access, or for exclusive read-write
20178 access.
20179
20180 20
20181 As the first step of the finalization of a protected object, each call
20182 remaining on any entry queue of the object is removed from its queue and
20183 Program_Error is raised at the place of the corresponding
20184 entry_call_statement (*note 9.5.3: S0225.).
20185
20186 _Bounded (Run-Time) Errors_
20187
20188 20.1/2
20189 It is a bounded error to call an entry or subprogram of a protected
20190 object after that object is finalized. If the error is detected,
20191 Program_Error is raised. Otherwise, the call proceeds normally, which
20192 may leave a task queued forever.
20193
20194 NOTES
20195
20196 21/2
20197 13 Within the declaration or body of a protected unit other than
20198 in an access_definition, the name of the protected unit denotes the
20199 current instance of the unit (see *note 8.6::), rather than the
20200 first subtype of the corresponding protected type (and thus the
20201 name cannot be used as a subtype_mark).
20202
20203 22
20204 14 A selected_component can be used to denote a discriminant of a
20205 protected object (see *note 4.1.3::). Within a protected unit, the
20206 name of a discriminant of the protected type denotes the
20207 corresponding discriminant of the current instance of the unit.
20208
20209 23/2
20210 15 A protected type is a limited type (see *note 7.5::), and hence
20211 precludes use of assignment_statements and predefined equality
20212 operators.
20213
20214 24
20215 16 The bodies of the protected operations given in the
20216 protected_body define the actions that take place upon calls to the
20217 protected operations.
20218
20219 25
20220 17 The declarations in the private part are only visible within
20221 the private part and the body of the protected unit.
20222
20223 _Examples_
20224
20225 26
20226 Example of declaration of protected type and corresponding body:
20227
20228 27
20229 protected type Resource is
20230 entry Seize;
20231 procedure Release;
20232 private
20233 Busy : Boolean := False;
20234 end Resource;
20235
20236 28
20237 protected body Resource is
20238 entry Seize when not Busy is
20239 begin
20240 Busy := True;
20241 end Seize;
20242
20243 29
20244 procedure Release is
20245 begin
20246 Busy := False;
20247 end Release;
20248 end Resource;
20249
20250 30
20251 Example of a single protected declaration and corresponding body:
20252
20253 31
20254 protected Shared_Array is
20255 -- Index, Item, and Item_Array are global types
20256 function Component (N : in Index) return Item;
20257 procedure Set_Component(N : in Index; E : in Item);
20258 private
20259 Table : Item_Array(Index) := (others => Null_Item);
20260 end Shared_Array;
20261
20262 32
20263 protected body Shared_Array is
20264 function Component(N : in Index) return Item is
20265 begin
20266 return Table(N);
20267 end Component;
20268
20269 33
20270 procedure Set_Component(N : in Index; E : in Item) is
20271 begin
20272 Table(N) := E;
20273 end Set_Component;
20274 end Shared_Array;
20275
20276 34
20277 Examples of protected objects:
20278
20279 35
20280 Control : Resource;
20281 Flags : array(1 .. 100) of Resource;
20282
20283 \1f
20284 File: arm2012.info, Node: 9.5, Next: 9.6, Prev: 9.4, Up: 9
20285
20286 9.5 Intertask Communication
20287 ===========================
20288
20289 1
20290 The primary means for intertask communication is provided by calls on
20291 entries and protected subprograms. Calls on protected subprograms allow
20292 coordinated access to shared data objects. Entry calls allow for
20293 blocking the caller until a given condition is satisfied (namely, that
20294 the corresponding entry is open -- see *note 9.5.3::), and then
20295 communicating data or control information directly with another task or
20296 indirectly via a shared protected object.
20297
20298 _Static Semantics_
20299
20300 2/3
20301 When a name or prefix denotes an entry, protected subprogram, or a
20302 prefixed view of a primitive subprogram of a limited interface whose
20303 first parameter is a controlling parameter, the name or prefix
20304 determines a target object, as follows:
20305
20306 3/3
20307 * If it is a direct_name or expanded name that denotes the
20308 declaration (or body) of the operation, then the target object is
20309 implicitly specified to be the current instance of the task or
20310 protected unit immediately enclosing the operation; a call using
20311 such a name is defined to be an internal call;
20312
20313 4/3
20314 * If it is a selected_component that is not an expanded name, then
20315 the target object is explicitly specified to be the object denoted
20316 by the prefix of the name; a call using such a name is defined to
20317 be an external call;
20318
20319 5/3
20320 * If the name or prefix is a dereference (implicit or explicit) of an
20321 access-to-protected-subprogram value, then the target object is
20322 determined by the prefix of the Access attribute_reference that
20323 produced the access value originally; a call using such a name is
20324 defined to be an external call;
20325
20326 6
20327 * If the name or prefix denotes a subprogram_renaming_declaration,
20328 then the target object is as determined by the name of the renamed
20329 entity.
20330
20331 6.1/3
20332 A call on an entry or a protected subprogram either uses a name or
20333 prefix that determines a target object implicitly, as above, or is a
20334 call on (a non-prefixed view of) a primitive subprogram of a limited
20335 interface whose first parameter is a controlling parameter, in which
20336 case the target object is identified explicitly by the first parameter.
20337 This latter case is an external call.
20338
20339 7
20340 A corresponding definition of target object applies to a
20341 requeue_statement (see *note 9.5.4::), with a corresponding distinction
20342 between an internal requeue and an external requeue.
20343
20344 _Legality Rules_
20345
20346 7.1/3
20347 If a name or prefix determines a target object, and the name denotes a
20348 protected entry or procedure, then the target object shall be a
20349 variable, unless the prefix is for an attribute_reference to the Count
20350 attribute (see *note 9.9::).
20351
20352 _Dynamic Semantics_
20353
20354 8
20355 Within the body of a protected operation, the current instance (see
20356 *note 8.6::) of the immediately enclosing protected unit is determined
20357 by the target object specified (implicitly or explicitly) in the call
20358 (or requeue) on the protected operation.
20359
20360 9
20361 Any call on a protected procedure or entry of a target protected object
20362 is defined to be an update to the object, as is a requeue on such an
20363 entry.
20364
20365 _Syntax_
20366
20367 10/3
20368 synchronization_kind ::=
20369 By_Entry | By_Protected_Procedure | Optional
20370
20371 _Static Semantics_
20372
20373 11/3
20374 For the declaration of a primitive procedure of a synchronized tagged
20375 type the following language-defined representation aspect may be
20376 specified with an aspect_specification (see *note 13.1.1::):
20377
20378 12/3
20379 Synchronization
20380 If specified, the aspect definition shall be a
20381 synchronization_kind.
20382
20383 13/3
20384 Inherited subprograms inherit the Synchronization aspect, if any, from
20385 the corresponding subprogram of the parent or progenitor type. If an
20386 overriding operation does not have a directly specified Synchronization
20387 aspect then the Synchronization aspect of the inherited operation is
20388 inherited by the overriding operation.
20389
20390 _Legality Rules_
20391
20392 14/3
20393 The synchronization_kind By_Protected_Procedure shall not be applied to
20394 a primitive procedure of a task interface.
20395
20396 15/3
20397 A procedure for which the specified synchronization_kind is By_Entry
20398 shall be implemented by an entry. A procedure for which the specified
20399 synchronization_kind is By_Protected_Procedure shall be implemented by a
20400 protected procedure. A procedure for which the specified
20401 synchronization_kind is Optional may be implemented by an entry or by a
20402 procedure (including a protected procedure).
20403
20404 16/3
20405 If a primitive procedure overrides an inherited operation for which the
20406 Synchronization aspect has been specified to be By_Entry or
20407 By_Protected_Procedure, then any specification of the aspect
20408 Synchronization applied to the overriding operation shall have the same
20409 synchronization_kind.
20410
20411 17/3
20412 In addition to the places where Legality Rules normally apply (see *note
20413 12.3::), these rules also apply in the private part of an instance of a
20414 generic unit.
20415
20416 NOTES
20417
20418 18/3
20419 18 The synchronization_kind By_Protected_Procedure implies that
20420 the operation will not block.
20421
20422 * Menu:
20423
20424 * 9.5.1 :: Protected Subprograms and Protected Actions
20425 * 9.5.2 :: Entries and Accept Statements
20426 * 9.5.3 :: Entry Calls
20427 * 9.5.4 :: Requeue Statements
20428
20429 \1f
20430 File: arm2012.info, Node: 9.5.1, Next: 9.5.2, Up: 9.5
20431
20432 9.5.1 Protected Subprograms and Protected Actions
20433 -------------------------------------------------
20434
20435 1
20436 A protected subprogram is a subprogram declared immediately within a
20437 protected_definition. Protected procedures provide exclusive read-write
20438 access to the data of a protected object; protected functions provide
20439 concurrent read-only access to the data.
20440
20441 _Static Semantics_
20442
20443 2
20444 Within the body of a protected function (or a function declared
20445 immediately within a protected_body), the current instance of the
20446 enclosing protected unit is defined to be a constant (that is, its
20447 subcomponents may be read but not updated). Within the body of a
20448 protected procedure (or a procedure declared immediately within a
20449 protected_body), and within an entry_body, the current instance is
20450 defined to be a variable (updating is permitted).
20451
20452 _Dynamic Semantics_
20453
20454 3
20455 For the execution of a call on a protected subprogram, the evaluation of
20456 the name or prefix and of the parameter associations, and any assigning
20457 back of in out or out parameters, proceeds as for a normal subprogram
20458 call (see *note 6.4::). If the call is an internal call (see *note
20459 9.5::), the body of the subprogram is executed as for a normal
20460 subprogram call. If the call is an external call, then the body of the
20461 subprogram is executed as part of a new protected action on the target
20462 protected object; the protected action completes after the body of the
20463 subprogram is executed. A protected action can also be started by an
20464 entry call (see *note 9.5.3::).
20465
20466 4
20467 A new protected action is not started on a protected object while
20468 another protected action on the same protected object is underway,
20469 unless both actions are the result of a call on a protected function.
20470 This rule is expressible in terms of the execution resource associated
20471 with the protected object:
20472
20473 5
20474 * Starting a protected action on a protected object corresponds to
20475 acquiring the execution resource associated with the protected
20476 object, either for concurrent read-only access if the protected
20477 action is for a call on a protected function, or for exclusive
20478 read-write access otherwise;
20479
20480 6
20481 * Completing the protected action corresponds to releasing the
20482 associated execution resource.
20483
20484 7
20485 After performing an operation on a protected object other than a call on
20486 a protected function, but prior to completing the associated protected
20487 action, the entry queues (if any) of the protected object are serviced
20488 (see *note 9.5.3::).
20489
20490 _Bounded (Run-Time) Errors_
20491
20492 8
20493 During a protected action, it is a bounded error to invoke an operation
20494 that is potentially blocking. The following are defined to be
20495 potentially blocking operations:
20496
20497 9
20498 * a select_statement;
20499
20500 10
20501 * an accept_statement;
20502
20503 11
20504 * an entry_call_statement;
20505
20506 12
20507 * a delay_statement;
20508
20509 13
20510 * an abort_statement;
20511
20512 14
20513 * task creation or activation;
20514
20515 15
20516 * an external call on a protected subprogram (or an external requeue)
20517 with the same target object as that of the protected action;
20518
20519 16
20520 * a call on a subprogram whose body contains a potentially blocking
20521 operation.
20522
20523 17
20524 If the bounded error is detected, Program_Error is raised. If not
20525 detected, the bounded error might result in deadlock or a (nested)
20526 protected action on the same target object.
20527
20528 18
20529 Certain language-defined subprograms are potentially blocking. In
20530 particular, the subprograms of the language-defined input-output
20531 packages that manipulate files (implicitly or explicitly) are
20532 potentially blocking. Other potentially blocking subprograms are
20533 identified where they are defined. When not specified as potentially
20534 blocking, a language-defined subprogram is nonblocking.
20535
20536 NOTES
20537
20538 19
20539 19 If two tasks both try to start a protected action on a
20540 protected object, and at most one is calling a protected function,
20541 then only one of the tasks can proceed. Although the other task
20542 cannot proceed, it is not considered blocked, and it might be
20543 consuming processing resources while it awaits its turn. There is
20544 no language-defined ordering or queuing presumed for tasks
20545 competing to start a protected action -- on a multiprocessor such
20546 tasks might use busy-waiting; for monoprocessor considerations, see
20547 *note D.3::, "*note D.3:: Priority Ceiling Locking".
20548
20549 20
20550 20 The body of a protected unit may contain declarations and
20551 bodies for local subprograms. These are not visible outside the
20552 protected unit.
20553
20554 21
20555 21 The body of a protected function can contain internal calls on
20556 other protected functions, but not protected procedures, because
20557 the current instance is a constant. On the other hand, the body of
20558 a protected procedure can contain internal calls on both protected
20559 functions and procedures.
20560
20561 22
20562 22 From within a protected action, an internal call on a protected
20563 subprogram, or an external call on a protected subprogram with a
20564 different target object is not considered a potentially blocking
20565 operation.
20566
20567 22.1/2
20568 23 The pragma Detect_Blocking may be used to ensure that all
20569 executions of potentially blocking operations during a protected
20570 action raise Program_Error. See *note H.5::.
20571
20572 _Examples_
20573
20574 23
20575 Examples of protected subprogram calls (see *note 9.4::):
20576
20577 24
20578 Shared_Array.Set_Component(N, E);
20579 E := Shared_Array.Component(M);
20580 Control.Release;
20581
20582 \1f
20583 File: arm2012.info, Node: 9.5.2, Next: 9.5.3, Prev: 9.5.1, Up: 9.5
20584
20585 9.5.2 Entries and Accept Statements
20586 -----------------------------------
20587
20588 1
20589 Entry_declarations, with the corresponding entry_bodies or
20590 accept_statements, are used to define potentially queued operations on
20591 tasks and protected objects.
20592
20593 _Syntax_
20594
20595 2/3
20596 entry_declaration ::=
20597 [overriding_indicator]
20598 entry defining_identifier [(discrete_subtype_definition)]
20599 parameter_profile
20600 [aspect_specification];
20601
20602 3
20603 accept_statement ::=
20604 accept entry_direct_name [(entry_index)] parameter_profile [do
20605 handled_sequence_of_statements
20606 end [entry_identifier]];
20607
20608 4
20609 entry_index ::= expression
20610
20611 5
20612 entry_body ::=
20613 entry defining_identifier entry_body_formal_part
20614 entry_barrier is
20615 declarative_part
20616 begin
20617 handled_sequence_of_statements
20618 end [entry_identifier];
20619
20620 6
20621 entry_body_formal_part ::= [(entry_index_specification)]
20622 parameter_profile
20623
20624 7
20625 entry_barrier ::= when condition
20626
20627 8
20628 entry_index_specification ::= for defining_identifier in
20629 discrete_subtype_definition
20630
20631 9
20632 If an entry_identifier appears at the end of an accept_statement,
20633 it shall repeat the entry_direct_name (*note 4.1: S0092.). If an
20634 entry_identifier appears at the end of an entry_body (*note 9.5.2:
20635 S0221.), it shall repeat the defining_identifier (*note 3.1:
20636 S0022.).
20637
20638 10
20639 An entry_declaration is allowed only in a protected or task
20640 declaration.
20641
20642 10.1/2
20643 An overriding_indicator is not allowed in an entry_declaration that
20644 includes a discrete_subtype_definition.
20645
20646 _Name Resolution Rules_
20647
20648 11
20649 In an accept_statement, the expected profile for the entry_direct_name
20650 is that of the entry_declaration (*note 9.5.2: S0218.); the expected
20651 type for an entry_index is that of the subtype defined by the
20652 discrete_subtype_definition (*note 3.6: S0055.) of the corresponding
20653 entry_declaration (*note 9.5.2: S0218.).
20654
20655 12
20656 Within the handled_sequence_of_statements of an accept_statement, if a
20657 selected_component (*note 4.1.3: S0098.) has a prefix that denotes the
20658 corresponding entry_declaration (*note 9.5.2: S0218.), then the entity
20659 denoted by the prefix is the accept_statement (*note 9.5.2: S0219.), and
20660 the selected_component (*note 4.1.3: S0098.) is interpreted as an
20661 expanded name (see *note 4.1.3::); the selector_name of the
20662 selected_component (*note 4.1.3: S0098.) has to be the identifier for
20663 some formal parameter of the accept_statement (*note 9.5.2: S0219.).
20664
20665 _Legality Rules_
20666
20667 13
20668 An entry_declaration in a task declaration shall not contain a
20669 specification for an access parameter (see *note 3.10::).
20670
20671 13.1/2
20672 If an entry_declaration has an overriding_indicator, then at the point
20673 of the declaration:
20674
20675 13.2/2
20676 * if the overriding_indicator is overriding, then the entry shall
20677 implement an inherited subprogram;
20678
20679 13.3/2
20680 * if the overriding_indicator is not overriding, then the entry shall
20681 not implement any inherited subprogram.
20682
20683 13.4/2
20684 In addition to the places where Legality Rules normally apply (see *note
20685 12.3::), these rules also apply in the private part of an instance of a
20686 generic unit.
20687
20688 14
20689 For an accept_statement, the innermost enclosing body shall be a
20690 task_body, and the entry_direct_name (*note 4.1: S0092.) shall denote an
20691 entry_declaration (*note 9.5.2: S0218.) in the corresponding task
20692 declaration; the profile of the accept_statement (*note 9.5.2: S0219.)
20693 shall conform fully to that of the corresponding entry_declaration
20694 (*note 9.5.2: S0218.). An accept_statement (*note 9.5.2: S0219.) shall
20695 have a parenthesized entry_index (*note 9.5.2: S0220.) if and only if
20696 the corresponding entry_declaration (*note 9.5.2: S0218.) has a
20697 discrete_subtype_definition (*note 3.6: S0055.).
20698
20699 15
20700 An accept_statement shall not be within another accept_statement that
20701 corresponds to the same entry_declaration (*note 9.5.2: S0218.), nor
20702 within an asynchronous_select (*note 9.7.4: S0241.) inner to the
20703 enclosing task_body.
20704
20705 16
20706 An entry_declaration of a protected unit requires a completion, which
20707 shall be an entry_body, and every entry_body (*note 9.5.2: S0221.) shall
20708 be the completion of an entry_declaration (*note 9.5.2: S0218.) of a
20709 protected unit. The profile of the entry_body (*note 9.5.2: S0221.)
20710 shall conform fully to that of the corresponding declaration.
20711
20712 17
20713 An entry_body_formal_part shall have an entry_index_specification (*note
20714 9.5.2: S0224.) if and only if the corresponding entry_declaration (*note
20715 9.5.2: S0218.) has a discrete_subtype_definition (*note 3.6: S0055.).
20716 In this case, the discrete_subtype_definition (*note 3.6: S0055.)s of
20717 the entry_declaration (*note 9.5.2: S0218.) and the
20718 entry_index_specification (*note 9.5.2: S0224.) shall fully conform to
20719 one another (see *note 6.3.1::).
20720
20721 18
20722 A name that denotes a formal parameter of an entry_body is not allowed
20723 within the entry_barrier of the entry_body.
20724
20725 _Static Semantics_
20726
20727 19
20728 The parameter modes defined for parameters in the parameter_profile of
20729 an entry_declaration are the same as for a subprogram_declaration and
20730 have the same meaning (see *note 6.2::).
20731
20732 20
20733 An entry_declaration with a discrete_subtype_definition (see *note
20734 3.6::) declares a family of distinct entries having the same profile,
20735 with one such entry for each value of the entry index subtype defined by
20736 the discrete_subtype_definition (*note 3.6: S0055.). A name for an
20737 entry of a family takes the form of an indexed_component, where the
20738 prefix denotes the entry_declaration for the family, and the index value
20739 identifies the entry within the family. The term single entry is used
20740 to refer to any entry other than an entry of an entry family.
20741
20742 21
20743 In the entry_body for an entry family, the entry_index_specification
20744 declares a named constant whose subtype is the entry index subtype
20745 defined by the corresponding entry_declaration; the value of the named
20746 entry index identifies which entry of the family was called.
20747
20748 _Dynamic Semantics_
20749
20750 22/1
20751 The elaboration of an entry_declaration for an entry family consists of
20752 the elaboration of the discrete_subtype_definition (*note 3.6: S0055.),
20753 as described in *note 3.8::. The elaboration of an entry_declaration
20754 (*note 9.5.2: S0218.) for a single entry has no effect.
20755
20756 23
20757 The actions to be performed when an entry is called are specified by the
20758 corresponding accept_statement (*note 9.5.2: S0219.)s (if any) for an
20759 entry of a task unit, and by the corresponding entry_body (*note 9.5.2:
20760 S0221.) for an entry of a protected unit.
20761
20762 24
20763 For the execution of an accept_statement, the entry_index, if any, is
20764 first evaluated and converted to the entry index subtype; this index
20765 value identifies which entry of the family is to be accepted. Further
20766 execution of the accept_statement is then blocked until a caller of the
20767 corresponding entry is selected (see *note 9.5.3::), whereupon the
20768 handled_sequence_of_statements, if any, of the accept_statement is
20769 executed, with the formal parameters associated with the corresponding
20770 actual parameters of the selected entry call. Upon completion of the
20771 handled_sequence_of_statements, the accept_statement completes and is
20772 left. When an exception is propagated from the
20773 handled_sequence_of_statements of an accept_statement, the same
20774 exception is also raised by the execution of the corresponding
20775 entry_call_statement.
20776
20777 25
20778 The above interaction between a calling task and an accepting task is
20779 called a rendezvous. After a rendezvous, the two tasks continue their
20780 execution independently.
20781
20782 26
20783 An entry_body is executed when the condition of the entry_barrier
20784 evaluates to True and a caller of the corresponding single entry, or
20785 entry of the corresponding entry family, has been selected (see *note
20786 9.5.3::). For the execution of the entry_body (*note 9.5.2: S0221.),
20787 the declarative_part (*note 3.11: S0086.) of the entry_body (*note
20788 9.5.2: S0221.) is elaborated, and the handled_sequence_of_statements
20789 (*note 11.2: S0265.) of the body is executed, as for the execution of a
20790 subprogram_body. The value of the named entry index, if any, is
20791 determined by the value of the entry index specified in the entry_name
20792 of the selected entry call (or intermediate requeue_statement (*note
20793 9.5.4: S0226.) -- see *note 9.5.4::).
20794
20795 NOTES
20796
20797 27
20798 24 A task entry has corresponding accept_statements (zero or
20799 more), whereas a protected entry has a corresponding entry_body
20800 (exactly one).
20801
20802 28
20803 25 A consequence of the rule regarding the allowed placements of
20804 accept_statements is that a task can execute accept_statements only
20805 for its own entries.
20806
20807 29/2
20808 26 A return statement (see *note 6.5::) or a requeue_statement
20809 (see *note 9.5.4::) may be used to complete the execution of an
20810 accept_statement or an entry_body.
20811
20812 30
20813 27 The condition in the entry_barrier may reference anything
20814 visible except the formal parameters of the entry. This includes
20815 the entry index (if any), the components (including discriminants)
20816 of the protected object, the Count attribute of an entry of that
20817 protected object, and data global to the protected unit.
20818
20819 31
20820 The restriction against referencing the formal parameters within an
20821 entry_barrier ensures that all calls of the same entry see the same
20822 barrier value. If it is necessary to look at the parameters of an
20823 entry call before deciding whether to handle it, the entry_barrier
20824 can be "when True" and the caller can be requeued (on some private
20825 entry) when its parameters indicate that it cannot be handled
20826 immediately.
20827
20828 _Examples_
20829
20830 32
20831 Examples of entry declarations:
20832
20833 33
20834 entry Read(V : out Item);
20835 entry Seize;
20836 entry Request(Level)(D : Item); -- a family of entries
20837
20838 34
20839 Examples of accept statements:
20840
20841 35
20842 accept Shut_Down;
20843
20844 36
20845 accept Read(V : out Item) do
20846 V := Local_Item;
20847 end Read;
20848
20849 37
20850 accept Request(Low)(D : Item) do
20851 ...
20852 end Request;
20853
20854 \1f
20855 File: arm2012.info, Node: 9.5.3, Next: 9.5.4, Prev: 9.5.2, Up: 9.5
20856
20857 9.5.3 Entry Calls
20858 -----------------
20859
20860 1
20861 An entry_call_statement (an entry call) can appear in various contexts.
20862 A simple entry call is a stand-alone statement that represents an
20863 unconditional call on an entry of a target task or a protected object.
20864 Entry calls can also appear as part of select_statements (see *note
20865 9.7::).
20866
20867 _Syntax_
20868
20869 2
20870 entry_call_statement ::= entry_name [actual_parameter_part];
20871
20872 _Name Resolution Rules_
20873
20874 3
20875 The entry_name given in an entry_call_statement shall resolve to denote
20876 an entry. The rules for parameter associations are the same as for
20877 subprogram calls (see *note 6.4:: and *note 6.4.1::).
20878
20879 _Static Semantics_
20880
20881 4
20882 The entry_name of an entry_call_statement specifies (explicitly or
20883 implicitly) the target object of the call, the entry or entry family,
20884 and the entry index, if any (see *note 9.5::).
20885
20886 _Dynamic Semantics_
20887
20888 5
20889 Under certain circumstances (detailed below), an entry of a task or
20890 protected object is checked to see whether it is open or closed:
20891
20892 6/3
20893 * An entry of a task is open if the task is blocked on an
20894 accept_statement that corresponds to the entry (see *note 9.5.2::),
20895 or on a selective_accept (see *note 9.7.1::) with an open
20896 accept_alternative that corresponds to the entry; otherwise, it is
20897 closed.
20898
20899 7/3
20900 * An entry of a protected object is open if the condition of the
20901 entry_barrier of the corresponding entry_body evaluates to True;
20902 otherwise, it is closed. If the evaluation of the condition
20903 propagates an exception, the exception Program_Error is propagated
20904 to all current callers of all entries of the protected object.
20905
20906 8
20907 For the execution of an entry_call_statement, evaluation of the name and
20908 of the parameter associations is as for a subprogram call (see *note
20909 6.4::). The entry call is then issued: For a call on an entry of a
20910 protected object, a new protected action is started on the object (see
20911 *note 9.5.1::). The named entry is checked to see if it is open; if
20912 open, the entry call is said to be selected immediately, and the
20913 execution of the call proceeds as follows:
20914
20915 9
20916 * For a call on an open entry of a task, the accepting task becomes
20917 ready and continues the execution of the corresponding
20918 accept_statement (see *note 9.5.2::).
20919
20920 10
20921 * For a call on an open entry of a protected object, the
20922 corresponding entry_body is executed (see *note 9.5.2::) as part of
20923 the protected action.
20924
20925 11
20926 If the accept_statement or entry_body completes other than by a requeue
20927 (see *note 9.5.4::), return is made to the caller (after servicing the
20928 entry queues -- see below); any necessary assigning back of formal to
20929 actual parameters occurs, as for a subprogram call (see *note 6.4.1::);
20930 such assignments take place outside of any protected action.
20931
20932 12
20933 If the named entry is closed, the entry call is added to an entry queue
20934 (as part of the protected action, for a call on a protected entry), and
20935 the call remains queued until it is selected or cancelled; there is a
20936 separate (logical) entry queue for each entry of a given task or
20937 protected object (including each entry of an entry family).
20938
20939 13
20940 When a queued call is selected, it is removed from its entry queue.
20941 Selecting a queued call from a particular entry queue is called
20942 servicing the entry queue. An entry with queued calls can be serviced
20943 under the following circumstances:
20944
20945 14
20946 * When the associated task reaches a corresponding accept_statement,
20947 or a selective_accept with a corresponding open accept_alternative;
20948
20949 15
20950 * If after performing, as part of a protected action on the
20951 associated protected object, an operation on the object other than
20952 a call on a protected function, the entry is checked and found to
20953 be open.
20954
20955 16
20956 If there is at least one call on a queue corresponding to an open entry,
20957 then one such call is selected according to the entry queuing policy in
20958 effect (see below), and the corresponding accept_statement or entry_body
20959 is executed as above for an entry call that is selected immediately.
20960
20961 17
20962 The entry queuing policy controls selection among queued calls both for
20963 task and protected entry queues. The default entry queuing policy is to
20964 select calls on a given entry queue in order of arrival. If calls from
20965 two or more queues are simultaneously eligible for selection, the
20966 default entry queuing policy does not specify which queue is serviced
20967 first. Other entry queuing policies can be specified by pragmas (see
20968 *note D.4::).
20969
20970 18
20971 For a protected object, the above servicing of entry queues continues
20972 until there are no open entries with queued calls, at which point the
20973 protected action completes.
20974
20975 19
20976 For an entry call that is added to a queue, and that is not the
20977 triggering_statement of an asynchronous_select (*note 9.7.4: S0241.)
20978 (see *note 9.7.4::), the calling task is blocked until the call is
20979 cancelled, or the call is selected and a corresponding accept_statement
20980 or entry_body completes without requeuing. In addition, the calling
20981 task is blocked during a rendezvous.
20982
20983 20
20984 An attempt can be made to cancel an entry call upon an abort (see *note
20985 9.8::) and as part of certain forms of select_statement (see *note
20986 9.7.2::, *note 9.7.3::, and *note 9.7.4::). The cancellation does not
20987 take place until a point (if any) when the call is on some entry queue,
20988 and not protected from cancellation as part of a requeue (see *note
20989 9.5.4::); at such a point, the call is removed from the entry queue and
20990 the call completes due to the cancellation. The cancellation of a call
20991 on an entry of a protected object is a protected action, and as such
20992 cannot take place while any other protected action is occurring on the
20993 protected object. Like any protected action, it includes servicing of
20994 the entry queues (in case some entry barrier depends on a Count
20995 attribute).
20996
20997 21
20998 A call on an entry of a task that has already completed its execution
20999 raises the exception Tasking_Error at the point of the call; similarly,
21000 this exception is raised at the point of the call if the called task
21001 completes its execution or becomes abnormal before accepting the call or
21002 completing the rendezvous (see *note 9.8::). This applies equally to a
21003 simple entry call and to an entry call as part of a select_statement.
21004
21005 _Implementation Permissions_
21006
21007 22
21008 An implementation may perform the sequence of steps of a protected
21009 action using any thread of control; it need not be that of the task that
21010 started the protected action. If an entry_body completes without
21011 requeuing, then the corresponding calling task may be made ready without
21012 waiting for the entire protected action to complete.
21013
21014 23
21015 When the entry of a protected object is checked to see whether it is
21016 open, the implementation need not reevaluate the condition of the
21017 corresponding entry_barrier if no variable or attribute referenced by
21018 the condition (directly or indirectly) has been altered by the execution
21019 (or cancellation) of a protected procedure or entry call on the object
21020 since the condition was last evaluated.
21021
21022 24
21023 An implementation may evaluate the conditions of all entry_barriers of a
21024 given protected object any time any entry of the object is checked to
21025 see if it is open.
21026
21027 25
21028 When an attempt is made to cancel an entry call, the implementation need
21029 not make the attempt using the thread of control of the task (or
21030 interrupt) that initiated the cancellation; in particular, it may use
21031 the thread of control of the caller itself to attempt the cancellation,
21032 even if this might allow the entry call to be selected in the interim.
21033
21034 NOTES
21035
21036 26
21037 28 If an exception is raised during the execution of an
21038 entry_body, it is propagated to the corresponding caller (see *note
21039 11.4::).
21040
21041 27
21042 29 For a call on a protected entry, the entry is checked to see if
21043 it is open prior to queuing the call, and again thereafter if its
21044 Count attribute (see *note 9.9::) is referenced in some entry
21045 barrier.
21046
21047 28
21048 30 In addition to simple entry calls, the language permits timed,
21049 conditional, and asynchronous entry calls (see *note 9.7.2::, *note
21050 9.7.3::, and see *note 9.7.4::).
21051
21052 29
21053 31 The condition of an entry_barrier is allowed to be evaluated by
21054 an implementation more often than strictly necessary, even if the
21055 evaluation might have side effects. On the other hand, an
21056 implementation need not reevaluate the condition if nothing it
21057 references was updated by an intervening protected action on the
21058 protected object, even if the condition references some global
21059 variable that might have been updated by an action performed from
21060 outside of a protected action.
21061
21062 _Examples_
21063
21064 30
21065 Examples of entry calls:
21066
21067 31
21068 Agent.Shut_Down; -- see *note 9.1::
21069 Parser.Next_Lexeme(E); -- see *note 9.1::
21070 Pool(5).Read(Next_Char); -- see *note 9.1::
21071 Controller.Request(Low)(Some_Item); -- see *note 9.1::
21072 Flags(3).Seize; -- see *note 9.4::
21073
21074 \1f
21075 File: arm2012.info, Node: 9.5.4, Prev: 9.5.3, Up: 9.5
21076
21077 9.5.4 Requeue Statements
21078 ------------------------
21079
21080 1
21081 A requeue_statement can be used to complete an accept_statement or
21082 entry_body, while redirecting the corresponding entry call to a new (or
21083 the same) entry queue. Such a requeue can be performed with or without
21084 allowing an intermediate cancellation of the call, due to an abort or
21085 the expiration of a delay.
21086
21087 _Syntax_
21088
21089 2/3
21090 requeue_statement ::= requeue procedure_or_entry_name [with abort];
21091
21092 _Name Resolution Rules_
21093
21094 3/3
21095 The procedure_or_entry_name of a requeue_statement shall resolve to
21096 denote a procedure or an entry (the requeue target). The profile of the
21097 entry, or the profile or prefixed profile of the procedure, shall either
21098 have no parameters, or be type conformant (see *note 6.3.1::) with the
21099 profile of the innermost enclosing entry_body (*note 9.5.2: S0221.) or
21100 accept_statement (*note 9.5.2: S0219.).
21101
21102 _Legality Rules_
21103
21104 4
21105 A requeue_statement shall be within a callable construct that is either
21106 an entry_body or an accept_statement, and this construct shall be the
21107 innermost enclosing body or callable construct.
21108
21109 5/3
21110 If the requeue target has parameters, then its (prefixed) profile shall
21111 be subtype conformant with the profile of the innermost enclosing
21112 callable construct.
21113
21114 5.1/3
21115 If the target is a procedure, the name shall denote a renaming of an
21116 entry, or shall denote a view or a prefixed view of a primitive
21117 subprogram of a synchronized interface, where the first parameter of the
21118 unprefixed view of the primitive subprogram shall be a controlling
21119 parameter, and the Synchronization aspect shall be specified with
21120 synchronization_kind By_Entry for the primitive subprogram.
21121
21122 6/3
21123 In a requeue_statement of an accept_statement of some task unit, either
21124 the target object shall be a part of a formal parameter of the
21125 accept_statement, or the accessibility level of the target object shall
21126 not be equal to or statically deeper than any enclosing accept_statement
21127 of the task unit. In a requeue_statement (*note 9.5.4: S0226.) of an
21128 entry_body (*note 9.5.2: S0221.) of some protected unit, either the
21129 target object shall be a part of a formal parameter of the entry_body
21130 (*note 9.5.2: S0221.), or the accessibility level of the target object
21131 shall not be statically deeper than that of the entry_declaration for
21132 the entry_body.
21133
21134 _Dynamic Semantics_
21135
21136 7/3
21137 The execution of a requeue_statement proceeds by first evaluating the
21138 procedure_or_entry_name, including the prefix identifying the target
21139 task or protected object and the expression identifying the entry within
21140 an entry family, if any. The entry_body or accept_statement enclosing
21141 the requeue_statement is then completed, finalized, and left (see *note
21142 7.6.1::).
21143
21144 8
21145 For the execution of a requeue on an entry of a target task, after
21146 leaving the enclosing callable construct, the named entry is checked to
21147 see if it is open and the requeued call is either selected immediately
21148 or queued, as for a normal entry call (see *note 9.5.3::).
21149
21150 9
21151 For the execution of a requeue on an entry of a target protected object,
21152 after leaving the enclosing callable construct:
21153
21154 10
21155 * if the requeue is an internal requeue (that is, the requeue is back
21156 on an entry of the same protected object -- see *note 9.5::), the
21157 call is added to the queue of the named entry and the ongoing
21158 protected action continues (see *note 9.5.1::);
21159
21160 11
21161 * if the requeue is an external requeue (that is, the target
21162 protected object is not implicitly the same as the current object
21163 -- see *note 9.5::), a protected action is started on the target
21164 object and proceeds as for a normal entry call (see *note 9.5.3::).
21165
21166 12/3
21167 If the requeue target named in the requeue_statement has formal
21168 parameters, then during the execution of the accept_statement or
21169 entry_body corresponding to the new entry, the formal parameters denote
21170 the same objects as did the corresponding formal parameters of the
21171 callable construct completed by the requeue. In any case, no parameters
21172 are specified in a requeue_statement; any parameter passing is implicit.
21173
21174 13
21175 If the requeue_statement includes the reserved words with abort (it is a
21176 requeue-with-abort), then:
21177
21178 14
21179 * if the original entry call has been aborted (see *note 9.8::), then
21180 the requeue acts as an abort completion point for the call, and the
21181 call is cancelled and no requeue is performed;
21182
21183 15
21184 * if the original entry call was timed (or conditional), then the
21185 original expiration time is the expiration time for the requeued
21186 call.
21187
21188 16
21189 If the reserved words with abort do not appear, then the call remains
21190 protected against cancellation while queued as the result of the
21191 requeue_statement.
21192
21193 NOTES
21194
21195 17
21196 32 A requeue is permitted from a single entry to an entry of an
21197 entry family, or vice-versa. The entry index, if any, plays no
21198 part in the subtype conformance check between the profiles of the
21199 two entries; an entry index is part of the entry_name for an entry
21200 of a family.
21201
21202 _Examples_
21203
21204 18
21205 Examples of requeue statements:
21206
21207 19
21208 requeue Request(Medium) with abort;
21209 -- requeue on a member of an entry family of the current task, see *note 9.1::
21210
21211 20
21212 requeue Flags(I).Seize;
21213 -- requeue on an entry of an array component, see *note 9.4::
21214
21215 \1f
21216 File: arm2012.info, Node: 9.6, Next: 9.7, Prev: 9.5, Up: 9
21217
21218 9.6 Delay Statements, Duration, and Time
21219 ========================================
21220
21221 1
21222 A delay_statement is used to block further execution until a specified
21223 expiration time is reached. The expiration time can be specified either
21224 as a particular point in time (in a delay_until_statement (*note 9.6:
21225 S0228.)), or in seconds from the current time (in a
21226 delay_relative_statement (*note 9.6: S0229.)). The language-defined
21227 package Calendar provides definitions for a type Time and associated
21228 operations, including a function Clock that returns the current time.
21229
21230 _Syntax_
21231
21232 2
21233 delay_statement ::= delay_until_statement |
21234 delay_relative_statement
21235
21236 3
21237 delay_until_statement ::= delay until delay_expression;
21238
21239 4
21240 delay_relative_statement ::= delay delay_expression;
21241
21242 _Name Resolution Rules_
21243
21244 5
21245 The expected type for the delay_expression in a delay_relative_statement
21246 is the predefined type Duration. The delay_expression in a
21247 delay_until_statement is expected to be of any nonlimited type.
21248
21249 _Legality Rules_
21250
21251 6/3
21252 There can be multiple time bases, each with a corresponding clock, and a
21253 corresponding time type. The type of the delay_expression in a
21254 delay_until_statement shall be a time type -- either the type Time
21255 defined in the language-defined package Calendar (see below), the type
21256 Time in the package Real_Time (see *note D.8::), or some other
21257 implementation-defined time type.
21258
21259 _Static Semantics_
21260
21261 7
21262 There is a predefined fixed point type named Duration, declared in the
21263 visible part of package Standard; a value of type Duration is used to
21264 represent the length of an interval of time, expressed in seconds. The
21265 type Duration is not specific to a particular time base, but can be used
21266 with any time base.
21267
21268 8/3
21269 A value of the type Time in package Calendar, or of some other time
21270 type, represents a time as reported by a corresponding clock.
21271
21272 9
21273 The following language-defined library package exists:
21274
21275 10
21276
21277 package Ada.Calendar is
21278 type Time is private;
21279
21280 11/2
21281 subtype Year_Number is Integer range 1901 .. 2399;
21282 subtype Month_Number is Integer range 1 .. 12;
21283 subtype Day_Number is Integer range 1 .. 31;
21284 subtype Day_Duration is Duration range 0.0 .. 86_400.0;
21285
21286 12
21287 function Clock return Time;
21288
21289 13
21290 function Year (Date : Time) return Year_Number;
21291 function Month (Date : Time) return Month_Number;
21292 function Day (Date : Time) return Day_Number;
21293 function Seconds(Date : Time) return Day_Duration;
21294
21295 14
21296 procedure Split (Date : in Time;
21297 Year : out Year_Number;
21298 Month : out Month_Number;
21299 Day : out Day_Number;
21300 Seconds : out Day_Duration);
21301
21302 15
21303 function Time_Of(Year : Year_Number;
21304 Month : Month_Number;
21305 Day : Day_Number;
21306 Seconds : Day_Duration := 0.0)
21307 return Time;
21308
21309 16
21310 function "+" (Left : Time; Right : Duration) return Time;
21311 function "+" (Left : Duration; Right : Time) return Time;
21312 function "-" (Left : Time; Right : Duration) return Time;
21313 function "-" (Left : Time; Right : Time) return Duration;
21314
21315 17
21316 function "<" (Left, Right : Time) return Boolean;
21317 function "<="(Left, Right : Time) return Boolean;
21318 function ">" (Left, Right : Time) return Boolean;
21319 function ">="(Left, Right : Time) return Boolean;
21320
21321 18
21322 Time_Error : exception;
21323
21324 19
21325 private
21326 ... -- not specified by the language
21327 end Ada.Calendar;
21328
21329 _Dynamic Semantics_
21330
21331 20
21332 For the execution of a delay_statement, the delay_expression is first
21333 evaluated. For a delay_until_statement, the expiration time for the
21334 delay is the value of the delay_expression, in the time base associated
21335 with the type of the expression. For a delay_relative_statement, the
21336 expiration time is defined as the current time, in the time base
21337 associated with relative delays, plus the value of the delay_expression
21338 converted to the type Duration, and then rounded up to the next clock
21339 tick. The time base associated with relative delays is as defined in
21340 *note D.9::, "*note D.9:: Delay Accuracy" or is implementation defined.
21341
21342 21
21343 The task executing a delay_statement is blocked until the expiration
21344 time is reached, at which point it becomes ready again. If the
21345 expiration time has already passed, the task is not blocked.
21346
21347 22/3
21348 If an attempt is made to cancel the delay_statement (as part of an
21349 asynchronous_select (*note 9.7.4: S0241.) or abort -- see *note 9.7.4::
21350 and *note 9.8::), the statement is cancelled if the expiration time has
21351 not yet passed, thereby completing the delay_statement.
21352
21353 23
21354 The time base associated with the type Time of package Calendar is
21355 implementation defined. The function Clock of package Calendar returns
21356 a value representing the current time for this time base. The
21357 implementation-defined value of the named number System.Tick (see *note
21358 13.7::) is an approximation of the length of the real-time interval
21359 during which the value of Calendar.Clock remains constant.
21360
21361 24/2
21362 The functions Year, Month, Day, and Seconds return the corresponding
21363 values for a given value of the type Time, as appropriate to an
21364 implementation-defined time zone; the procedure Split returns all four
21365 corresponding values. Conversely, the function Time_Of combines a year
21366 number, a month number, a day number, and a duration, into a value of
21367 type Time. The operators "+" and "-" for addition and subtraction of
21368 times and durations, and the relational operators for times, have the
21369 conventional meaning.
21370
21371 25
21372 If Time_Of is called with a seconds value of 86_400.0, the value
21373 returned is equal to the value of Time_Of for the next day with a
21374 seconds value of 0.0. The value returned by the function Seconds or
21375 through the Seconds parameter of the procedure Split is always less than
21376 86_400.0.
21377
21378 26/1
21379 The exception Time_Error is raised by the function Time_Of if the actual
21380 parameters do not form a proper date. This exception is also raised by
21381 the operators "+" and "-" if the result is not representable in the type
21382 Time or Duration, as appropriate. This exception is also raised by the
21383 functions Year, Month, Day, and Seconds and the procedure Split if the
21384 year number of the given date is outside of the range of the subtype
21385 Year_Number.
21386
21387 _Implementation Requirements_
21388
21389 27
21390 The implementation of the type Duration shall allow representation of
21391 time intervals (both positive and negative) up to at least 86400 seconds
21392 (one day); Duration'Small shall not be greater than twenty milliseconds.
21393 The implementation of the type Time shall allow representation of all
21394 dates with year numbers in the range of Year_Number; it may allow
21395 representation of other dates as well (both earlier and later).
21396
21397 _Implementation Permissions_
21398
21399 28/3
21400 An implementation may define additional time types.
21401
21402 29
21403 An implementation may raise Time_Error if the value of a
21404 delay_expression in a delay_until_statement of a select_statement
21405 represents a time more than 90 days past the current time. The actual
21406 limit, if any, is implementation-defined.
21407
21408 _Implementation Advice_
21409
21410 30
21411 Whenever possible in an implementation, the value of Duration'Small
21412 should be no greater than 100 microseconds.
21413
21414 31
21415 The time base for delay_relative_statements should be monotonic; it need
21416 not be the same time base as used for Calendar.Clock.
21417
21418 NOTES
21419
21420 32
21421 33 A delay_relative_statement with a negative value of the
21422 delay_expression is equivalent to one with a zero value.
21423
21424 33
21425 34 A delay_statement may be executed by the environment task;
21426 consequently delay_statements may be executed as part of the
21427 elaboration of a library_item or the execution of the main
21428 subprogram. Such statements delay the environment task (see *note
21429 10.2::).
21430
21431 34
21432 35 A delay_statement is an abort completion point and a
21433 potentially blocking operation, even if the task is not actually
21434 blocked.
21435
21436 35
21437 36 There is no necessary relationship between System.Tick (the
21438 resolution of the clock of package Calendar) and Duration'Small
21439 (the small of type Duration).
21440
21441 36
21442 37 Additional requirements associated with delay_statements are
21443 given in *note D.9::, "*note D.9:: Delay Accuracy".
21444
21445 _Examples_
21446
21447 37
21448 Example of a relative delay statement:
21449
21450 38
21451 delay 3.0; -- delay 3.0 seconds
21452
21453 39
21454 Example of a periodic task:
21455
21456 40
21457 declare
21458 use Ada.Calendar;
21459 Next_Time : Time := Clock + Period;
21460 -- Period is a global constant of type Duration
21461 begin
21462 loop -- repeated every Period seconds
21463 delay until Next_Time;
21464 ... -- perform some actions
21465 Next_Time := Next_Time + Period;
21466 end loop;
21467 end;
21468
21469 * Menu:
21470
21471 * 9.6.1 :: Formatting, Time Zones, and other operations for Time
21472
21473 \1f
21474 File: arm2012.info, Node: 9.6.1, Up: 9.6
21475
21476 9.6.1 Formatting, Time Zones, and other operations for Time
21477 -----------------------------------------------------------
21478
21479 _Static Semantics_
21480
21481 1/2
21482 The following language-defined library packages exist:
21483
21484 2/2
21485 package Ada.Calendar.Time_Zones is
21486
21487 3/2
21488 -- Time zone manipulation:
21489
21490 4/2
21491 type Time_Offset is range -28*60 .. 28*60;
21492
21493 5/2
21494 Unknown_Zone_Error : exception;
21495
21496 6/2
21497 function UTC_Time_Offset (Date : Time := Clock) return Time_Offset;
21498
21499 7/2
21500 end Ada.Calendar.Time_Zones;
21501
21502 8/2
21503
21504 package Ada.Calendar.Arithmetic is
21505
21506 9/2
21507 -- Arithmetic on days:
21508
21509 10/2
21510 type Day_Count is range
21511 -366*(1+Year_Number'Last - Year_Number'First)
21512 ..
21513 366*(1+Year_Number'Last - Year_Number'First);
21514
21515 11/2
21516 subtype Leap_Seconds_Count is Integer range -2047 .. 2047;
21517
21518 12/2
21519 procedure Difference (Left, Right : in Time;
21520 Days : out Day_Count;
21521 Seconds : out Duration;
21522 Leap_Seconds : out Leap_Seconds_Count);
21523
21524 13/2
21525 function "+" (Left : Time; Right : Day_Count) return Time;
21526 function "+" (Left : Day_Count; Right : Time) return Time;
21527 function "-" (Left : Time; Right : Day_Count) return Time;
21528 function "-" (Left, Right : Time) return Day_Count;
21529
21530 14/2
21531 end Ada.Calendar.Arithmetic;
21532
21533 15/2
21534
21535 with Ada.Calendar.Time_Zones;
21536 package Ada.Calendar.Formatting is
21537
21538 16/2
21539 -- Day of the week:
21540
21541 17/2
21542 type Day_Name is (Monday, Tuesday, Wednesday, Thursday,
21543 Friday, Saturday, Sunday);
21544
21545 18/2
21546 function Day_of_Week (Date : Time) return Day_Name;
21547
21548 19/2
21549 -- Hours:Minutes:Seconds access:
21550
21551 20/2
21552 subtype Hour_Number is Natural range 0 .. 23;
21553 subtype Minute_Number is Natural range 0 .. 59;
21554 subtype Second_Number is Natural range 0 .. 59;
21555 subtype Second_Duration is Day_Duration range 0.0 .. 1.0;
21556
21557 21/2
21558 function Year (Date : Time;
21559 Time_Zone : Time_Zones.Time_Offset := 0)
21560 return Year_Number;
21561
21562 22/2
21563 function Month (Date : Time;
21564 Time_Zone : Time_Zones.Time_Offset := 0)
21565 return Month_Number;
21566
21567 23/2
21568 function Day (Date : Time;
21569 Time_Zone : Time_Zones.Time_Offset := 0)
21570 return Day_Number;
21571
21572 24/2
21573 function Hour (Date : Time;
21574 Time_Zone : Time_Zones.Time_Offset := 0)
21575 return Hour_Number;
21576
21577 25/2
21578 function Minute (Date : Time;
21579 Time_Zone : Time_Zones.Time_Offset := 0)
21580 return Minute_Number;
21581
21582 26/2
21583 function Second (Date : Time)
21584 return Second_Number;
21585
21586 27/2
21587 function Sub_Second (Date : Time)
21588 return Second_Duration;
21589
21590 28/2
21591 function Seconds_Of (Hour : Hour_Number;
21592 Minute : Minute_Number;
21593 Second : Second_Number := 0;
21594 Sub_Second : Second_Duration := 0.0)
21595 return Day_Duration;
21596
21597 29/2
21598 procedure Split (Seconds : in Day_Duration;
21599 Hour : out Hour_Number;
21600 Minute : out Minute_Number;
21601 Second : out Second_Number;
21602 Sub_Second : out Second_Duration);
21603
21604 30/2
21605 function Time_Of (Year : Year_Number;
21606 Month : Month_Number;
21607 Day : Day_Number;
21608 Hour : Hour_Number;
21609 Minute : Minute_Number;
21610 Second : Second_Number;
21611 Sub_Second : Second_Duration := 0.0;
21612 Leap_Second: Boolean := False;
21613 Time_Zone : Time_Zones.Time_Offset := 0)
21614 return Time;
21615
21616 31/2
21617 function Time_Of (Year : Year_Number;
21618 Month : Month_Number;
21619 Day : Day_Number;
21620 Seconds : Day_Duration := 0.0;
21621 Leap_Second: Boolean := False;
21622 Time_Zone : Time_Zones.Time_Offset := 0)
21623 return Time;
21624
21625 32/2
21626 procedure Split (Date : in Time;
21627 Year : out Year_Number;
21628 Month : out Month_Number;
21629 Day : out Day_Number;
21630 Hour : out Hour_Number;
21631 Minute : out Minute_Number;
21632 Second : out Second_Number;
21633 Sub_Second : out Second_Duration;
21634 Time_Zone : in Time_Zones.Time_Offset := 0);
21635
21636 33/2
21637 procedure Split (Date : in Time;
21638 Year : out Year_Number;
21639 Month : out Month_Number;
21640 Day : out Day_Number;
21641 Hour : out Hour_Number;
21642 Minute : out Minute_Number;
21643 Second : out Second_Number;
21644 Sub_Second : out Second_Duration;
21645 Leap_Second: out Boolean;
21646 Time_Zone : in Time_Zones.Time_Offset := 0);
21647
21648 34/2
21649 procedure Split (Date : in Time;
21650 Year : out Year_Number;
21651 Month : out Month_Number;
21652 Day : out Day_Number;
21653 Seconds : out Day_Duration;
21654 Leap_Second: out Boolean;
21655 Time_Zone : in Time_Zones.Time_Offset := 0);
21656
21657 35/2
21658 -- Simple image and value:
21659 function Image (Date : Time;
21660 Include_Time_Fraction : Boolean := False;
21661 Time_Zone : Time_Zones.Time_Offset := 0) return String;
21662
21663 36/2
21664 function Value (Date : String;
21665 Time_Zone : Time_Zones.Time_Offset := 0) return Time;
21666
21667 37/2
21668 function Image (Elapsed_Time : Duration;
21669 Include_Time_Fraction : Boolean := False) return String;
21670
21671 38/2
21672 function Value (Elapsed_Time : String) return Duration;
21673
21674 39/2
21675 end Ada.Calendar.Formatting;
21676
21677 40/2
21678 Type Time_Offset represents the number of minutes difference between the
21679 implementation-defined time zone used by Calendar and another time zone.
21680
21681 41/2
21682 function UTC_Time_Offset (Date : Time := Clock) return Time_Offset;
21683
21684 42/3
21685 Returns, as a number of minutes, the result of subtracting the
21686 implementation-defined time zone of Calendar from UTC time, at
21687 the time Date. If the time zone of the Calendar
21688 implementation is unknown, then Unknown_Zone_Error is raised.
21689
21690 43/2
21691 procedure Difference (Left, Right : in Time;
21692 Days : out Day_Count;
21693 Seconds : out Duration;
21694 Leap_Seconds : out Leap_Seconds_Count);
21695
21696 44/2
21697 Returns the difference between Left and Right. Days is the
21698 number of days of difference, Seconds is the remainder seconds
21699 of difference excluding leap seconds, and Leap_Seconds is the
21700 number of leap seconds. If Left < Right, then Seconds <= 0.0,
21701 Days <= 0, and Leap_Seconds <= 0. Otherwise, all values are
21702 nonnegative. The absolute value of Seconds is always less
21703 than 86_400.0. For the returned values, if Days = 0, then
21704 Seconds + Duration(Leap_Seconds) = Calendar."-" (Left, Right).
21705
21706 45/2
21707 function "+" (Left : Time; Right : Day_Count) return Time;
21708 function "+" (Left : Day_Count; Right : Time) return Time;
21709
21710 46/2
21711 Adds a number of days to a time value. Time_Error is raised
21712 if the result is not representable as a value of type Time.
21713
21714 47/2
21715 function "-" (Left : Time; Right : Day_Count) return Time;
21716
21717 48/2
21718 Subtracts a number of days from a time value. Time_Error is
21719 raised if the result is not representable as a value of type
21720 Time.
21721
21722 49/2
21723 function "-" (Left, Right : Time) return Day_Count;
21724
21725 50/2
21726 Subtracts two time values, and returns the number of days
21727 between them. This is the same value that Difference would
21728 return in Days.
21729
21730 51/2
21731 function Day_of_Week (Date : Time) return Day_Name;
21732
21733 52/2
21734 Returns the day of the week for Time. This is based on the
21735 Year, Month, and Day values of Time.
21736
21737 53/2
21738 function Year (Date : Time;
21739 Time_Zone : Time_Zones.Time_Offset := 0)
21740 return Year_Number;
21741
21742 54/2
21743 Returns the year for Date, as appropriate for the specified
21744 time zone offset.
21745
21746 55/2
21747 function Month (Date : Time;
21748 Time_Zone : Time_Zones.Time_Offset := 0)
21749 return Month_Number;
21750
21751 56/2
21752 Returns the month for Date, as appropriate for the specified
21753 time zone offset.
21754
21755 57/2
21756 function Day (Date : Time;
21757 Time_Zone : Time_Zones.Time_Offset := 0)
21758 return Day_Number;
21759
21760 58/2
21761 Returns the day number for Date, as appropriate for the
21762 specified time zone offset.
21763
21764 59/2
21765 function Hour (Date : Time;
21766 Time_Zone : Time_Zones.Time_Offset := 0)
21767 return Hour_Number;
21768
21769 60/2
21770 Returns the hour for Date, as appropriate for the specified
21771 time zone offset.
21772
21773 61/2
21774 function Minute (Date : Time;
21775 Time_Zone : Time_Zones.Time_Offset := 0)
21776 return Minute_Number;
21777
21778 62/2
21779 Returns the minute within the hour for Date, as appropriate
21780 for the specified time zone offset.
21781
21782 63/2
21783 function Second (Date : Time)
21784 return Second_Number;
21785
21786 64/2
21787 Returns the second within the hour and minute for Date.
21788
21789 65/2
21790 function Sub_Second (Date : Time)
21791 return Second_Duration;
21792
21793 66/2
21794 Returns the fraction of second for Date (this has the same
21795 accuracy as Day_Duration). The value returned is always less
21796 than 1.0.
21797
21798 67/2
21799 function Seconds_Of (Hour : Hour_Number;
21800 Minute : Minute_Number;
21801 Second : Second_Number := 0;
21802 Sub_Second : Second_Duration := 0.0)
21803 return Day_Duration;
21804
21805 68/2
21806 Returns a Day_Duration value for the combination of the given
21807 Hour, Minute, Second, and Sub_Second. This value can be used
21808 in Calendar.Time_Of as well as the argument to Calendar."+"
21809 and Calendar."-". If Seconds_Of is called with a Sub_Second
21810 value of 1.0, the value returned is equal to the value of
21811 Seconds_Of for the next second with a Sub_Second value of 0.0.
21812
21813 69/2
21814 procedure Split (Seconds : in Day_Duration;
21815 Hour : out Hour_Number;
21816 Minute : out Minute_Number;
21817 Second : out Second_Number;
21818 Sub_Second : out Second_Duration);
21819
21820 70/3
21821 Splits Seconds into Hour, Minute, Second and Sub_Second in
21822 such a way that the resulting values all belong to their
21823 respective subtypes. The value returned in the Sub_Second
21824 parameter is always less than 1.0. If Seconds = 86400.0,
21825 Split propagates Time_Error.
21826
21827 71/2
21828 function Time_Of (Year : Year_Number;
21829 Month : Month_Number;
21830 Day : Day_Number;
21831 Hour : Hour_Number;
21832 Minute : Minute_Number;
21833 Second : Second_Number;
21834 Sub_Second : Second_Duration := 0.0;
21835 Leap_Second: Boolean := False;
21836 Time_Zone : Time_Zones.Time_Offset := 0)
21837 return Time;
21838
21839 72/2
21840 If Leap_Second is False, returns a Time built from the date
21841 and time values, relative to the specified time zone offset.
21842 If Leap_Second is True, returns the Time that represents the
21843 time within the leap second that is one second later than the
21844 time specified by the other parameters. Time_Error is raised
21845 if the parameters do not form a proper date or time. If
21846 Time_Of is called with a Sub_Second value of 1.0, the value
21847 returned is equal to the value of Time_Of for the next second
21848 with a Sub_Second value of 0.0.
21849
21850 73/2
21851 function Time_Of (Year : Year_Number;
21852 Month : Month_Number;
21853 Day : Day_Number;
21854 Seconds : Day_Duration := 0.0;
21855 Leap_Second: Boolean := False;
21856 Time_Zone : Time_Zones.Time_Offset := 0)
21857 return Time;
21858
21859 74/2
21860 If Leap_Second is False, returns a Time built from the date
21861 and time values, relative to the specified time zone offset.
21862 If Leap_Second is True, returns the Time that represents the
21863 time within the leap second that is one second later than the
21864 time specified by the other parameters. Time_Error is raised
21865 if the parameters do not form a proper date or time. If
21866 Time_Of is called with a Seconds value of 86_400.0, the value
21867 returned is equal to the value of Time_Of for the next day
21868 with a Seconds value of 0.0.
21869
21870 75/2
21871 procedure Split (Date : in Time;
21872 Year : out Year_Number;
21873 Month : out Month_Number;
21874 Day : out Day_Number;
21875 Hour : out Hour_Number;
21876 Minute : out Minute_Number;
21877 Second : out Second_Number;
21878 Sub_Second : out Second_Duration;
21879 Leap_Second: out Boolean;
21880 Time_Zone : in Time_Zones.Time_Offset := 0);
21881
21882 76/2
21883 If Date does not represent a time within a leap second, splits
21884 Date into its constituent parts (Year, Month, Day, Hour,
21885 Minute, Second, Sub_Second), relative to the specified time
21886 zone offset, and sets Leap_Second to False. If Date
21887 represents a time within a leap second, set the constituent
21888 parts to values corresponding to a time one second earlier
21889 than that given by Date, relative to the specified time zone
21890 offset, and sets Leap_Seconds to True. The value returned in
21891 the Sub_Second parameter is always less than 1.0.
21892
21893 77/2
21894 procedure Split (Date : in Time;
21895 Year : out Year_Number;
21896 Month : out Month_Number;
21897 Day : out Day_Number;
21898 Hour : out Hour_Number;
21899 Minute : out Minute_Number;
21900 Second : out Second_Number;
21901 Sub_Second : out Second_Duration;
21902 Time_Zone : in Time_Zones.Time_Offset := 0);
21903
21904 78/2
21905 Splits Date into its constituent parts (Year, Month, Day,
21906 Hour, Minute, Second, Sub_Second), relative to the specified
21907 time zone offset. The value returned in the Sub_Second
21908 parameter is always less than 1.0.
21909
21910 79/2
21911 procedure Split (Date : in Time;
21912 Year : out Year_Number;
21913 Month : out Month_Number;
21914 Day : out Day_Number;
21915 Seconds : out Day_Duration;
21916 Leap_Second: out Boolean;
21917 Time_Zone : in Time_Zones.Time_Offset := 0);
21918
21919 80/2
21920 If Date does not represent a time within a leap second, splits
21921 Date into its constituent parts (Year, Month, Day, Seconds),
21922 relative to the specified time zone offset, and sets
21923 Leap_Second to False. If Date represents a time within a leap
21924 second, set the constituent parts to values corresponding to a
21925 time one second earlier than that given by Date, relative to
21926 the specified time zone offset, and sets Leap_Seconds to True.
21927 The value returned in the Seconds parameter is always less
21928 than 86_400.0.
21929
21930 81/2
21931 function Image (Date : Time;
21932 Include_Time_Fraction : Boolean := False;
21933 Time_Zone : Time_Zones.Time_Offset := 0) return String;
21934
21935 82/2
21936 Returns a string form of the Date relative to the given
21937 Time_Zone. The format is "Year-Month-Day Hour:Minute:Second",
21938 where the Year is a 4-digit value, and all others are 2-digit
21939 values, of the functions defined in Calendar and
21940 Calendar.Formatting, including a leading zero, if needed. The
21941 separators between the values are a minus, another minus, a
21942 colon, and a single space between the Day and Hour. If
21943 Include_Time_Fraction is True, the integer part of
21944 Sub_Seconds*100 is suffixed to the string as a point followed
21945 by a 2-digit value.
21946
21947 83/2
21948 function Value (Date : String;
21949 Time_Zone : Time_Zones.Time_Offset := 0) return Time;
21950
21951 84/2
21952 Returns a Time value for the image given as Date, relative to
21953 the given time zone. Constraint_Error is raised if the string
21954 is not formatted as described for Image, or the function
21955 cannot interpret the given string as a Time value.
21956
21957 85/2
21958 function Image (Elapsed_Time : Duration;
21959 Include_Time_Fraction : Boolean := False) return String;
21960
21961 86/2
21962 Returns a string form of the Elapsed_Time. The format is
21963 "Hour:Minute:Second", where all values are 2-digit values,
21964 including a leading zero, if needed. The separators between
21965 the values are colons. If Include_Time_Fraction is True, the
21966 integer part of Sub_Seconds*100 is suffixed to the string as a
21967 point followed by a 2-digit value. If Elapsed_Time < 0.0, the
21968 result is Image (abs Elapsed_Time, Include_Time_Fraction)
21969 prefixed with a minus sign. If abs Elapsed_Time represents
21970 100 hours or more, the result is implementation-defined.
21971
21972 87/2
21973 function Value (Elapsed_Time : String) return Duration;
21974
21975 88/2
21976 Returns a Duration value for the image given as Elapsed_Time.
21977 Constraint_Error is raised if the string is not formatted as
21978 described for Image, or the function cannot interpret the
21979 given string as a Duration value.
21980
21981 _Implementation Advice_
21982
21983 89/2
21984 An implementation should support leap seconds if the target system
21985 supports them. If leap seconds are not supported, Difference should
21986 return zero for Leap_Seconds, Split should return False for Leap_Second,
21987 and Time_Of should raise Time_Error if Leap_Second is True.
21988
21989 NOTES
21990
21991 90/2
21992 38 The implementation-defined time zone of package Calendar may,
21993 but need not, be the local time zone. UTC_Time_Offset always
21994 returns the difference relative to the implementation-defined time
21995 zone of package Calendar. If UTC_Time_Offset does not raise
21996 Unknown_Zone_Error, UTC time can be safely calculated (within the
21997 accuracy of the underlying time-base).
21998
21999 91/2
22000 39 Calling Split on the results of subtracting
22001 Duration(UTC_Time_Offset*60) from Clock provides the components
22002 (hours, minutes, and so on) of the UTC time. In the United States,
22003 for example, UTC_Time_Offset will generally be negative.
22004
22005 \1f
22006 File: arm2012.info, Node: 9.7, Next: 9.8, Prev: 9.6, Up: 9
22007
22008 9.7 Select Statements
22009 =====================
22010
22011 1
22012 There are four forms of the select_statement. One form provides a
22013 selective wait for one or more select_alternatives. Two provide timed
22014 and conditional entry calls. The fourth provides asynchronous transfer
22015 of control.
22016
22017 _Syntax_
22018
22019 2
22020 select_statement ::=
22021 selective_accept
22022 | timed_entry_call
22023 | conditional_entry_call
22024 | asynchronous_select
22025
22026 _Examples_
22027
22028 3
22029 Example of a select statement:
22030
22031 4
22032 select
22033 accept Driver_Awake_Signal;
22034 or
22035 delay 30.0*Seconds;
22036 Stop_The_Train;
22037 end select;
22038
22039 * Menu:
22040
22041 * 9.7.1 :: Selective Accept
22042 * 9.7.2 :: Timed Entry Calls
22043 * 9.7.3 :: Conditional Entry Calls
22044 * 9.7.4 :: Asynchronous Transfer of Control
22045
22046 \1f
22047 File: arm2012.info, Node: 9.7.1, Next: 9.7.2, Up: 9.7
22048
22049 9.7.1 Selective Accept
22050 ----------------------
22051
22052 1
22053 This form of the select_statement allows a combination of waiting for,
22054 and selecting from, one or more alternatives. The selection may depend
22055 on conditions associated with each alternative of the selective_accept.
22056
22057 _Syntax_
22058
22059 2
22060 selective_accept ::=
22061 select
22062 [guard]
22063 select_alternative
22064 { or
22065 [guard]
22066 select_alternative }
22067 [ else
22068 sequence_of_statements ]
22069 end select;
22070
22071 3
22072 guard ::= when condition =>
22073
22074 4
22075 select_alternative ::=
22076 accept_alternative
22077 | delay_alternative
22078 | terminate_alternative
22079
22080 5
22081 accept_alternative ::=
22082 accept_statement [sequence_of_statements]
22083
22084 6
22085 delay_alternative ::=
22086 delay_statement [sequence_of_statements]
22087
22088 7
22089 terminate_alternative ::= terminate;
22090
22091 8
22092 A selective_accept shall contain at least one accept_alternative.
22093 In addition, it can contain:
22094
22095 9
22096 * a terminate_alternative (only one); or
22097
22098 10
22099 * one or more delay_alternatives; or
22100
22101 11
22102 * an else part (the reserved word else followed by a
22103 sequence_of_statements).
22104
22105 12
22106 These three possibilities are mutually exclusive.
22107
22108 _Legality Rules_
22109
22110 13
22111 If a selective_accept contains more than one delay_alternative, then all
22112 shall be delay_relative_statement (*note 9.6: S0229.)s, or all shall be
22113 delay_until_statement (*note 9.6: S0228.)s for the same time type.
22114
22115 _Dynamic Semantics_
22116
22117 14
22118 A select_alternative is said to be open if it is not immediately
22119 preceded by a guard, or if the condition of its guard evaluates to True.
22120 It is said to be closed otherwise.
22121
22122 15
22123 For the execution of a selective_accept, any guard conditions are
22124 evaluated; open alternatives are thus determined. For an open
22125 delay_alternative, the delay_expression is also evaluated. Similarly,
22126 for an open accept_alternative for an entry of a family, the entry_index
22127 is also evaluated. These evaluations are performed in an arbitrary
22128 order, except that a delay_expression or entry_index is not evaluated
22129 until after evaluating the corresponding condition, if any. Selection
22130 and execution of one open alternative, or of the else part, then
22131 completes the execution of the selective_accept; the rules for this
22132 selection are described below.
22133
22134 16
22135 Open accept_alternatives are first considered. Selection of one such
22136 alternative takes place immediately if the corresponding entry already
22137 has queued calls. If several alternatives can thus be selected, one of
22138 them is selected according to the entry queuing policy in effect (see
22139 *note 9.5.3:: and *note D.4::). When such an alternative is selected,
22140 the selected call is removed from its entry queue and the
22141 handled_sequence_of_statements (*note 11.2: S0265.) (if any) of the
22142 corresponding accept_statement is executed; after the rendezvous
22143 completes any subsequent sequence_of_statements (*note 5.1: S0145.) of
22144 the alternative is executed. If no selection is immediately possible
22145 (in the above sense) and there is no else part, the task blocks until an
22146 open alternative can be selected.
22147
22148 17
22149 Selection of the other forms of alternative or of an else part is
22150 performed as follows:
22151
22152 18
22153 * An open delay_alternative is selected when its expiration time is
22154 reached if no accept_alternative (*note 9.7.1: S0234.) or other
22155 delay_alternative (*note 9.7.1: S0235.) can be selected prior to
22156 the expiration time. If several delay_alternative (*note 9.7.1:
22157 S0235.)s have this same expiration time, one of them is selected
22158 according to the queuing policy in effect (see *note D.4::); the
22159 default queuing policy chooses arbitrarily among the
22160 delay_alternative (*note 9.7.1: S0235.)s whose expiration time has
22161 passed.
22162
22163 19
22164 * The else part is selected and its sequence_of_statements (*note
22165 5.1: S0145.) is executed if no accept_alternative can immediately
22166 be selected; in particular, if all alternatives are closed.
22167
22168 20/3
22169 * An open terminate_alternative is selected if the conditions stated
22170 at the end of subclause *note 9.3:: are satisfied.
22171
22172 21
22173 The exception Program_Error is raised if all alternatives are closed and
22174 there is no else part.
22175
22176 NOTES
22177
22178 22
22179 40 A selective_accept is allowed to have several open
22180 delay_alternatives. A selective_accept is allowed to have several
22181 open accept_alternatives for the same entry.
22182
22183 _Examples_
22184
22185 23
22186 Example of a task body with a selective accept:
22187
22188 24
22189 task body Server is
22190 Current_Work_Item : Work_Item;
22191 begin
22192 loop
22193 select
22194 accept Next_Work_Item(WI : in Work_Item) do
22195 Current_Work_Item := WI;
22196 end;
22197 Process_Work_Item(Current_Work_Item);
22198 or
22199 accept Shut_Down;
22200 exit; -- Premature shut down requested
22201 or
22202 terminate; -- Normal shutdown at end of scope
22203 end select;
22204 end loop;
22205 end Server;
22206
22207 \1f
22208 File: arm2012.info, Node: 9.7.2, Next: 9.7.3, Prev: 9.7.1, Up: 9.7
22209
22210 9.7.2 Timed Entry Calls
22211 -----------------------
22212
22213 1/2
22214 A timed_entry_call issues an entry call that is cancelled if the call
22215 (or a requeue-with-abort of the call) is not selected before the
22216 expiration time is reached. A procedure call may appear rather than an
22217 entry call for cases where the procedure might be implemented by an
22218 entry.
22219
22220 _Syntax_
22221
22222 2
22223 timed_entry_call ::=
22224 select
22225 entry_call_alternative
22226 or
22227 delay_alternative
22228 end select;
22229
22230 3/2
22231 entry_call_alternative ::=
22232 procedure_or_entry_call [sequence_of_statements]
22233
22234 3.1/2
22235 procedure_or_entry_call ::=
22236 procedure_call_statement | entry_call_statement
22237
22238 _Legality Rules_
22239
22240 3.2/2
22241 If a procedure_call_statement is used for a procedure_or_entry_call, the
22242 procedure_name or procedure_prefix of the procedure_call_statement shall
22243 statically denote an entry renamed as a procedure or (a view of) a
22244 primitive subprogram of a limited interface whose first parameter is a
22245 controlling parameter (see *note 3.9.2::).
22246
22247 _Dynamic Semantics_
22248
22249 4/2
22250 For the execution of a timed_entry_call, the entry_name, procedure_name,
22251 or procedure_prefix, and any actual parameters are evaluated, as for a
22252 simple entry call (see *note 9.5.3::) or procedure call (see *note
22253 6.4::). The expiration time (see *note 9.6::) for the call is
22254 determined by evaluating the delay_expression of the delay_alternative.
22255 If the call is an entry call or a call on a procedure implemented by an
22256 entry, the entry call is then issued. Otherwise, the call proceeds as
22257 described in *note 6.4:: for a procedure call, followed by the
22258 sequence_of_statements (*note 5.1: S0145.) of the entry_call_alternative
22259 (*note 9.7.2: S0238.); the sequence_of_statements (*note 5.1: S0145.) of
22260 the delay_alternative (*note 9.7.1: S0235.) is ignored.
22261
22262 5
22263 If the call is queued (including due to a requeue-with-abort), and not
22264 selected before the expiration time is reached, an attempt to cancel the
22265 call is made. If the call completes due to the cancellation, the
22266 optional sequence_of_statements (*note 5.1: S0145.) of the
22267 delay_alternative (*note 9.7.1: S0235.) is executed; if the entry call
22268 completes normally, the optional sequence_of_statements (*note 5.1:
22269 S0145.) of the entry_call_alternative (*note 9.7.2: S0238.) is executed.
22270
22271 _Examples_
22272
22273 6
22274 Example of a timed entry call:
22275
22276 7
22277 select
22278 Controller.Request(Medium)(Some_Item);
22279 or
22280 delay 45.0;
22281 -- controller too busy, try something else
22282 end select;
22283
22284 \1f
22285 File: arm2012.info, Node: 9.7.3, Next: 9.7.4, Prev: 9.7.2, Up: 9.7
22286
22287 9.7.3 Conditional Entry Calls
22288 -----------------------------
22289
22290 1/2
22291 A conditional_entry_call issues an entry call that is then cancelled if
22292 it is not selected immediately (or if a requeue-with-abort of the call
22293 is not selected immediately). A procedure call may appear rather than
22294 an entry call for cases where the procedure might be implemented by an
22295 entry.
22296
22297 _Syntax_
22298
22299 2
22300 conditional_entry_call ::=
22301 select
22302 entry_call_alternative
22303 else
22304 sequence_of_statements
22305 end select;
22306
22307 _Dynamic Semantics_
22308
22309 3
22310 The execution of a conditional_entry_call is defined to be equivalent to
22311 the execution of a timed_entry_call (*note 9.7.2: S0237.) with a
22312 delay_alternative (*note 9.7.1: S0235.) specifying an immediate
22313 expiration time and the same sequence_of_statements (*note 5.1: S0145.)
22314 as given after the reserved word else.
22315
22316 NOTES
22317
22318 4
22319 41 A conditional_entry_call may briefly increase the Count
22320 attribute of the entry, even if the conditional call is not
22321 selected.
22322
22323 _Examples_
22324
22325 5
22326 Example of a conditional entry call:
22327
22328 6
22329 procedure Spin(R : in Resource) is
22330 begin
22331 loop
22332 select
22333 R.Seize;
22334 return;
22335 else
22336 null; -- busy waiting
22337 end select;
22338 end loop;
22339 end;
22340
22341 \1f
22342 File: arm2012.info, Node: 9.7.4, Prev: 9.7.3, Up: 9.7
22343
22344 9.7.4 Asynchronous Transfer of Control
22345 --------------------------------------
22346
22347 1
22348 An asynchronous select_statement provides asynchronous transfer of
22349 control upon completion of an entry call or the expiration of a delay.
22350
22351 _Syntax_
22352
22353 2
22354 asynchronous_select ::=
22355 select
22356 triggering_alternative
22357 then abort
22358 abortable_part
22359 end select;
22360
22361 3
22362 triggering_alternative ::= triggering_statement [
22363 sequence_of_statements]
22364
22365 4/2
22366 triggering_statement ::= procedure_or_entry_call | delay_statement
22367
22368 5
22369 abortable_part ::= sequence_of_statements
22370
22371 _Dynamic Semantics_
22372
22373 6/2
22374 For the execution of an asynchronous_select whose triggering_statement
22375 (*note 9.7.4: S0243.) is a procedure_or_entry_call, the entry_name,
22376 procedure_name, or procedure_prefix, and actual parameters are evaluated
22377 as for a simple entry call (see *note 9.5.3::) or procedure call (see
22378 *note 6.4::). If the call is an entry call or a call on a procedure
22379 implemented by an entry, the entry call is issued. If the entry call is
22380 queued (or requeued-with-abort), then the abortable_part is executed.
22381 If the entry call is selected immediately, and never
22382 requeued-with-abort, then the abortable_part is never started. If the
22383 call is on a procedure that is not implemented by an entry, the call
22384 proceeds as described in *note 6.4::, followed by the
22385 sequence_of_statements (*note 5.1: S0145.) of the triggering_alternative
22386 (*note 9.7.4: S0242.); the abortable_part is never started.
22387
22388 7
22389 For the execution of an asynchronous_select whose triggering_statement
22390 (*note 9.7.4: S0243.) is a delay_statement, the delay_expression is
22391 evaluated and the expiration time is determined, as for a normal
22392 delay_statement. If the expiration time has not already passed, the
22393 abortable_part is executed.
22394
22395 8
22396 If the abortable_part completes and is left prior to completion of the
22397 triggering_statement (*note 9.7.4: S0243.), an attempt to cancel the
22398 triggering_statement (*note 9.7.4: S0243.) is made. If the attempt to
22399 cancel succeeds (see *note 9.5.3:: and *note 9.6::), the
22400 asynchronous_select is complete.
22401
22402 9
22403 If the triggering_statement (*note 9.7.4: S0243.) completes other than
22404 due to cancellation, the abortable_part is aborted (if started but not
22405 yet completed -- see *note 9.8::). If the triggering_statement (*note
22406 9.7.4: S0243.) completes normally, the optional sequence_of_statements
22407 (*note 5.1: S0145.) of the triggering_alternative (*note 9.7.4: S0242.)
22408 is executed after the abortable_part is left.
22409
22410 _Examples_
22411
22412 10
22413 Example of a main command loop for a command interpreter:
22414
22415 11
22416 loop
22417 select
22418 Terminal.Wait_For_Interrupt;
22419 Put_Line("Interrupted");
22420 then abort
22421 -- This will be abandoned upon terminal interrupt
22422 Put_Line("-> ");
22423 Get_Line(Command, Last);
22424 Process_Command(Command(1..Last));
22425 end select;
22426 end loop;
22427
22428 12
22429 Example of a time-limited calculation:
22430
22431 13
22432 select
22433 delay 5.0;
22434 Put_Line("Calculation does not converge");
22435 then abort
22436 -- This calculation should finish in 5.0 seconds;
22437 -- if not, it is assumed to diverge.
22438 Horribly_Complicated_Recursive_Function(X, Y);
22439 end select;
22440
22441 \1f
22442 File: arm2012.info, Node: 9.8, Next: 9.9, Prev: 9.7, Up: 9
22443
22444 9.8 Abort of a Task - Abort of a Sequence of Statements
22445 =======================================================
22446
22447 1
22448 An abort_statement causes one or more tasks to become abnormal, thus
22449 preventing any further interaction with such tasks. The completion of
22450 the triggering_statement (*note 9.7.4: S0243.) of an asynchronous_select
22451 causes a sequence_of_statements (*note 5.1: S0145.) to be aborted.
22452
22453 _Syntax_
22454
22455 2
22456 abort_statement ::= abort task_name {, task_name};
22457
22458 _Name Resolution Rules_
22459
22460 3
22461 Each task_name is expected to be of any task type; they need not all be
22462 of the same task type.
22463
22464 _Dynamic Semantics_
22465
22466 4
22467 For the execution of an abort_statement, the given task_names are
22468 evaluated in an arbitrary order. Each named task is then aborted, which
22469 consists of making the task abnormal and aborting the execution of the
22470 corresponding task_body, unless it is already completed.
22471
22472 5
22473 When the execution of a construct is aborted (including that of a
22474 task_body (*note 9.1: S0209.) or of a sequence_of_statements (*note 5.1:
22475 S0145.)), the execution of every construct included within the aborted
22476 execution is also aborted, except for executions included within the
22477 execution of an abort-deferred operation; the execution of an
22478 abort-deferred operation continues to completion without being affected
22479 by the abort; the following are the abort-deferred operations:
22480
22481 6
22482 * a protected action;
22483
22484 7
22485 * waiting for an entry call to complete (after having initiated the
22486 attempt to cancel it -- see below);
22487
22488 8
22489 * waiting for the termination of dependent tasks;
22490
22491 9
22492 * the execution of an Initialize procedure as the last step of the
22493 default initialization of a controlled object;
22494
22495 10
22496 * the execution of a Finalize procedure as part of the finalization
22497 of a controlled object;
22498
22499 11
22500 * an assignment operation to an object with a controlled part.
22501
22502 12
22503 The last three of these are discussed further in *note 7.6::.
22504
22505 13
22506 When a master is aborted, all tasks that depend on that master are
22507 aborted.
22508
22509 14
22510 The order in which tasks become abnormal as the result of an
22511 abort_statement or the abort of a sequence_of_statements (*note 5.1:
22512 S0145.) is not specified by the language.
22513
22514 15
22515 If the execution of an entry call is aborted, an immediate attempt is
22516 made to cancel the entry call (see *note 9.5.3::). If the execution of
22517 a construct is aborted at a time when the execution is blocked, other
22518 than for an entry call, at a point that is outside the execution of an
22519 abort-deferred operation, then the execution of the construct completes
22520 immediately. For an abort due to an abort_statement, these immediate
22521 effects occur before the execution of the abort_statement completes.
22522 Other than for these immediate cases, the execution of a construct that
22523 is aborted does not necessarily complete before the abort_statement
22524 completes. However, the execution of the aborted construct completes no
22525 later than its next abort completion point (if any) that occurs outside
22526 of an abort-deferred operation; the following are abort completion
22527 points for an execution:
22528
22529 16
22530 * the point where the execution initiates the activation of another
22531 task;
22532
22533 17
22534 * the end of the activation of a task;
22535
22536 18
22537 * the start or end of the execution of an entry call,
22538 accept_statement, delay_statement, or abort_statement;
22539
22540 19
22541 * the start of the execution of a select_statement, or of the
22542 sequence_of_statements (*note 5.1: S0145.) of an exception_handler.
22543
22544 _Bounded (Run-Time) Errors_
22545
22546 20/3
22547 An attempt to execute an asynchronous_select as part of the execution of
22548 an abort-deferred operation is a bounded error. Similarly, an attempt
22549 to create a task that depends on a master that is included entirely
22550 within the execution of an abort-deferred operation is a bounded error.
22551 In both cases, Program_Error is raised if the error is detected by the
22552 implementation; otherwise, the operations proceed as they would outside
22553 an abort-deferred operation, except that an abort of the abortable_part
22554 or the created task might or might not have an effect.
22555
22556 _Erroneous Execution_
22557
22558 21
22559 If an assignment operation completes prematurely due to an abort, the
22560 assignment is said to be disrupted; the target of the assignment or its
22561 parts can become abnormal, and certain subsequent uses of the object can
22562 be erroneous, as explained in *note 13.9.1::.
22563
22564 NOTES
22565
22566 22
22567 42 An abort_statement should be used only in situations requiring
22568 unconditional termination.
22569
22570 23
22571 43 A task is allowed to abort any task it can name, including
22572 itself.
22573
22574 24
22575 44 Additional requirements associated with abort are given in
22576 *note D.6::, "*note D.6:: Preemptive Abort".
22577
22578 \1f
22579 File: arm2012.info, Node: 9.9, Next: 9.10, Prev: 9.8, Up: 9
22580
22581 9.9 Task and Entry Attributes
22582 =============================
22583
22584 _Dynamic Semantics_
22585
22586 1
22587 For a prefix T that is of a task type (after any implicit dereference),
22588 the following attributes are defined:
22589
22590 2
22591 T'Callable
22592 Yields the value True when the task denoted by T is
22593 callable, and False otherwise; a task is callable unless
22594 it is completed or abnormal. The value of this attribute
22595 is of the predefined type Boolean.
22596
22597 3
22598 T'Terminated
22599 Yields the value True if the task denoted by T is
22600 terminated, and False otherwise. The value of this
22601 attribute is of the predefined type Boolean.
22602
22603 4
22604 For a prefix E that denotes an entry of a task or protected unit, the
22605 following attribute is defined. This attribute is only allowed within
22606 the body of the task or protected unit, but excluding, in the case of an
22607 entry of a task unit, within any program unit that is, itself, inner to
22608 the body of the task unit.
22609
22610 5
22611 E'Count
22612 Yields the number of calls presently queued on the entry
22613 E of the current instance of the unit. The value of this
22614 attribute is of the type universal_integer.
22615
22616 NOTES
22617
22618 6
22619 45 For the Count attribute, the entry can be either a single entry
22620 or an entry of a family. The name of the entry or entry family can
22621 be either a direct_name or an expanded name.
22622
22623 7
22624 46 Within task units, algorithms interrogating the attribute
22625 E'Count should take precautions to allow for the increase of the
22626 value of this attribute for incoming entry calls, and its decrease,
22627 for example with timed_entry_calls. Also, a conditional_entry_call
22628 may briefly increase this value, even if the conditional call is
22629 not accepted.
22630
22631 8
22632 47 Within protected units, algorithms interrogating the attribute
22633 E'Count in the entry_barrier for the entry E should take
22634 precautions to allow for the evaluation of the condition of the
22635 barrier both before and after queuing a given caller.
22636
22637 \1f
22638 File: arm2012.info, Node: 9.10, Next: 9.11, Prev: 9.9, Up: 9
22639
22640 9.10 Shared Variables
22641 =====================
22642
22643 _Static Semantics_
22644
22645 1/3
22646 If two different objects, including nonoverlapping parts of the same
22647 object, are independently addressable, they can be manipulated
22648 concurrently by two different tasks without synchronization. Any two
22649 nonoverlapping objects are independently addressable if either object is
22650 specified as independently addressable (see *note C.6::). Otherwise,
22651 two nonoverlapping objects are independently addressable except when
22652 they are both parts of a composite object for which a nonconfirming
22653 value is specified for any of the following representation aspects:
22654 (record) Layout, Component_Size, Pack, Atomic, or Convention; in this
22655 case it is unspecified whether the parts are independently addressable.
22656
22657 _Dynamic Semantics_
22658
22659 2
22660 Separate tasks normally proceed independently and concurrently with one
22661 another. However, task interactions can be used to synchronize the
22662 actions of two or more tasks to allow, for example, meaningful
22663 communication by the direct updating and reading of variables shared
22664 between the tasks. The actions of two different tasks are synchronized
22665 in this sense when an action of one task signals an action of the other
22666 task; an action A1 is defined to signal an action A2 under the following
22667 circumstances:
22668
22669 3
22670 * If A1 and A2 are part of the execution of the same task, and the
22671 language rules require A1 to be performed before A2;
22672
22673 4
22674 * If A1 is the action of an activator that initiates the activation
22675 of a task, and A2 is part of the execution of the task that is
22676 activated;
22677
22678 5
22679 * If A1 is part of the activation of a task, and A2 is the action of
22680 waiting for completion of the activation;
22681
22682 6
22683 * If A1 is part of the execution of a task, and A2 is the action of
22684 waiting for the termination of the task;
22685
22686 6.1/3
22687 * If A1 is the termination of a task T, and A2 is either an
22688 evaluation of the expression T'Terminated that results in True, or
22689 a call to Ada.Task_Identification.Is_Terminated with an actual
22690 parameter that identifies T and a result of True (see *note
22691 C.7.1::);
22692
22693 7/3
22694 * If A1 is the action of issuing an entry call, and A2 is part of the
22695 corresponding execution of the appropriate entry_body or
22696 accept_statement;
22697
22698 8
22699 * If A1 is part of the execution of an accept_statement or
22700 entry_body, and A2 is the action of returning from the
22701 corresponding entry call;
22702
22703 9
22704 * If A1 is part of the execution of a protected procedure body or
22705 entry_body for a given protected object, and A2 is part of a later
22706 execution of an entry_body for the same protected object;
22707
22708 10
22709 * If A1 signals some action that in turn signals A2.
22710
22711 _Erroneous Execution_
22712
22713 11
22714 Given an action of assigning to an object, and an action of reading or
22715 updating a part of the same object (or of a neighboring object if the
22716 two are not independently addressable), then the execution of the
22717 actions is erroneous unless the actions are sequential. Two actions are
22718 sequential if one of the following is true:
22719
22720 12
22721 * One action signals the other;
22722
22723 13
22724 * Both actions occur as part of the execution of the same task;
22725
22726 14
22727 * Both actions occur as part of protected actions on the same
22728 protected object, and at most one of the actions is part of a call
22729 on a protected function of the protected object.
22730
22731 15/3
22732 Aspect Atomic or aspect Atomic_Components may also be specified to
22733 ensure that certain reads and updates are sequential -- see *note C.6::.
22734
22735 \1f
22736 File: arm2012.info, Node: 9.11, Prev: 9.10, Up: 9
22737
22738 9.11 Example of Tasking and Synchronization
22739 ===========================================
22740
22741 _Examples_
22742
22743 1
22744 The following example defines a buffer protected object to smooth
22745 variations between the speed of output of a producing task and the speed
22746 of input of some consuming task. For instance, the producing task might
22747 have the following structure:
22748
22749 2
22750 task Producer;
22751
22752 3/2
22753 task body Producer is
22754 Person : Person_Name; -- see *note 3.10.1::
22755 begin
22756 loop
22757 ... -- simulate arrival of the next customer
22758 Buffer.Append_Wait(Person);
22759 exit when Person = null;
22760 end loop;
22761 end Producer;
22762
22763 4
22764 and the consuming task might have the following structure:
22765
22766 5
22767 task Consumer;
22768
22769 6/2
22770 task body Consumer is
22771 Person : Person_Name;
22772 begin
22773 loop
22774 Buffer.Remove_First_Wait(Person);
22775 exit when Person = null;
22776 ... -- simulate serving a customer
22777 end loop;
22778 end Consumer;
22779
22780 7/2
22781 The buffer object contains an internal array of person names managed in
22782 a round-robin fashion. The array has two indices, an In_Index denoting
22783 the index for the next input person name and an Out_Index denoting the
22784 index for the next output person name.
22785
22786 7.1/2
22787 The Buffer is defined as an extension of the Synchronized_Queue
22788 interface (see *note 3.9.4::), and as such promises to implement the
22789 abstraction defined by that interface. By doing so, the Buffer can be
22790 passed to the Transfer class-wide operation defined for objects of a
22791 type covered by Queue'Class.
22792
22793 8/2
22794 protected Buffer is new Synchronized_Queue with -- see *note 3.9.4::
22795 entry Append_Wait(Person : in Person_Name);
22796 entry Remove_First_Wait(Person : out Person_Name);
22797 function Cur_Count return Natural;
22798 function Max_Count return Natural;
22799 procedure Append(Person : in Person_Name);
22800 procedure Remove_First(Person : out Person_Name);
22801 private
22802 Pool : Person_Name_Array(1 .. 100);
22803 Count : Natural := 0;
22804 In_Index, Out_Index : Positive := 1;
22805 end Buffer;
22806
22807 9/2
22808 protected body Buffer is
22809 entry Append_Wait(Person : in Person_Name)
22810 when Count < Pool'Length is
22811 begin
22812 Append(Person);
22813 end Append_Wait;
22814
22815 9.1/2
22816 procedure Append(Person : in Person_Name) is
22817 begin
22818 if Count = Pool'Length then
22819 raise Queue_Error with "Buffer Full"; -- see *note 11.3::
22820 end if;
22821 Pool(In_Index) := Person;
22822 In_Index := (In_Index mod Pool'Length) + 1;
22823 Count := Count + 1;
22824 end Append;
22825
22826 10/2
22827 entry Remove_First_Wait(Person : out Person_Name)
22828 when Count > 0 is
22829 begin
22830 Remove_First(Person);
22831 end Remove_First_Wait;
22832
22833 11/2
22834 procedure Remove_First(Person : out Person_Name) is
22835 begin
22836 if Count = 0 then
22837 raise Queue_Error with "Buffer Empty"; -- see *note 11.3::
22838 end if;
22839 Person := Pool(Out_Index);
22840 Out_Index := (Out_Index mod Pool'Length) + 1;
22841 Count := Count - 1;
22842 end Remove_First;
22843
22844 12/2
22845 function Cur_Count return Natural is
22846 begin
22847 return Buffer.Count;
22848 end Cur_Count;
22849
22850 13/2
22851 function Max_Count return Natural is
22852 begin
22853 return Pool'Length;
22854 end Max_Count;
22855 end Buffer;
22856
22857 \1f
22858 File: arm2012.info, Node: 10, Next: 11, Prev: 9, Up: Top
22859
22860 10 Program Structure and Compilation Issues
22861 *******************************************
22862
22863 1/3
22864 The overall structure of programs and the facilities for separate
22865 compilation are described in this clause. A program is a set of
22866 partitions, each of which may execute in a separate address space,
22867 possibly on a separate computer.
22868
22869 2
22870 As explained below, a partition is constructed from library units.
22871 Syntactically, the declaration of a library unit is a library_item, as
22872 is the body of a library unit. An implementation may support a concept
22873 of a program library (or simply, a "library"), which contains
22874 library_items and their subunits. Library units may be organized into a
22875 hierarchy of children, grandchildren, and so on.
22876
22877 3/3
22878 This clause has two subclauses: *note 10.1::, "*note 10.1:: Separate
22879 Compilation" discusses compile-time issues related to separate
22880 compilation. *note 10.2::, "*note 10.2:: Program Execution" discusses
22881 issues related to what is traditionally known as "link time" and "run
22882 time" -- building and executing partitions.
22883
22884 * Menu:
22885
22886 * 10.1 :: Separate Compilation
22887 * 10.2 :: Program Execution
22888
22889 \1f
22890 File: arm2012.info, Node: 10.1, Next: 10.2, Up: 10
22891
22892 10.1 Separate Compilation
22893 =========================
22894
22895 1
22896 A program unit is either a package, a task unit, a protected unit, a
22897 protected entry, a generic unit, or an explicitly declared subprogram
22898 other than an enumeration literal. Certain kinds of program units can
22899 be separately compiled. Alternatively, they can appear physically
22900 nested within other program units.
22901
22902 2
22903 The text of a program can be submitted to the compiler in one or more
22904 compilations. Each compilation is a succession of compilation_units. A
22905 compilation_unit contains either the declaration, the body, or a
22906 renaming of a program unit. The representation for a compilation is
22907 implementation-defined.
22908
22909 3
22910 A library unit is a separately compiled program unit, and is always a
22911 package, subprogram, or generic unit. Library units may have other
22912 (logically nested) library units as children, and may have other program
22913 units physically nested within them. A root library unit, together with
22914 its children and grandchildren and so on, form a subsystem.
22915
22916 _Implementation Permissions_
22917
22918 4
22919 An implementation may impose implementation-defined restrictions on
22920 compilations that contain multiple compilation_units.
22921
22922 * Menu:
22923
22924 * 10.1.1 :: Compilation Units - Library Units
22925 * 10.1.2 :: Context Clauses - With Clauses
22926 * 10.1.3 :: Subunits of Compilation Units
22927 * 10.1.4 :: The Compilation Process
22928 * 10.1.5 :: Pragmas and Program Units
22929 * 10.1.6 :: Environment-Level Visibility Rules
22930
22931 \1f
22932 File: arm2012.info, Node: 10.1.1, Next: 10.1.2, Up: 10.1
22933
22934 10.1.1 Compilation Units - Library Units
22935 ----------------------------------------
22936
22937 1
22938 A library_item is a compilation unit that is the declaration, body, or
22939 renaming of a library unit. Each library unit (except Standard) has a
22940 parent unit, which is a library package or generic library package. A
22941 library unit is a child of its parent unit. The root library units are
22942 the children of the predefined library package Standard.
22943
22944 _Syntax_
22945
22946 2
22947 compilation ::= {compilation_unit}
22948
22949 3
22950 compilation_unit ::=
22951 context_clause library_item
22952 | context_clause subunit
22953
22954 4
22955 library_item ::= [private] library_unit_declaration
22956 | library_unit_body
22957 | [private] library_unit_renaming_declaration
22958
22959 5
22960 library_unit_declaration ::=
22961 subprogram_declaration | package_declaration
22962 | generic_declaration | generic_instantiation
22963
22964 6
22965 library_unit_renaming_declaration ::=
22966 package_renaming_declaration
22967 | generic_renaming_declaration
22968 | subprogram_renaming_declaration
22969
22970 7
22971 library_unit_body ::= subprogram_body | package_body
22972
22973 8
22974 parent_unit_name ::= name
22975
22976 8.1/2
22977 An overriding_indicator is not allowed in a subprogram_declaration,
22978 generic_instantiation, or subprogram_renaming_declaration that
22979 declares a library unit.
22980
22981 9
22982 A library unit is a program unit that is declared by a library_item.
22983 When a program unit is a library unit, the prefix "library" is used to
22984 refer to it (or "generic library" if generic), as well as to its
22985 declaration and body, as in "library procedure", "library package_body",
22986 or "generic library package". The term compilation unit is used to
22987 refer to a compilation_unit. When the meaning is clear from context,
22988 the term is also used to refer to the library_item of a compilation_unit
22989 or to the proper_body of a subunit (that is, the compilation_unit
22990 without the context_clause and the separate (parent_unit_name)).
22991
22992 10
22993 The parent declaration of a library_item (and of the library unit) is
22994 the declaration denoted by the parent_unit_name (*note 10.1.1: S0252.),
22995 if any, of the defining_program_unit_name (*note 6.1: S0169.) of the
22996 library_item. If there is no parent_unit_name (*note 10.1.1: S0252.),
22997 the parent declaration is the declaration of Standard, the library_item
22998 is a root library_item, and the library unit (renaming) is a root
22999 library unit (renaming). The declaration and body of Standard itself
23000 have no parent declaration. The parent unit of a library_item or
23001 library unit is the library unit declared by its parent declaration.
23002
23003 11
23004 The children of a library unit occur immediately within the declarative
23005 region of the declaration of the library unit. The ancestors of a
23006 library unit are itself, its parent, its parent's parent, and so on.
23007 (Standard is an ancestor of every library unit.) The descendant
23008 relation is the inverse of the ancestor relation.
23009
23010 12
23011 A library_unit_declaration or a library_unit_renaming_declaration (*note
23012 10.1.1: S0250.) is private if the declaration is immediately preceded by
23013 the reserved word private; it is otherwise public. A library unit is
23014 private or public according to its declaration. The public descendants
23015 of a library unit are the library unit itself, and the public
23016 descendants of its public children. Its other descendants are private
23017 descendants.
23018
23019 12.1/2
23020 For each library package_declaration in the environment, there is an
23021 implicit declaration of a limited view of that library package. The
23022 limited view of a package contains:
23023
23024 12.2/3
23025 * For each package_declaration occurring immediately within the
23026 visible part, a declaration of the limited view of that package,
23027 with the same defining_program_unit_name.
23028
23029 12.3/3
23030 * For each type_declaration occurring immediately within the visible
23031 part that is not an incomplete_type_declaration, an incomplete view
23032 of the type with no discriminant_part; if the type_declaration is
23033 tagged, then the view is a tagged incomplete view.
23034
23035 12.4/2
23036 The limited view of a library package_declaration is private if that
23037 library package_declaration is immediately preceded by the reserved word
23038 private.
23039
23040 12.5/2
23041 There is no syntax for declaring limited views of packages, because they
23042 are always implicit. The implicit declaration of a limited view of a
23043 library package is not the declaration of a library unit (the library
23044 package_declaration is); nonetheless, it is a library_item. The
23045 implicit declaration of the limited view of a library package forms an
23046 (implicit) compilation unit whose context_clause is empty.
23047
23048 12.6/2
23049 A library package_declaration is the completion of the declaration of
23050 its limited view.
23051
23052 _Legality Rules_
23053
23054 13
23055 The parent unit of a library_item shall be a library package or generic
23056 library package.
23057
23058 14
23059 If a defining_program_unit_name of a given declaration or body has a
23060 parent_unit_name, then the given declaration or body shall be a
23061 library_item. The body of a program unit shall be a library_item if and
23062 only if the declaration of the program unit is a library_item. In a
23063 library_unit_renaming_declaration (*note 10.1.1: S0250.), the (old) name
23064 shall denote a library_item.
23065
23066 15/2
23067 A parent_unit_name (which can be used within a
23068 defining_program_unit_name of a library_item and in the separate clause
23069 of a subunit), and each of its prefixes, shall not denote a
23070 renaming_declaration. On the other hand, a name that denotes a
23071 library_unit_renaming_declaration (*note 10.1.1: S0250.) is allowed in a
23072 nonlimited_with_clause and other places where the name of a library unit
23073 is allowed.
23074
23075 16
23076 If a library package is an instance of a generic package, then every
23077 child of the library package shall either be itself an instance or be a
23078 renaming of a library unit.
23079
23080 17/3
23081 A child of a generic library package shall either be itself a generic
23082 unit or be a renaming of some other child of the same generic unit.
23083
23084 18
23085 A child of a parent generic package shall be instantiated or renamed
23086 only within the declarative region of the parent generic.
23087
23088 19/2
23089 For each child C of some parent generic package P, there is a
23090 corresponding declaration C nested immediately within each instance of
23091 P. For the purposes of this rule, if a child C itself has a child D,
23092 each corresponding declaration for C has a corresponding child D. The
23093 corresponding declaration for a child within an instance is visible only
23094 within the scope of a with_clause that mentions the (original) child
23095 generic unit.
23096
23097 20
23098 A library subprogram shall not override a primitive subprogram.
23099
23100 21
23101 The defining name of a function that is a compilation unit shall not be
23102 an operator_symbol.
23103
23104 _Static Semantics_
23105
23106 22
23107 A subprogram_renaming_declaration that is a
23108 library_unit_renaming_declaration (*note 10.1.1: S0250.) is a
23109 renaming-as-declaration, not a renaming-as-body.
23110
23111 23
23112 There are two kinds of dependences among compilation units:
23113
23114 24
23115 * The semantic dependences (see below) are the ones needed to check
23116 the compile-time rules across compilation unit boundaries; a
23117 compilation unit depends semantically on the other compilation
23118 units needed to determine its legality. The visibility rules are
23119 based on the semantic dependences.
23120
23121 25
23122 * The elaboration dependences (see *note 10.2::) determine the order
23123 of elaboration of library_items.
23124
23125 26/2
23126 A library_item depends semantically upon its parent declaration. A
23127 subunit depends semantically upon its parent body. A library_unit_body
23128 depends semantically upon the corresponding library_unit_declaration, if
23129 any. The declaration of the limited view of a library package depends
23130 semantically upon the declaration of the limited view of its parent.
23131 The declaration of a library package depends semantically upon the
23132 declaration of its limited view. A compilation unit depends
23133 semantically upon each library_item mentioned in a with_clause of the
23134 compilation unit. In addition, if a given compilation unit contains an
23135 attribute_reference of a type defined in another compilation unit, then
23136 the given compilation unit depends semantically upon the other
23137 compilation unit. The semantic dependence relationship is transitive.
23138
23139 _Dynamic Semantics_
23140
23141 26.1/2
23142 The elaboration of the declaration of the limited view of a package has
23143 no effect.
23144
23145 NOTES
23146
23147 27
23148 1 A simple program may consist of a single compilation unit. A
23149 compilation need not have any compilation units; for example, its
23150 text can consist of pragmas.
23151
23152 28
23153 2 The designator of a library function cannot be an
23154 operator_symbol, but a nonlibrary renaming_declaration is allowed
23155 to rename a library function as an operator. Within a partition,
23156 two library subprograms are required to have distinct names and
23157 hence cannot overload each other. However, renaming_declarations
23158 are allowed to define overloaded names for such subprograms, and a
23159 locally declared subprogram is allowed to overload a library
23160 subprogram. The expanded name Standard.L can be used to denote a
23161 root library unit L (unless the declaration of Standard is hidden)
23162 since root library unit declarations occur immediately within the
23163 declarative region of package Standard.
23164
23165 _Examples_
23166
23167 29
23168 Examples of library units:
23169
23170 30
23171 package Rational_Numbers.IO is -- public child of Rational_Numbers, see *note 7.1::
23172 procedure Put(R : in Rational);
23173 procedure Get(R : out Rational);
23174 end Rational_Numbers.IO;
23175
23176 31
23177 private procedure Rational_Numbers.Reduce(R : in out Rational);
23178 -- private child of Rational_Numbers
23179
23180 32
23181 with Rational_Numbers.Reduce; -- refer to a private child
23182 package body Rational_Numbers is
23183 ...
23184 end Rational_Numbers;
23185
23186 33
23187 with Rational_Numbers.IO; use Rational_Numbers;
23188 with Ada.Text_io; -- see *note A.10::
23189 procedure Main is -- a root library procedure
23190 R : Rational;
23191 begin
23192 R := 5/3; -- construct a rational number, see *note 7.1::
23193 Ada.Text_IO.Put("The answer is: ");
23194 IO.Put(R);
23195 Ada.Text_IO.New_Line;
23196 end Main;
23197
23198 34
23199 with Rational_Numbers.IO;
23200 package Rational_IO renames Rational_Numbers.IO;
23201 -- a library unit renaming declaration
23202
23203 35
23204 Each of the above library_items can be submitted to the compiler
23205 separately.
23206
23207 \1f
23208 File: arm2012.info, Node: 10.1.2, Next: 10.1.3, Prev: 10.1.1, Up: 10.1
23209
23210 10.1.2 Context Clauses - With Clauses
23211 -------------------------------------
23212
23213 1
23214 A context_clause is used to specify the library_items whose names are
23215 needed within a compilation unit.
23216
23217 _Syntax_
23218
23219 2
23220 context_clause ::= {context_item}
23221
23222 3
23223 context_item ::= with_clause | use_clause
23224
23225 4/2
23226 with_clause ::= limited_with_clause | nonlimited_with_clause
23227
23228 4.1/2
23229 limited_with_clause ::= limited [private] with library_unit_
23230 name {, library_unit_name};
23231
23232 4.2/2
23233 nonlimited_with_clause ::= [private] with library_unit_
23234 name {, library_unit_name};
23235
23236 _Name Resolution Rules_
23237
23238 5
23239 The scope of a with_clause that appears on a library_unit_declaration
23240 (*note 10.1.1: S0249.) or library_unit_renaming_declaration (*note
23241 10.1.1: S0250.) consists of the entire declarative region of the
23242 declaration, which includes all children and subunits. The scope of a
23243 with_clause that appears on a body consists of the body, which includes
23244 all subunits.
23245
23246 6/2
23247 A library_item (and the corresponding library unit) is named in a
23248 with_clause if it is denoted by a library_unit_name in the with_clause.
23249 A library_item (and the corresponding library unit) is mentioned in a
23250 with_clause if it is named in the with_clause or if it is denoted by a
23251 prefix in the with_clause.
23252
23253 7
23254 Outside its own declarative region, the declaration or renaming of a
23255 library unit can be visible only within the scope of a with_clause that
23256 mentions it. The visibility of the declaration or renaming of a library
23257 unit otherwise follows from its placement in the environment.
23258
23259 _Legality Rules_
23260
23261 8/2
23262 If a with_clause of a given compilation_unit mentions a private child of
23263 some library unit, then the given compilation_unit shall be one of:
23264
23265 9/2
23266 * the declaration, body, or subunit of a private descendant of that
23267 library unit;
23268
23269 10/2
23270 * the body or subunit of a public descendant of that library unit,
23271 but not a subprogram body acting as a subprogram declaration (see
23272 *note 10.1.4::); or
23273
23274 11/2
23275 * the declaration of a public descendant of that library unit, in
23276 which case the with_clause shall include the reserved word private.
23277
23278 12/3
23279 A name denoting a library_item (or the corresponding declaration for a
23280 child of a generic within an instance -- see *note 10.1.1::), if it is
23281 visible only due to being mentioned in one or more with_clauses that
23282 include the reserved word private, shall appear only within:
23283
23284 13/2
23285 * a private part;
23286
23287 14/2
23288 * a body, but not within the subprogram_specification of a library
23289 subprogram body;
23290
23291 15/2
23292 * a private descendant of the unit on which one of these with_clauses
23293 appear; or
23294
23295 16/2
23296 * a pragma within a context clause.
23297
23298 17/2
23299 A library_item mentioned in a limited_with_clause shall be the implicit
23300 declaration of the limited view of a library package, not the
23301 declaration of a subprogram, generic unit, generic instance, or a
23302 renaming.
23303
23304 18/2
23305 A limited_with_clause shall not appear on a library_unit_body, subunit,
23306 or library_unit_renaming_declaration (*note 10.1.1: S0250.).
23307
23308 19/2
23309 A limited_with_clause that names a library package shall not appear:
23310
23311 20/3
23312 * in the context_clause for the explicit declaration of the named
23313 library package or any of its descendants;
23314
23315 21/3
23316 * within a context_clause for a library_item that is within the scope
23317 of a nonlimited_with_clause that mentions the same library package;
23318 or
23319
23320 22/3
23321 * within a context_clause for a library_item that is within the scope
23322 of a use_clause that names an entity declared within the
23323 declarative region of the library package.
23324
23325 NOTES
23326
23327 23/2
23328 3 A library_item mentioned in a nonlimited_with_clause of a
23329 compilation unit is visible within the compilation unit and hence
23330 acts just like an ordinary declaration. Thus, within a compilation
23331 unit that mentions its declaration, the name of a library package
23332 can be given in use_clauses and can be used to form expanded names,
23333 a library subprogram can be called, and instances of a generic
23334 library unit can be declared. If a child of a parent generic
23335 package is mentioned in a nonlimited_with_clause, then the
23336 corresponding declaration nested within each visible instance is
23337 visible within the compilation unit. Similarly, a library_item
23338 mentioned in a limited_with_clause of a compilation unit is visible
23339 within the compilation unit and thus can be used to form expanded
23340 names.
23341
23342 _Examples_
23343
23344 24/2
23345 package Office is
23346 end Office;
23347
23348 25/2
23349 with Ada.Strings.Unbounded;
23350 package Office.Locations is
23351 type Location is new Ada.Strings.Unbounded.Unbounded_String;
23352 end Office.Locations;
23353
23354 26/2
23355 limited with Office.Departments; -- types are incomplete
23356 private with Office.Locations; -- only visible in private part
23357 package Office.Employees is
23358 type Employee is private;
23359
23360 27/2
23361 function Dept_Of(Emp : Employee) return access Departments.Department;
23362 procedure Assign_Dept(Emp : in out Employee;
23363 Dept : access Departments.Department);
23364
23365 28/2
23366 ...
23367 private
23368 type Employee is
23369 record
23370 Dept : access Departments.Department;
23371 Loc : Locations.Location;
23372 ...
23373 end record;
23374 end Office.Employees;
23375
23376 29/2
23377 limited with Office.Employees;
23378 package Office.Departments is
23379 type Department is private;
23380
23381 30/2
23382 function Manager_Of(Dept : Department) return access Employees.Employee;
23383 procedure Assign_Manager(Dept : in out Department;
23384 Mgr : access Employees.Employee);
23385 ...
23386 end Office.Departments;
23387
23388 31/2
23389 The limited_with_clause may be used to support mutually dependent
23390 abstractions that are split across multiple packages. In this case, an
23391 employee is assigned to a department, and a department has a manager who
23392 is an employee. If a with_clause with the reserved word private appears
23393 on one library unit and mentions a second library unit, it provides
23394 visibility to the second library unit, but restricts that visibility to
23395 the private part and body of the first unit. The compiler checks that
23396 no use is made of the second unit in the visible part of the first unit.
23397
23398 \1f
23399 File: arm2012.info, Node: 10.1.3, Next: 10.1.4, Prev: 10.1.2, Up: 10.1
23400
23401 10.1.3 Subunits of Compilation Units
23402 ------------------------------------
23403
23404 1
23405 Subunits are like child units, with these (important) differences:
23406 subunits support the separate compilation of bodies only (not
23407 declarations); the parent contains a body_stub to indicate the existence
23408 and place of each of its subunits; declarations appearing in the
23409 parent's body can be visible within the subunits.
23410
23411 _Syntax_
23412
23413 2
23414 body_stub ::= subprogram_body_stub | package_body_stub |
23415 task_body_stub | protected_body_stub
23416
23417 3/3
23418 subprogram_body_stub ::=
23419 [overriding_indicator]
23420 subprogram_specification is separate
23421 [aspect_specification];
23422
23423 4
23424 package_body_stub ::=
23425 package body defining_identifier is separate
23426 [aspect_specification];
23427
23428 5
23429 task_body_stub ::=
23430 task body defining_identifier is separate
23431 [aspect_specification];
23432
23433 6
23434 protected_body_stub ::=
23435 protected body defining_identifier is separate
23436 [aspect_specification];
23437
23438 7
23439 subunit ::= separate (parent_unit_name) proper_body
23440
23441 _Legality Rules_
23442
23443 8/2
23444 The parent body of a subunit is the body of the program unit denoted by
23445 its parent_unit_name. The term subunit is used to refer to a subunit
23446 and also to the proper_body of a subunit. The subunits of a program
23447 unit include any subunit that names that program unit as its parent, as
23448 well as any subunit that names such a subunit as its parent
23449 (recursively).
23450
23451 9
23452 The parent body of a subunit shall be present in the current
23453 environment, and shall contain a corresponding body_stub with the same
23454 defining_identifier as the subunit.
23455
23456 10/3
23457 A package_body_stub shall be the completion of a package_declaration
23458 (*note 7.1: S0190.) or generic_package_declaration (*note 12.1: S0272.);
23459 a task_body_stub (*note 10.1.3: S0261.) shall be the completion of a
23460 task declaration; a protected_body_stub (*note 10.1.3: S0262.) shall be
23461 the completion of a protected declaration.
23462
23463 11
23464 In contrast, a subprogram_body_stub need not be the completion of a
23465 previous declaration, in which case the _stub declares the subprogram.
23466 If the _stub is a completion, it shall be the completion of a
23467 subprogram_declaration or generic_subprogram_declaration. The profile
23468 of a subprogram_body_stub that completes a declaration shall conform
23469 fully to that of the declaration.
23470
23471 12
23472 A subunit that corresponds to a body_stub shall be of the same kind
23473 (package_, subprogram_, task_, or protected_) as the body_stub. The
23474 profile of a subprogram_body subunit shall be fully conformant to that
23475 of the corresponding body_stub.
23476
23477 13
23478 A body_stub shall appear immediately within the declarative_part of a
23479 compilation unit body. This rule does not apply within an instance of a
23480 generic unit.
23481
23482 14
23483 The defining_identifiers of all body_stubs that appear immediately
23484 within a particular declarative_part shall be distinct.
23485
23486 _Post-Compilation Rules_
23487
23488 15
23489 For each body_stub, there shall be a subunit containing the
23490 corresponding proper_body.
23491
23492 NOTES
23493
23494 16
23495 4 The rules in *note 10.1.4::, "*note 10.1.4:: The Compilation
23496 Process" say that a body_stub is equivalent to the corresponding
23497 proper_body. This implies:
23498
23499 17
23500 * Visibility within a subunit is the visibility that would be
23501 obtained at the place of the corresponding body_stub (within
23502 the parent body) if the context_clause of the subunit were
23503 appended to that of the parent body.
23504
23505 18
23506 * The effect of the elaboration of a body_stub is to elaborate
23507 the subunit.
23508
23509 _Examples_
23510
23511 19
23512 The package Parent is first written without subunits:
23513
23514 20
23515 package Parent is
23516 procedure Inner;
23517 end Parent;
23518
23519 21
23520 with Ada.Text_IO;
23521 package body Parent is
23522 Variable : String := "Hello, there.";
23523 procedure Inner is
23524 begin
23525 Ada.Text_IO.Put_Line(Variable);
23526 end Inner;
23527 end Parent;
23528
23529 22
23530 The body of procedure Inner may be turned into a subunit by rewriting
23531 the package body as follows (with the declaration of Parent remaining
23532 the same):
23533
23534 23
23535 package body Parent is
23536 Variable : String := "Hello, there.";
23537 procedure Inner is separate;
23538 end Parent;
23539
23540 24
23541 with Ada.Text_IO;
23542 separate(Parent)
23543 procedure Inner is
23544 begin
23545 Ada.Text_IO.Put_Line(Variable);
23546 end Inner;
23547
23548 \1f
23549 File: arm2012.info, Node: 10.1.4, Next: 10.1.5, Prev: 10.1.3, Up: 10.1
23550
23551 10.1.4 The Compilation Process
23552 ------------------------------
23553
23554 1
23555 Each compilation unit submitted to the compiler is compiled in the
23556 context of an environment declarative_part (or simply, an environment),
23557 which is a conceptual declarative_part that forms the outermost
23558 declarative region of the context of any compilation. At run time, an
23559 environment forms the declarative_part of the body of the environment
23560 task of a partition (see *note 10.2::, "*note 10.2:: Program
23561 Execution").
23562
23563 2
23564 The declarative_items of the environment are library_items appearing in
23565 an order such that there are no forward semantic dependences. Each
23566 included subunit occurs in place of the corresponding stub. The
23567 visibility rules apply as if the environment were the outermost
23568 declarative region, except that with_clause (*note 10.1.2: S0255.)s are
23569 needed to make declarations of library units visible (see *note
23570 10.1.2::).
23571
23572 3/2
23573 The mechanisms for creating an environment and for adding and replacing
23574 compilation units within an environment are implementation defined. The
23575 mechanisms for adding a compilation unit mentioned in a
23576 limited_with_clause to an environment are implementation defined.
23577
23578 _Name Resolution Rules_
23579
23580 4/3
23581 If a library_unit_body that is a subprogram_body is submitted to the
23582 compiler, it is interpreted only as a completion if a
23583 library_unit_declaration with the same defining_program_unit_name
23584 already exists in the environment for a subprogram other than an
23585 instance of a generic subprogram or for a generic subprogram (even if
23586 the profile of the body is not type conformant with that of the
23587 declaration); otherwise, the subprogram_body is interpreted as both the
23588 declaration and body of a library subprogram.
23589
23590 _Legality Rules_
23591
23592 5
23593 When a compilation unit is compiled, all compilation units upon which it
23594 depends semantically shall already exist in the environment; the set of
23595 these compilation units shall be consistent in the sense that the new
23596 compilation unit shall not semantically depend (directly or indirectly)
23597 on two different versions of the same compilation unit, nor on an
23598 earlier version of itself.
23599
23600 _Implementation Permissions_
23601
23602 6/2
23603 The implementation may require that a compilation unit be legal before
23604 it can be mentioned in a limited_with_clause or it can be inserted into
23605 the environment.
23606
23607 7/3
23608 When a compilation unit that declares or renames a library unit is added
23609 to the environment, the implementation may remove from the environment
23610 any preexisting library_item or subunit with the same full expanded
23611 name. When a compilation unit that is a subunit or the body of a
23612 library unit is added to the environment, the implementation may remove
23613 from the environment any preexisting version of the same compilation
23614 unit. When a compilation unit that contains a body_stub is added to the
23615 environment, the implementation may remove any preexisting library_item
23616 or subunit with the same full expanded name as the body_stub. When a
23617 given compilation unit is removed from the environment, the
23618 implementation may also remove any compilation unit that depends
23619 semantically upon the given one. If the given compilation unit contains
23620 the body of a subprogram for which aspect Inline is True, the
23621 implementation may also remove any compilation unit containing a call to
23622 that subprogram.
23623
23624 NOTES
23625
23626 8
23627 5 The rules of the language are enforced across compilation and
23628 compilation unit boundaries, just as they are enforced within a
23629 single compilation unit.
23630
23631 9
23632 6 An implementation may support a concept of a library, which
23633 contains library_items. If multiple libraries are supported, the
23634 implementation has to define how a single environment is
23635 constructed when a compilation unit is submitted to the compiler.
23636 Naming conflicts between different libraries might be resolved by
23637 treating each library as the root of a hierarchy of child library
23638 units.
23639
23640 10
23641 7 A compilation unit containing an instantiation of a separately
23642 compiled generic unit does not semantically depend on the body of
23643 the generic unit. Therefore, replacing the generic body in the
23644 environment does not result in the removal of the compilation unit
23645 containing the instantiation.
23646
23647 \1f
23648 File: arm2012.info, Node: 10.1.5, Next: 10.1.6, Prev: 10.1.4, Up: 10.1
23649
23650 10.1.5 Pragmas and Program Units
23651 --------------------------------
23652
23653 1
23654 This subclause discusses pragmas related to program units, library
23655 units, and compilations.
23656
23657 _Name Resolution Rules_
23658
23659 2
23660 Certain pragmas are defined to be program unit pragmas. A name given as
23661 the argument of a program unit pragma shall resolve to denote the
23662 declarations or renamings of one or more program units that occur
23663 immediately within the declarative region or compilation in which the
23664 pragma immediately occurs, or it shall resolve to denote the declaration
23665 of the immediately enclosing program unit (if any); the pragma applies
23666 to the denoted program unit(s). If there are no names given as
23667 arguments, the pragma applies to the immediately enclosing program unit.
23668
23669 _Legality Rules_
23670
23671 3
23672 A program unit pragma shall appear in one of these places:
23673
23674 4
23675 * At the place of a compilation_unit, in which case the pragma shall
23676 immediately follow in the same compilation (except for other
23677 pragmas) a library_unit_declaration (*note 10.1.1: S0249.) that is
23678 a subprogram_declaration (*note 6.1: S0163.),
23679 generic_subprogram_declaration (*note 12.1: S0271.), or
23680 generic_instantiation (*note 12.3: S0275.), and the pragma shall
23681 have an argument that is a name denoting that declaration.
23682
23683 5/1
23684 * Immediately within the visible part of a program unit and before
23685 any nested declaration (but not within a generic formal part), in
23686 which case the argument, if any, shall be a direct_name that
23687 denotes the immediately enclosing program unit declaration.
23688
23689 6
23690 * At the place of a declaration other than the first, of a
23691 declarative_part or program unit declaration, in which case the
23692 pragma shall have an argument, which shall be a direct_name that
23693 denotes one or more of the following (and nothing else): a
23694 subprogram_declaration (*note 6.1: S0163.), a
23695 generic_subprogram_declaration (*note 12.1: S0271.), or a
23696 generic_instantiation (*note 12.3: S0275.), of the same
23697 declarative_part (*note 3.11: S0086.) or program unit declaration.
23698
23699 7/3
23700 Certain program unit pragmas are defined to be library unit pragmas. If
23701 a library unit pragma applies to a program unit, the program unit shall
23702 be a library unit.
23703
23704 _Static Semantics_
23705
23706 7.1/1
23707 A library unit pragma that applies to a generic unit does not apply to
23708 its instances, unless a specific rule for the pragma specifies the
23709 contrary.
23710
23711 _Post-Compilation Rules_
23712
23713 8
23714 Certain pragmas are defined to be configuration pragmas; they shall
23715 appear before the first compilation_unit of a compilation. They are
23716 generally used to select a partition-wide or system-wide option. The
23717 pragma applies to all compilation_units appearing in the compilation,
23718 unless there are none, in which case it applies to all future
23719 compilation_units compiled into the same environment.
23720
23721 _Implementation Permissions_
23722
23723 9/2
23724 An implementation may require that configuration pragmas that select
23725 partition-wide or system-wide options be compiled when the environment
23726 contains no library_items other than those of the predefined
23727 environment. In this case, the implementation shall still accept
23728 configuration pragmas in individual compilations that confirm the
23729 initially selected partition-wide or system-wide options.
23730
23731 _Implementation Advice_
23732
23733 10/1
23734 When applied to a generic unit, a program unit pragma that is not a
23735 library unit pragma should apply to each instance of the generic unit
23736 for which there is not an overriding pragma applied directly to the
23737 instance.
23738
23739 \1f
23740 File: arm2012.info, Node: 10.1.6, Prev: 10.1.5, Up: 10.1
23741
23742 10.1.6 Environment-Level Visibility Rules
23743 -----------------------------------------
23744
23745 1
23746 The normal visibility rules do not apply within a parent_unit_name or a
23747 context_clause, nor within a pragma that appears at the place of a
23748 compilation unit. The special visibility rules for those contexts are
23749 given here.
23750
23751 _Static Semantics_
23752
23753 2/2
23754 Within the parent_unit_name at the beginning of an explicit
23755 library_item, and within a nonlimited_with_clause, the only declarations
23756 that are visible are those that are explicit library_items of the
23757 environment, and the only declarations that are directly visible are
23758 those that are explicit root library_items of the environment. Within a
23759 limited_with_clause, the only declarations that are visible are those
23760 that are the implicit declaration of the limited view of a library
23761 package of the environment, and the only declarations that are directly
23762 visible are those that are the implicit declaration of the limited view
23763 of a root library package.
23764
23765 3
23766 Within a use_clause or pragma that is within a context_clause, each
23767 library_item mentioned in a previous with_clause of the same
23768 context_clause is visible, and each root library_item so mentioned is
23769 directly visible. In addition, within such a use_clause, if a given
23770 declaration is visible or directly visible, each declaration that occurs
23771 immediately within the given declaration's visible part is also visible.
23772 No other declarations are visible or directly visible.
23773
23774 4
23775 Within the parent_unit_name of a subunit, library_items are visible as
23776 they are in the parent_unit_name of a library_item; in addition, the
23777 declaration corresponding to each body_stub in the environment is also
23778 visible.
23779
23780 5
23781 Within a pragma that appears at the place of a compilation unit, the
23782 immediately preceding library_item and each of its ancestors is visible.
23783 The ancestor root library_item is directly visible.
23784
23785 6/2
23786 Notwithstanding the rules of *note 4.1.3::, an expanded name in a
23787 with_clause, a pragma in a context_clause, or a pragma that appears at
23788 the place of a compilation unit may consist of a prefix that denotes a
23789 generic package and a selector_name that denotes a child of that generic
23790 package. (The child is necessarily a generic unit; see *note 10.1.1::.)
23791
23792 \1f
23793 File: arm2012.info, Node: 10.2, Prev: 10.1, Up: 10
23794
23795 10.2 Program Execution
23796 ======================
23797
23798 1
23799 An Ada program consists of a set of partitions, which can execute in
23800 parallel with one another, possibly in a separate address space, and
23801 possibly on a separate computer.
23802
23803 _Post-Compilation Rules_
23804
23805 2
23806 A partition is a program or part of a program that can be invoked from
23807 outside the Ada implementation. For example, on many systems, a
23808 partition might be an executable file generated by the system linker.
23809 The user can explicitly assign library units to a partition. The
23810 assignment is done in an implementation-defined manner. The compilation
23811 units included in a partition are those of the explicitly assigned
23812 library units, as well as other compilation units needed by those
23813 library units. The compilation units needed by a given compilation unit
23814 are determined as follows (unless specified otherwise via an
23815 implementation-defined pragma, or by some other implementation-defined
23816 means):
23817
23818 3
23819 * A compilation unit needs itself;
23820
23821 4
23822 * If a compilation unit is needed, then so are any compilation units
23823 upon which it depends semantically;
23824
23825 5
23826 * If a library_unit_declaration is needed, then so is any
23827 corresponding library_unit_body;
23828
23829 6/2
23830 * If a compilation unit with stubs is needed, then so are any
23831 corresponding subunits;
23832
23833 6.1/2
23834 * If the (implicit) declaration of the limited view of a library
23835 package is needed, then so is the explicit declaration of the
23836 library package.
23837
23838 7
23839 The user can optionally designate (in an implementation-defined manner)
23840 one subprogram as the main subprogram for the partition. A main
23841 subprogram, if specified, shall be a subprogram.
23842
23843 8
23844 Each partition has an anonymous environment task, which is an implicit
23845 outermost task whose execution elaborates the library_items of the
23846 environment declarative_part, and then calls the main subprogram, if
23847 there is one. A partition's execution is that of its tasks.
23848
23849 9
23850 The order of elaboration of library units is determined primarily by the
23851 elaboration dependences. There is an elaboration dependence of a given
23852 library_item upon another if the given library_item or any of its
23853 subunits depends semantically on the other library_item. In addition,
23854 if a given library_item or any of its subunits has a pragma Elaborate or
23855 Elaborate_All that names another library unit, then there is an
23856 elaboration dependence of the given library_item upon the body of the
23857 other library unit, and, for Elaborate_All only, upon each library_item
23858 needed by the declaration of the other library unit.
23859
23860 10
23861 The environment task for a partition has the following structure:
23862
23863 11
23864 task Environment_Task;
23865
23866 12
23867 task body Environment_Task is
23868 ... (1) -- The environment declarative_part
23869 -- (that is, the sequence of library_items) goes here.
23870 begin
23871 ... (2) -- Call the main subprogram, if there is one.
23872 end Environment_Task;
23873
23874 13
23875 The environment declarative_part at (1) is a sequence of
23876 declarative_items consisting of copies of the library_items included in
23877 the partition. The order of elaboration of library_items is the order
23878 in which they appear in the environment declarative_part:
23879
23880 14
23881 * The order of all included library_items is such that there are no
23882 forward elaboration dependences.
23883
23884 15/3
23885 * Any included library_unit_declaration for which aspect
23886 Elaborate_Body is True (including when a pragma Elaborate_Body
23887 applies) is immediately followed by its library_unit_body, if
23888 included.
23889
23890 16
23891 * All library_items declared pure occur before any that are not
23892 declared pure.
23893
23894 17
23895 * All preelaborated library_items occur before any that are not
23896 preelaborated.
23897
23898 18
23899 There shall be a total order of the library_items that obeys the above
23900 rules. The order is otherwise implementation defined.
23901
23902 19
23903 The full expanded names of the library units and subunits included in a
23904 given partition shall be distinct.
23905
23906 20
23907 The sequence_of_statements of the environment task (see (2) above)
23908 consists of either:
23909
23910 21
23911 * A call to the main subprogram, if the partition has one. If the
23912 main subprogram has parameters, they are passed; where the actuals
23913 come from is implementation defined. What happens to the result of
23914 a main function is also implementation defined.
23915
23916 22
23917 or:
23918
23919 23
23920 * A null_statement, if there is no main subprogram.
23921
23922 24
23923 The mechanisms for building and running partitions are implementation
23924 defined. These might be combined into one operation, as, for example,
23925 in dynamic linking, or "load-and-go" systems.
23926
23927 _Dynamic Semantics_
23928
23929 25
23930 The execution of a program consists of the execution of a set of
23931 partitions. Further details are implementation defined. The execution
23932 of a partition starts with the execution of its environment task, ends
23933 when the environment task terminates, and includes the executions of all
23934 tasks of the partition. The execution of the (implicit) task_body of
23935 the environment task acts as a master for all other tasks created as
23936 part of the execution of the partition. When the environment task
23937 completes (normally or abnormally), it waits for the termination of all
23938 such tasks, and then finalizes any remaining objects of the partition.
23939
23940 _Bounded (Run-Time) Errors_
23941
23942 26
23943 Once the environment task has awaited the termination of all other tasks
23944 of the partition, any further attempt to create a task (during
23945 finalization) is a bounded error, and may result in the raising of
23946 Program_Error either upon creation or activation of the task. If such a
23947 task is activated, it is not specified whether the task is awaited prior
23948 to termination of the environment task.
23949
23950 _Implementation Requirements_
23951
23952 27
23953 The implementation shall ensure that all compilation units included in a
23954 partition are consistent with one another, and are legal according to
23955 the rules of the language.
23956
23957 _Implementation Permissions_
23958
23959 28/3
23960 The kind of partition described in this subclause is known as an active
23961 partition. An implementation is allowed to support other kinds of
23962 partitions, with implementation-defined semantics.
23963
23964 29
23965 An implementation may restrict the kinds of subprograms it supports as
23966 main subprograms. However, an implementation is required to support all
23967 main subprograms that are public parameterless library procedures.
23968
23969 30
23970 If the environment task completes abnormally, the implementation may
23971 abort any dependent tasks.
23972
23973 NOTES
23974
23975 31
23976 8 An implementation may provide inter-partition communication
23977 mechanism(s) via special packages and pragmas. Standard pragmas
23978 for distribution and methods for specifying inter-partition
23979 communication are defined in *note Annex E::, "*note Annex E::
23980 Distributed Systems". If no such mechanisms are provided, then
23981 each partition is isolated from all others, and behaves as a
23982 program in and of itself.
23983
23984 32
23985 9 Partitions are not required to run in separate address spaces.
23986 For example, an implementation might support dynamic linking via
23987 the partition concept.
23988
23989 33
23990 10 An order of elaboration of library_items that is consistent
23991 with the partial ordering defined above does not always ensure that
23992 each library_unit_body is elaborated before any other compilation
23993 unit whose elaboration necessitates that the library_unit_body be
23994 already elaborated. (In particular, there is no requirement that
23995 the body of a library unit be elaborated as soon as possible after
23996 the library_unit_declaration is elaborated, unless the pragmas in
23997 subclause *note 10.2.1:: are used.)
23998
23999 34
24000 11 A partition (active or otherwise) need not have a main
24001 subprogram. In such a case, all the work done by the partition
24002 would be done by elaboration of various library_items, and by tasks
24003 created by that elaboration. Passive partitions, which cannot have
24004 main subprograms, are defined in *note Annex E::, "*note Annex E::
24005 Distributed Systems".
24006
24007 * Menu:
24008
24009 * 10.2.1 :: Elaboration Control
24010
24011 \1f
24012 File: arm2012.info, Node: 10.2.1, Up: 10.2
24013
24014 10.2.1 Elaboration Control
24015 --------------------------
24016
24017 1
24018 This subclause defines pragmas that help control the elaboration order
24019 of library_items.
24020
24021 _Syntax_
24022
24023 2
24024 The form of a pragma Preelaborate is as follows:
24025
24026 3
24027 pragma Preelaborate[(library_unit_name)];
24028
24029 4
24030 A pragma Preelaborate is a library unit pragma.
24031
24032 4.1/2
24033 The form of a pragma Preelaborable_Initialization is as follows:
24034
24035 4.2/2
24036 pragma Preelaborable_Initialization(direct_name);
24037
24038 _Legality Rules_
24039
24040 5
24041 An elaborable construct is preelaborable unless its elaboration performs
24042 any of the following actions:
24043
24044 6
24045 * The execution of a statement other than a null_statement.
24046
24047 7
24048 * A call to a subprogram other than a static function.
24049
24050 8
24051 * The evaluation of a primary that is a name of an object, unless the
24052 name is a static expression, or statically denotes a discriminant
24053 of an enclosing type.
24054
24055 9/3
24056 * The creation of an object (including a component) that is
24057 initialized by default, if its type does not have preelaborable
24058 initialization. Similarly, the evaluation of an
24059 extension_aggregate (*note 4.3.2: S0111.) with an ancestor
24060 subtype_mark (*note 3.2.2: S0028.) denoting a subtype of such a
24061 type.
24062
24063 10/2
24064 A generic body is preelaborable only if elaboration of a corresponding
24065 instance body would not perform any such actions, presuming that:
24066
24067 10.1/3
24068 * the actual for each discriminated formal derived type, formal
24069 private type, or formal private extension declared within the
24070 formal part of the generic unit is a type that does not have
24071 preelaborable initialization, unless pragma
24072 Preelaborable_Initialization has been applied to the formal type;
24073
24074 10.2/2
24075 * the actual for each formal type is nonstatic;
24076
24077 10.3/2
24078 * the actual for each formal object is nonstatic; and
24079
24080 10.4/2
24081 * the actual for each formal subprogram is a user-defined subprogram.
24082
24083 11/3
24084 A pragma Preelaborate (or pragma Pure -- see below) is used to specify
24085 that a library unit is preelaborated, namely that the Preelaborate
24086 aspect of the library unit is True; all compilation units of the library
24087 unit are preelaborated. The declaration and body of a preelaborated
24088 library unit, and all subunits that are elaborated as part of
24089 elaborating the library unit, shall be preelaborable. All compilation
24090 units of a preelaborated library unit shall depend semantically only on
24091 declared pure or preelaborated library_items. In addition to the places
24092 where Legality Rules normally apply (see *note 12.3::), these rules also
24093 apply in the private part of an instance of a generic unit. If a
24094 library unit is preelaborated, then its declaration, if any, and body,
24095 if any, are elaborated prior to all nonpreelaborated library_items of
24096 the partition.
24097
24098 11.1/2
24099 The following rules specify which entities have preelaborable
24100 initialization:
24101
24102 11.2/3
24103 * The partial view of a private type or private extension, a
24104 protected type without entry_declarations, a generic formal private
24105 type, or a generic formal derived type, has preelaborable
24106 initialization if and only if the pragma
24107 Preelaborable_Initialization has been applied to them. A protected
24108 type with entry_declarations or a task type never has preelaborable
24109 initialization.
24110
24111 11.3/2
24112 * A component (including a discriminant) of a record or protected
24113 type has preelaborable initialization if its declaration includes a
24114 default_expression whose execution does not perform any actions
24115 prohibited in preelaborable constructs as described above, or if
24116 its declaration does not include a default expression and its type
24117 has preelaborable initialization.
24118
24119 11.4/3
24120 * A derived type has preelaborable initialization if its parent type
24121 has preelaborable initialization and if the noninherited components
24122 all have preelaborable initialization. However, a controlled type
24123 with an Initialize procedure that is not a null procedure does not
24124 have preelaborable initialization.
24125
24126 11.5/2
24127 * A view of a type has preelaborable initialization if it is an
24128 elementary type, an array type whose component type has
24129 preelaborable initialization, a record type whose components all
24130 have preelaborable initialization, or an interface type.
24131
24132 11.6/2
24133 A pragma Preelaborable_Initialization specifies that a type has
24134 preelaborable initialization. This pragma shall appear in the visible
24135 part of a package or generic package.
24136
24137 11.7/3
24138 If the pragma appears in the first list of basic_declarative_items of a
24139 package_specification, then the direct_name shall denote the first
24140 subtype of a composite type, and the type shall be declared immediately
24141 within the same package as the pragma. If the pragma is applied to a
24142 private type or a private extension, the full view of the type shall
24143 have preelaborable initialization. If the pragma is applied to a
24144 protected type, the protected type shall not have entries, and each
24145 component of the protected type shall have preelaborable initialization.
24146 For any other composite type, the type shall have preelaborable
24147 initialization. In addition to the places where Legality Rules normally
24148 apply (see *note 12.3::), these rules apply also in the private part of
24149 an instance of a generic unit.
24150
24151 11.8/2
24152 If the pragma appears in a generic_formal_part, then the direct_name
24153 shall denote a generic formal private type or a generic formal derived
24154 type declared in the same generic_formal_part as the pragma. In a
24155 generic_instantiation the corresponding actual type shall have
24156 preelaborable initialization.
24157
24158 _Implementation Advice_
24159
24160 12
24161 In an implementation, a type declared in a preelaborated package should
24162 have the same representation in every elaboration of a given version of
24163 the package, whether the elaborations occur in distinct executions of
24164 the same program, or in executions of distinct programs or partitions
24165 that include the given version.
24166
24167 _Syntax_
24168
24169 13
24170 The form of a pragma Pure is as follows:
24171
24172 14
24173 pragma Pure[(library_unit_name)];
24174
24175 15
24176 A pragma Pure is a library unit pragma.
24177
24178 _Static Semantics_
24179
24180 15.1/3
24181 A pure compilation unit is a preelaborable compilation unit whose
24182 elaboration does not perform any of the following actions:
24183
24184 15.2/2
24185 * the elaboration of a variable declaration;
24186
24187 15.3/2
24188 * the evaluation of an allocator of an access-to-variable type; for
24189 the purposes of this rule, the partial view of a type is presumed
24190 to have nonvisible components whose default initialization
24191 evaluates such an allocator;
24192
24193 15.4/3
24194 * the elaboration of the declaration of a nonderived named
24195 access-to-variable type unless the Storage_Size of the type has
24196 been specified by a static expression with value zero or is defined
24197 by the language to be zero;
24198
24199 15.5/3
24200 * the elaboration of the declaration of a nonderived named
24201 access-to-constant type for which the Storage_Size has been
24202 specified by an expression other than a static expression with
24203 value zero.
24204
24205 15.6/3
24206 A generic body is pure only if elaboration of a corresponding instance
24207 body would not perform any such actions presuming any composite formal
24208 types have nonvisible components whose default initialization evaluates
24209 an allocator of an access-to-variable type.
24210
24211 15.7/2
24212 The Storage_Size for an anonymous access-to-variable type declared at
24213 library level in a library unit that is declared pure is defined to be
24214 zero.
24215
24216 _Legality Rules_
24217
24218 16/2
24219 This paragraph was deleted.
24220
24221 17/3
24222 A pragma Pure is used to specify that a library unit is declared pure,
24223 namely that the Pure aspect of the library unit is True; all compilation
24224 units of the library unit are declared pure. In addition, the limited
24225 view of any library package is declared pure. The declaration and body
24226 of a declared pure library unit, and all subunits that are elaborated as
24227 part of elaborating the library unit, shall be pure. All compilation
24228 units of a declared pure library unit shall depend semantically only on
24229 declared pure library_items. In addition to the places where Legality
24230 Rules normally apply (see *note 12.3::), these rules also apply in the
24231 private part of an instance of a generic unit. Furthermore, the full
24232 view of any partial view declared in the visible part of a declared pure
24233 library unit that has any available stream attributes shall support
24234 external streaming (see *note 13.13.2::).
24235
24236 _Implementation Permissions_
24237
24238 18/3
24239 If a library unit is declared pure, then the implementation is permitted
24240 to omit a call on a library-level subprogram of the library unit if the
24241 results are not needed after the call. In addition, the implementation
24242 may omit a call on such a subprogram and simply reuse the results
24243 produced by an earlier call on the same subprogram, provided that none
24244 of the parameters nor any object accessible via access values from the
24245 parameters have any part that is of a type whose full type is an
24246 immutably limited type, and the addresses and values of all by-reference
24247 actual parameters, the values of all by-copy-in actual parameters, and
24248 the values of all objects accessible via access values from the
24249 parameters, are the same as they were at the earlier call. This
24250 permission applies even if the subprogram produces other side effects
24251 when called.
24252
24253 _Syntax_
24254
24255 19
24256 The form of a pragma Elaborate, Elaborate_All, or Elaborate_Body is
24257 as follows:
24258
24259 20
24260 pragma Elaborate(library_unit_name{, library_unit_name});
24261
24262 21
24263 pragma Elaborate_All(library_unit_name{, library_unit_name});
24264
24265 22
24266 pragma Elaborate_Body[(library_unit_name)];
24267
24268 23
24269 A pragma Elaborate or Elaborate_All is only allowed within a
24270 context_clause.
24271
24272 24
24273 A pragma Elaborate_Body is a library unit pragma.
24274
24275 _Legality Rules_
24276
24277 25/3
24278 If the aspect Elaborate_Body is True for a declaration (including when
24279 pragma Elaborate_Body applies), then the declaration requires a
24280 completion (a body).
24281
24282 25.1/2
24283 The library_unit_name of a pragma Elaborate or Elaborate_All shall
24284 denote a nonlimited view of a library unit.
24285
24286 _Static Semantics_
24287
24288 26/3
24289 A pragma Elaborate specifies that the body of the named library unit is
24290 elaborated before the current library_item. A pragma Elaborate_All
24291 specifies that each library_item that is needed by the named library
24292 unit declaration is elaborated before the current library_item.
24293
24294 26.1/3
24295 A pragma Elaborate_Body sets the Elaborate_Body representation aspect of
24296 the library unit to which it applies to the value True. If the
24297 Elaborate_Body aspect of a library unit is True, the body of the library
24298 unit is elaborated immediately after its declaration.
24299
24300 NOTES
24301
24302 27
24303 12 A preelaborated library unit is allowed to have
24304 nonpreelaborable children.
24305
24306 28
24307 13 A library unit that is declared pure is allowed to have impure
24308 children.
24309
24310 \1f
24311 File: arm2012.info, Node: 11, Next: 12, Prev: 10, Up: Top
24312
24313 11 Exceptions
24314 *************
24315
24316 1/3
24317 This clause defines the facilities for dealing with errors or other
24318 exceptional situations that arise during program execution. An
24319 exception represents a kind of exceptional situation; an occurrence of
24320 such a situation (at run time) is called an exception occurrence. To
24321 raise an exception is to abandon normal program execution so as to draw
24322 attention to the fact that the corresponding situation has arisen.
24323 Performing some actions in response to the arising of an exception is
24324 called handling the exception.
24325
24326 2/3
24327 An exception_declaration declares a name for an exception. An exception
24328 can be raised explicitly (for example, by a raise_statement) or
24329 implicitly (for example, by the failure of a language-defined check).
24330 When an exception arises, control can be transferred to a user-provided
24331 exception_handler at the end of a handled_sequence_of_statements (*note
24332 11.2: S0265.), or it can be propagated to a dynamically enclosing
24333 execution.
24334
24335 * Menu:
24336
24337 * 11.1 :: Exception Declarations
24338 * 11.2 :: Exception Handlers
24339 * 11.3 :: Raise Statements
24340 * 11.4 :: Exception Handling
24341 * 11.5 :: Suppressing Checks
24342 * 11.6 :: Exceptions and Optimization
24343
24344 \1f
24345 File: arm2012.info, Node: 11.1, Next: 11.2, Up: 11
24346
24347 11.1 Exception Declarations
24348 ===========================
24349
24350 1
24351 An exception_declaration declares a name for an exception.
24352
24353 _Syntax_
24354
24355 2/3
24356 exception_declaration ::= defining_identifier_list : exception
24357 [aspect_specification];
24358
24359 _Static Semantics_
24360
24361 3
24362 Each single exception_declaration declares a name for a different
24363 exception. If a generic unit includes an exception_declaration, the
24364 exception_declarations implicitly generated by different instantiations
24365 of the generic unit refer to distinct exceptions (but all have the same
24366 defining_identifier). The particular exception denoted by an exception
24367 name is determined at compilation time and is the same regardless of how
24368 many times the exception_declaration is elaborated.
24369
24370 4
24371 The predefined exceptions are the ones declared in the declaration of
24372 package Standard: Constraint_Error, Program_Error, Storage_Error, and
24373 Tasking_Error; one of them is raised when a language-defined check
24374 fails.
24375
24376 _Dynamic Semantics_
24377
24378 5
24379 The elaboration of an exception_declaration has no effect.
24380
24381 6
24382 The execution of any construct raises Storage_Error if there is
24383 insufficient storage for that execution. The amount of storage needed
24384 for the execution of constructs is unspecified.
24385
24386 _Examples_
24387
24388 7
24389 Examples of user-defined exception declarations:
24390
24391 8
24392 Singular : exception;
24393 Error : exception;
24394 Overflow, Underflow : exception;
24395
24396 \1f
24397 File: arm2012.info, Node: 11.2, Next: 11.3, Prev: 11.1, Up: 11
24398
24399 11.2 Exception Handlers
24400 =======================
24401
24402 1
24403 The response to one or more exceptions is specified by an
24404 exception_handler.
24405
24406 _Syntax_
24407
24408 2
24409 handled_sequence_of_statements ::=
24410 sequence_of_statements
24411 [exception
24412 exception_handler
24413 {exception_handler}]
24414
24415 3
24416 exception_handler ::=
24417 when [choice_parameter_specification:] exception_choice {|
24418 exception_choice} =>
24419 sequence_of_statements
24420
24421 4
24422 choice_parameter_specification ::= defining_identifier
24423
24424 5
24425 exception_choice ::= exception_name | others
24426
24427 _Legality Rules_
24428
24429 6
24430 A choice with an exception_name covers the named exception. A choice
24431 with others covers all exceptions not named by previous choices of the
24432 same handled_sequence_of_statements (*note 11.2: S0265.). Two choices
24433 in different exception_handlers of the same
24434 handled_sequence_of_statements (*note 11.2: S0265.) shall not cover the
24435 same exception.
24436
24437 7
24438 A choice with others is allowed only for the last handler of a
24439 handled_sequence_of_statements and as the only choice of that handler.
24440
24441 8
24442 An exception_name of a choice shall not denote an exception declared in
24443 a generic formal package.
24444
24445 _Static Semantics_
24446
24447 9
24448 A choice_parameter_specification declares a choice parameter, which is a
24449 constant object of type Exception_Occurrence (see *note 11.4.1::).
24450 During the handling of an exception occurrence, the choice parameter, if
24451 any, of the handler represents the exception occurrence that is being
24452 handled.
24453
24454 _Dynamic Semantics_
24455
24456 10
24457 The execution of a handled_sequence_of_statements consists of the
24458 execution of the sequence_of_statements (*note 5.1: S0145.). The
24459 optional handlers are used to handle any exceptions that are propagated
24460 by the sequence_of_statements (*note 5.1: S0145.).
24461
24462 _Examples_
24463
24464 11
24465 Example of an exception handler:
24466
24467 12
24468 begin
24469 Open(File, In_File, "input.txt"); -- see *note A.8.2::
24470 exception
24471 when E : Name_Error =>
24472 Put("Cannot open input file : ");
24473 Put_Line(Exception_Message(E)); -- see *note 11.4.1::
24474 raise;
24475 end;
24476
24477 \1f
24478 File: arm2012.info, Node: 11.3, Next: 11.4, Prev: 11.2, Up: 11
24479
24480 11.3 Raise Statements
24481 =====================
24482
24483 1
24484 A raise_statement raises an exception.
24485
24486 _Syntax_
24487
24488 2/2
24489 raise_statement ::= raise;
24490 | raise exception_name [with string_expression];
24491
24492 _Legality Rules_
24493
24494 3
24495 The name, if any, in a raise_statement shall denote an exception. A
24496 raise_statement with no exception_name (that is, a re-raise statement)
24497 shall be within a handler, but not within a body enclosed by that
24498 handler.
24499
24500 _Name Resolution Rules_
24501
24502 3.1/2
24503 The expression, if any, in a raise_statement, is expected to be of type
24504 String.
24505
24506 _Dynamic Semantics_
24507
24508 4/2
24509 To raise an exception is to raise a new occurrence of that exception, as
24510 explained in *note 11.4::. For the execution of a raise_statement with
24511 an exception_name, the named exception is raised. If a
24512 string_expression is present, the expression is evaluated and its value
24513 is associated with the exception occurrence. For the execution of a
24514 re-raise statement, the exception occurrence that caused transfer of
24515 control to the innermost enclosing handler is raised again.
24516
24517 _Examples_
24518
24519 5
24520 Examples of raise statements:
24521
24522 6/2
24523 raise Ada.IO_Exceptions.Name_Error; -- see *note A.13::
24524 raise Queue_Error with "Buffer Full"; -- see *note 9.11::
24525
24526 7
24527 raise; -- re-raise the current exception
24528
24529 \1f
24530 File: arm2012.info, Node: 11.4, Next: 11.5, Prev: 11.3, Up: 11
24531
24532 11.4 Exception Handling
24533 =======================
24534
24535 1
24536 When an exception occurrence is raised, normal program execution is
24537 abandoned and control is transferred to an applicable exception_handler,
24538 if any. To handle an exception occurrence is to respond to the
24539 exceptional event. To propagate an exception occurrence is to raise it
24540 again in another context; that is, to fail to respond to the exceptional
24541 event in the present context.
24542
24543 _Dynamic Semantics_
24544
24545 2
24546 Within a given task, if the execution of construct a is defined by this
24547 International Standard to consist (in part) of the execution of
24548 construct b, then while b is executing, the execution of a is said to
24549 dynamically enclose the execution of b. The innermost dynamically
24550 enclosing execution of a given execution is the dynamically enclosing
24551 execution that started most recently.
24552
24553 3
24554 When an exception occurrence is raised by the execution of a given
24555 construct, the rest of the execution of that construct is abandoned;
24556 that is, any portions of the execution that have not yet taken place are
24557 not performed. The construct is first completed, and then left, as
24558 explained in *note 7.6.1::. Then:
24559
24560 4
24561 * If the construct is a task_body, the exception does not propagate
24562 further;
24563
24564 5
24565 * If the construct is the sequence_of_statements of a
24566 handled_sequence_of_statements that has a handler with a choice
24567 covering the exception, the occurrence is handled by that handler;
24568
24569 6
24570 * Otherwise, the occurrence is propagated to the innermost
24571 dynamically enclosing execution, which means that the occurrence is
24572 raised again in that context.
24573
24574 7
24575 When an occurrence is handled by a given handler, the
24576 choice_parameter_specification, if any, is first elaborated, which
24577 creates the choice parameter and initializes it to the occurrence.
24578 Then, the sequence_of_statements of the handler is executed; this
24579 execution replaces the abandoned portion of the execution of the
24580 sequence_of_statements.
24581
24582 NOTES
24583
24584 8
24585 1 Note that exceptions raised in a declarative_part of a body are
24586 not handled by the handlers of the handled_sequence_of_statements
24587 (*note 11.2: S0265.) of that body.
24588
24589 * Menu:
24590
24591 * 11.4.1 :: The Package Exceptions
24592 * 11.4.2 :: Pragmas Assert and Assertion_Policy
24593 * 11.4.3 :: Example of Exception Handling
24594
24595 \1f
24596 File: arm2012.info, Node: 11.4.1, Next: 11.4.2, Up: 11.4
24597
24598 11.4.1 The Package Exceptions
24599 -----------------------------
24600
24601 _Static Semantics_
24602
24603 1
24604 The following language-defined library package exists:
24605
24606 2/2
24607 with Ada.Streams;
24608 package Ada.Exceptions is
24609 pragma Preelaborate(Exceptions);
24610 type Exception_Id is private;
24611 pragma Preelaborable_Initialization(Exception_Id);
24612 Null_Id : constant Exception_Id;
24613 function Exception_Name(Id : Exception_Id) return String;
24614 function Wide_Exception_Name(Id : Exception_Id) return Wide_String;
24615 function Wide_Wide_Exception_Name(Id : Exception_Id)
24616 return Wide_Wide_String;
24617
24618 3/2
24619 type Exception_Occurrence is limited private;
24620 pragma Preelaborable_Initialization(Exception_Occurrence);
24621 type Exception_Occurrence_Access is access all Exception_Occurrence;
24622 Null_Occurrence : constant Exception_Occurrence;
24623
24624 4/3
24625 procedure Raise_Exception(E : in Exception_Id;
24626 Message : in String := "")
24627 with No_Return;
24628 function Exception_Message(X : Exception_Occurrence) return String;
24629 procedure Reraise_Occurrence(X : in Exception_Occurrence);
24630
24631 5/2
24632 function Exception_Identity(X : Exception_Occurrence)
24633 return Exception_Id;
24634 function Exception_Name(X : Exception_Occurrence) return String;
24635 -- Same as Exception_Name(Exception_Identity(X)).
24636 function Wide_Exception_Name(X : Exception_Occurrence)
24637 return Wide_String;
24638 -- Same as Wide_Exception_Name(Exception_Identity(X)).
24639 function Wide_Wide_Exception_Name(X : Exception_Occurrence)
24640 return Wide_Wide_String;
24641 -- Same as Wide_Wide_Exception_Name(Exception_Identity(X)).
24642 function Exception_Information(X : Exception_Occurrence) return String;
24643
24644 6/2
24645 procedure Save_Occurrence(Target : out Exception_Occurrence;
24646 Source : in Exception_Occurrence);
24647 function Save_Occurrence(Source : Exception_Occurrence)
24648 return Exception_Occurrence_Access;
24649
24650 6.1/2
24651 procedure Read_Exception_Occurrence
24652 (Stream : not null access Ada.Streams.Root_Stream_Type'Class;
24653 Item : out Exception_Occurrence);
24654 procedure Write_Exception_Occurrence
24655 (Stream : not null access Ada.Streams.Root_Stream_Type'Class;
24656 Item : in Exception_Occurrence);
24657
24658 6.2/2
24659 for Exception_Occurrence'Read use Read_Exception_Occurrence;
24660 for Exception_Occurrence'Write use Write_Exception_Occurrence;
24661
24662 6.3/2
24663 private
24664 ... -- not specified by the language
24665 end Ada.Exceptions;
24666
24667 7
24668 Each distinct exception is represented by a distinct value of type
24669 Exception_Id. Null_Id does not represent any exception, and is the
24670 default initial value of type Exception_Id. Each occurrence of an
24671 exception is represented by a value of type Exception_Occurrence.
24672 Null_Occurrence does not represent any exception occurrence, and is the
24673 default initial value of type Exception_Occurrence.
24674
24675 8/1
24676 For a prefix E that denotes an exception, the following attribute is
24677 defined:
24678
24679 9
24680 E'Identity
24681 E'Identity returns the unique identity of the exception.
24682 The type of this attribute is Exception_Id.
24683
24684 10/2
24685 Raise_Exception raises a new occurrence of the identified exception.
24686
24687 10.1/3
24688 Exception_Message returns the message associated with the given
24689 Exception_Occurrence. For an occurrence raised by a call to
24690 Raise_Exception, the message is the Message parameter passed to
24691 Raise_Exception. For the occurrence raised by a raise_statement with an
24692 exception_name and a string_expression, the message is the
24693 string_expression. For the occurrence raised by a raise_statement with
24694 an exception_name but without a string_expression, the message is a
24695 string giving implementation-defined information about the exception
24696 occurrence. For an occurrence originally raised in some other manner
24697 (including by the failure of a language-defined check), the message is
24698 an unspecified string. In all cases, Exception_Message returns a string
24699 with lower bound 1.
24700
24701 10.2/2
24702 Reraise_Occurrence reraises the specified exception occurrence.
24703
24704 11
24705 Exception_Identity returns the identity of the exception of the
24706 occurrence.
24707
24708 12/2
24709 The Wide_Wide_Exception_Name functions return the full expanded name of
24710 the exception, in upper case, starting with a root library unit. For an
24711 exception declared immediately within package Standard, the
24712 defining_identifier (*note 3.1: S0022.) is returned. The result is
24713 implementation defined if the exception is declared within an unnamed
24714 block_statement.
24715
24716 12.1/2
24717 The Exception_Name functions (respectively, Wide_Exception_Name) return
24718 the same sequence of graphic characters as that defined for
24719 Wide_Wide_Exception_Name, if all the graphic characters are defined in
24720 Character (respectively, Wide_Character); otherwise, the sequence of
24721 characters is implementation defined, but no shorter than that returned
24722 by Wide_Wide_Exception_Name for the same value of the argument.
24723
24724 12.2/2
24725 The string returned by the Exception_Name, Wide_Exception_Name, and
24726 Wide_Wide_Exception_Name functions has lower bound 1.
24727
24728 13/2
24729 Exception_Information returns implementation-defined information about
24730 the exception occurrence. The returned string has lower bound 1.
24731
24732 14/2
24733 Reraise_Occurrence has no effect in the case of Null_Occurrence.
24734 Raise_Exception and Exception_Name raise Constraint_Error for a Null_Id.
24735 Exception_Message, Exception_Name, and Exception_Information raise
24736 Constraint_Error for a Null_Occurrence. Exception_Identity applied to
24737 Null_Occurrence returns Null_Id.
24738
24739 15
24740 The Save_Occurrence procedure copies the Source to the Target. The
24741 Save_Occurrence function uses an allocator of type
24742 Exception_Occurrence_Access to create a new object, copies the Source to
24743 this new object, and returns an access value designating this new
24744 object; the result may be deallocated using an instance of
24745 Unchecked_Deallocation.
24746
24747 15.1/2
24748 Write_Exception_Occurrence writes a representation of an exception
24749 occurrence to a stream; Read_Exception_Occurrence reconstructs an
24750 exception occurrence from a stream (including one written in a different
24751 partition).
24752
24753 Paragraph 16 was deleted.
24754
24755 _Implementation Permissions_
24756
24757 17
24758 An implementation of Exception_Name in a space-constrained environment
24759 may return the defining_identifier (*note 3.1: S0022.) instead of the
24760 full expanded name.
24761
24762 18
24763 The string returned by Exception_Message may be truncated (to no less
24764 than 200 characters) by the Save_Occurrence procedure (not the
24765 function), the Reraise_Occurrence procedure, and the re-raise statement.
24766
24767 _Implementation Advice_
24768
24769 19
24770 Exception_Message (by default) and Exception_Information should produce
24771 information useful for debugging. Exception_Message should be short
24772 (about one line), whereas Exception_Information can be long.
24773 Exception_Message should not include the Exception_Name.
24774 Exception_Information should include both the Exception_Name and the
24775 Exception_Message.
24776
24777 \1f
24778 File: arm2012.info, Node: 11.4.2, Next: 11.4.3, Prev: 11.4.1, Up: 11.4
24779
24780 11.4.2 Pragmas Assert and Assertion_Policy
24781 ------------------------------------------
24782
24783 1/3
24784 Pragma Assert is used to assert the truth of a boolean expression at a
24785 point within a sequence of declarations or statements.
24786
24787 1.1/3
24788 Assert pragmas, subtype predicates (see *note 3.2.4::), preconditions
24789 and postconditions (see *note 6.1.1::), and type invariants (see *note
24790 7.3.2::) are collectively referred to as assertions; their boolean
24791 expressions are referred to as assertion expressions.
24792
24793 1.2/3
24794 Pragma Assertion_Policy is used to control whether assertions are to be
24795 ignored by the implementation, checked at run time, or handled in some
24796 implementation-defined manner.
24797
24798 _Syntax_
24799
24800 2/2
24801 The form of a pragma Assert is as follows:
24802
24803 3/2
24804 pragma Assert([Check =>] boolean_expression[, [Message =>]
24805 string_expression]);
24806
24807 4/2
24808 A pragma Assert is allowed at the place where a declarative_item or
24809 a statement is allowed.
24810
24811 5/2
24812 The form of a pragma Assertion_Policy is as follows:
24813
24814 6/2
24815 pragma Assertion_Policy(policy_identifier);
24816
24817 6.1/3
24818 pragma Assertion_Policy(
24819 assertion_aspect_mark => policy_identifier
24820 {, assertion_aspect_mark => policy_identifier});
24821
24822 7/3
24823 A pragma Assertion_Policy is allowed only immediately within a
24824 declarative_part, immediately within a package_specification, or as
24825 a configuration pragma.
24826
24827 _Name Resolution Rules_
24828
24829 8/2
24830 The expected type for the boolean_expression of a pragma Assert is any
24831 boolean type. The expected type for the string_expression of a pragma
24832 Assert is type String.
24833
24834 _Legality Rules_
24835
24836 9/3
24837 The assertion_aspect_mark of a pragma Assertion_Policy shall be one of
24838 Assert, Static_Predicate, Dynamic_Predicate, Pre, Pre'Class, Post,
24839 Post'Class, Type_Invariant, Type_Invariant'Class, or some implementation
24840 defined aspect_mark. The policy_identifier shall be either Check,
24841 Ignore, or some implementation-defined identifier.
24842
24843 _Static Semantics_
24844
24845 10/3
24846 A pragma Assertion_Policy determines for each assertion aspect named in
24847 the pragma_argument_associations whether assertions of the given aspect
24848 are to be enforced by a run-time check. The policy_identifier Check
24849 requires that assertion expressions of the given aspect be checked that
24850 they evaluate to True at the points specified for the given aspect; the
24851 policy_identifier Ignore requires that the assertion expression not be
24852 evaluated at these points, and the run-time checks not be performed.
24853 Note that for subtype predicate aspects (see *note 3.2.4::), even when
24854 the applicable Assertion_Policy is Ignore, the predicate will still be
24855 evaluated as part of membership tests and Valid attribute_references,
24856 and if static, will still have an effect on loop iteration over the
24857 subtype, and the selection of case_statement_alternatives and variants.
24858
24859 10.1/3
24860 If no assertion_aspect_marks are specified in the pragma, the specified
24861 policy applies to all assertion aspects.
24862
24863 10.2/3
24864 A pragma Assertion_Policy applies to the named assertion aspects in a
24865 specific region, and applies to all assertion expressions specified in
24866 that region. A pragma Assertion_Policy given in a declarative_part or
24867 immediately within a package_specification applies from the place of the
24868 pragma to the end of the innermost enclosing declarative region. The
24869 region for a pragma Assertion_Policy given as a configuration pragma is
24870 the declarative region for the entire compilation unit (or units) to
24871 which it applies.
24872
24873 10.3/3
24874 If a pragma Assertion_Policy applies to a generic_instantiation, then
24875 the pragma Assertion_Policy applies to the entire instance.
24876
24877 10.4/3
24878 If multiple Assertion_Policy pragmas apply to a given construct for a
24879 given assertion aspect, the assertion policy is determined by the one in
24880 the innermost enclosing region of a pragma Assertion_Policy specifying a
24881 policy for the assertion aspect. If no such Assertion_Policy pragma
24882 exists, the policy is implementation defined.
24883
24884 11/2
24885 The following language-defined library package exists:
24886
24887 12/2
24888 package Ada.Assertions is
24889 pragma Pure(Assertions);
24890
24891 13/2
24892 Assertion_Error : exception;
24893
24894 14/2
24895 procedure Assert(Check : in Boolean);
24896 procedure Assert(Check : in Boolean; Message : in String);
24897
24898 15/2
24899 end Ada.Assertions;
24900
24901 16/3
24902 A compilation unit containing a check for an assertion (including a
24903 pragma Assert) has a semantic dependence on the Assertions library unit.
24904
24905 17/3
24906 This paragraph was deleted.
24907
24908 _Dynamic Semantics_
24909
24910 18/3
24911 If performing checks is required by the Assert assertion policy in
24912 effect at the place of a pragma Assert, the elaboration of the pragma
24913 consists of evaluating the boolean expression, and if the result is
24914 False, evaluating the Message argument, if any, and raising the
24915 exception Assertions.Assertion_Error, with a message if the Message
24916 argument is provided.
24917
24918 19/2
24919 Calling the procedure Assertions.Assert without a Message parameter is
24920 equivalent to:
24921
24922 20/2
24923 if Check = False then
24924 raise Ada.Assertions.Assertion_Error;
24925 end if;
24926
24927 21/2
24928 Calling the procedure Assertions.Assert with a Message parameter is
24929 equivalent to:
24930
24931 22/2
24932 if Check = False then
24933 raise Ada.Assertions.Assertion_Error with Message;
24934 end if;
24935
24936 23/2
24937 The procedures Assertions.Assert have these effects independently of the
24938 assertion policy in effect.
24939
24940 _Bounded (Run-Time) Errors_
24941
24942 23.1/3
24943 It is a bounded error to invoke a potentially blocking operation (see
24944 *note 9.5.1::) during the evaluation of an assertion expression
24945 associated with a call on, or return from, a protected operation. If
24946 the bounded error is detected, Program_Error is raised. If not
24947 detected, execution proceeds normally, but if it is invoked within a
24948 protected action, it might result in deadlock or a (nested) protected
24949 action.
24950
24951 _Implementation Permissions_
24952
24953 24/2
24954 Assertion_Error may be declared by renaming an implementation-defined
24955 exception from another package.
24956
24957 25/2
24958 Implementations may define their own assertion policies.
24959
24960 26/3
24961 If the result of a function call in an assertion is not needed to
24962 determine the value of the assertion expression, an implementation is
24963 permitted to omit the function call. This permission applies even if
24964 the function has side effects.
24965
24966 27/3
24967 An implementation need not allow the specification of an assertion
24968 expression if the evaluation of the expression has a side effect such
24969 that an immediate reevaluation of the expression could produce a
24970 different value. Similarly, an implementation need not allow the
24971 specification of an assertion expression that is checked as part of a
24972 call on or return from a callable entity C, if the evaluation of the
24973 expression has a side effect such that the evaluation of some other
24974 assertion expression associated with the same call of (or return from) C
24975 could produce a different value than it would if the first expression
24976 had not been evaluated.
24977
24978 NOTES
24979
24980 28/2
24981 2 Normally, the boolean expression in a pragma Assert should not
24982 call functions that have significant side effects when the result
24983 of the expression is True, so that the particular assertion policy
24984 in effect will not affect normal operation of the program.
24985
24986 \1f
24987 File: arm2012.info, Node: 11.4.3, Prev: 11.4.2, Up: 11.4
24988
24989 11.4.3 Example of Exception Handling
24990 ------------------------------------
24991
24992 _Examples_
24993
24994 1
24995 Exception handling may be used to separate the detection of an error
24996 from the response to that error:
24997
24998 2/2
24999 package File_System is
25000 type File_Handle is limited private;
25001
25002 3
25003 File_Not_Found : exception;
25004 procedure Open(F : in out File_Handle; Name : String);
25005 -- raises File_Not_Found if named file does not exist
25006
25007 4
25008 End_Of_File : exception;
25009 procedure Read(F : in out File_Handle; Data : out Data_Type);
25010 -- raises End_Of_File if the file is not open
25011
25012 5
25013 ...
25014 end File_System;
25015
25016 6/2
25017 package body File_System is
25018 procedure Open(F : in out File_Handle; Name : String) is
25019 begin
25020 if File_Exists(Name) then
25021 ...
25022 else
25023 raise File_Not_Found with "File not found: " & Name & ".";
25024 end if;
25025 end Open;
25026
25027 7
25028 procedure Read(F : in out File_Handle; Data : out Data_Type) is
25029 begin
25030 if F.Current_Position <= F.Last_Position then
25031 ...
25032 else
25033 raise End_Of_File;
25034 end if;
25035 end Read;
25036
25037 8
25038 ...
25039
25040 9
25041 end File_System;
25042
25043 10
25044 with Ada.Text_IO;
25045 with Ada.Exceptions;
25046 with File_System; use File_System;
25047 use Ada;
25048 procedure Main is
25049 begin
25050 ... -- call operations in File_System
25051 exception
25052 when End_Of_File =>
25053 Close(Some_File);
25054 when Not_Found_Error : File_Not_Found =>
25055 Text_IO.Put_Line(Exceptions.Exception_Message(Not_Found_Error));
25056 when The_Error : others =>
25057 Text_IO.Put_Line("Unknown error:");
25058 if Verbosity_Desired then
25059 Text_IO.Put_Line(Exceptions.Exception_Information(The_Error));
25060 else
25061 Text_IO.Put_Line(Exceptions.Exception_Name(The_Error));
25062 Text_IO.Put_Line(Exceptions.Exception_Message(The_Error));
25063 end if;
25064 raise;
25065 end Main;
25066
25067 11
25068 In the above example, the File_System package contains information about
25069 detecting certain exceptional situations, but it does not specify how to
25070 handle those situations. Procedure Main specifies how to handle them;
25071 other clients of File_System might have different handlers, even though
25072 the exceptional situations arise from the same basic causes.
25073
25074 \1f
25075 File: arm2012.info, Node: 11.5, Next: 11.6, Prev: 11.4, Up: 11
25076
25077 11.5 Suppressing Checks
25078 =======================
25079
25080 1/2
25081 Checking pragmas give instructions to an implementation on handling
25082 language-defined checks. A pragma Suppress gives permission to an
25083 implementation to omit certain language-defined checks, while a pragma
25084 Unsuppress revokes the permission to omit checks..
25085
25086 2/3
25087 A language-defined check (or simply, a "check") is one of the situations
25088 defined by this International Standard that requires a check to be made
25089 at run time to determine whether some condition is true. A check fails
25090 when the condition being checked is False, causing an exception to be
25091 raised.
25092
25093 _Syntax_
25094
25095 3/2
25096 The forms of checking pragmas are as follows:
25097
25098 4/2
25099 pragma Suppress(identifier);
25100
25101 4.1/2
25102 pragma Unsuppress(identifier);
25103
25104 5/2
25105 A checking pragma is allowed only immediately within a
25106 declarative_part, immediately within a package_specification (*note
25107 7.1: S0191.), or as a configuration pragma.
25108
25109 _Legality Rules_
25110
25111 6/2
25112 The identifier shall be the name of a check.
25113
25114 7/2
25115 This paragraph was deleted.
25116
25117 _Static Semantics_
25118
25119 7.1/2
25120 A checking pragma applies to the named check in a specific region, and
25121 applies to all entities in that region. A checking pragma given in a
25122 declarative_part or immediately within a package_specification applies
25123 from the place of the pragma to the end of the innermost enclosing
25124 declarative region. The region for a checking pragma given as a
25125 configuration pragma is the declarative region for the entire
25126 compilation unit (or units) to which it applies.
25127
25128 7.2/3
25129 If a checking pragma applies to a generic_instantiation, then the
25130 checking pragma also applies to the entire instance.
25131
25132 8/2
25133 A pragma Suppress gives permission to an implementation to omit the
25134 named check (or every check in the case of All_Checks) for any entities
25135 to which it applies. If permission has been given to suppress a given
25136 check, the check is said to be suppressed.
25137
25138 8.1/2
25139 A pragma Unsuppress revokes the permission to omit the named check (or
25140 every check in the case of All_Checks) given by any pragma Suppress that
25141 applies at the point of the pragma Unsuppress. The permission is
25142 revoked for the region to which the pragma Unsuppress applies. If there
25143 is no such permission at the point of a pragma Unsuppress, then the
25144 pragma has no effect. A later pragma Suppress can renew the permission.
25145
25146 9
25147 The following are the language-defined checks:
25148
25149 10
25150 * The following checks correspond to situations in which the
25151 exception Constraint_Error is raised upon failure.
25152
25153 11/2
25154 Access_Check
25155 When evaluating a dereference (explicit or implicit),
25156 check that the value of the name is not null. When
25157 converting to a subtype that excludes null, check that
25158 the converted value is not null.
25159
25160 12
25161 Discriminant_Check
25162 Check that the discriminants of a composite value have
25163 the values imposed by a discriminant constraint. Also,
25164 when accessing a record component, check that it exists
25165 for the current discriminant values.
25166
25167 13/2
25168 Division_Check
25169 Check that the second operand is not zero for the
25170 operations /, rem and mod.
25171
25172 14
25173 Index_Check
25174 Check that the bounds of an array value are equal to the
25175 corresponding bounds of an index constraint. Also, when
25176 accessing a component of an array object, check for each
25177 dimension that the given index value belongs to the range
25178 defined by the bounds of the array object. Also, when
25179 accessing a slice of an array object, check that the
25180 given discrete range is compatible with the range defined
25181 by the bounds of the array object.
25182
25183 15
25184 Length_Check
25185 Check that two arrays have matching components, in the
25186 case of array subtype conversions, and logical operators
25187 for arrays of boolean components.
25188
25189 16
25190 Overflow_Check
25191 Check that a scalar value is within the base range of its
25192 type, in cases where the implementation chooses to raise
25193 an exception instead of returning the correct
25194 mathematical result.
25195
25196 17
25197 Range_Check
25198 Check that a scalar value satisfies a range constraint.
25199 Also, for the elaboration of a subtype_indication, check
25200 that the constraint (if present) is compatible with the
25201 subtype denoted by the subtype_mark. Also, for an
25202 aggregate, check that an index or discriminant value
25203 belongs to the corresponding subtype. Also, check that
25204 when the result of an operation yields an array, the
25205 value of each component belongs to the component subtype.
25206
25207 18
25208 Tag_Check
25209 Check that operand tags in a dispatching call are all
25210 equal. Check for the correct tag on tagged type
25211 conversions, for an assignment_statement, and when
25212 returning a tagged limited object from a function.
25213
25214 19
25215 * The following checks correspond to situations in which the
25216 exception Program_Error is raised upon failure.
25217
25218 19.1/2
25219 Accessibility_Check
25220 Check the accessibility level of an entity or view.
25221
25222 19.2/2
25223 Allocation_Check
25224 For an allocator, check that the master of any tasks to
25225 be created by the allocator is not yet completed or some
25226 dependents have not yet terminated, and that the
25227 finalization of the collection has not started.
25228
25229 20
25230 Elaboration_Check
25231 When a subprogram or protected entry is called, a task
25232 activation is accomplished, or a generic instantiation is
25233 elaborated, check that the body of the corresponding unit
25234 has already been elaborated.
25235
25236 21/2
25237
25238 This paragraph was deleted.
25239
25240 22
25241 * The following check corresponds to situations in which the
25242 exception Storage_Error is raised upon failure.
25243
25244 23
25245 Storage_Check
25246 Check that evaluation of an allocator does not require
25247 more space than is available for a storage pool. Check
25248 that the space available for a task or subprogram has not
25249 been exceeded.
25250
25251 24
25252 * The following check corresponds to all situations in which any
25253 predefined exception is raised.
25254
25255 25/3
25256 All_Checks
25257 Represents the union of all checks; suppressing
25258 All_Checks suppresses all checks other than those
25259 associated with assertions. In addition, an
25260 implementation is allowed (but not required) to behave as
25261 if a pragma Assertion_Policy(Ignore) applies to any
25262 region to which pragma Suppress(All_Checks) applies.
25263
25264 _Erroneous Execution_
25265
25266 26
25267 If a given check has been suppressed, and the corresponding error
25268 situation occurs, the execution of the program is erroneous.
25269
25270 _Implementation Permissions_
25271
25272 27/2
25273 An implementation is allowed to place restrictions on checking pragmas,
25274 subject only to the requirement that pragma Unsuppress shall allow any
25275 check names supported by pragma Suppress. An implementation is allowed
25276 to add additional check names, with implementation-defined semantics.
25277 When Overflow_Check has been suppressed, an implementation may also
25278 suppress an unspecified subset of the Range_Checks.
25279
25280 27.1/2
25281 An implementation may support an additional parameter on pragma
25282 Unsuppress similar to the one allowed for pragma Suppress (see *note
25283 J.10::). The meaning of such a parameter is implementation-defined.
25284
25285 _Implementation Advice_
25286
25287 28
25288 The implementation should minimize the code executed for checks that
25289 have been suppressed.
25290
25291 NOTES
25292
25293 29
25294 3 There is no guarantee that a suppressed check is actually
25295 removed; hence a pragma Suppress should be used only for efficiency
25296 reasons.
25297
25298 29.1/2
25299 4 It is possible to give both a pragma Suppress and Unsuppress for
25300 the same check immediately within the same declarative_part. In
25301 that case, the last pragma given determines whether or not the
25302 check is suppressed. Similarly, it is possible to resuppress a
25303 check which has been unsuppressed by giving a pragma Suppress in an
25304 inner declarative region.
25305
25306 _Examples_
25307
25308 30/2
25309 Examples of suppressing and unsuppressing checks:
25310
25311 31/2
25312 pragma Suppress(Index_Check);
25313 pragma Unsuppress(Overflow_Check);
25314
25315 \1f
25316 File: arm2012.info, Node: 11.6, Prev: 11.5, Up: 11
25317
25318 11.6 Exceptions and Optimization
25319 ================================
25320
25321 1/3
25322 This subclause gives permission to the implementation to perform certain
25323 "optimizations" that do not necessarily preserve the canonical
25324 semantics.
25325
25326 _Dynamic Semantics_
25327
25328 2/3
25329 The rest of this International Standard (outside this subclause) defines
25330 the canonical semantics of the language. The canonical semantics of a
25331 given (legal) program determines a set of possible external effects that
25332 can result from the execution of the program with given inputs.
25333
25334 3/3
25335 As explained in *note 1.1.3::, "*note 1.1.3:: Conformity of an
25336 Implementation with the Standard", the external effect of a program is
25337 defined in terms of its interactions with its external environment.
25338 Hence, the implementation can perform any internal actions whatsoever,
25339 in any order or in parallel, so long as the external effect of the
25340 execution of the program is one that is allowed by the canonical
25341 semantics, or by the rules of this subclause.
25342
25343 _Implementation Permissions_
25344
25345 4
25346 The following additional permissions are granted to the implementation:
25347
25348 5
25349 * An implementation need not always raise an exception when a
25350 language-defined check fails. Instead, the operation that failed
25351 the check can simply yield an undefined result. The exception need
25352 be raised by the implementation only if, in the absence of raising
25353 it, the value of this undefined result would have some effect on
25354 the external interactions of the program. In determining this, the
25355 implementation shall not presume that an undefined result has a
25356 value that belongs to its subtype, nor even to the base range of
25357 its type, if scalar. Having removed the raise of the exception,
25358 the canonical semantics will in general allow the implementation to
25359 omit the code for the check, and some or all of the operation
25360 itself.
25361
25362 6/3
25363 * If an exception is raised due to the failure of a language-defined
25364 check, then upon reaching the corresponding exception_handler (or
25365 the termination of the task, if none), the external interactions
25366 that have occurred need reflect only that the exception was raised
25367 somewhere within the execution of the sequence_of_statements with
25368 the handler (or the task_body), possibly earlier (or later if the
25369 interactions are independent of the result of the checked
25370 operation) than that defined by the canonical semantics, but not
25371 within the execution of some abort-deferred operation or
25372 independent subprogram that does not dynamically enclose the
25373 execution of the construct whose check failed. An independent
25374 subprogram is one that is defined outside the library unit
25375 containing the construct whose check failed, and for which the
25376 Inline aspect is False. Any assignment that occurred outside of
25377 such abort-deferred operations or independent subprograms can be
25378 disrupted by the raising of the exception, causing the object or
25379 its parts to become abnormal, and certain subsequent uses of the
25380 object to be erroneous, as explained in *note 13.9.1::.
25381
25382 NOTES
25383
25384 7/3
25385 5 The permissions granted by this subclause can have an effect on
25386 the semantics of a program only if the program fails a
25387 language-defined check.
25388
25389 \1f
25390 File: arm2012.info, Node: 12, Next: 13, Prev: 11, Up: Top
25391
25392 12 Generic Units
25393 ****************
25394
25395 1
25396 A generic unit is a program unit that is either a generic subprogram or
25397 a generic package. A generic unit is a template, which can be
25398 parameterized, and from which corresponding (nongeneric) subprograms or
25399 packages can be obtained. The resulting program units are said to be
25400 instances of the original generic unit.
25401
25402 2
25403 A generic unit is declared by a generic_declaration. This form of
25404 declaration has a generic_formal_part (*note 12.1: S0273.) declaring any
25405 generic formal parameters. An instance of a generic unit is obtained as
25406 the result of a generic_instantiation with appropriate generic actual
25407 parameters for the generic formal parameters. An instance of a generic
25408 subprogram is a subprogram. An instance of a generic package is a
25409 package.
25410
25411 3
25412 Generic units are templates. As templates they do not have the
25413 properties that are specific to their nongeneric counterparts. For
25414 example, a generic subprogram can be instantiated but it cannot be
25415 called. In contrast, an instance of a generic subprogram is a
25416 (nongeneric) subprogram; hence, this instance can be called but it
25417 cannot be used to produce further instances.
25418
25419 * Menu:
25420
25421 * 12.1 :: Generic Declarations
25422 * 12.2 :: Generic Bodies
25423 * 12.3 :: Generic Instantiation
25424 * 12.4 :: Formal Objects
25425 * 12.5 :: Formal Types
25426 * 12.6 :: Formal Subprograms
25427 * 12.7 :: Formal Packages
25428 * 12.8 :: Example of a Generic Package
25429
25430 \1f
25431 File: arm2012.info, Node: 12.1, Next: 12.2, Up: 12
25432
25433 12.1 Generic Declarations
25434 =========================
25435
25436 1
25437 A generic_declaration declares a generic unit, which is either a generic
25438 subprogram or a generic package. A generic_declaration includes a
25439 generic_formal_part declaring any generic formal parameters. A generic
25440 formal parameter can be an object; alternatively (unlike a parameter of
25441 a subprogram), it can be a type, a subprogram, or a package.
25442
25443 _Syntax_
25444
25445 2
25446 generic_declaration ::= generic_subprogram_declaration |
25447 generic_package_declaration
25448
25449 3/3
25450 generic_subprogram_declaration ::=
25451 generic_formal_part subprogram_specification
25452 [aspect_specification];
25453
25454 4
25455 generic_package_declaration ::=
25456 generic_formal_part package_specification;
25457
25458 5
25459 generic_formal_part ::= generic {
25460 generic_formal_parameter_declaration | use_clause}
25461
25462 6
25463 generic_formal_parameter_declaration ::=
25464 formal_object_declaration
25465 | formal_type_declaration
25466 | formal_subprogram_declaration
25467 | formal_package_declaration
25468
25469 7
25470 The only form of subtype_indication allowed within a
25471 generic_formal_part is a subtype_mark (that is, the
25472 subtype_indication shall not include an explicit constraint). The
25473 defining name of a generic subprogram shall be an identifier (not
25474 an operator_symbol).
25475
25476 _Static Semantics_
25477
25478 8/2
25479 A generic_declaration declares a generic unit -- a generic package,
25480 generic procedure, or generic function, as appropriate.
25481
25482 9
25483 An entity is a generic formal entity if it is declared by a
25484 generic_formal_parameter_declaration. "Generic formal," or simply
25485 "formal," is used as a prefix in referring to objects, subtypes (and
25486 types), functions, procedures and packages, that are generic formal
25487 entities, as well as to their respective declarations. Examples:
25488 "generic formal procedure" or a "formal integer type declaration."
25489
25490 _Dynamic Semantics_
25491
25492 10
25493 The elaboration of a generic_declaration has no effect.
25494
25495 NOTES
25496
25497 11
25498 1 Outside a generic unit a name that denotes the
25499 generic_declaration denotes the generic unit. In contrast, within
25500 the declarative region of the generic unit, a name that denotes the
25501 generic_declaration denotes the current instance.
25502
25503 12
25504 2 Within a generic subprogram_body, the name of this program unit
25505 acts as the name of a subprogram. Hence this name can be
25506 overloaded, and it can appear in a recursive call of the current
25507 instance. For the same reason, this name cannot appear after the
25508 reserved word new in a (recursive) generic_instantiation.
25509
25510 13
25511 3 A default_expression or default_name appearing in a
25512 generic_formal_part is not evaluated during elaboration of the
25513 generic_formal_part; instead, it is evaluated when used. (The
25514 usual visibility rules apply to any name used in a default: the
25515 denoted declaration therefore has to be visible at the place of the
25516 expression.)
25517
25518 _Examples_
25519
25520 14
25521 Examples of generic formal parts:
25522
25523 15
25524 generic -- parameterless
25525
25526 16
25527 generic
25528 Size : Natural; -- formal object
25529
25530 17
25531 generic
25532 Length : Integer := 200; -- formal object with a default expression
25533
25534 18
25535 Area : Integer := Length*Length; -- formal object with a default expression
25536
25537 19
25538 generic
25539 type Item is private; -- formal type
25540 type Index is (<>); -- formal type
25541 type Row is array(Index range <>) of Item; -- formal type
25542 with function "<"(X, Y : Item) return Boolean; -- formal subprogram
25543
25544 20
25545 Examples of generic declarations declaring generic subprograms Exchange
25546 and Squaring:
25547
25548 21
25549 generic
25550 type Elem is private;
25551 procedure Exchange(U, V : in out Elem);
25552
25553 22
25554 generic
25555 type Item is private;
25556 with function "*"(U, V : Item) return Item is <>;
25557 function Squaring(X : Item) return Item;
25558
25559 23
25560 Example of a generic declaration declaring a generic package:
25561
25562 24
25563 generic
25564 type Item is private;
25565 type Vector is array (Positive range <>) of Item;
25566 with function Sum(X, Y : Item) return Item;
25567 package On_Vectors is
25568 function Sum (A, B : Vector) return Vector;
25569 function Sigma(A : Vector) return Item;
25570 Length_Error : exception;
25571 end On_Vectors;
25572
25573 \1f
25574 File: arm2012.info, Node: 12.2, Next: 12.3, Prev: 12.1, Up: 12
25575
25576 12.2 Generic Bodies
25577 ===================
25578
25579 1
25580 The body of a generic unit (a generic body) is a template for the
25581 instance bodies. The syntax of a generic body is identical to that of a
25582 nongeneric body.
25583
25584 _Dynamic Semantics_
25585
25586 2
25587 The elaboration of a generic body has no other effect than to establish
25588 that the generic unit can from then on be instantiated without failing
25589 the Elaboration_Check. If the generic body is a child of a generic
25590 package, then its elaboration establishes that each corresponding
25591 declaration nested in an instance of the parent (see *note 10.1.1::) can
25592 from then on be instantiated without failing the Elaboration_Check.
25593
25594 NOTES
25595
25596 3
25597 4 The syntax of generic subprograms implies that a generic
25598 subprogram body is always the completion of a declaration.
25599
25600 _Examples_
25601
25602 4
25603 Example of a generic procedure body:
25604
25605 5
25606 procedure Exchange(U, V : in out Elem) is -- see *note 12.1::
25607 T : Elem; -- the generic formal type
25608 begin
25609 T := U;
25610 U := V;
25611 V := T;
25612 end Exchange;
25613
25614 6
25615 Example of a generic function body:
25616
25617 7
25618 function Squaring(X : Item) return Item is -- see *note 12.1::
25619 begin
25620 return X*X; -- the formal operator "*"
25621 end Squaring;
25622
25623 8
25624 Example of a generic package body:
25625
25626 9
25627 package body On_Vectors is -- see *note 12.1::
25628
25629 10
25630 function Sum(A, B : Vector) return Vector is
25631 Result : Vector(A'Range); -- the formal type Vector
25632 Bias : constant Integer := B'First - A'First;
25633 begin
25634 if A'Length /= B'Length then
25635 raise Length_Error;
25636 end if;
25637
25638 11
25639 for N in A'Range loop
25640 Result(N) := Sum(A(N), B(N + Bias)); -- the formal function Sum
25641 end loop;
25642 return Result;
25643 end Sum;
25644
25645 12
25646 function Sigma(A : Vector) return Item is
25647 Total : Item := A(A'First); -- the formal type Item
25648 begin
25649 for N in A'First + 1 .. A'Last loop
25650 Total := Sum(Total, A(N)); -- the formal function Sum
25651 end loop;
25652 return Total;
25653 end Sigma;
25654 end On_Vectors;
25655
25656 \1f
25657 File: arm2012.info, Node: 12.3, Next: 12.4, Prev: 12.2, Up: 12
25658
25659 12.3 Generic Instantiation
25660 ==========================
25661
25662 1
25663 An instance of a generic unit is declared by a generic_instantiation.
25664
25665 _Syntax_
25666
25667 2/3
25668 generic_instantiation ::=
25669 package defining_program_unit_name is
25670 new generic_package_name [generic_actual_part]
25671 [aspect_specification];
25672 | [overriding_indicator]
25673 procedure defining_program_unit_name is
25674 new generic_procedure_name [generic_actual_part]
25675 [aspect_specification];
25676 | [overriding_indicator]
25677 function defining_designator is
25678 new generic_function_name [generic_actual_part]
25679 [aspect_specification];
25680
25681 3
25682 generic_actual_part ::=
25683 (generic_association {, generic_association})
25684
25685 4
25686 generic_association ::=
25687 [generic_formal_parameter_selector_name =>]
25688 explicit_generic_actual_parameter
25689
25690 5
25691 explicit_generic_actual_parameter ::= expression | variable_name
25692 | subprogram_name | entry_name | subtype_mark
25693 | package_instance_name
25694
25695 6
25696 A generic_association is named or positional according to whether
25697 or not the generic_formal_parameter_selector_name (*note 4.1.3:
25698 S0099.) is specified. Any positional associations shall precede
25699 any named associations.
25700
25701 7/3
25702 The generic actual parameter is either the
25703 explicit_generic_actual_parameter given in a generic_association (*note
25704 12.3: S0277.) for each formal, or the corresponding default_expression
25705 (*note 3.7: S0063.) or default_name (*note 12.6: S0299.) if no
25706 generic_association (*note 12.3: S0277.) is given for the formal. When
25707 the meaning is clear from context, the term "generic actual," or simply
25708 "actual," is used as a synonym for "generic actual parameter" and also
25709 for the view denoted by one, or the value of one.
25710
25711 _Legality Rules_
25712
25713 8
25714 In a generic_instantiation for a particular kind of program unit
25715 (package, procedure, or function), the name shall denote a generic unit
25716 of the corresponding kind (generic package, generic procedure, or
25717 generic function, respectively).
25718
25719 9/3
25720 The generic_formal_parameter_selector_name of a named
25721 generic_association shall denote a generic_formal_parameter_declaration
25722 of the generic unit being instantiated. If two or more formal
25723 subprograms have the same defining name, then named associations are not
25724 allowed for the corresponding actuals.
25725
25726 9.1/3
25727 The generic_formal_parameter_declaration for a positional
25728 generic_association is the parameter with the corresponding position in
25729 the generic_formal_part of the generic unit being instantiated.
25730
25731 10
25732 A generic_instantiation shall contain at most one generic_association
25733 for each formal. Each formal without an association shall have a
25734 default_expression or subprogram_default.
25735
25736 11
25737 In a generic unit Legality Rules are enforced at compile time of the
25738 generic_declaration and generic body, given the properties of the
25739 formals. In the visible part and formal part of an instance, Legality
25740 Rules are enforced at compile time of the generic_instantiation, given
25741 the properties of the actuals. In other parts of an instance, Legality
25742 Rules are not enforced; this rule does not apply when a given rule
25743 explicitly specifies otherwise.
25744
25745 _Static Semantics_
25746
25747 12
25748 A generic_instantiation declares an instance; it is equivalent to the
25749 instance declaration (a package_declaration (*note 7.1: S0190.) or
25750 subprogram_declaration (*note 6.1: S0163.)) immediately followed by the
25751 instance body, both at the place of the instantiation.
25752
25753 13
25754 The instance is a copy of the text of the template. Each use of a
25755 formal parameter becomes (in the copy) a use of the actual, as explained
25756 below. An instance of a generic package is a package, that of a generic
25757 procedure is a procedure, and that of a generic function is a function.
25758
25759 14
25760 The interpretation of each construct within a generic declaration or
25761 body is determined using the overloading rules when that generic
25762 declaration or body is compiled. In an instance, the interpretation of
25763 each (copied) construct is the same, except in the case of a name that
25764 denotes the generic_declaration or some declaration within the generic
25765 unit; the corresponding name in the instance then denotes the
25766 corresponding copy of the denoted declaration. The overloading rules do
25767 not apply in the instance.
25768
25769 15
25770 In an instance, a generic_formal_parameter_declaration declares a view
25771 whose properties are identical to those of the actual, except as
25772 specified in *note 12.4::, "*note 12.4:: Formal Objects" and *note
25773 12.6::, "*note 12.6:: Formal Subprograms". Similarly, for a declaration
25774 within a generic_formal_parameter_declaration, the corresponding
25775 declaration in an instance declares a view whose properties are
25776 identical to the corresponding declaration within the declaration of the
25777 actual.
25778
25779 16
25780 Implicit declarations are also copied, and a name that denotes an
25781 implicit declaration in the generic denotes the corresponding copy in
25782 the instance. However, for a type declared within the visible part of
25783 the generic, a whole new set of primitive subprograms is implicitly
25784 declared for use outside the instance, and may differ from the copied
25785 set if the properties of the type in some way depend on the properties
25786 of some actual type specified in the instantiation. For example, if the
25787 type in the generic is derived from a formal private type, then in the
25788 instance the type will inherit subprograms from the corresponding actual
25789 type.
25790
25791 17
25792 These new implicit declarations occur immediately after the type
25793 declaration in the instance, and override the copied ones. The copied
25794 ones can be called only from within the instance; the new ones can be
25795 called only from outside the instance, although for tagged types, the
25796 body of a new one can be executed by a call to an old one.
25797
25798 18
25799 In the visible part of an instance, an explicit declaration overrides an
25800 implicit declaration if they are homographs, as described in *note
25801 8.3::. On the other hand, an explicit declaration in the private part
25802 of an instance overrides an implicit declaration in the instance, only
25803 if the corresponding explicit declaration in the generic overrides a
25804 corresponding implicit declaration in the generic. Corresponding rules
25805 apply to the other kinds of overriding described in *note 8.3::.
25806
25807 _Post-Compilation Rules_
25808
25809 19
25810 Recursive generic instantiation is not allowed in the following sense:
25811 if a given generic unit includes an instantiation of a second generic
25812 unit, then the instance generated by this instantiation shall not
25813 include an instance of the first generic unit (whether this instance is
25814 generated directly, or indirectly by intermediate instantiations).
25815
25816 _Dynamic Semantics_
25817
25818 20
25819 For the elaboration of a generic_instantiation, each generic_association
25820 is first evaluated. If a default is used, an implicit
25821 generic_association is assumed for this rule. These evaluations are
25822 done in an arbitrary order, except that the evaluation for a default
25823 actual takes place after the evaluation for another actual if the
25824 default includes a name that denotes the other one. Finally, the
25825 instance declaration and body are elaborated.
25826
25827 21
25828 For the evaluation of a generic_association the generic actual parameter
25829 is evaluated. Additional actions are performed in the case of a formal
25830 object of mode in (see *note 12.4::).
25831
25832 NOTES
25833
25834 22
25835 5 If a formal type is not tagged, then the type is treated as an
25836 untagged type within the generic body. Deriving from such a type
25837 in a generic body is permitted; the new type does not get a new tag
25838 value, even if the actual is tagged. Overriding operations for
25839 such a derived type cannot be dispatched to from outside the
25840 instance.
25841
25842 _Examples_
25843
25844 23
25845 Examples of generic instantiations (see *note 12.1::):
25846
25847 24
25848 procedure Swap is new Exchange(Elem => Integer);
25849 procedure Swap is new Exchange(Character); -- Swap is overloaded
25850 function Square is new Squaring(Integer); -- "*" of Integer used by default
25851 function Square is new Squaring(Item => Matrix, "*" => Matrix_Product);
25852 function Square is new Squaring(Matrix, Matrix_Product); -- same as previous
25853
25854 25
25855 package Int_Vectors is new On_Vectors(Integer, Table, "+");
25856
25857 26
25858 Examples of uses of instantiated units:
25859
25860 27
25861 Swap(A, B);
25862 A := Square(A);
25863
25864 28
25865 T : Table(1 .. 5) := (10, 20, 30, 40, 50);
25866 N : Integer := Int_Vectors.Sigma(T); -- 150 (see *note 12.2::, "*note 12.2:: Generic Bodies" for the body of Sigma)
25867
25868 29
25869 use Int_Vectors;
25870 M : Integer := Sigma(T); -- 150
25871
25872 \1f
25873 File: arm2012.info, Node: 12.4, Next: 12.5, Prev: 12.3, Up: 12
25874
25875 12.4 Formal Objects
25876 ===================
25877
25878 1
25879 A generic formal object can be used to pass a value or variable to a
25880 generic unit.
25881
25882 _Syntax_
25883
25884 2/3
25885 formal_object_declaration ::=
25886 defining_identifier_list : mode [null_exclusion]
25887 subtype_mark [:= default_expression]
25888 [aspect_specification];
25889 | defining_identifier_list : mode access_definition [:=
25890 default_expression]
25891 [aspect_specification];
25892
25893 _Name Resolution Rules_
25894
25895 3
25896 The expected type for the default_expression, if any, of a formal object
25897 is the type of the formal object.
25898
25899 4
25900 For a generic formal object of mode in, the expected type for the actual
25901 is the type of the formal.
25902
25903 5/2
25904 For a generic formal object of mode in out, the type of the actual shall
25905 resolve to the type determined by the subtype_mark, or for a
25906 formal_object_declaration with an access_definition, to a specific
25907 anonymous access type. If the anonymous access type is an
25908 access-to-object type, the type of the actual shall have the same
25909 designated type as that of the access_definition. If the anonymous
25910 access type is an access-to-subprogram type, the type of the actual
25911 shall have a designated profile which is type conformant with that of
25912 the access_definition.
25913
25914 _Legality Rules_
25915
25916 6
25917 If a generic formal object has a default_expression, then the mode shall
25918 be in (either explicitly or by default); otherwise, its mode shall be
25919 either in or in out.
25920
25921 7
25922 For a generic formal object of mode in, the actual shall be an
25923 expression. For a generic formal object of mode in out, the actual
25924 shall be a name that denotes a variable for which renaming is allowed
25925 (see *note 8.5.1::).
25926
25927 8/2
25928 In the case where the type of the formal is defined by an
25929 access_definition, the type of the actual and the type of the formal:
25930
25931 8.1/2
25932 * shall both be access-to-object types with statically matching
25933 designated subtypes and with both or neither being
25934 access-to-constant types; or
25935
25936 8.2/2
25937 * shall both be access-to-subprogram types with subtype conformant
25938 designated profiles.
25939
25940 8.3/2
25941 For a formal_object_declaration with a null_exclusion or an
25942 access_definition that has a null_exclusion:
25943
25944 8.4/2
25945 * if the actual matching the formal_object_declaration denotes the
25946 generic formal object of another generic unit G, and the
25947 instantiation containing the actual occurs within the body of G or
25948 within the body of a generic unit declared within the declarative
25949 region of G, then the declaration of the formal object of G shall
25950 have a null_exclusion;
25951
25952 8.5/2
25953 * otherwise, the subtype of the actual matching the
25954 formal_object_declaration shall exclude null. In addition to the
25955 places where Legality Rules normally apply (see *note 12.3::), this
25956 rule applies also in the private part of an instance of a generic
25957 unit.
25958
25959 _Static Semantics_
25960
25961 9/2
25962 A formal_object_declaration declares a generic formal object. The
25963 default mode is in. For a formal object of mode in, the nominal subtype
25964 is the one denoted by the subtype_mark or access_definition in the
25965 declaration of the formal. For a formal object of mode in out, its type
25966 is determined by the subtype_mark or access_definition in the
25967 declaration; its nominal subtype is nonstatic, even if the subtype_mark
25968 denotes a static subtype; for a composite type, its nominal subtype is
25969 unconstrained if the first subtype of the type is unconstrained, even if
25970 the subtype_mark denotes a constrained subtype.
25971
25972 10/2
25973 In an instance, a formal_object_declaration of mode in is a full
25974 constant declaration and declares a new stand-alone constant object
25975 whose initialization expression is the actual, whereas a
25976 formal_object_declaration of mode in out declares a view whose
25977 properties are identical to those of the actual.
25978
25979 _Dynamic Semantics_
25980
25981 11
25982 For the evaluation of a generic_association for a formal object of mode
25983 in, a constant object is created, the value of the actual parameter is
25984 converted to the nominal subtype of the formal object, and assigned to
25985 the object, including any value adjustment -- see *note 7.6::.
25986
25987 NOTES
25988
25989 12
25990 6 The constraints that apply to a generic formal object of mode in
25991 out are those of the corresponding generic actual parameter (not
25992 those implied by the subtype_mark that appears in the
25993 formal_object_declaration). Therefore, to avoid confusion, it is
25994 recommended that the name of a first subtype be used for the
25995 declaration of such a formal object.
25996
25997 \1f
25998 File: arm2012.info, Node: 12.5, Next: 12.6, Prev: 12.4, Up: 12
25999
26000 12.5 Formal Types
26001 =================
26002
26003 1/2
26004 A generic formal subtype can be used to pass to a generic unit a subtype
26005 whose type is in a certain category of types.
26006
26007 _Syntax_
26008
26009 2/3
26010 formal_type_declaration ::=
26011 formal_complete_type_declaration
26012 | formal_incomplete_type_declaration
26013
26014 2.1/3
26015 formal_complete_type_declaration ::=
26016 type defining_identifier[discriminant_part] is
26017 formal_type_definition
26018 [aspect_specification];
26019
26020 2.2/3
26021 formal_incomplete_type_declaration ::=
26022 type defining_identifier[discriminant_part] [is tagged];
26023
26024 3/2
26025 formal_type_definition ::=
26026 formal_private_type_definition
26027 | formal_derived_type_definition
26028 | formal_discrete_type_definition
26029 | formal_signed_integer_type_definition
26030 | formal_modular_type_definition
26031 | formal_floating_point_definition
26032 | formal_ordinary_fixed_point_definition
26033 | formal_decimal_fixed_point_definition
26034 | formal_array_type_definition
26035 | formal_access_type_definition
26036 | formal_interface_type_definition
26037
26038 _Legality Rules_
26039
26040 4
26041 For a generic formal subtype, the actual shall be a subtype_mark; it
26042 denotes the (generic) actual subtype.
26043
26044 _Static Semantics_
26045
26046 5
26047 A formal_type_declaration declares a (generic) formal type, and its
26048 first subtype, the (generic) formal subtype.
26049
26050 6/3
26051 The form of a formal_type_definition determines a category (of types) to
26052 which the formal type belongs. For a formal_private_type_definition the
26053 reserved words tagged and limited indicate the category of types (see
26054 *note 12.5.1::). The reserved word tagged also plays this role in the
26055 case of a formal_incomplete_type_declaration. For a
26056 formal_derived_type_definition the category of types is the derivation
26057 class rooted at the ancestor type. For other formal types, the name of
26058 the syntactic category indicates the category of types; a
26059 formal_discrete_type_definition defines a discrete type, and so on.
26060
26061 _Legality Rules_
26062
26063 7/2
26064 The actual type shall be in the category determined for the formal.
26065
26066 _Static Semantics_
26067
26068 8/3
26069 The formal type also belongs to each category that contains the
26070 determined category. The primitive subprograms of the type are as for
26071 any type in the determined category. For a formal type other than a
26072 formal derived type, these are the predefined operators of the type.
26073 For an elementary formal type, the predefined operators are implicitly
26074 declared immediately after the declaration of the formal type. For a
26075 composite formal type, the predefined operators are implicitly declared
26076 either immediately after the declaration of the formal type, or later
26077 immediately within the declarative region in which the type is declared
26078 according to the rules of *note 7.3.1::. In an instance, the copy of
26079 such an implicit declaration declares a view of the predefined operator
26080 of the actual type, even if this operator has been overridden for the
26081 actual type and even if it is never declared for the actual type. The
26082 rules specific to formal derived types are given in *note 12.5.1::.
26083
26084 NOTES
26085
26086 9
26087 7 Generic formal types, like all types, are not named. Instead, a
26088 name can denote a generic formal subtype. Within a generic unit, a
26089 generic formal type is considered as being distinct from all other
26090 (formal or nonformal) types.
26091
26092 10
26093 8 A discriminant_part is allowed only for certain kinds of types,
26094 and therefore only for certain kinds of generic formal types. See
26095 *note 3.7::.
26096
26097 _Examples_
26098
26099 11
26100 Examples of generic formal types:
26101
26102 12
26103 type Item is private;
26104 type Buffer(Length : Natural) is limited private;
26105
26106 13
26107 type Enum is (<>);
26108 type Int is range <>;
26109 type Angle is delta <>;
26110 type Mass is digits <>;
26111
26112 14
26113 type Table is array (Enum) of Item;
26114
26115 15
26116 Example of a generic formal part declaring a formal integer type:
26117
26118 16
26119 generic
26120 type Rank is range <>;
26121 First : Rank := Rank'First;
26122 Second : Rank := First + 1; -- the operator "+" of the type Rank
26123
26124 * Menu:
26125
26126 * 12.5.1 :: Formal Private and Derived Types
26127 * 12.5.2 :: Formal Scalar Types
26128 * 12.5.3 :: Formal Array Types
26129 * 12.5.4 :: Formal Access Types
26130 * 12.5.5 :: Formal Interface Types
26131
26132 \1f
26133 File: arm2012.info, Node: 12.5.1, Next: 12.5.2, Up: 12.5
26134
26135 12.5.1 Formal Private and Derived Types
26136 ---------------------------------------
26137
26138 1/3
26139 In its most general form, the category determined for a formal private
26140 type is all types, but the category can be restricted to only nonlimited
26141 types or to only tagged types. Similarly, the category for a formal
26142 incomplete type is all types but the category can be restricted to only
26143 tagged types; unlike other formal types, the actual type does not need
26144 to be able to be frozen (see *note 13.14::). The category determined
26145 for a formal derived type is the derivation class rooted at the ancestor
26146 type.
26147
26148 _Syntax_
26149
26150 2
26151 formal_private_type_definition ::=
26152 [[abstract] tagged] [limited] private
26153
26154 3/2
26155 formal_derived_type_definition ::=
26156 [abstract] [limited | synchronized] new subtype_mark [[and
26157 interface_list]with private]
26158
26159 _Legality Rules_
26160
26161 4
26162 If a generic formal type declaration has a known_discriminant_part, then
26163 it shall not include a default_expression for a discriminant.
26164
26165 5/3
26166 The ancestor subtype of a formal derived type is the subtype denoted by
26167 the subtype_mark of the formal_derived_type_definition. For a formal
26168 derived type declaration, the reserved words with private shall appear
26169 if and only if the ancestor type is a tagged type; in this case the
26170 formal derived type is a private extension of the ancestor type and the
26171 ancestor shall not be a class-wide type. Similarly, an interface_list
26172 or the optional reserved words abstract or synchronized shall appear
26173 only if the ancestor type is a tagged type. The reserved word limited
26174 or synchronized shall appear only if the ancestor type and any
26175 progenitor types are limited types. The reserved word synchronized
26176 shall appear (rather than limited) if the ancestor type or any of the
26177 progenitor types are synchronized interfaces. The ancestor type shall
26178 be a limited interface if the reserved word synchronized appears.
26179
26180 5.1/3
26181 The actual type for a formal derived type shall be a descendant of the
26182 ancestor type and every progenitor of the formal type. If the formal
26183 type is nonlimited, the actual type shall be nonlimited. If the
26184 reserved word synchronized appears in the declaration of the formal
26185 derived type, the actual type shall be a synchronized tagged type.
26186
26187 6/3
26188 If a formal private or derived subtype is definite, then the actual
26189 subtype shall also be definite.
26190
26191 6.1/3
26192 A formal_incomplete_type_declaration declares a formal incomplete type.
26193 The only view of a formal incomplete type is an incomplete view. Thus,
26194 a formal incomplete type is subject to the same usage restrictions as
26195 any other incomplete type -- see *note 3.10.1::.
26196
26197 7
26198 For a generic formal derived type with no discriminant_part:
26199
26200 8
26201 * If the ancestor subtype is constrained, the actual subtype shall be
26202 constrained, and shall be statically compatible with the ancestor;
26203
26204 9
26205 * If the ancestor subtype is an unconstrained access or composite
26206 subtype, the actual subtype shall be unconstrained.
26207
26208 10
26209 * If the ancestor subtype is an unconstrained discriminated subtype,
26210 then the actual shall have the same number of discriminants, and
26211 each discriminant of the actual shall correspond to a discriminant
26212 of the ancestor, in the sense of *note 3.7::.
26213
26214 10.1/2
26215 * If the ancestor subtype is an access subtype, the actual subtype
26216 shall exclude null if and only if the ancestor subtype excludes
26217 null.
26218
26219 11/3
26220 The declaration of a formal derived type shall not have a
26221 known_discriminant_part. For a generic formal private or incomplete
26222 type with a known_discriminant_part:
26223
26224 12
26225 * The actual type shall be a type with the same number of
26226 discriminants.
26227
26228 13
26229 * The actual subtype shall be unconstrained.
26230
26231 14
26232 * The subtype of each discriminant of the actual type shall
26233 statically match the subtype of the corresponding discriminant of
26234 the formal type.
26235
26236 15
26237 For a generic formal type with an unknown_discriminant_part, the actual
26238 may, but need not, have discriminants, and may be definite or
26239 indefinite.
26240
26241 _Static Semantics_
26242
26243 16/2
26244 The category determined for a formal private type is as follows:
26245
26246 17/2
26247 Type Definition Determined Category
26248
26249 limited private the category of all types
26250 private the category of all nonlimited types
26251 tagged limited private the category of all tagged types
26252 tagged private the category of all nonlimited tagged types
26253
26254 18
26255 The presence of the reserved word abstract determines whether the actual
26256 type may be abstract.
26257
26258 18.1/3
26259 The category determined for a formal incomplete type is the category of
26260 all types, unless the formal_type_declaration includes the reserved word
26261 tagged; in this case, it is the category of all tagged types.
26262
26263 19
26264 A formal private or derived type is a private or derived type,
26265 respectively. A formal derived tagged type is a private extension. A
26266 formal private or derived type is abstract if the reserved word abstract
26267 appears in its declaration.
26268
26269 20/3
26270 For a formal derived type, the characteristics (including components,
26271 but excluding discriminants if there is a new discriminant_part),
26272 predefined operators, and inherited user-defined primitive subprograms
26273 are determined by its ancestor type and its progenitor types (if any),
26274 in the same way that those of a derived type are determined by those of
26275 its parent type and its progenitor types (see *note 3.4:: and *note
26276 7.3.1::).
26277
26278 21/3
26279 In an instance, the copy of an implicit declaration of a primitive
26280 subprogram of a formal derived type declares a view of the corresponding
26281 primitive subprogram of the ancestor or progenitor of the formal derived
26282 type, even if this primitive has been overridden for the actual type and
26283 even if it is never declared for the actual type. When the ancestor or
26284 progenitor of the formal derived type is itself a formal type, the copy
26285 of the implicit declaration declares a view of the corresponding copied
26286 operation of the ancestor or progenitor. In the case of a formal
26287 private extension, however, the tag of the formal type is that of the
26288 actual type, so if the tag in a call is statically determined to be that
26289 of the formal type, the body executed will be that corresponding to the
26290 actual type.
26291
26292 22/1
26293 For a prefix S that denotes a formal indefinite subtype, the following
26294 attribute is defined:
26295
26296 23/3
26297 S'Definite
26298 S'Definite yields True if the actual subtype
26299 corresponding to S is definite; otherwise, it yields
26300 False. The value of this attribute is of the predefined
26301 type Boolean.
26302
26303 _Dynamic Semantics_
26304
26305 23.1/3
26306 In the case where a formal type has unknown discriminants, and the
26307 actual type is a class-wide type T'Class:
26308
26309 23.2/2
26310 * For the purposes of defining the primitive operations of the formal
26311 type, each of the primitive operations of the actual type is
26312 considered to be a subprogram (with an intrinsic calling convention
26313 -- see *note 6.3.1::) whose body consists of a dispatching call
26314 upon the corresponding operation of T, with its formal parameters
26315 as the actual parameters. If it is a function, the result of the
26316 dispatching call is returned.
26317
26318 23.3/2
26319 * If the corresponding operation of T has no controlling formal
26320 parameters, then the controlling tag value is determined by the
26321 context of the call, according to the rules for tag-indeterminate
26322 calls (see *note 3.9.2:: and *note 5.2::). In the case where the
26323 tag would be statically determined to be that of the formal type,
26324 the call raises Program_Error. If such a function is renamed, any
26325 call on the renaming raises Program_Error.
26326
26327 NOTES
26328
26329 24/2
26330 9 In accordance with the general rule that the actual type shall
26331 belong to the category determined for the formal (see *note 12.5::,
26332 "*note 12.5:: Formal Types"):
26333
26334 25
26335 * If the formal type is nonlimited, then so shall be the actual;
26336
26337 26
26338 * For a formal derived type, the actual shall be in the class
26339 rooted at the ancestor subtype.
26340
26341 27
26342 10 The actual type can be abstract only if the formal type is
26343 abstract (see *note 3.9.3::).
26344
26345 28
26346 11 If the formal has a discriminant_part, the actual can be either
26347 definite or indefinite. Otherwise, the actual has to be definite.
26348
26349 \1f
26350 File: arm2012.info, Node: 12.5.2, Next: 12.5.3, Prev: 12.5.1, Up: 12.5
26351
26352 12.5.2 Formal Scalar Types
26353 --------------------------
26354
26355 1/2
26356 A formal scalar type is one defined by any of the
26357 formal_type_definitions in this subclause. The category determined for
26358 a formal scalar type is the category of all discrete, signed integer,
26359 modular, floating point, ordinary fixed point, or decimal types.
26360
26361 _Syntax_
26362
26363 2
26364 formal_discrete_type_definition ::= (<>)
26365
26366 3
26367 formal_signed_integer_type_definition ::= range <>
26368
26369 4
26370 formal_modular_type_definition ::= mod <>
26371
26372 5
26373 formal_floating_point_definition ::= digits <>
26374
26375 6
26376 formal_ordinary_fixed_point_definition ::= delta <>
26377
26378 7
26379 formal_decimal_fixed_point_definition ::= delta <> digits <>
26380
26381 _Legality Rules_
26382
26383 8
26384 The actual type for a formal scalar type shall not be a nonstandard
26385 numeric type.
26386
26387 NOTES
26388
26389 9
26390 12 The actual type shall be in the class of types implied by the
26391 syntactic category of the formal type definition (see *note 12.5::,
26392 "*note 12.5:: Formal Types"). For example, the actual for a
26393 formal_modular_type_definition shall be a modular type.
26394
26395 \1f
26396 File: arm2012.info, Node: 12.5.3, Next: 12.5.4, Prev: 12.5.2, Up: 12.5
26397
26398 12.5.3 Formal Array Types
26399 -------------------------
26400
26401 1/2
26402 The category determined for a formal array type is the category of all
26403 array types.
26404
26405 _Syntax_
26406
26407 2
26408 formal_array_type_definition ::= array_type_definition
26409
26410 _Legality Rules_
26411
26412 3
26413 The only form of discrete_subtype_definition that is allowed within the
26414 declaration of a generic formal (constrained) array subtype is a
26415 subtype_mark.
26416
26417 4
26418 For a formal array subtype, the actual subtype shall satisfy the
26419 following conditions:
26420
26421 5
26422 * The formal array type and the actual array type shall have the same
26423 dimensionality; the formal subtype and the actual subtype shall be
26424 either both constrained or both unconstrained.
26425
26426 6
26427 * For each index position, the index types shall be the same, and the
26428 index subtypes (if unconstrained), or the index ranges (if
26429 constrained), shall statically match (see *note 4.9.1::).
26430
26431 7
26432 * The component subtypes of the formal and actual array types shall
26433 statically match.
26434
26435 8
26436 * If the formal type has aliased components, then so shall the
26437 actual.
26438
26439 _Examples_
26440
26441 9
26442 Example of formal array types:
26443
26444 10
26445 -- given the generic package
26446
26447 11
26448 generic
26449 type Item is private;
26450 type Index is (<>);
26451 type Vector is array (Index range <>) of Item;
26452 type Table is array (Index) of Item;
26453 package P is
26454 ...
26455 end P;
26456
26457 12
26458 -- and the types
26459
26460 13
26461 type Mix is array (Color range <>) of Boolean;
26462 type Option is array (Color) of Boolean;
26463
26464 14
26465 -- then Mix can match Vector and Option can match Table
26466
26467 15
26468 package R is new P(Item => Boolean, Index => Color,
26469 Vector => Mix, Table => Option);
26470
26471 16
26472 -- Note that Mix cannot match Table and Option cannot match Vector
26473
26474 \1f
26475 File: arm2012.info, Node: 12.5.4, Next: 12.5.5, Prev: 12.5.3, Up: 12.5
26476
26477 12.5.4 Formal Access Types
26478 --------------------------
26479
26480 1/2
26481 The category determined for a formal access type is the category of all
26482 access types.
26483
26484 _Syntax_
26485
26486 2
26487 formal_access_type_definition ::= access_type_definition
26488
26489 _Legality Rules_
26490
26491 3
26492 For a formal access-to-object type, the designated subtypes of the
26493 formal and actual types shall statically match.
26494
26495 4/2
26496 If and only if the general_access_modifier constant applies to the
26497 formal, the actual shall be an access-to-constant type. If the
26498 general_access_modifier all applies to the formal, then the actual shall
26499 be a general access-to-variable type (see *note 3.10::). If and only if
26500 the formal subtype excludes null, the actual subtype shall exclude null.
26501
26502 5/3
26503 For a formal access-to-subprogram subtype, the designated profiles of
26504 the formal and the actual shall be subtype conformant.
26505
26506 _Examples_
26507
26508 6
26509 Example of formal access types:
26510
26511 7
26512 -- the formal types of the generic package
26513
26514 8
26515 generic
26516 type Node is private;
26517 type Link is access Node;
26518 package P is
26519 ...
26520 end P;
26521
26522 9
26523 -- can be matched by the actual types
26524
26525 10
26526 type Car;
26527 type Car_Name is access Car;
26528
26529 11
26530 type Car is
26531 record
26532 Pred, Succ : Car_Name;
26533 Number : License_Number;
26534 Owner : Person;
26535 end record;
26536
26537 12
26538 -- in the following generic instantiation
26539
26540 13
26541 package R is new P(Node => Car, Link => Car_Name);
26542
26543 \1f
26544 File: arm2012.info, Node: 12.5.5, Prev: 12.5.4, Up: 12.5
26545
26546 12.5.5 Formal Interface Types
26547 -----------------------------
26548
26549 1/2
26550 The category determined for a formal interface type is the category of
26551 all interface types.
26552
26553 _Syntax_
26554
26555 2/2
26556 formal_interface_type_definition ::= interface_type_definition
26557
26558 _Legality Rules_
26559
26560 3/2
26561 The actual type shall be a descendant of every progenitor of the formal
26562 type.
26563
26564 4/2
26565 The actual type shall be a limited, task, protected, or synchronized
26566 interface if and only if the formal type is also, respectively, a
26567 limited, task, protected, or synchronized interface.
26568
26569 _Examples_
26570
26571 5/2
26572 type Root_Work_Item is tagged private;
26573
26574 6/2
26575 generic
26576 type Managed_Task is task interface;
26577 type Work_Item(<>) is new Root_Work_Item with private;
26578 package Server_Manager is
26579 task type Server is new Managed_Task with
26580 entry Start(Data : in out Work_Item);
26581 end Server;
26582 end Server_Manager;
26583
26584 7/2
26585 This generic allows an application to establish a standard interface
26586 that all tasks need to implement so they can be managed appropriately by
26587 an application-specific scheduler.
26588
26589 \1f
26590 File: arm2012.info, Node: 12.6, Next: 12.7, Prev: 12.5, Up: 12
26591
26592 12.6 Formal Subprograms
26593 =======================
26594
26595 1
26596 Formal subprograms can be used to pass callable entities to a generic
26597 unit.
26598
26599 _Syntax_
26600
26601 2/2
26602 formal_subprogram_declaration ::=
26603 formal_concrete_subprogram_declaration
26604 | formal_abstract_subprogram_declaration
26605
26606 2.1/3
26607 formal_concrete_subprogram_declaration ::=
26608 with subprogram_specification [is subprogram_default]
26609 [aspect_specification];
26610
26611 2.2/3
26612 formal_abstract_subprogram_declaration ::=
26613 with subprogram_specification is abstract [subprogram_default]
26614 [aspect_specification];
26615
26616 3/2
26617 subprogram_default ::= default_name | <> | null
26618
26619 4
26620 default_name ::= name
26621
26622 4.1/2
26623 A subprogram_default of null shall not be specified for a formal
26624 function or for a formal_abstract_subprogram_declaration.
26625
26626 _Name Resolution Rules_
26627
26628 5
26629 The expected profile for the default_name, if any, is that of the formal
26630 subprogram.
26631
26632 6
26633 For a generic formal subprogram, the expected profile for the actual is
26634 that of the formal subprogram.
26635
26636 _Legality Rules_
26637
26638 7/3
26639 The profiles of the formal and any named default shall be mode
26640 conformant.
26641
26642 8/3
26643 The profiles of the formal and actual shall be mode conformant.
26644
26645 8.1/2
26646 For a parameter or result subtype of a formal_subprogram_declaration
26647 that has an explicit null_exclusion:
26648
26649 8.2/2
26650 * if the actual matching the formal_subprogram_declaration denotes a
26651 generic formal object of another generic unit G, and the
26652 instantiation containing the actual that occurs within the body of
26653 a generic unit G or within the body of a generic unit declared
26654 within the declarative region of the generic unit G, then the
26655 corresponding parameter or result type of the formal subprogram of
26656 G shall have a null_exclusion;
26657
26658 8.3/2
26659 * otherwise, the subtype of the corresponding parameter or result
26660 type of the actual matching the formal_subprogram_declaration shall
26661 exclude null. In addition to the places where Legality Rules
26662 normally apply (see *note 12.3::), this rule applies also in the
26663 private part of an instance of a generic unit.
26664
26665 8.4/3
26666 If a formal parameter of a formal_abstract_subprogram_declaration (*note
26667 12.6: S0297.) is of a specific tagged type T or of an anonymous access
26668 type designating a specific tagged type T, T is called a controlling
26669 type of the formal_abstract_subprogram_declaration (*note 12.6: S0297.).
26670 Similarly, if the result of a formal_abstract_subprogram_declaration
26671 (*note 12.6: S0297.) for a function is of a specific tagged type T or of
26672 an anonymous access type designating a specific tagged type T, T is
26673 called a controlling type of the formal_abstract_subprogram_declaration
26674 (*note 12.6: S0297.). A formal_abstract_subprogram_declaration (*note
26675 12.6: S0297.) shall have exactly one controlling type, and that type
26676 shall not be incomplete.
26677
26678 8.5/2
26679 The actual subprogram for a formal_abstract_subprogram_declaration
26680 (*note 12.6: S0297.) shall be a dispatching operation of the controlling
26681 type or of the actual type corresponding to the controlling type.
26682
26683 _Static Semantics_
26684
26685 9
26686 A formal_subprogram_declaration declares a generic formal subprogram.
26687 The types of the formal parameters and result, if any, of the formal
26688 subprogram are those determined by the subtype_marks given in the
26689 formal_subprogram_declaration; however, independent of the particular
26690 subtypes that are denoted by the subtype_marks, the nominal subtypes of
26691 the formal parameters and result, if any, are defined to be nonstatic,
26692 and unconstrained if of an array type (no applicable index constraint is
26693 provided in a call on a formal subprogram). In an instance, a
26694 formal_subprogram_declaration declares a view of the actual. The
26695 profile of this view takes its subtypes and calling convention from the
26696 original profile of the actual entity, while taking the formal parameter
26697 names and default_expression (*note 3.7: S0063.)s from the profile given
26698 in the formal_subprogram_declaration (*note 12.6: S0295.). The view is
26699 a function or procedure, never an entry.
26700
26701 9.1/3
26702 If a subtype_mark in the profile of the formal_subprogram_declaration
26703 denotes a formal private or formal derived type and the actual type for
26704 this formal type is a class-wide type T'Class, then for the purposes of
26705 resolving the corresponding actual subprogram at the point of the
26706 instantiation, certain implicit declarations may be available as
26707 possible resolutions as follows:
26708
26709 9.2/3
26710 For each primitive subprogram of T that is directly visible at
26711 the point of the instantiation, and that has at least one
26712 controlling formal parameter, a corresponding implicitly
26713 declared subprogram with the same defining name, and having
26714 the same profile as the primitive subprogram except that T is
26715 systematically replaced by T'Class in the types of its
26716 profile, is potentially use-visible. The body of such a
26717 subprogram is as defined in *note 12.5.1:: for primitive
26718 subprograms of a formal type when the actual type is
26719 class-wide.
26720
26721 10
26722 If a generic unit has a subprogram_default specified by a box, and the
26723 corresponding actual parameter is omitted, then it is equivalent to an
26724 explicit actual parameter that is a usage name identical to the defining
26725 name of the formal.
26726
26727 10.1/2
26728 If a generic unit has a subprogram_default specified by the reserved
26729 word null, and the corresponding actual parameter is omitted, then it is
26730 equivalent to an explicit actual parameter that is a null procedure
26731 having the profile given in the formal_subprogram_declaration (*note
26732 12.6: S0295.).
26733
26734 10.2/2
26735 The subprogram declared by a formal_abstract_subprogram_declaration
26736 (*note 12.6: S0297.) with a controlling type T is a dispatching
26737 operation of type T.
26738
26739 NOTES
26740
26741 11
26742 13 The matching rules for formal subprograms state requirements
26743 that are similar to those applying to
26744 subprogram_renaming_declarations (see *note 8.5.4::). In
26745 particular, the name of a parameter of the formal subprogram need
26746 not be the same as that of the corresponding parameter of the
26747 actual subprogram; similarly, for these parameters,
26748 default_expressions need not correspond.
26749
26750 12
26751 14 The constraints that apply to a parameter of a formal
26752 subprogram are those of the corresponding formal parameter of the
26753 matching actual subprogram (not those implied by the corresponding
26754 subtype_mark in the _specification of the formal subprogram). A
26755 similar remark applies to the result of a function. Therefore, to
26756 avoid confusion, it is recommended that the name of a first subtype
26757 be used in any declaration of a formal subprogram.
26758
26759 13
26760 15 The subtype specified for a formal parameter of a generic
26761 formal subprogram can be any visible subtype, including a generic
26762 formal subtype of the same generic_formal_part.
26763
26764 14
26765 16 A formal subprogram is matched by an attribute of a type if the
26766 attribute is a function with a matching specification. An
26767 enumeration literal of a given type matches a parameterless formal
26768 function whose result type is the given type.
26769
26770 15
26771 17 A default_name denotes an entity that is visible or directly
26772 visible at the place of the generic_declaration; a box used as a
26773 default is equivalent to a name that denotes an entity that is
26774 directly visible at the place of the _instantiation.
26775
26776 16/2
26777 18 The actual subprogram cannot be abstract unless the formal
26778 subprogram is a formal_abstract_subprogram_declaration (*note 12.6:
26779 S0297.) (see *note 3.9.3::).
26780
26781 16.1/2
26782 19 The subprogram declared by a
26783 formal_abstract_subprogram_declaration (*note 12.6: S0297.) is an
26784 abstract subprogram. All calls on a subprogram declared by a
26785 formal_abstract_subprogram_declaration (*note 12.6: S0297.) must be
26786 dispatching calls. See *note 3.9.3::.
26787
26788 16.2/2
26789 20 A null procedure as a subprogram default has convention
26790 Intrinsic (see *note 6.3.1::).
26791
26792 _Examples_
26793
26794 17
26795 Examples of generic formal subprograms:
26796
26797 18/2
26798 with function "+"(X, Y : Item) return Item is <>;
26799 with function Image(X : Enum) return String is Enum'Image;
26800 with procedure Update is Default_Update;
26801 with procedure Pre_Action(X : in Item) is null; -- defaults to no action
26802 with procedure Write(S : not null access Root_Stream_Type'Class;
26803 Desc : Descriptor)
26804 is abstract Descriptor'Write; -- see *note 13.13.2::
26805 -- Dispatching operation on Descriptor with default
26806
26807 19
26808 -- given the generic procedure declaration
26809
26810 20
26811 generic
26812 with procedure Action (X : in Item);
26813 procedure Iterate(Seq : in Item_Sequence);
26814
26815 21
26816 -- and the procedure
26817
26818 22
26819 procedure Put_Item(X : in Item);
26820
26821 23
26822 -- the following instantiation is possible
26823
26824 24
26825 procedure Put_List is new Iterate(Action => Put_Item);
26826
26827 \1f
26828 File: arm2012.info, Node: 12.7, Next: 12.8, Prev: 12.6, Up: 12
26829
26830 12.7 Formal Packages
26831 ====================
26832
26833 1
26834 Formal packages can be used to pass packages to a generic unit. The
26835 formal_package_declaration declares that the formal package is an
26836 instance of a given generic package. Upon instantiation, the actual
26837 package has to be an instance of that generic package.
26838
26839 _Syntax_
26840
26841 2/3
26842 formal_package_declaration ::=
26843 with package defining_identifier is new generic_package_name
26844 formal_package_actual_part
26845 [aspect_specification];
26846
26847 3/2
26848 formal_package_actual_part ::=
26849 ([others =>] <>)
26850 | [generic_actual_part]
26851 | (formal_package_association {,
26852 formal_package_association} [, others => <>])
26853
26854 3.1/2
26855 formal_package_association ::=
26856 generic_association
26857 | generic_formal_parameter_selector_name => <>
26858
26859 3.2/2
26860 Any positional formal_package_associations shall precede any named
26861 formal_package_associations.
26862
26863 _Legality Rules_
26864
26865 4
26866 The generic_package_name shall denote a generic package (the template
26867 for the formal package); the formal package is an instance of the
26868 template.
26869
26870 4.1/3
26871 The generic_formal_parameter_selector_name of a
26872 formal_package_association shall denote a
26873 generic_formal_parameter_declaration of the template. If two or more
26874 formal subprograms of the template have the same defining name, then
26875 named associations are not allowed for the corresponding actuals.
26876
26877 4.2/3
26878 A formal_package_actual_part shall contain at most one
26879 formal_package_association for each formal parameter. If the
26880 formal_package_actual_part does not include "others => <>", each formal
26881 parameter without an association shall have a default_expression or
26882 subprogram_default.
26883
26884 4.3/3
26885 The rules for matching between formal_package_associations and the
26886 generic formals of the template are as follows:
26887
26888 4.4/3
26889 * If all of the formal_package_associations are given by generic
26890 associations, the explicit_generic_actual_parameters of the
26891 formal_package_associations shall be legal for an instantiation of
26892 the template.
26893
26894 4.5/3
26895 * If a formal_package_association for a formal type T of the template
26896 is given by <>, then the formal_package_association for any other
26897 generic_formal_parameter_declaration of the template that mentions
26898 T directly or indirectly must be given by <> as well.
26899
26900 5/2
26901 The actual shall be an instance of the template. If the
26902 formal_package_actual_part is (<>) or (others => <>), then the actual
26903 may be any instance of the template; otherwise, certain of the actual
26904 parameters of the actual instance shall match the corresponding actual
26905 parameters of the formal package, determined as follows:
26906
26907 5.1/2
26908 * If the formal_package_actual_part (*note 12.7: S0301.) includes
26909 generic_associations as well as associations with <>, then only the
26910 actual parameters specified explicitly with generic_associations
26911 are required to match;
26912
26913 5.2/2
26914 * Otherwise, all actual parameters shall match, whether any actual
26915 parameter is given explicitly or by default.
26916
26917 5.3/2
26918 The rules for matching of actual parameters between the actual instance
26919 and the formal package are as follows:
26920
26921 6/2
26922 * For a formal object of mode in, the actuals match if they are
26923 static expressions with the same value, or if they statically
26924 denote the same constant, or if they are both the literal null.
26925
26926 7
26927 * For a formal subtype, the actuals match if they denote statically
26928 matching subtypes.
26929
26930 8
26931 * For other kinds of formals, the actuals match if they statically
26932 denote the same entity.
26933
26934 8.1/1
26935 For the purposes of matching, any actual parameter that is the name of a
26936 formal object of mode in is replaced by the formal object's actual
26937 expression (recursively).
26938
26939 _Static Semantics_
26940
26941 9
26942 A formal_package_declaration declares a generic formal package.
26943
26944 10/2
26945 The visible part of a formal package includes the first list of
26946 basic_declarative_items of the package_specification (*note 7.1:
26947 S0191.). In addition, for each actual parameter that is not required to
26948 match, a copy of the declaration of the corresponding formal parameter
26949 of the template is included in the visible part of the formal package.
26950 If the copied declaration is for a formal type, copies of the implicit
26951 declarations of the primitive subprograms of the formal type are also
26952 included in the visible part of the formal package.
26953
26954 11/2
26955 For the purposes of matching, if the actual instance A is itself a
26956 formal package, then the actual parameters of A are those specified
26957 explicitly or implicitly in the formal_package_actual_part for A, plus,
26958 for those not specified, the copies of the formal parameters of the
26959 template included in the visible part of A.
26960
26961 _Examples_
26962
26963 12/2
26964 Example of a generic package with formal package parameters:
26965
26966 13/2
26967 with Ada.Containers.Ordered_Maps; -- see *note A.18.6::
26968 generic
26969 with package Mapping_1 is new Ada.Containers.Ordered_Maps(<>);
26970 with package Mapping_2 is new Ada.Containers.Ordered_Maps
26971 (Key_Type => Mapping_1.Element_Type,
26972 others => <>);
26973 package Ordered_Join is
26974 -- Provide a "join" between two mappings
26975
26976 14/2
26977 subtype Key_Type is Mapping_1.Key_Type;
26978 subtype Element_Type is Mapping_2.Element_Type;
26979
26980 15/2
26981 function Lookup(Key : Key_Type) return Element_Type;
26982
26983 16/2
26984 ...
26985 end Ordered_Join;
26986
26987 17/2
26988 Example of an instantiation of a package with formal packages:
26989
26990 18/2
26991 with Ada.Containers.Ordered_Maps;
26992 package Symbol_Package is
26993
26994 19/2
26995 type String_Id is ...
26996
26997 20/2
26998 type Symbol_Info is ...
26999
27000 21/2
27001 package String_Table is new Ada.Containers.Ordered_Maps
27002 (Key_Type => String,
27003 Element_Type => String_Id);
27004
27005 22/2
27006 package Symbol_Table is new Ada.Containers.Ordered_Maps
27007 (Key_Type => String_Id,
27008 Element_Type => Symbol_Info);
27009
27010 23/2
27011 package String_Info is new Ordered_Join(Mapping_1 => String_Table,
27012 Mapping_2 => Symbol_Table);
27013
27014 24/2
27015 Apple_Info : constant Symbol_Info := String_Info.Lookup("Apple");
27016
27017 25/2
27018 end Symbol_Package;
27019
27020 \1f
27021 File: arm2012.info, Node: 12.8, Prev: 12.7, Up: 12
27022
27023 12.8 Example of a Generic Package
27024 =================================
27025
27026 1
27027 The following example provides a possible formulation of stacks by means
27028 of a generic package. The size of each stack and the type of the stack
27029 elements are provided as generic formal parameters.
27030
27031 _Examples_
27032
27033 2/1
27034 This paragraph was deleted.
27035
27036 3
27037 generic
27038 Size : Positive;
27039 type Item is private;
27040 package Stack is
27041 procedure Push(E : in Item);
27042 procedure Pop (E : out Item);
27043 Overflow, Underflow : exception;
27044 end Stack;
27045
27046 4
27047 package body Stack is
27048
27049 5
27050 type Table is array (Positive range <>) of Item;
27051 Space : Table(1 .. Size);
27052 Index : Natural := 0;
27053
27054 6
27055 procedure Push(E : in Item) is
27056 begin
27057 if Index >= Size then
27058 raise Overflow;
27059 end if;
27060 Index := Index + 1;
27061 Space(Index) := E;
27062 end Push;
27063
27064 7
27065 procedure Pop(E : out Item) is
27066 begin
27067 if Index = 0 then
27068 raise Underflow;
27069 end if;
27070 E := Space(Index);
27071 Index := Index - 1;
27072 end Pop;
27073
27074 8
27075 end Stack;
27076
27077 9
27078 Instances of this generic package can be obtained as follows:
27079
27080 10
27081 package Stack_Int is new Stack(Size => 200, Item => Integer);
27082 package Stack_Bool is new Stack(100, Boolean);
27083
27084 11
27085 Thereafter, the procedures of the instantiated packages can be called as
27086 follows:
27087
27088 12
27089 Stack_Int.Push(N);
27090 Stack_Bool.Push(True);
27091
27092 13
27093 Alternatively, a generic formulation of the type Stack can be given as
27094 follows (package body omitted):
27095
27096 14
27097 generic
27098 type Item is private;
27099 package On_Stacks is
27100 type Stack(Size : Positive) is limited private;
27101 procedure Push(S : in out Stack; E : in Item);
27102 procedure Pop (S : in out Stack; E : out Item);
27103 Overflow, Underflow : exception;
27104 private
27105 type Table is array (Positive range <>) of Item;
27106 type Stack(Size : Positive) is
27107 record
27108 Space : Table(1 .. Size);
27109 Index : Natural := 0;
27110 end record;
27111 end On_Stacks;
27112
27113 15
27114 In order to use such a package, an instance has to be created and
27115 thereafter stacks of the corresponding type can be declared:
27116
27117 16
27118 declare
27119 package Stack_Real is new On_Stacks(Real); use Stack_Real;
27120 S : Stack(100);
27121 begin
27122 ...
27123 Push(S, 2.54);
27124 ...
27125 end;
27126
27127 \1f
27128 File: arm2012.info, Node: 13, Next: Annex A, Prev: 12, Up: Top
27129
27130 13 Representation Issues
27131 ************************
27132
27133 1/3
27134 This clause describes features for querying and controlling certain
27135 aspects of entities and for interfacing to hardware.
27136
27137 * Menu:
27138
27139 * 13.1 :: Operational and Representation Aspects
27140 * 13.2 :: Packed Types
27141 * 13.3 :: Operational and Representation Attributes
27142 * 13.4 :: Enumeration Representation Clauses
27143 * 13.5 :: Record Layout
27144 * 13.6 :: Change of Representation
27145 * 13.7 :: The Package System
27146 * 13.8 :: Machine Code Insertions
27147 * 13.9 :: Unchecked Type Conversions
27148 * 13.10 :: Unchecked Access Value Creation
27149 * 13.11 :: Storage Management
27150 * 13.12 :: Pragma Restrictions and Pragma Profile
27151 * 13.13 :: Streams
27152 * 13.14 :: Freezing Rules
27153
27154 \1f
27155 File: arm2012.info, Node: 13.1, Next: 13.2, Up: 13
27156
27157 13.1 Operational and Representation Aspects
27158 ===========================================
27159
27160 0.1/3
27161 Two kinds of aspects of entities can be specified: representation
27162 aspects and operational aspects. Representation aspects affect how the
27163 types and other entities of the language are to be mapped onto the
27164 underlying machine. Operational aspects determine other properties of
27165 entities.
27166
27167 0.2/3
27168 Either kind of aspect of an entity may be specified by means of an
27169 aspect_specification (see *note 13.1.1::), which is an optional element
27170 of most kinds of declarations and applies to the entity or entities
27171 being declared. Aspects may also be specified by certain other
27172 constructs occurring subsequent to the declaration of the affected
27173 entity: a representation aspect value may be specified by means of a
27174 representation item and an operational aspect value may be specified by
27175 means of an operational item.
27176
27177 1/1
27178 There are six kinds of representation items: attribute_definition_clause
27179 (*note 13.3: S0309.)s for representation attributes,
27180 enumeration_representation_clause (*note 13.4: S0310.)s,
27181 record_representation_clause (*note 13.5.1: S0312.)s, at_clauses,
27182 component_clauses, and representation pragmas. They can be provided to
27183 give more efficient representation or to interface with features that
27184 are outside the domain of the language (for example, peripheral
27185 hardware).
27186
27187 1.1/1
27188 An operational item is an attribute_definition_clause for an operational
27189 attribute.
27190
27191 1.2/1
27192 An operational item or a representation item applies to an entity
27193 identified by a local_name, which denotes an entity declared local to
27194 the current declarative region, or a library unit declared immediately
27195 preceding a representation pragma in a compilation.
27196
27197 _Syntax_
27198
27199 2/1
27200 aspect_clause ::= attribute_definition_clause
27201 | enumeration_representation_clause
27202 | record_representation_clause
27203 | at_clause
27204
27205 3
27206 local_name ::= direct_name
27207 | direct_name'attribute_designator
27208 | library_unit_name
27209
27210 4/1
27211 A representation pragma is allowed only at places where an
27212 aspect_clause or compilation_unit is allowed.
27213
27214 _Name Resolution Rules_
27215
27216 5/1
27217 In an operational item or representation item, if the local_name is a
27218 direct_name, then it shall resolve to denote a declaration (or, in the
27219 case of a pragma, one or more declarations) that occurs immediately
27220 within the same declarative region as the item. If the local_name has
27221 an attribute_designator, then it shall resolve to denote an
27222 implementation-defined component (see *note 13.5.1::) or a class-wide
27223 type implicitly declared immediately within the same declarative region
27224 as the item. A local_name that is a library_unit_name (only permitted
27225 in a representation pragma) shall resolve to denote the library_item
27226 that immediately precedes (except for other pragmas) the representation
27227 pragma.
27228
27229 _Legality Rules_
27230
27231 6/1
27232 The local_name of an aspect_clause or representation pragma shall
27233 statically denote an entity (or, in the case of a pragma, one or more
27234 entities) declared immediately preceding it in a compilation, or within
27235 the same declarative_part (*note 3.11: S0086.), package_specification
27236 (*note 7.1: S0191.), task_definition (*note 9.1: S0207.),
27237 protected_definition (*note 9.4: S0212.), or record_definition (*note
27238 3.8: S0067.) as the representation or operational item. If a local_name
27239 denotes a local callable entity, it may do so through a local
27240 subprogram_renaming_declaration (*note 8.5.4: S0203.) (as a way to
27241 resolve ambiguity in the presence of overloading); otherwise, the
27242 local_name shall not denote a renaming_declaration (*note 8.5: S0199.).
27243
27244 7/2
27245 The representation of an object consists of a certain number of bits
27246 (the size of the object). For an object of an elementary type, these
27247 are the bits that are normally read or updated by the machine code when
27248 loading, storing, or operating-on the value of the object. For an
27249 object of a composite type, these are the bits reserved for this object,
27250 and include bits occupied by subcomponents of the object. If the size
27251 of an object is greater than that of its subtype, the additional bits
27252 are padding bits. For an elementary object, these padding bits are
27253 normally read and updated along with the others. For a composite
27254 object, padding bits might not be read or updated in any given composite
27255 operation, depending on the implementation.
27256
27257 8/3
27258 A representation item directly specifies a representation aspect of the
27259 entity denoted by the local_name, except in the case of a type-related
27260 representation item, whose local_name shall denote a first subtype, and
27261 which directly specifies an aspect of the subtype's type. A
27262 representation item that names a subtype is either subtype-specific
27263 (Size and Alignment clauses) or type-related (all others).
27264 Subtype-specific aspects may differ for different subtypes of the same
27265 type.
27266
27267 8.1/3
27268 An operational item directly specifies an operational aspect of the
27269 entity denoted by the local_name, except in the case of a type-related
27270 operational item, whose local_name shall denote a first subtype, and
27271 which directly specifies an aspect of the type of the subtype.
27272
27273 9/3
27274 A representation item that directly specifies an aspect of a subtype or
27275 type shall appear after the type is completely defined (see *note
27276 3.11.1::), and before the subtype or type is frozen (see *note 13.14::).
27277 If a representation item or aspect_specification is given that directly
27278 specifies an aspect of an entity, then it is illegal to give another
27279 representation item or aspect_specification that directly specifies the
27280 same aspect of the entity.
27281
27282 9.1/3
27283 An operational item that directly specifies an aspect of an entity shall
27284 appear before the entity is frozen (see *note 13.14::). If an
27285 operational item or aspect_specification is given that directly
27286 specifies an aspect of an entity, then it is illegal to give another
27287 operational item or aspect_specification that directly specifies the
27288 same aspect of the entity.
27289
27290 9.2/3
27291 Unless otherwise specified, it is illegal to specify an operational or
27292 representation aspect of a generic formal parameter.
27293
27294 10/3
27295 For an untagged derived type, it is illegal to specify a type-related
27296 representation aspect if the parent type is a by-reference type, or has
27297 any user-defined primitive subprograms.
27298
27299 11/3
27300 Operational and representation aspects of a generic formal parameter are
27301 the same as those of the actual. Operational and representation aspects
27302 are the same for all views of a type. Specification of a type-related
27303 representation aspect is not allowed for a descendant of a generic
27304 formal untagged type.
27305
27306 12/3
27307 The specification of the Size aspect for a given subtype, or the size or
27308 storage place for an object (including a component) of a given subtype,
27309 shall allow for enough storage space to accommodate any value of the
27310 subtype.
27311
27312 13/3
27313 If a specification of a representation or operational aspect is not
27314 supported by the implementation, it is illegal or raises an exception at
27315 run time.
27316
27317 13.1/3
27318 A type_declaration is illegal if it has one or more progenitors, and a
27319 nonconfirming value was specified for a representation aspect of an
27320 ancestor, and this conflicts with the representation of some other
27321 ancestor. The cases that cause conflicts are implementation defined.
27322
27323 _Static Semantics_
27324
27325 14
27326 If two subtypes statically match, then their subtype-specific aspects
27327 (Size and Alignment) are the same.
27328
27329 15/3
27330 A derived type inherits each type-related representation aspect of its
27331 parent type that was directly specified before the declaration of the
27332 derived type, or (in the case where the parent is derived) that was
27333 inherited by the parent type from the grandparent type. A derived
27334 subtype inherits each subtype-specific representation aspect of its
27335 parent subtype that was directly specified before the declaration of the
27336 derived type, or (in the case where the parent is derived) that was
27337 inherited by the parent subtype from the grandparent subtype, but only
27338 if the parent subtype statically matches the first subtype of the parent
27339 type. An inherited representation aspect is overridden by a subsequent
27340 aspect_specification or representation item that specifies a different
27341 value for the same aspect of the type or subtype.
27342
27343 15.1/3
27344 In contrast, whether operational aspects are inherited by a derived type
27345 depends on each specific aspect; unless specified, an operational aspect
27346 is not inherited. When operational aspects are inherited by a derived
27347 type, aspects that were directly specified by aspect_specifications or
27348 operational items that are visible at the point of the derived type
27349 declaration, or (in the case where the parent is derived) that were
27350 inherited by the parent type from the grandparent type are inherited.
27351 An inherited operational aspect is overridden by a subsequent
27352 aspect_specification or operational item that specifies the same aspect
27353 of the type.
27354
27355 15.2/2
27356 When an aspect that is a subprogram is inherited, the derived type
27357 inherits the aspect in the same way that a derived type inherits a
27358 user-defined primitive subprogram from its parent (see *note 3.4::).
27359
27360 16
27361 Each aspect of representation of an entity is as follows:
27362
27363 17
27364 * If the aspect is specified for the entity, meaning that it is
27365 either directly specified or inherited, then that aspect of the
27366 entity is as specified, except in the case of Storage_Size, which
27367 specifies a minimum.
27368
27369 18
27370 * If an aspect of representation of an entity is not specified, it is
27371 chosen by default in an unspecified manner.
27372
27373 18.1/1
27374 If an operational aspect is specified for an entity (meaning that it is
27375 either directly specified or inherited), then that aspect of the entity
27376 is as specified. Otherwise, the aspect of the entity has the default
27377 value for that aspect.
27378
27379 18.2/3
27380 An aspect_specification or representation item that specifies a
27381 representation aspect that would have been chosen in the absence of the
27382 aspect_specification or representation item is said to be confirming.
27383 The aspect value specified in this case is said to be a confirming
27384 representation aspect value. Other values of the aspect are said to be
27385 nonconfirming, as are the aspect_specifications and representation items
27386 that specified them.
27387
27388 _Dynamic Semantics_
27389
27390 19/1
27391 For the elaboration of an aspect_clause, any evaluable constructs within
27392 it are evaluated.
27393
27394 _Implementation Permissions_
27395
27396 20/3
27397 An implementation may interpret representation aspects in an
27398 implementation-defined manner. An implementation may place
27399 implementation-defined restrictions on the specification of
27400 representation aspects. A recommended level of support is defined for
27401 the specification of representation aspects and related features in each
27402 subclause. These recommendations are changed to requirements for
27403 implementations that support the Systems Programming Annex (see *note
27404 C.2::, "*note C.2:: Required Representation Support").
27405
27406 _Implementation Advice_
27407
27408 21/3
27409 The recommended level of support for the specification of all
27410 representation aspects is qualified as follows:
27411
27412 21.1/3
27413 * A confirming specification for a representation aspect should be
27414 supported.
27415
27416 22/3
27417 * An implementation need not support the specification for a
27418 representation aspect that contains nonstatic expressions, unless
27419 each nonstatic expression is a name that statically denotes a
27420 constant declared before the entity.
27421
27422 23
27423 * An implementation need not support a specification for the Size for
27424 a given composite subtype, nor the size or storage place for an
27425 object (including a component) of a given composite subtype, unless
27426 the constraints on the subtype and its composite subcomponents (if
27427 any) are all static constraints.
27428
27429 24/3
27430 * An implementation need not support specifying a nonconfirming
27431 representation aspect value if it could cause an aliased object or
27432 an object of a by-reference type to be allocated at a
27433 nonaddressable location or, when the alignment attribute of the
27434 subtype of such an object is nonzero, at an address that is not an
27435 integral multiple of that alignment.
27436
27437 25/3
27438 * An implementation need not support specifying a nonconfirming
27439 representation aspect value if it could cause an aliased object of
27440 an elementary type to have a size other than that which would have
27441 been chosen by default.
27442
27443 26/3
27444 * An implementation need not support specifying a nonconfirming
27445 representation aspect value if it could cause an aliased object of
27446 a composite type, or an object whose type is by-reference, to have
27447 a size smaller than that which would have been chosen by default.
27448
27449 27/3
27450 * An implementation need not support specifying a nonconfirming
27451 subtype-specific representation aspect value for an indefinite or
27452 abstract subtype.
27453
27454 28/3
27455 For purposes of these rules, the determination of whether specifying a
27456 representation aspect value for a type could cause an object to have
27457 some property is based solely on the properties of the type itself, not
27458 on any available information about how the type is used. In particular,
27459 it presumes that minimally aligned objects of this type might be
27460 declared at some point.
27461
27462 NOTES
27463
27464 29/3
27465 1 Aspects that can be specified are defined throughout this
27466 International Standard, and are summarized in *note K.1::.
27467
27468 * Menu:
27469
27470 * 13.1.1 :: Aspect Specifications
27471
27472 \1f
27473 File: arm2012.info, Node: 13.1.1, Up: 13.1
27474
27475 13.1.1 Aspect Specifications
27476 ----------------------------
27477
27478 1/3
27479 Certain representation or operational aspects of an entity may be
27480 specified as part of its declaration using an aspect_specification,
27481 rather than using a separate representation or operational item. The
27482 declaration with the aspect_specification is termed the associated
27483 declaration.
27484
27485 _Syntax_
27486
27487 2/3
27488 aspect_specification ::=
27489 with aspect_mark [=> aspect_definition] {,
27490 aspect_mark [=> aspect_definition] }
27491
27492 3/3
27493 aspect_mark ::= aspect_identifier['Class]
27494
27495 4/3
27496 aspect_definition ::= name | expression | identifier
27497
27498 _Name Resolution Rules_
27499
27500 5/3
27501 An aspect_mark identifies an aspect of the entity defined by the
27502 associated declaration (the associated entity); the aspect denotes an
27503 object, a value, an expression, a subprogram, or some other kind of
27504 entity. If the aspect_mark identifies:
27505
27506 6/3
27507 * an aspect that denotes an object, the aspect_definition shall be a
27508 name. The expected type for the name is the type of the identified
27509 aspect of the associated entity;
27510
27511 7/3
27512 * an aspect that is a value or an expression, the aspect_definition
27513 shall be an expression. The expected type for the expression is
27514 the type of the identified aspect of the associated entity;
27515
27516 8/3
27517 * an aspect that denotes a subprogram, the aspect_definition shall be
27518 a name; the expected profile for the name is the profile required
27519 for the aspect of the associated entity;
27520
27521 9/3
27522 * an aspect that denotes some other kind of entity, the
27523 aspect_definition shall be a name, and the name shall resolve to
27524 denote an entity of the appropriate kind;
27525
27526 10/3
27527 * an aspect that is given by an identifier specific to the aspect,
27528 the aspect_definition shall be an identifier, and the identifier
27529 shall be one of the identifiers specific to the identified aspect.
27530
27531 11/3
27532 The usage names in an aspect_definition are not resolved at the point of
27533 the associated declaration, but rather are resolved at the end of the
27534 immediately enclosing declaration list.
27535
27536 12/3
27537 If the associated declaration is for a subprogram or entry, the names of
27538 the formal parameters are directly visible within the aspect_definition,
27539 as are certain attributes, as specified elsewhere in this International
27540 Standard for the identified aspect. If the associated declaration is a
27541 type_declaration, within the aspect_definition the names of any
27542 components are directly visible, and the name of the first subtype
27543 denotes the current instance of the type (see *note 8.6::). If the
27544 associated declaration is a subtype_declaration, within the
27545 aspect_definition the name of the new subtype denotes the current
27546 instance of the subtype.
27547
27548 _Legality Rules_
27549
27550 13/3
27551 If the first freezing point of the associated entity comes before the
27552 end of the immediately enclosing declaration list, then each usage name
27553 in the aspect_definition shall resolve to the same entity at the first
27554 freezing point as it does at the end of the immediately enclosing
27555 declaration list.
27556
27557 14/3
27558 At most one occurrence of each aspect_mark is allowed within a single
27559 aspect_specification. The aspect identified by the aspect_mark shall be
27560 an aspect that can be specified for the associated entity (or view of
27561 the entity defined by the associated declaration).
27562
27563 15/3
27564 The aspect_definition associated with a given aspect_mark may be omitted
27565 only when the aspect_mark identifies an aspect of a boolean type, in
27566 which case it is equivalent to the aspect_definition being specified as
27567 True.
27568
27569 16/3
27570 If the aspect_mark includes 'Class, then the associated entity shall be
27571 a tagged type or a primitive subprogram of a tagged type.
27572
27573 17/3
27574 There are no language-defined aspects that may be specified on a
27575 renaming_declaration, a generic_formal_parameter_declaration, a subunit,
27576 a package_body, a task_body, a protected_body, or a body_stub other than
27577 a subprogram_body_stub.
27578
27579 18/3
27580 A language-defined aspect shall not be specified in an
27581 aspect_specification given on a subprogram_body or subprogram_body_stub
27582 that is a completion of another declaration.
27583
27584 _Static Semantics_
27585
27586 19/3
27587 Depending on which aspect is identified by the aspect_mark, an
27588 aspect_definition specifies:
27589
27590 20/3
27591 * a name that denotes a subprogram, object, or other kind of entity;
27592
27593 21/3
27594 * an expression, which is either evaluated to produce a single value,
27595 or which (as in a precondition) is to be evaluated at particular
27596 points during later execution; or
27597
27598 22/3
27599 * an identifier specific to the aspect.
27600
27601 23/3
27602 The identified aspect of the associated entity, or in some cases, the
27603 view of the entity defined by the declaration, is as specified by the
27604 aspect_definition (or by the default of True when boolean). Whether an
27605 aspect_specification applies to an entity or only to the particular view
27606 of the entity defined by the declaration is determined by the
27607 aspect_mark and the kind of entity. The following aspects are view
27608 specific:
27609
27610 24/3
27611 * An aspect specified on an object_declaration;
27612
27613 25/3
27614 * An aspect specified on a subprogram_declaration;
27615
27616 26/3
27617 * An aspect specified on a renaming_declaration.
27618
27619 27/3
27620 All other aspect_specifications are associated with the entity, and
27621 apply to all views of the entity, unless otherwise specified in this
27622 International Standard.
27623
27624 28/3
27625 If the aspect_mark includes 'Class, then:
27626
27627 29/3
27628 * if the associated entity is a tagged type, the specification
27629 applies to all descendants of the type;
27630
27631 30/3
27632 * if the associated entity is a primitive subprogram of a tagged type
27633 T, the specification applies to the corresponding primitive
27634 subprogram of all descendants of T.
27635
27636 31/3
27637 All specifiable operational and representation attributes may be
27638 specified with an aspect_specification instead of an
27639 attribute_definition_clause (see *note 13.3::).
27640
27641 32/3
27642 Any aspect specified by a representation pragma or library unit pragma
27643 that has a local_name as its single argument may be specified by an
27644 aspect_specification, with the entity being the local_name. The
27645 aspect_definition is expected to be of type Boolean. The expression
27646 shall be static.
27647
27648 33/3
27649 In addition, other operational and representation aspects not associated
27650 with specifiable attributes or representation pragmas may be specified,
27651 as specified elsewhere in this International Standard.
27652
27653 34/3
27654 If an aspect of a derived type is inherited from an ancestor type and
27655 has the boolean value True, the inherited value shall not be overridden
27656 to have the value False for the derived type, unless otherwise specified
27657 in this International Standard.
27658
27659 35/3
27660 If a Legality Rule or Static Semantics rule only applies when a
27661 particular aspect has been specified, the aspect is considered to have
27662 been specified only when the aspect_specification or
27663 attribute_definition_clause is visible (see *note 8.3::) at the point of
27664 the application of the rule.
27665
27666 36/3
27667 Alternative legality and semantics rules may apply for particular
27668 aspects, as specified elsewhere in this International Standard.
27669
27670 _Dynamic Semantics_
27671
27672 37/3
27673 At the freezing point of the associated entity, the aspect_specification
27674 is elaborated. The elaboration of the aspect_specification includes the
27675 evaluation of the name or expression, if any, unless the aspect itself
27676 is an expression. If the corresponding aspect represents an expression
27677 (as in a precondition), the elaboration has no effect; the expression is
27678 evaluated later at points within the execution as specified elsewhere in
27679 this International Standard for the particular aspect.
27680
27681 _Implementation Permissions_
27682
27683 38/3
27684 Implementations may support implementation-defined aspects. The
27685 aspect_specification for an implementation-defined aspect may use an
27686 implementation-defined syntax for the aspect_definition, and may follow
27687 implementation-defined legality and semantics rules.
27688
27689 \1f
27690 File: arm2012.info, Node: 13.2, Next: 13.3, Prev: 13.1, Up: 13
27691
27692 13.2 Packed Types
27693 =================
27694
27695 1/3
27696 The Pack aspect having the value True specifies that storage
27697 minimization should be the main criterion when selecting the
27698 representation of a composite type.
27699
27700 Paragraphs 2 through 4 were moved to *note Annex J::, "*note Annex J::
27701 Obsolescent Features".
27702
27703 _Static Semantics_
27704
27705 5/3
27706 For a full type declaration of a composite type, the following
27707 language-defined representation aspect may be specified:
27708
27709 5.1/3
27710 Pack
27711 The type of aspect Pack is Boolean. When aspect Pack is
27712 True for a type, the type (or the extension part) is said
27713 to be packed. For a type extension, the parent part is
27714 packed as for the parent type, and specifying Pack causes
27715 packing only of the extension part.
27716
27717 5.2/3
27718 If directly specified, the aspect_definition shall be a
27719 static expression. If not specified (including by
27720 inheritance), the aspect is False.
27721
27722 _Implementation Advice_
27723
27724 6
27725 If a type is packed, then the implementation should try to minimize
27726 storage allocated to objects of the type, possibly at the expense of
27727 speed of accessing components, subject to reasonable complexity in
27728 addressing calculations.
27729
27730 6.1/2
27731 If a packed type has a component that is not of a by-reference type and
27732 has no aliased part, then such a component need not be aligned according
27733 to the Alignment of its subtype; in particular it need not be allocated
27734 on a storage element boundary.
27735
27736 7/3
27737 The recommended level of support for the Pack aspect is:
27738
27739 8
27740 * For a packed record type, the components should be packed as
27741 tightly as possible subject to the Sizes of the component subtypes,
27742 and subject to any record_representation_clause that applies to the
27743 type; the implementation may, but need not, reorder components or
27744 cross aligned word boundaries to improve the packing. A component
27745 whose Size is greater than the word size may be allocated an
27746 integral number of words.
27747
27748 9/3
27749 * For a packed array type, if the Size of the component subtype is
27750 less than or equal to the word size, Component_Size should be less
27751 than or equal to the Size of the component subtype, rounded up to
27752 the nearest factor of the word size.
27753
27754 \1f
27755 File: arm2012.info, Node: 13.3, Next: 13.4, Prev: 13.2, Up: 13
27756
27757 13.3 Operational and Representation Attributes
27758 ==============================================
27759
27760 1/1
27761 The values of certain implementation-dependent characteristics can be
27762 obtained by interrogating appropriate operational or representation
27763 attributes. Some of these attributes are specifiable via an
27764 attribute_definition_clause.
27765
27766 _Syntax_
27767
27768 2
27769 attribute_definition_clause ::=
27770 for local_name'attribute_designator use expression;
27771 | for local_name'attribute_designator use name;
27772
27773 _Name Resolution Rules_
27774
27775 3
27776 For an attribute_definition_clause that specifies an attribute that
27777 denotes a value, the form with an expression shall be used. Otherwise,
27778 the form with a name shall be used.
27779
27780 4
27781 For an attribute_definition_clause that specifies an attribute that
27782 denotes a value or an object, the expected type for the expression or
27783 name is that of the attribute. For an attribute_definition_clause that
27784 specifies an attribute that denotes a subprogram, the expected profile
27785 for the name is the profile required for the attribute. For an
27786 attribute_definition_clause that specifies an attribute that denotes
27787 some other kind of entity, the name shall resolve to denote an entity of
27788 the appropriate kind.
27789
27790 _Legality Rules_
27791
27792 5/3
27793 An attribute_designator is allowed in an attribute_definition_clause
27794 only if this International Standard explicitly allows it, or for an
27795 implementation-defined attribute if the implementation allows it. Each
27796 specifiable attribute constitutes an operational aspect or aspect of
27797 representation; the name of the aspect is that of the attribute.
27798
27799 6
27800 For an attribute_definition_clause that specifies an attribute that
27801 denotes a subprogram, the profile shall be mode conformant with the one
27802 required for the attribute, and the convention shall be Ada. Additional
27803 requirements are defined for particular attributes.
27804
27805 _Static Semantics_
27806
27807 7/2
27808 A Size clause is an attribute_definition_clause whose
27809 attribute_designator is Size. Similar definitions apply to the other
27810 specifiable attributes.
27811
27812 8
27813 A storage element is an addressable element of storage in the machine.
27814 A word is the largest amount of storage that can be conveniently and
27815 efficiently manipulated by the hardware, given the implementation's
27816 run-time model. A word consists of an integral number of storage
27817 elements.
27818
27819 8.1/3
27820 A machine scalar is an amount of storage that can be conveniently and
27821 efficiently loaded, stored, or operated upon by the hardware. Machine
27822 scalars consist of an integral number of storage elements. The set of
27823 machine scalars is implementation defined, but includes at least the
27824 storage element and the word. Machine scalars are used to interpret
27825 component_clauses when the nondefault bit ordering applies.
27826
27827 9/3
27828 The following representation attributes are defined: Address, Alignment,
27829 Size, Storage_Size, Component_Size, Has_Same_Storage, and
27830 Overlaps_Storage.
27831
27832 10/1
27833 For a prefix X that denotes an object, program unit, or label:
27834
27835 11
27836 X'Address
27837 Denotes the address of the first of the storage elements
27838 allocated to X. For a program unit or label, this value
27839 refers to the machine code associated with the
27840 corresponding body or statement. The value of this
27841 attribute is of type System.Address.
27842
27843 11.1/3
27844 The prefix of X'Address shall not statically denote a
27845 subprogram that has convention Intrinsic. X'Address
27846 raises Program_Error if X denotes a subprogram that has
27847 convention Intrinsic.
27848
27849 12
27850 Address may be specified for stand-alone objects and for
27851 program units via an attribute_definition_clause.
27852
27853 _Erroneous Execution_
27854
27855 13/3
27856 If an Address is specified, it is the programmer's responsibility to
27857 ensure that the address is valid and appropriate for the entity and its
27858 use; otherwise, program execution is erroneous.
27859
27860 _Implementation Advice_
27861
27862 14
27863 For an array X, X'Address should point at the first component of the
27864 array, and not at the array bounds.
27865
27866 15
27867 The recommended level of support for the Address attribute is:
27868
27869 16
27870 * X'Address should produce a useful result if X is an object that is
27871 aliased or of a by-reference type, or is an entity whose Address
27872 has been specified.
27873
27874 17
27875 * An implementation should support Address clauses for imported
27876 subprograms.
27877
27878 18/2
27879 * This paragraph was deleted.
27880
27881 19
27882 * If the Address of an object is specified, or it is imported or
27883 exported, then the implementation should not perform optimizations
27884 based on assumptions of no aliases.
27885
27886 NOTES
27887
27888 20
27889 2 The specification of a link name with the Link_Name aspect (see
27890 *note B.1::) for a subprogram or object is an alternative to
27891 explicit specification of its link-time address, allowing a
27892 link-time directive to place the subprogram or object within
27893 memory.
27894
27895 21
27896 3 The rules for the Size attribute imply, for an aliased object X,
27897 that if X'Size = Storage_Unit, then X'Address points at a storage
27898 element containing all of the bits of X, and only the bits of X.
27899
27900 _Static Semantics_
27901
27902 22/2
27903 For a prefix X that denotes an object:
27904
27905 23/2
27906 X'Alignment
27907 The value of this attribute is of type universal_integer,
27908 and nonnegative; zero means that the object is not
27909 necessarily aligned on a storage element boundary. If
27910 X'Alignment is not zero, then X is aligned on a storage
27911 unit boundary and X'Address is an integral multiple of
27912 X'Alignment (that is, the Address modulo the Alignment is
27913 zero).
27914
27915 24/2
27916
27917 This paragraph was deleted.
27918
27919 25/2
27920 Alignment may be specified for stand-alone objects via an
27921 attribute_definition_clause (*note 13.3: S0309.); the
27922 expression of such a clause shall be static, and its
27923 value nonnegative.
27924
27925 26/2
27926
27927 This paragraph was deleted.
27928
27929 26.1/2
27930 For every subtype S:
27931
27932 26.2/2
27933 S'Alignment
27934 The value of this attribute is of type universal_integer,
27935 and nonnegative.
27936
27937 26.3/2
27938 For an object X of subtype S, if S'Alignment is not zero,
27939 then X'Alignment is a nonzero integral multiple of
27940 S'Alignment unless specified otherwise by a
27941 representation item.
27942
27943 26.4/2
27944 Alignment may be specified for first subtypes via an
27945 attribute_definition_clause (*note 13.3: S0309.); the
27946 expression of such a clause shall be static, and its
27947 value nonnegative.
27948
27949 _Erroneous Execution_
27950
27951 27
27952 Program execution is erroneous if an Address clause is given that
27953 conflicts with the Alignment.
27954
27955 28/2
27956 For an object that is not allocated under control of the implementation,
27957 execution is erroneous if the object is not aligned according to its
27958 Alignment.
27959
27960 _Implementation Advice_
27961
27962 28.1/3
27963 For any tagged specific subtype S, S'Class'Alignment should equal
27964 S'Alignment.
27965
27966 29
27967 The recommended level of support for the Alignment attribute for
27968 subtypes is:
27969
27970 30/2
27971 * An implementation should support an Alignment clause for a discrete
27972 type, fixed point type, record type, or array type, specifying an
27973 Alignment value that is zero or a power of two, subject to the
27974 following:
27975
27976 31/2
27977 * An implementation need not support an Alignment clause for a signed
27978 integer type specifying an Alignment greater than the largest
27979 Alignment value that is ever chosen by default by the
27980 implementation for any signed integer type. A corresponding
27981 limitation may be imposed for modular integer types, fixed point
27982 types, enumeration types, record types, and array types.
27983
27984 32/2
27985 * An implementation need not support a nonconfirming Alignment clause
27986 which could enable the creation of an object of an elementary type
27987 which cannot be easily loaded and stored by available machine
27988 instructions.
27989
27990 32.1/2
27991 * An implementation need not support an Alignment specified for a
27992 derived tagged type which is not a multiple of the Alignment of the
27993 parent type. An implementation need not support a nonconfirming
27994 Alignment specified for a derived untagged by-reference type.
27995
27996 33
27997 The recommended level of support for the Alignment attribute for objects
27998 is:
27999
28000 34/2
28001 * This paragraph was deleted.
28002
28003 35
28004 * For stand-alone library-level objects of statically constrained
28005 subtypes, the implementation should support all Alignments
28006 supported by the target linker. For example, page alignment is
28007 likely to be supported for such objects, but not for subtypes.
28008
28009 35.1/2
28010 * For other objects, an implementation should at least support the
28011 alignments supported for their subtype, subject to the following:
28012
28013 35.2/2
28014 * An implementation need not support Alignments specified for objects
28015 of a by-reference type or for objects of types containing aliased
28016 subcomponents if the specified Alignment is not a multiple of the
28017 Alignment of the subtype of the object.
28018
28019 NOTES
28020
28021 36
28022 4 Alignment is a subtype-specific attribute.
28023
28024 37/2
28025 This paragraph was deleted.
28026
28027 38/3
28028 5 A component_clause, Component_Size clause, or specifying the
28029 Pack aspect as True can override a specified Alignment.
28030
28031 _Static Semantics_
28032
28033 39/1
28034 For a prefix X that denotes an object:
28035
28036 40
28037 X'Size
28038 Denotes the size in bits of the representation of the
28039 object. The value of this attribute is of the type
28040 universal_integer.
28041
28042 41
28043 Size may be specified for stand-alone objects via an
28044 attribute_definition_clause; the expression of such a
28045 clause shall be static and its value nonnegative.
28046
28047 _Implementation Advice_
28048
28049 41.1/2
28050 The size of an array object should not include its bounds.
28051
28052 42/2
28053 The recommended level of support for the Size attribute of objects is
28054 the same as for subtypes (see below), except that only a confirming Size
28055 clause need be supported for an aliased elementary object.
28056
28057 43/2
28058 * This paragraph was deleted.
28059
28060 _Static Semantics_
28061
28062 44
28063 For every subtype S:
28064
28065 45
28066 S'Size
28067 If S is definite, denotes the size (in bits) that the
28068 implementation would choose for the following objects of
28069 subtype S:
28070
28071 46
28072 * A record component of subtype S when the record type
28073 is packed.
28074
28075 47
28076 * The formal parameter of an instance of
28077 Unchecked_Conversion that converts from subtype S to
28078 some other subtype.
28079
28080 48
28081 If S is indefinite, the meaning is implementation
28082 defined. The value of this attribute is of the type
28083 universal_integer. The Size of an object is at least as
28084 large as that of its subtype, unless the object's Size is
28085 determined by a Size clause, a component_clause, or a
28086 Component_Size clause. Size may be specified for first
28087 subtypes via an attribute_definition_clause (*note 13.3:
28088 S0309.); the expression of such a clause shall be static
28089 and its value nonnegative.
28090
28091 _Implementation Requirements_
28092
28093 49
28094 In an implementation, Boolean'Size shall be 1.
28095
28096 _Implementation Advice_
28097
28098 50/2
28099 If the Size of a subtype allows for efficient independent addressability
28100 (see *note 9.10::) on the target architecture, then the Size of the
28101 following objects of the subtype should equal the Size of the subtype:
28102
28103 51
28104 * Aliased objects (including components).
28105
28106 52
28107 * Unaliased components, unless the Size of the component is
28108 determined by a component_clause or Component_Size clause.
28109
28110 53
28111 A Size clause on a composite subtype should not affect the internal
28112 layout of components.
28113
28114 54
28115 The recommended level of support for the Size attribute of subtypes is:
28116
28117 55
28118 * The Size (if not specified) of a static discrete or fixed point
28119 subtype should be the number of bits needed to represent each value
28120 belonging to the subtype using an unbiased representation, leaving
28121 space for a sign bit only if the subtype contains negative values.
28122 If such a subtype is a first subtype, then an implementation should
28123 support a specified Size for it that reflects this representation.
28124
28125 56
28126 * For a subtype implemented with levels of indirection, the Size
28127 should include the size of the pointers, but not the size of what
28128 they point at.
28129
28130 56.1/2
28131 * An implementation should support a Size clause for a discrete type,
28132 fixed point type, record type, or array type, subject to the
28133 following:
28134
28135 56.2/2
28136 * An implementation need not support a Size clause for a
28137 signed integer type specifying a Size greater than that
28138 of the largest signed integer type supported by the
28139 implementation in the absence of a size clause (that is,
28140 when the size is chosen by default). A corresponding
28141 limitation may be imposed for modular integer types,
28142 fixed point types, enumeration types, record types, and
28143 array types.
28144
28145 56.3/2
28146 * A nonconfirming size clause for the first subtype of a
28147 derived untagged by-reference type need not be supported.
28148
28149 NOTES
28150
28151 57
28152 6 Size is a subtype-specific attribute.
28153
28154 58/3
28155 7 A component_clause or Component_Size clause can override a
28156 specified Size. Aspect Pack cannot.
28157
28158 _Static Semantics_
28159
28160 59/1
28161 For a prefix T that denotes a task object (after any implicit
28162 dereference):
28163
28164 60/3
28165 T'Storage_Size
28166 Denotes the number of storage elements reserved for the
28167 task. The value of this attribute is of the type
28168 universal_integer. The Storage_Size includes the size of
28169 the task's stack, if any. The language does not specify
28170 whether or not it includes other storage associated with
28171 the task (such as the "task control block" used by some
28172 implementations.) If the aspect Storage_Size is
28173 specified for the type of the object, the value of the
28174 Storage_Size attribute is at least the value determined
28175 by the aspect.
28176
28177 61/3
28178 Aspect Storage_Size specifies the amount of storage to be reserved for
28179 the execution of a task.
28180
28181 Paragraphs 62 through 65 were moved to *note Annex J::, "*note Annex J::
28182 Obsolescent Features".
28183
28184 _Static Semantics_
28185
28186 65.1/3
28187 For a task type (including the anonymous type of a
28188 single_task_declaration), the following language-defined representation
28189 aspect may be specified:
28190
28191 65.2/3
28192 Storage_Size
28193 The Storage_Size aspect is an expression, which shall be
28194 of any integer type.
28195
28196 _Legality Rules_
28197
28198 65.3/3
28199 The Storage_Size aspect shall not be specified for a task interface
28200 type.
28201
28202 _Dynamic Semantics_
28203
28204 66/3
28205 When a task object is created, the expression (if any) associated with
28206 the Storage_Size aspect of its type is evaluated; the Storage_Size
28207 attribute of the newly created task object is at least the value of the
28208 expression.
28209
28210 67
28211 At the point of task object creation, or upon task activation,
28212 Storage_Error is raised if there is insufficient free storage to
28213 accommodate the requested Storage_Size.
28214
28215 _Static Semantics_
28216
28217 68/1
28218 For a prefix X that denotes an array subtype or array object (after any
28219 implicit dereference):
28220
28221 69
28222 X'Component_Size
28223 Denotes the size in bits of components of the type of X.
28224 The value of this attribute is of type universal_integer.
28225
28226 70
28227 Component_Size may be specified for array types via an
28228 attribute_definition_clause (*note 13.3: S0309.); the
28229 expression of such a clause shall be static, and its
28230 value nonnegative.
28231
28232 _Implementation Advice_
28233
28234 71
28235 The recommended level of support for the Component_Size attribute is:
28236
28237 72
28238 * An implementation need not support specified Component_Sizes that
28239 are less than the Size of the component subtype.
28240
28241 73/3
28242 * An implementation should support specified Component_Sizes that are
28243 factors and multiples of the word size. For such Component_Sizes,
28244 the array should contain no gaps between components. For other
28245 Component_Sizes (if supported), the array should contain no gaps
28246 between components when Pack is also specified; the implementation
28247 should forbid this combination in cases where it cannot support a
28248 no-gaps representation.
28249
28250 _Static Semantics_
28251
28252 73.1/3
28253 For a prefix X that denotes an object:
28254
28255 73.2/3
28256 X'Has_Same_Storage
28257 X'Has_Same_Storage denotes a function with the following
28258 specification:
28259
28260 73.3/3
28261 function X'Has_Same_Storage (Arg : any_type)
28262 return Boolean
28263
28264 73.4/3
28265 The actual parameter shall be a name that denotes an
28266 object. The object denoted by the actual parameter can
28267 be of any type. This function evaluates the names of the
28268 objects involved and returns True if the representation
28269 of the object denoted by the actual parameter occupies
28270 exactly the same bits as the representation of the object
28271 denoted by X; otherwise, it returns False.
28272
28273 73.5/3
28274 For a prefix X that denotes an object:
28275
28276 73.6/3
28277 X'Overlaps_Storage
28278 X'Overlaps_Storage denotes a function with the following
28279 specification:
28280
28281 73.7/3
28282 function X'Overlaps_Storage (Arg : any_type)
28283 return Boolean
28284
28285 73.8/3
28286 The actual parameter shall be a name that denotes an
28287 object. The object denoted by the actual parameter can
28288 be of any type. This function evaluates the names of the
28289 objects involved and returns True if the representation
28290 of the object denoted by the actual parameter shares at
28291 least one bit with the representation of the object
28292 denoted by X; otherwise, it returns False.
28293
28294 NOTES
28295
28296 73.9/3
28297 8 X'Has_Same_Storage(Y) implies X'Overlaps_Storage(Y).
28298
28299 73.10/3
28300 9 X'Has_Same_Storage(Y) and X'Overlaps_Storage(Y) are not
28301 considered to be reads of X and Y.
28302
28303 _Static Semantics_
28304
28305 73.11/3
28306 The following type-related operational attribute is defined:
28307 External_Tag.
28308
28309 74/1
28310 For every subtype S of a tagged type T (specific or class-wide):
28311
28312 75/3
28313 S'External_Tag
28314 S'External_Tag denotes an external string representation
28315 for S'Tag; it is of the predefined type String.
28316 External_Tag may be specified for a specific tagged type
28317 via an attribute_definition_clause; the expression of
28318 such a clause shall be static. The default external tag
28319 representation is implementation defined. See *note
28320 13.13.2::. The value of External_Tag is never inherited;
28321 the default value is always used unless a new value is
28322 directly specified for a type.
28323
28324 _Dynamic Semantics_
28325
28326 75.1/3
28327 If a user-specified external tag S'External_Tag is the same as
28328 T'External_Tag for some other tagged type declared by a different
28329 declaration in the partition, Program_Error is raised by the elaboration
28330 of the attribute_definition_clause.
28331
28332 _Implementation Requirements_
28333
28334 76
28335 In an implementation, the default external tag for each specific tagged
28336 type declared in a partition shall be distinct, so long as the type is
28337 declared outside an instance of a generic body. If the compilation unit
28338 in which a given tagged type is declared, and all compilation units on
28339 which it semantically depends, are the same in two different partitions,
28340 then the external tag for the type shall be the same in the two
28341 partitions. What it means for a compilation unit to be the same in two
28342 different partitions is implementation defined. At a minimum, if the
28343 compilation unit is not recompiled between building the two different
28344 partitions that include it, the compilation unit is considered the same
28345 in the two partitions.
28346
28347 _Implementation Permissions_
28348
28349 76.1/3
28350 If a user-specified external tag S'External_Tag is the same as
28351 T'External_Tag for some other tagged type declared by a different
28352 declaration in the partition, the partition may be rejected.
28353
28354 NOTES
28355
28356 77/2
28357 10 The following language-defined attributes are specifiable, at
28358 least for some of the kinds of entities to which they apply:
28359 Address, Alignment, Bit_Order, Component_Size, External_Tag, Input,
28360 Machine_Radix, Output, Read, Size, Small, Storage_Pool,
28361 Storage_Size, Stream_Size, and Write.
28362
28363 78
28364 11 It follows from the general rules in *note 13.1:: that if one
28365 writes "for X'Size use Y;" then the X'Size attribute_reference will
28366 return Y (assuming the implementation allows the Size clause). The
28367 same is true for all of the specifiable attributes except
28368 Storage_Size.
28369
28370 _Examples_
28371
28372 79
28373 Examples of attribute definition clauses:
28374
28375 80
28376 Byte : constant := 8;
28377 Page : constant := 2**12;
28378
28379 81
28380 type Medium is range 0 .. 65_000;
28381 for Medium'Size use 2*Byte;
28382 for Medium'Alignment use 2;
28383 Device_Register : Medium;
28384 for Device_Register'Size use Medium'Size;
28385 for Device_Register'Address use System.Storage_Elements.To_Address(16#FFFF_0020#);
28386
28387 82
28388 type Short is delta 0.01 range -100.0 .. 100.0;
28389 for Short'Size use 15;
28390
28391 83
28392 for Car_Name'Storage_Size use -- specify access type's storage pool size
28393 2000*((Car'Size/System.Storage_Unit) +1); -- approximately 2000 cars
28394
28395 84/2
28396 function My_Input(Stream : not null access Ada.Streams.Root_Stream_Type'Class)
28397 return T;
28398 for T'Input use My_Input; -- see *note 13.13.2::
28399
28400 NOTES
28401
28402 85
28403 12 Notes on the examples: In the Size clause for Short, fifteen
28404 bits is the minimum necessary, since the type definition requires
28405 Short'Small <= 2**(-7).
28406
28407 \1f
28408 File: arm2012.info, Node: 13.4, Next: 13.5, Prev: 13.3, Up: 13
28409
28410 13.4 Enumeration Representation Clauses
28411 =======================================
28412
28413 1
28414 An enumeration_representation_clause specifies the internal codes for
28415 enumeration literals.
28416
28417 _Syntax_
28418
28419 2
28420 enumeration_representation_clause ::=
28421 for first_subtype_local_name use enumeration_aggregate;
28422
28423 3
28424 enumeration_aggregate ::= array_aggregate
28425
28426 _Name Resolution Rules_
28427
28428 4
28429 The enumeration_aggregate shall be written as a one-dimensional
28430 array_aggregate, for which the index subtype is the unconstrained
28431 subtype of the enumeration type, and each component expression is
28432 expected to be of any integer type.
28433
28434 _Legality Rules_
28435
28436 5
28437 The first_subtype_local_name of an enumeration_representation_clause
28438 shall denote an enumeration subtype.
28439
28440 6/2
28441 Each component of the array_aggregate shall be given by an expression
28442 rather than a <>. The expressions given in the array_aggregate shall be
28443 static, and shall specify distinct integer codes for each value of the
28444 enumeration type; the associated integer codes shall satisfy the
28445 predefined ordering relation of the type.
28446
28447 _Static Semantics_
28448
28449 7
28450 An enumeration_representation_clause specifies the coding aspect of
28451 representation. The coding consists of the internal code for each
28452 enumeration literal, that is, the integral value used internally to
28453 represent each literal.
28454
28455 _Implementation Requirements_
28456
28457 8
28458 For nonboolean enumeration types, if the coding is not specified for the
28459 type, then for each value of the type, the internal code shall be equal
28460 to its position number.
28461
28462 _Implementation Advice_
28463
28464 9
28465 The recommended level of support for enumeration_representation_clauses
28466 is:
28467
28468 10
28469 * An implementation should support at least the internal codes in the
28470 range System.Min_Int..System.Max_Int. An implementation need not
28471 support enumeration_representation_clause (*note 13.4: S0310.)s for
28472 boolean types.
28473
28474 NOTES
28475
28476 11/3
28477 13 Unchecked_Conversion may be used to query the internal codes
28478 used for an enumeration type. The attributes of the type, such as
28479 Succ, Pred, and Pos, are unaffected by the
28480 enumeration_representation_clause. For example, Pos always returns
28481 the position number, not the internal integer code that might have
28482 been specified in an enumeration_representation_clause.
28483
28484 _Examples_
28485
28486 12
28487 Example of an enumeration representation clause:
28488
28489 13
28490 type Mix_Code is (ADD, SUB, MUL, LDA, STA, STZ);
28491
28492 14
28493 for Mix_Code use
28494 (ADD => 1, SUB => 2, MUL => 3, LDA => 8, STA => 24, STZ =>33);
28495
28496 \1f
28497 File: arm2012.info, Node: 13.5, Next: 13.6, Prev: 13.4, Up: 13
28498
28499 13.5 Record Layout
28500 ==================
28501
28502 1
28503 The (record) layout aspect of representation consists of the storage
28504 places for some or all components, that is, storage place attributes of
28505 the components. The layout can be specified with a
28506 record_representation_clause (*note 13.5.1: S0312.).
28507
28508 * Menu:
28509
28510 * 13.5.1 :: Record Representation Clauses
28511 * 13.5.2 :: Storage Place Attributes
28512 * 13.5.3 :: Bit Ordering
28513
28514 \1f
28515 File: arm2012.info, Node: 13.5.1, Next: 13.5.2, Up: 13.5
28516
28517 13.5.1 Record Representation Clauses
28518 ------------------------------------
28519
28520 1
28521 A record_representation_clause specifies the storage representation of
28522 records and record extensions, that is, the order, position, and size of
28523 components (including discriminants, if any).
28524
28525 _Syntax_
28526
28527 2
28528 record_representation_clause ::=
28529 for first_subtype_local_name use
28530 record [mod_clause]
28531 {component_clause}
28532 end record;
28533
28534 3
28535 component_clause ::=
28536 component_local_name at position range first_bit .. last_bit;
28537
28538 4
28539 position ::= static_expression
28540
28541 5
28542 first_bit ::= static_simple_expression
28543
28544 6
28545 last_bit ::= static_simple_expression
28546
28547 _Name Resolution Rules_
28548
28549 7
28550 Each position, first_bit, and last_bit is expected to be of any integer
28551 type.
28552
28553 _Legality Rules_
28554
28555 8/2
28556 The first_subtype_local_name of a record_representation_clause shall
28557 denote a specific record or record extension subtype.
28558
28559 9
28560 If the component_local_name is a direct_name, the local_name shall
28561 denote a component of the type. For a record extension, the component
28562 shall not be inherited, and shall not be a discriminant that corresponds
28563 to a discriminant of the parent type. If the component_local_name
28564 (*note 13.1: S0305.) has an attribute_designator (*note 4.1.4: S0101.),
28565 the direct_name (*note 4.1: S0092.) of the local_name (*note 13.1:
28566 S0305.) shall denote either the declaration of the type or a component
28567 of the type, and the attribute_designator (*note 4.1.4: S0101.) shall
28568 denote an implementation-defined implicit component of the type.
28569
28570 10
28571 The position, first_bit, and last_bit shall be static expressions. The
28572 value of position and first_bit shall be nonnegative. The value of
28573 last_bit shall be no less than first_bit - 1.
28574
28575 10.1/2
28576 If the nondefault bit ordering applies to the type, then either:
28577
28578 10.2/2
28579 * the value of last_bit shall be less than the size of the largest
28580 machine scalar; or
28581
28582 10.3/2
28583 * the value of first_bit shall be zero and the value of last_bit + 1
28584 shall be a multiple of System.Storage_Unit.
28585
28586 11
28587 At most one component_clause is allowed for each component of the type,
28588 including for each discriminant (component_clauses may be given for
28589 some, all, or none of the components). Storage places within a
28590 component_list shall not overlap, unless they are for components in
28591 distinct variants of the same variant_part.
28592
28593 12
28594 A name that denotes a component of a type is not allowed within a
28595 record_representation_clause for the type, except as the
28596 component_local_name of a component_clause.
28597
28598 _Static Semantics_
28599
28600 13/2
28601 A record_representation_clause (without the mod_clause) specifies the
28602 layout.
28603
28604 13.1/2
28605 If the default bit ordering applies to the type, the position,
28606 first_bit, and last_bit of each component_clause directly specify the
28607 position and size of the corresponding component.
28608
28609 13.2/3
28610 If the nondefault bit ordering applies to the type, then the layout is
28611 determined as follows:
28612
28613 13.3/2
28614 * the component_clauses for which the value of last_bit is greater
28615 than or equal to the size of the largest machine scalar directly
28616 specify the position and size of the corresponding component;
28617
28618 13.4/2
28619 * for other component_clauses, all of the components having the same
28620 value of position are considered to be part of a single machine
28621 scalar, located at that position; this machine scalar has a size
28622 which is the smallest machine scalar size larger than the largest
28623 last_bit for all component_clauses at that position; the first_bit
28624 and last_bit of each component_clause are then interpreted as bit
28625 offsets in this machine scalar.
28626
28627 14
28628 A record_representation_clause for a record extension does not override
28629 the layout of the parent part; if the layout was specified for the
28630 parent type, it is inherited by the record extension.
28631
28632 _Implementation Permissions_
28633
28634 15
28635 An implementation may generate implementation-defined components (for
28636 example, one containing the offset of another component). An
28637 implementation may generate names that denote such
28638 implementation-defined components; such names shall be
28639 implementation-defined attribute_references. An implementation may
28640 allow such implementation-defined names to be used in
28641 record_representation_clause (*note 13.5.1: S0312.)s. An implementation
28642 can restrict such component_clause (*note 13.5.1: S0313.)s in any manner
28643 it sees fit.
28644
28645 16
28646 If a record_representation_clause is given for an untagged derived type,
28647 the storage place attributes for all of the components of the derived
28648 type may differ from those of the corresponding components of the parent
28649 type, even for components whose storage place is not specified
28650 explicitly in the record_representation_clause (*note 13.5.1: S0312.).
28651
28652 _Implementation Advice_
28653
28654 17
28655 The recommended level of support for record_representation_clauses is:
28656
28657 17.1/2
28658 * An implementation should support machine scalars that correspond to
28659 all of the integer, floating point, and address formats supported
28660 by the machine.
28661
28662 18
28663 * An implementation should support storage places that can be
28664 extracted with a load, mask, shift sequence of machine code, and
28665 set with a load, shift, mask, store sequence, given the available
28666 machine instructions and run-time model.
28667
28668 19
28669 * A storage place should be supported if its size is equal to the
28670 Size of the component subtype, and it starts and ends on a boundary
28671 that obeys the Alignment of the component subtype.
28672
28673 20/2
28674 * For a component with a subtype whose Size is less than the word
28675 size, any storage place that does not cross an aligned word
28676 boundary should be supported.
28677
28678 21
28679 * An implementation may reserve a storage place for the tag field of
28680 a tagged type, and disallow other components from overlapping that
28681 place.
28682
28683 22
28684 * An implementation need not support a component_clause for a
28685 component of an extension part if the storage place is not after
28686 the storage places of all components of the parent type, whether or
28687 not those storage places had been specified.
28688
28689 NOTES
28690
28691 23
28692 14 If no component_clause is given for a component, then the
28693 choice of the storage place for the component is left to the
28694 implementation. If component_clauses are given for all components,
28695 the record_representation_clause completely specifies the
28696 representation of the type and will be obeyed exactly by the
28697 implementation.
28698
28699 _Examples_
28700
28701 24
28702 Example of specifying the layout of a record type:
28703
28704 25
28705 Word : constant := 4; -- storage element is byte, 4 bytes per word
28706
28707 26
28708 type State is (A,M,W,P);
28709 type Mode is (Fix, Dec, Exp, Signif);
28710
28711 27
28712 type Byte_Mask is array (0..7) of Boolean;
28713 type State_Mask is array (State) of Boolean;
28714 type Mode_Mask is array (Mode) of Boolean;
28715
28716 28
28717 type Program_Status_Word is
28718 record
28719 System_Mask : Byte_Mask;
28720 Protection_Key : Integer range 0 .. 3;
28721 Machine_State : State_Mask;
28722 Interrupt_Cause : Interruption_Code;
28723 Ilc : Integer range 0 .. 3;
28724 Cc : Integer range 0 .. 3;
28725 Program_Mask : Mode_Mask;
28726 Inst_Address : Address;
28727 end record;
28728
28729 29
28730 for Program_Status_Word use
28731 record
28732 System_Mask at 0*Word range 0 .. 7;
28733 Protection_Key at 0*Word range 10 .. 11; -- bits 8,9 unused
28734 Machine_State at 0*Word range 12 .. 15;
28735 Interrupt_Cause at 0*Word range 16 .. 31;
28736 Ilc at 1*Word range 0 .. 1; -- second word
28737 Cc at 1*Word range 2 .. 3;
28738 Program_Mask at 1*Word range 4 .. 7;
28739 Inst_Address at 1*Word range 8 .. 31;
28740 end record;
28741
28742 30
28743 for Program_Status_Word'Size use 8*System.Storage_Unit;
28744 for Program_Status_Word'Alignment use 8;
28745
28746 NOTES
28747
28748 31
28749 15 Note on the example: The record_representation_clause defines
28750 the record layout. The Size clause guarantees that (at least)
28751 eight storage elements are used for objects of the type. The
28752 Alignment clause guarantees that aliased, imported, or exported
28753 objects of the type will have addresses divisible by eight.
28754
28755 \1f
28756 File: arm2012.info, Node: 13.5.2, Next: 13.5.3, Prev: 13.5.1, Up: 13.5
28757
28758 13.5.2 Storage Place Attributes
28759 -------------------------------
28760
28761 _Static Semantics_
28762
28763 1
28764 For a component C of a composite, non-array object R, the storage place
28765 attributes are defined:
28766
28767 2/2
28768 R.C'Position
28769 If the nondefault bit ordering applies to the composite
28770 type, and if a component_clause specifies the placement
28771 of C, denotes the value given for the position of the
28772 component_clause; otherwise, denotes the same value as
28773 R.C'Address - R'Address. The value of this attribute is
28774 of the type universal_integer.
28775
28776 3/2
28777 R.C'First_Bit
28778 If the nondefault bit ordering applies to the composite
28779 type, and if a component_clause specifies the placement
28780 of C, denotes the value given for the first_bit of the
28781 component_clause; otherwise, denotes the offset, from the
28782 start of the first of the storage elements occupied by C,
28783 of the first bit occupied by C. This offset is measured
28784 in bits. The first bit of a storage element is numbered
28785 zero. The value of this attribute is of the type
28786 universal_integer.
28787
28788 4/2
28789 R.C'Last_Bit
28790 If the nondefault bit ordering applies to the composite
28791 type, and if a component_clause specifies the placement
28792 of C, denotes the value given for the last_bit of the
28793 component_clause; otherwise, denotes the offset, from the
28794 start of the first of the storage elements occupied by C,
28795 of the last bit occupied by C. This offset is measured in
28796 bits. The value of this attribute is of the type
28797 universal_integer.
28798
28799 _Implementation Advice_
28800
28801 5
28802 If a component is represented using some form of pointer (such as an
28803 offset) to the actual data of the component, and this data is contiguous
28804 with the rest of the object, then the storage place attributes should
28805 reflect the place of the actual data, not the pointer. If a component
28806 is allocated discontiguously from the rest of the object, then a warning
28807 should be generated upon reference to one of its storage place
28808 attributes.
28809
28810 \1f
28811 File: arm2012.info, Node: 13.5.3, Prev: 13.5.2, Up: 13.5
28812
28813 13.5.3 Bit Ordering
28814 -------------------
28815
28816 1
28817 The Bit_Order attribute specifies the interpretation of the storage
28818 place attributes.
28819
28820 _Static Semantics_
28821
28822 2
28823 A bit ordering is a method of interpreting the meaning of the storage
28824 place attributes. High_Order_First (known in the vernacular as "big
28825 endian") means that the first bit of a storage element (bit 0) is the
28826 most significant bit (interpreting the sequence of bits that represent a
28827 component as an unsigned integer value). Low_Order_First (known in the
28828 vernacular as "little endian") means the opposite: the first bit is the
28829 least significant.
28830
28831 3
28832 For every specific record subtype S, the following attribute is defined:
28833
28834 4
28835 S'Bit_Order
28836 Denotes the bit ordering for the type of S. The value of
28837 this attribute is of type System.Bit_Order. Bit_Order
28838 may be specified for specific record types via an
28839 attribute_definition_clause; the expression of such a
28840 clause shall be static.
28841
28842 5
28843 If Word_Size = Storage_Unit, the default bit ordering is implementation
28844 defined. If Word_Size > Storage_Unit, the default bit ordering is the
28845 same as the ordering of storage elements in a word, when interpreted as
28846 an integer.
28847
28848 6
28849 The storage place attributes of a component of a type are interpreted
28850 according to the bit ordering of the type.
28851
28852 _Implementation Advice_
28853
28854 7
28855 The recommended level of support for the nondefault bit ordering is:
28856
28857 8/2
28858 * The implementation should support the nondefault bit ordering in
28859 addition to the default bit ordering.
28860
28861 NOTES
28862
28863 9/2
28864 16 Bit_Order clauses make it possible to write
28865 record_representation_clauses that can be ported between machines
28866 having different bit ordering. They do not guarantee transparent
28867 exchange of data between such machines.
28868
28869 \1f
28870 File: arm2012.info, Node: 13.6, Next: 13.7, Prev: 13.5, Up: 13
28871
28872 13.6 Change of Representation
28873 =============================
28874
28875 1/3
28876 A type_conversion (see *note 4.6::) can be used to convert between two
28877 different representations of the same array or record. To convert an
28878 array from one representation to another, two array types need to be
28879 declared with matching component subtypes, and convertible index types.
28880 If one type has Pack specified and the other does not, then explicit
28881 conversion can be used to pack or unpack an array.
28882
28883 2
28884 To convert a record from one representation to another, two record types
28885 with a common ancestor type need to be declared, with no inherited
28886 subprograms. Distinct representations can then be specified for the
28887 record types, and explicit conversion between the types can be used to
28888 effect a change in representation.
28889
28890 _Examples_
28891
28892 3
28893 Example of change of representation:
28894
28895 4
28896 -- Packed_Descriptor and Descriptor are two different types
28897 -- with identical characteristics, apart from their
28898 -- representation
28899
28900 5
28901 type Descriptor is
28902 record
28903 -- components of a descriptor
28904 end record;
28905
28906 6
28907 type Packed_Descriptor is new Descriptor;
28908
28909 7
28910 for Packed_Descriptor use
28911 record
28912 -- component clauses for some or for all components
28913 end record;
28914
28915 8
28916 -- Change of representation can now be accomplished by explicit type conversions:
28917
28918 9
28919 D : Descriptor;
28920 P : Packed_Descriptor;
28921
28922 10
28923 P := Packed_Descriptor(D); -- pack D
28924 D := Descriptor(P); -- unpack P
28925
28926 \1f
28927 File: arm2012.info, Node: 13.7, Next: 13.8, Prev: 13.6, Up: 13
28928
28929 13.7 The Package System
28930 =======================
28931
28932 1
28933 For each implementation there is a library package called System which
28934 includes the definitions of certain configuration-dependent
28935 characteristics.
28936
28937 _Static Semantics_
28938
28939 2
28940 The following language-defined library package exists:
28941
28942 3/2
28943 package System is
28944 pragma Pure(System);
28945
28946 4
28947 type Name is implementation-defined-enumeration-type;
28948 System_Name : constant Name := implementation-defined;
28949
28950 5
28951 -- System-Dependent Named Numbers:
28952
28953 6
28954 Min_Int : constant := root_integer'First;
28955 Max_Int : constant := root_integer'Last;
28956
28957 7
28958 Max_Binary_Modulus : constant := implementation-defined;
28959 Max_Nonbinary_Modulus : constant := implementation-defined;
28960
28961 8
28962 Max_Base_Digits : constant := root_real'Digits;
28963 Max_Digits : constant := implementation-defined;
28964
28965 9
28966 Max_Mantissa : constant := implementation-defined;
28967 Fine_Delta : constant := implementation-defined;
28968
28969 10
28970 Tick : constant := implementation-defined;
28971
28972 11
28973 -- Storage-related Declarations:
28974
28975 12
28976 type Address is implementation-defined;
28977 Null_Address : constant Address;
28978
28979 13
28980 Storage_Unit : constant := implementation-defined;
28981 Word_Size : constant := implementation-defined * Storage_Unit;
28982 Memory_Size : constant := implementation-defined;
28983
28984 14/3
28985 -- Address Comparison:
28986 function "<" (Left, Right : Address) return Boolean
28987 with Convention => Intrinsic;
28988 function "<="(Left, Right : Address) return Boolean
28989 with Convention => Intrinsic;
28990 function ">" (Left, Right : Address) return Boolean
28991 with Convention => Intrinsic;
28992 function ">="(Left, Right : Address) return Boolean
28993 with Convention => Intrinsic;
28994 function "=" (Left, Right : Address) return Boolean
28995 with Convention => Intrinsic;
28996 -- function "/=" (Left, Right : Address) return Boolean;
28997 -- "/=" is implicitly defined
28998
28999 15/2
29000 -- Other System-Dependent Declarations:
29001 type Bit_Order is (High_Order_First, Low_Order_First);
29002 Default_Bit_Order : constant Bit_Order := implementation-defined;
29003
29004 16
29005 -- Priority-related declarations (see *note D.1::):
29006 subtype Any_Priority is Integer range implementation-defined;
29007 subtype Priority is Any_Priority range Any_Priority'First ..
29008 implementation-defined;
29009 subtype Interrupt_Priority is Any_Priority range Priority'Last+1 ..
29010 Any_Priority'Last;
29011
29012 17
29013 Default_Priority : constant Priority :=
29014 (Priority'First + Priority'Last)/2;
29015
29016 18
29017 private
29018 ... -- not specified by the language
29019 end System;
29020
29021 19
29022 Name is an enumeration subtype. Values of type Name are the names of
29023 alternative machine configurations handled by the implementation.
29024 System_Name represents the current machine configuration.
29025
29026 20
29027 The named numbers Fine_Delta and Tick are of the type universal_real;
29028 the others are of the type universal_integer.
29029
29030 21
29031 The meanings of the named numbers are:
29032
29033 22
29034 Min_Int
29035 The smallest (most negative) value allowed for the
29036 expressions of a signed_integer_type_definition (*note
29037 3.5.4: S0042.).
29038
29039 23
29040 Max_Int
29041 The largest (most positive) value allowed for the
29042 expressions of a signed_integer_type_definition (*note
29043 3.5.4: S0042.).
29044
29045 24
29046 Max_Binary_Modulus
29047 A power of two such that it, and all lesser positive
29048 powers of two, are allowed as the modulus of a
29049 modular_type_definition.
29050
29051 25
29052 Max_Nonbinary_Modulus
29053 A value such that it, and all lesser positive integers,
29054 are allowed as the modulus of a modular_type_definition.
29055
29056 26
29057 Max_Base_Digits
29058 The largest value allowed for the requested decimal
29059 precision in a floating_point_definition (*note 3.5.7:
29060 S0045.).
29061
29062 27
29063 Max_Digits
29064 The largest value allowed for the requested decimal
29065 precision in a floating_point_definition (*note 3.5.7:
29066 S0045.) that has no real_range_specification (*note
29067 3.5.7: S0046.). Max_Digits is less than or equal to
29068 Max_Base_Digits.
29069
29070 28
29071 Max_Mantissa
29072 The largest possible number of binary digits in the
29073 mantissa of machine numbers of a user-defined ordinary
29074 fixed point type. (The mantissa is defined in *note
29075 Annex G::.)
29076
29077 29
29078 Fine_Delta
29079 The smallest delta allowed in an
29080 ordinary_fixed_point_definition that has the
29081 real_range_specification (*note 3.5.7: S0046.) range -1.0
29082 .. 1.0.
29083
29084 30
29085 Tick
29086 A period in seconds approximating the real time interval
29087 during which the value of Calendar.Clock remains
29088 constant.
29089
29090 31
29091 Storage_Unit
29092 The number of bits per storage element.
29093
29094 32
29095 Word_Size
29096 The number of bits per word.
29097
29098 33
29099 Memory_Size
29100 An implementation-defined value that is intended to
29101 reflect the memory size of the configuration in storage
29102 elements.
29103
29104 34/2
29105 Address is a definite, nonlimited type with preelaborable initialization
29106 (see *note 10.2.1::). Address represents machine addresses capable of
29107 addressing individual storage elements. Null_Address is an address that
29108 is distinct from the address of any object or program unit.
29109
29110 35/2
29111 Default_Bit_Order shall be a static constant. See *note 13.5.3:: for an
29112 explanation of Bit_Order and Default_Bit_Order.
29113
29114 _Implementation Permissions_
29115
29116 36/2
29117 An implementation may add additional implementation-defined declarations
29118 to package System and its children. However, it is usually better for
29119 the implementation to provide additional functionality via
29120 implementation-defined children of System.
29121
29122 _Implementation Advice_
29123
29124 37
29125 Address should be a private type.
29126
29127 NOTES
29128
29129 38
29130 17 There are also some language-defined child packages of System
29131 defined elsewhere.
29132
29133 * Menu:
29134
29135 * 13.7.1 :: The Package System.Storage_Elements
29136 * 13.7.2 :: The Package System.Address_To_Access_Conversions
29137
29138 \1f
29139 File: arm2012.info, Node: 13.7.1, Next: 13.7.2, Up: 13.7
29140
29141 13.7.1 The Package System.Storage_Elements
29142 ------------------------------------------
29143
29144 _Static Semantics_
29145
29146 1
29147 The following language-defined library package exists:
29148
29149 2/2
29150 package System.Storage_Elements is
29151 pragma Pure(Storage_Elements);
29152
29153 3
29154 type Storage_Offset is range implementation-defined;
29155
29156 4
29157 subtype Storage_Count is Storage_Offset range 0..Storage_Offset'Last;
29158
29159 5
29160 type Storage_Element is mod implementation-defined;
29161 for Storage_Element'Size use Storage_Unit;
29162 type Storage_Array is array
29163 (Storage_Offset range <>) of aliased Storage_Element;
29164 for Storage_Array'Component_Size use Storage_Unit;
29165
29166 6
29167 -- Address Arithmetic:
29168
29169 7/3
29170 function "+"(Left : Address; Right : Storage_Offset) return Address
29171 with Convention => Intrinsic;
29172 function "+"(Left : Storage_Offset; Right : Address) return Address
29173 with Convention => Intrinsic;
29174 function "-"(Left : Address; Right : Storage_Offset) return Address
29175 with Convention => Intrinsic;
29176 function "-"(Left, Right : Address) return Storage_Offset
29177 with Convention => Intrinsic;
29178
29179 8/3
29180 function "mod"(Left : Address; Right : Storage_Offset)
29181 return Storage_Offset
29182 with Convention => Intrinsic;
29183
29184 9
29185 -- Conversion to/from integers:
29186
29187 10/3
29188 type Integer_Address is implementation-defined;
29189 function To_Address(Value : Integer_Address) return Address
29190 with Convention => Intrinsic;
29191 function To_Integer(Value : Address) return Integer_Address
29192 with Convention => Intrinsic;
29193
29194 11/3
29195 end System.Storage_Elements;
29196
29197 12
29198 Storage_Element represents a storage element. Storage_Offset represents
29199 an offset in storage elements. Storage_Count represents a number of
29200 storage elements. Storage_Array represents a contiguous sequence of
29201 storage elements.
29202
29203 13
29204 Integer_Address is a (signed or modular) integer subtype. To_Address
29205 and To_Integer convert back and forth between this type and Address.
29206
29207 _Implementation Requirements_
29208
29209 14
29210 Storage_Offset'Last shall be greater than or equal to Integer'Last or
29211 the largest possible storage offset, whichever is smaller.
29212 Storage_Offset'First shall be <= (-Storage_Offset'Last).
29213
29214 Paragraph 15 was deleted.
29215
29216 _Implementation Advice_
29217
29218 16
29219 Operations in System and its children should reflect the target
29220 environment semantics as closely as is reasonable. For example, on most
29221 machines, it makes sense for address arithmetic to "wrap around."
29222 Operations that do not make sense should raise Program_Error.
29223
29224 \1f
29225 File: arm2012.info, Node: 13.7.2, Prev: 13.7.1, Up: 13.7
29226
29227 13.7.2 The Package System.Address_To_Access_Conversions
29228 -------------------------------------------------------
29229
29230 _Static Semantics_
29231
29232 1
29233 The following language-defined generic library package exists:
29234
29235 2
29236 generic
29237 type Object(<>) is limited private;
29238 package System.Address_To_Access_Conversions is
29239 pragma Preelaborate(Address_To_Access_Conversions);
29240
29241 3/3
29242 type Object_Pointer is access all Object;
29243 function To_Pointer(Value : Address) return Object_Pointer
29244 with Convention => Intrinsic;
29245 function To_Address(Value : Object_Pointer) return Address
29246 with Convention => Intrinsic;
29247
29248 4/3
29249 end System.Address_To_Access_Conversions;
29250
29251 5/2
29252 The To_Pointer and To_Address subprograms convert back and forth between
29253 values of types Object_Pointer and Address. To_Pointer(X'Address) is
29254 equal to X'Unchecked_Access for any X that allows Unchecked_Access.
29255 To_Pointer(Null_Address) returns null. For other addresses, the
29256 behavior is unspecified. To_Address(null) returns Null_Address.
29257 To_Address(Y), where Y /= null, returns Y.all'Address.
29258
29259 _Implementation Permissions_
29260
29261 6
29262 An implementation may place restrictions on instantiations of
29263 Address_To_Access_Conversions.
29264
29265 \1f
29266 File: arm2012.info, Node: 13.8, Next: 13.9, Prev: 13.7, Up: 13
29267
29268 13.8 Machine Code Insertions
29269 ============================
29270
29271 1
29272 A machine code insertion can be achieved by a call to a subprogram whose
29273 sequence_of_statements contains code_statements.
29274
29275 _Syntax_
29276
29277 2
29278 code_statement ::= qualified_expression;
29279
29280 3
29281 A code_statement is only allowed in the
29282 handled_sequence_of_statements (*note 11.2: S0265.) of a
29283 subprogram_body (*note 6.3: S0177.). If a subprogram_body (*note
29284 6.3: S0177.) contains any code_statement (*note 13.8: S0317.)s,
29285 then within this subprogram_body (*note 6.3: S0177.) the only
29286 allowed form of statement is a code_statement (*note 13.8: S0317.)
29287 (labeled or not), the only allowed declarative_item (*note 3.11:
29288 S0087.)s are use_clause (*note 8.4: S0196.)s, and no
29289 exception_handler (*note 11.2: S0266.) is allowed (comments and
29290 pragmas are allowed as usual).
29291
29292 _Name Resolution Rules_
29293
29294 4
29295 The qualified_expression is expected to be of any type.
29296
29297 _Legality Rules_
29298
29299 5
29300 The qualified_expression shall be of a type declared in package
29301 System.Machine_Code.
29302
29303 6
29304 A code_statement shall appear only within the scope of a with_clause
29305 that mentions package System.Machine_Code.
29306
29307 _Static Semantics_
29308
29309 7
29310 The contents of the library package System.Machine_Code (if provided)
29311 are implementation defined. The meaning of code_statements is
29312 implementation defined. Typically, each qualified_expression represents
29313 a machine instruction or assembly directive.
29314
29315 _Implementation Permissions_
29316
29317 8
29318 An implementation may place restrictions on code_statements. An
29319 implementation is not required to provide package System.Machine_Code.
29320
29321 NOTES
29322
29323 9
29324 18 An implementation may provide implementation-defined pragmas
29325 specifying register conventions and calling conventions.
29326
29327 10/2
29328 19 Machine code functions are exempt from the rule that a return
29329 statement is required. In fact, return statements are forbidden,
29330 since only code_statements are allowed.
29331
29332 11
29333 20 Intrinsic subprograms (see *note 6.3.1::, "*note 6.3.1::
29334 Conformance Rules") can also be used to achieve machine code
29335 insertions. Interface to assembly language can be achieved using
29336 the features in *note Annex B::, "*note Annex B:: Interface to
29337 Other Languages".
29338
29339 _Examples_
29340
29341 12
29342 Example of a code statement:
29343
29344 13/3
29345 M : Mask;
29346 procedure Set_Mask
29347 with Inline;
29348
29349 14
29350 procedure Set_Mask is
29351 use System.Machine_Code; -- assume "with System.Machine_Code;" appears somewhere above
29352 begin
29353 SI_Format'(Code => SSM, B => M'Base_Reg, D => M'Disp);
29354 -- Base_Reg and Disp are implementation-defined attributes
29355 end Set_Mask;
29356
29357 \1f
29358 File: arm2012.info, Node: 13.9, Next: 13.10, Prev: 13.8, Up: 13
29359
29360 13.9 Unchecked Type Conversions
29361 ===============================
29362
29363 1
29364 An unchecked type conversion can be achieved by a call to an instance of
29365 the generic function Unchecked_Conversion.
29366
29367 _Static Semantics_
29368
29369 2
29370 The following language-defined generic library function exists:
29371
29372 3/3
29373 generic
29374 type Source(<>) is limited private;
29375 type Target(<>) is limited private;
29376 function Ada.Unchecked_Conversion(S : Source) return Target
29377 with Convention => Intrinsic;
29378 pragma Pure(Ada.Unchecked_Conversion);
29379
29380 _Dynamic Semantics_
29381
29382 4
29383 The size of the formal parameter S in an instance of
29384 Unchecked_Conversion is that of its subtype. This is the actual subtype
29385 passed to Source, except when the actual is an unconstrained composite
29386 subtype, in which case the subtype is constrained by the bounds or
29387 discriminants of the value of the actual expression passed to S.
29388
29389 5
29390 If all of the following are true, the effect of an unchecked conversion
29391 is to return the value of an object of the target subtype whose
29392 representation is the same as that of the source object S:
29393
29394 6
29395 * S'Size = Target'Size.
29396
29397 7/3
29398 * S'Alignment is a multiple of Target'Alignment or Target'Alignment
29399 is zero.
29400
29401 8
29402 * The target subtype is not an unconstrained composite subtype.
29403
29404 9
29405 * S and the target subtype both have a contiguous representation.
29406
29407 10
29408 * The representation of S is a representation of an object of the
29409 target subtype.
29410
29411 11/2
29412 Otherwise, if the result type is scalar, the result of the function is
29413 implementation defined, and can have an invalid representation (see
29414 *note 13.9.1::). If the result type is nonscalar, the effect is
29415 implementation defined; in particular, the result can be abnormal (see
29416 *note 13.9.1::).
29417
29418 _Implementation Permissions_
29419
29420 12
29421 An implementation may return the result of an unchecked conversion by
29422 reference, if the Source type is not a by-copy type. In this case, the
29423 result of the unchecked conversion represents simply a different
29424 (read-only) view of the operand of the conversion.
29425
29426 13
29427 An implementation may place restrictions on Unchecked_Conversion.
29428
29429 _Implementation Advice_
29430
29431 14/2
29432 Since the Size of an array object generally does not include its bounds,
29433 the bounds should not be part of the converted data.
29434
29435 15
29436 The implementation should not generate unnecessary run-time checks to
29437 ensure that the representation of S is a representation of the target
29438 type. It should take advantage of the permission to return by reference
29439 when possible. Restrictions on unchecked conversions should be avoided
29440 unless required by the target environment.
29441
29442 16
29443 The recommended level of support for unchecked conversions is:
29444
29445 17/3
29446 * Unchecked conversions should be supported and should be reversible
29447 in the cases where this subclause defines the result. To enable
29448 meaningful use of unchecked conversion, a contiguous representation
29449 should be used for elementary subtypes, for statically constrained
29450 array subtypes whose component subtype is one of the subtypes
29451 described in this paragraph, and for record subtypes without
29452 discriminants whose component subtypes are described in this
29453 paragraph.
29454
29455 * Menu:
29456
29457 * 13.9.1 :: Data Validity
29458 * 13.9.2 :: The Valid Attribute
29459
29460 \1f
29461 File: arm2012.info, Node: 13.9.1, Next: 13.9.2, Up: 13.9
29462
29463 13.9.1 Data Validity
29464 --------------------
29465
29466 1
29467 Certain actions that can potentially lead to erroneous execution are not
29468 directly erroneous, but instead can cause objects to become abnormal.
29469 Subsequent uses of abnormal objects can be erroneous.
29470
29471 2
29472 A scalar object can have an invalid representation, which means that the
29473 object's representation does not represent any value of the object's
29474 subtype. The primary cause of invalid representations is uninitialized
29475 variables.
29476
29477 3
29478 Abnormal objects and invalid representations are explained in this
29479 subclause.
29480
29481 _Dynamic Semantics_
29482
29483 4
29484 When an object is first created, and any explicit or default
29485 initializations have been performed, the object and all of its parts are
29486 in the normal state. Subsequent operations generally leave them normal.
29487 However, an object or part of an object can become abnormal in the
29488 following ways:
29489
29490 5
29491 * An assignment to the object is disrupted due to an abort (see *note
29492 9.8::) or due to the failure of a language-defined check (see *note
29493 11.6::).
29494
29495 6/2
29496 * The object is not scalar, and is passed to an in out or out
29497 parameter of an imported procedure, the Read procedure of an
29498 instance of Sequential_IO, Direct_IO, or Storage_IO, or the stream
29499 attribute T'Read, if after return from the procedure the
29500 representation of the parameter does not represent a value of the
29501 parameter's subtype.
29502
29503 6.1/2
29504 * The object is the return object of a function call of a nonscalar
29505 type, and the function is an imported function, an instance of
29506 Unchecked_Conversion, or the stream attribute T'Input, if after
29507 return from the function the representation of the return object
29508 does not represent a value of the function's subtype.
29509
29510 6.2/2
29511 For an imported object, it is the programmer's responsibility to ensure
29512 that the object remains in a normal state.
29513
29514 7
29515 Whether or not an object actually becomes abnormal in these cases is not
29516 specified. An abnormal object becomes normal again upon successful
29517 completion of an assignment to the object as a whole.
29518
29519 _Erroneous Execution_
29520
29521 8
29522 It is erroneous to evaluate a primary that is a name denoting an
29523 abnormal object, or to evaluate a prefix that denotes an abnormal
29524 object.
29525
29526 _Bounded (Run-Time) Errors_
29527
29528 9
29529 If the representation of a scalar object does not represent a value of
29530 the object's subtype (perhaps because the object was not initialized),
29531 the object is said to have an invalid representation. It is a bounded
29532 error to evaluate the value of such an object. If the error is
29533 detected, either Constraint_Error or Program_Error is raised.
29534 Otherwise, execution continues using the invalid representation. The
29535 rules of the language outside this subclause assume that all objects
29536 have valid representations. The semantics of operations on invalid
29537 representations are as follows:
29538
29539 10
29540 * If the representation of the object represents a value of the
29541 object's type, the value of the type is used.
29542
29543 11
29544 * If the representation of the object does not represent a value of
29545 the object's type, the semantics of operations on such
29546 representations is implementation-defined, but does not by itself
29547 lead to erroneous or unpredictable execution, or to other objects
29548 becoming abnormal.
29549
29550 _Erroneous Execution_
29551
29552 12/3
29553 A call to an imported function or an instance of Unchecked_Conversion is
29554 erroneous if the result is scalar, the result object has an invalid
29555 representation, and the result is used other than as the expression of
29556 an assignment_statement or an object_declaration, as the object_name of
29557 an object_renaming_declaration, or as the prefix of a Valid attribute.
29558 If such a result object is used as the source of an assignment, and the
29559 assigned value is an invalid representation for the target of the
29560 assignment, then any use of the target object prior to a further
29561 assignment to the target object, other than as the prefix of a Valid
29562 attribute reference, is erroneous.
29563
29564 13/3
29565 The dereference of an access value is erroneous if it does not designate
29566 an object of an appropriate type or a subprogram with an appropriate
29567 profile, if it designates a nonexistent object, or if it is an
29568 access-to-variable value that designates a constant object and it did
29569 not originate from an attribute_reference applied to an aliased variable
29570 view of a controlled or immutably limited object. An access value whose
29571 dereference is erroneous can exist, for example, because of
29572 Unchecked_Deallocation, Unchecked_Access, or Unchecked_Conversion.
29573
29574 NOTES
29575
29576 14
29577 21 Objects can become abnormal due to other kinds of actions that
29578 directly update the object's representation; such actions are
29579 generally considered directly erroneous, however.
29580
29581 \1f
29582 File: arm2012.info, Node: 13.9.2, Prev: 13.9.1, Up: 13.9
29583
29584 13.9.2 The Valid Attribute
29585 --------------------------
29586
29587 1
29588 The Valid attribute can be used to check the validity of data produced
29589 by unchecked conversion, input, interface to foreign languages, and the
29590 like.
29591
29592 _Static Semantics_
29593
29594 2
29595 For a prefix X that denotes a scalar object (after any implicit
29596 dereference), the following attribute is defined:
29597
29598 3/3
29599 X'Valid
29600 Yields True if and only if the object denoted by X is
29601 normal, has a valid representation, and the predicate of
29602 the nominal subtype of X evaluates to True. The value of
29603 this attribute is of the predefined type Boolean.
29604
29605 NOTES
29606
29607 4
29608 22 Invalid data can be created in the following cases (not
29609 counting erroneous or unpredictable execution):
29610
29611 5
29612 * an uninitialized scalar object,
29613
29614 6
29615 * the result of an unchecked conversion,
29616
29617 7
29618 * input,
29619
29620 8
29621 * interface to another language (including machine code),
29622
29623 9
29624 * aborting an assignment,
29625
29626 10
29627 * disrupting an assignment due to the failure of a
29628 language-defined check (see *note 11.6::), and
29629
29630 11
29631 * use of an object whose Address has been specified.
29632
29633 12
29634 23 X'Valid is not considered to be a read of X; hence, it is not
29635 an error to check the validity of invalid data.
29636
29637 13/2
29638 24 The Valid attribute may be used to check the result of calling
29639 an instance of Unchecked_Conversion (or any other operation that
29640 can return invalid values). However, an exception handler should
29641 also be provided because implementations are permitted to raise
29642 Constraint_Error or Program_Error if they detect the use of an
29643 invalid representation (see *note 13.9.1::).
29644
29645 \1f
29646 File: arm2012.info, Node: 13.10, Next: 13.11, Prev: 13.9, Up: 13
29647
29648 13.10 Unchecked Access Value Creation
29649 =====================================
29650
29651 1
29652 The attribute Unchecked_Access is used to create access values in an
29653 unsafe manner -- the programmer is responsible for preventing "dangling
29654 references."
29655
29656 _Static Semantics_
29657
29658 2
29659 The following attribute is defined for a prefix X that denotes an
29660 aliased view of an object:
29661
29662 3
29663 X'Unchecked_Access
29664 All rules and semantics that apply to X'Access (see *note
29665 3.10.2::) apply also to X'Unchecked_Access, except that,
29666 for the purposes of accessibility rules and checks, it is
29667 as if X were declared immediately within a library
29668 package.
29669
29670 NOTES
29671
29672 4
29673 25 This attribute is provided to support the situation where a
29674 local object is to be inserted into a global linked data structure,
29675 when the programmer knows that it will always be removed from the
29676 data structure prior to exiting the object's scope. The Access
29677 attribute would be illegal in this case (see *note 3.10.2::, "*note
29678 3.10.2:: Operations of Access Types").
29679
29680 5
29681 26 There is no Unchecked_Access attribute for subprograms.
29682
29683 \1f
29684 File: arm2012.info, Node: 13.11, Next: 13.12, Prev: 13.10, Up: 13
29685
29686 13.11 Storage Management
29687 ========================
29688
29689 1
29690 Each access-to-object type has an associated storage pool. The storage
29691 allocated by an allocator comes from the pool; instances of
29692 Unchecked_Deallocation return storage to the pool. Several access types
29693 can share the same pool.
29694
29695 2/2
29696 A storage pool is a variable of a type in the class rooted at
29697 Root_Storage_Pool, which is an abstract limited controlled type. By
29698 default, the implementation chooses a standard storage pool for each
29699 access-to-object type. The user may define new pool types, and may
29700 override the choice of pool for an access-to-object type by specifying
29701 Storage_Pool for the type.
29702
29703 _Legality Rules_
29704
29705 3
29706 If Storage_Pool is specified for a given access type, Storage_Size shall
29707 not be specified for it.
29708
29709 _Static Semantics_
29710
29711 4
29712 The following language-defined library package exists:
29713
29714 5
29715 with Ada.Finalization;
29716 with System.Storage_Elements;
29717 package System.Storage_Pools is
29718 pragma Preelaborate(System.Storage_Pools);
29719
29720 6/2
29721 type Root_Storage_Pool is
29722 abstract new Ada.Finalization.Limited_Controlled with private;
29723 pragma Preelaborable_Initialization(Root_Storage_Pool);
29724
29725 7
29726 procedure Allocate(
29727 Pool : in out Root_Storage_Pool;
29728 Storage_Address : out Address;
29729 Size_In_Storage_Elements : in Storage_Elements.Storage_Count;
29730 Alignment : in Storage_Elements.Storage_Count) is abstract;
29731
29732 8
29733 procedure Deallocate(
29734 Pool : in out Root_Storage_Pool;
29735 Storage_Address : in Address;
29736 Size_In_Storage_Elements : in Storage_Elements.Storage_Count;
29737 Alignment : in Storage_Elements.Storage_Count) is abstract;
29738
29739 9
29740 function Storage_Size(Pool : Root_Storage_Pool)
29741 return Storage_Elements.Storage_Count is abstract;
29742
29743 10
29744 private
29745 ... -- not specified by the language
29746 end System.Storage_Pools;
29747
29748 11
29749 A storage pool type (or pool type) is a descendant of Root_Storage_Pool.
29750 The elements of a storage pool are the objects allocated in the pool by
29751 allocators.
29752
29753 12/2
29754 For every access-to-object subtype S, the following representation
29755 attributes are defined:
29756
29757 13
29758 S'Storage_Pool
29759 Denotes the storage pool of the type of S. The type of
29760 this attribute is Root_Storage_Pool'Class.
29761
29762 14
29763 S'Storage_Size
29764 Yields the result of calling
29765 Storage_Size(S'Storage_Pool), which is intended to be a
29766 measure of the number of storage elements reserved for
29767 the pool. The type of this attribute is
29768 universal_integer.
29769
29770 15
29771 Storage_Size or Storage_Pool may be specified for a nonderived
29772 access-to-object type via an attribute_definition_clause (*note 13.3:
29773 S0309.); the name in a Storage_Pool clause shall denote a variable.
29774
29775 16/3
29776 An allocator of a type T that does not support subpools allocates
29777 storage from T's storage pool. If the storage pool is a user-defined
29778 object, then the storage is allocated by calling Allocate as described
29779 below. Allocators for types that support subpools are described in
29780 *note 13.11.4::.
29781
29782 17
29783 If Storage_Pool is not specified for a type defined by an
29784 access_to_object_definition, then the implementation chooses a standard
29785 storage pool for it in an implementation-defined manner. In this case,
29786 the exception Storage_Error is raised by an allocator if there is not
29787 enough storage. It is implementation defined whether or not the
29788 implementation provides user-accessible names for the standard pool
29789 type(s).
29790
29791 18
29792 If Storage_Size is specified for an access type, then the Storage_Size
29793 of this pool is at least that requested, and the storage for the pool is
29794 reclaimed when the master containing the declaration of the access type
29795 is left. If the implementation cannot satisfy the request,
29796 Storage_Error is raised at the point of the attribute_definition_clause
29797 (*note 13.3: S0309.). If neither Storage_Pool nor Storage_Size are
29798 specified, then the meaning of Storage_Size is implementation defined.
29799
29800 19
29801 If Storage_Pool is specified for an access type, then the specified pool
29802 is used.
29803
29804 20
29805 The effect of calling Allocate and Deallocate for a standard storage
29806 pool directly (rather than implicitly via an allocator or an instance of
29807 Unchecked_Deallocation) is unspecified.
29808
29809 _Erroneous Execution_
29810
29811 21
29812 If Storage_Pool is specified for an access type, then if Allocate can
29813 satisfy the request, it should allocate a contiguous block of memory,
29814 and return the address of the first storage element in Storage_Address.
29815 The block should contain Size_In_Storage_Elements storage elements, and
29816 should be aligned according to Alignment. The allocated storage should
29817 not be used for any other purpose while the pool element remains in
29818 existence. If the request cannot be satisfied, then Allocate should
29819 propagate an exception (such as Storage_Error). If Allocate behaves in
29820 any other manner, then the program execution is erroneous.
29821
29822 _Implementation Requirements_
29823
29824 21.1/3
29825 The Allocate procedure of a user-defined storage pool object P may be
29826 called by the implementation only to allocate storage for a type T whose
29827 pool is P, only at the following points:
29828
29829 21.2/3
29830 * During the execution of an allocator of type T;
29831
29832 21.3/3
29833 * During the execution of a return statement for a function whose
29834 result is built-in-place in the result of an allocator of type T;
29835
29836 21.4/3
29837 * During the execution of an assignment operation with a target of an
29838 allocated object of type T with a part that has an unconstrained
29839 discriminated subtype with defaults.
29840
29841 21.5/3
29842 For each of the calls of Allocate described above, P (equivalent to
29843 T'Storage_Pool) is passed as the Pool parameter. The
29844 Size_In_Storage_Elements parameter indicates the number of storage
29845 elements to be allocated, and is no more than
29846 D'Max_Size_In_Storage_Elements, where D is the designated subtype of T.
29847 The Alignment parameter is a nonzero integral multiple of D'Alignment if
29848 D is a specific type, and otherwise is a nonzero integral multiple of
29849 the alignment of the specific type identified by the tag of the object
29850 being created; it is unspecified if there is no such value. The
29851 Alignment parameter is no more than D'Max_Alignment_For_Allocation. The
29852 result returned in the Storage_Address parameter is used as the address
29853 of the allocated storage, which is a contiguous block of memory of
29854 Size_In_Storage_Elements storage elements. Any exception propagated by
29855 Allocate is propagated by the construct that contained the call.
29856
29857 21.6/3
29858 The number of calls to Allocate needed to implement an allocator for any
29859 particular type is unspecified. The number of calls to Deallocate
29860 needed to implement an instance of Unchecked_Deallocation (see *note
29861 13.11.2::) for any particular object is the same as the number of
29862 Allocate calls for that object.
29863
29864 21.7/3
29865 The Deallocate procedure of a user-defined storage pool object P may be
29866 called by the implementation to deallocate storage for a type T whose
29867 pool is P only at the places when an Allocate call is allowed for P,
29868 during the execution of an instance of Unchecked_Deallocation for T, or
29869 as part of the finalization of the collection of T. For such a call of
29870 Deallocate, P (equivalent to T'Storage_Pool) is passed as the Pool
29871 parameter. The value of the Storage_Address parameter for a call to
29872 Deallocate is the value returned in the Storage_Address parameter of the
29873 corresponding successful call to Allocate. The values of the
29874 Size_In_Storage_Elements and Alignment parameters are the same values
29875 passed to the corresponding Allocate call. Any exception propagated by
29876 Deallocate is propagated by the construct that contained the call.
29877
29878 _Documentation Requirements_
29879
29880 22
29881 An implementation shall document the set of values that a user-defined
29882 Allocate procedure needs to accept for the Alignment parameter. An
29883 implementation shall document how the standard storage pool is chosen,
29884 and how storage is allocated by standard storage pools.
29885
29886 _Implementation Advice_
29887
29888 23
29889 An implementation should document any cases in which it dynamically
29890 allocates heap storage for a purpose other than the evaluation of an
29891 allocator.
29892
29893 24
29894 A default (implementation-provided) storage pool for an
29895 access-to-constant type should not have overhead to support deallocation
29896 of individual objects.
29897
29898 25/2
29899 The storage pool used for an allocator of an anonymous access type
29900 should be determined as follows:
29901
29902 25.1/2
29903 * If the allocator is defining a coextension (see *note 3.10.2::) of
29904 an object being created by an outer allocator, then the storage
29905 pool used for the outer allocator should also be used for the
29906 coextension;
29907
29908 25.2/2
29909 * For other access discriminants and access parameters, the storage
29910 pool should be created at the point of the allocator, and be
29911 reclaimed when the allocated object becomes inaccessible;
29912
29913 25.3/3
29914 * If the allocator defines the result of a function with an access
29915 result, the storage pool is determined as though the allocator were
29916 in place of the call of the function. If the call is the operand
29917 of a type conversion, the storage pool is that of the target access
29918 type of the conversion. If the call is itself defining the result
29919 of a function with an access result, this rule is applied
29920 recursively;
29921
29922 25.4/2
29923 * Otherwise, a default storage pool should be created at the point
29924 where the anonymous access type is elaborated; such a storage pool
29925 need not support deallocation of individual objects.
29926
29927 NOTES
29928
29929 26
29930 27 A user-defined storage pool type can be obtained by extending
29931 the Root_Storage_Pool type, and overriding the primitive
29932 subprograms Allocate, Deallocate, and Storage_Size. A user-defined
29933 storage pool can then be obtained by declaring an object of the
29934 type extension. The user can override Initialize and Finalize if
29935 there is any need for nontrivial initialization and finalization
29936 for a user-defined pool type. For example, Finalize might reclaim
29937 blocks of storage that are allocated separately from the pool
29938 object itself.
29939
29940 27
29941 28 The writer of the user-defined allocation and deallocation
29942 procedures, and users of allocators for the associated access type,
29943 are responsible for dealing with any interactions with tasking. In
29944 particular:
29945
29946 28
29947 * If the allocators are used in different tasks, they require
29948 mutual exclusion.
29949
29950 29
29951 * If they are used inside protected objects, they cannot block.
29952
29953 30
29954 * If they are used by interrupt handlers (see *note C.3::,
29955 "*note C.3:: Interrupt Support"), the mutual exclusion
29956 mechanism has to work properly in that context.
29957
29958 31
29959 29 The primitives Allocate, Deallocate, and Storage_Size are
29960 declared as abstract (see *note 3.9.3::), and therefore they have
29961 to be overridden when a new (nonabstract) storage pool type is
29962 declared.
29963
29964 _Examples_
29965
29966 32
29967 To associate an access type with a storage pool object, the user first
29968 declares a pool object of some type derived from Root_Storage_Pool.
29969 Then, the user defines its Storage_Pool attribute, as follows:
29970
29971 33
29972 Pool_Object : Some_Storage_Pool_Type;
29973
29974 34
29975 type T is access Designated;
29976 for T'Storage_Pool use Pool_Object;
29977
29978 35
29979 Another access type may be added to an existing storage pool, via:
29980
29981 36
29982 for T2'Storage_Pool use T'Storage_Pool;
29983
29984 37
29985 The semantics of this is implementation defined for a standard storage
29986 pool.
29987
29988 38/3
29989 As usual, a derivative of Root_Storage_Pool may define additional
29990 operations. For example, consider the Mark_Release_Pool_Type defined in
29991 *note 13.11.6::, that has two additional operations, Mark and Release,
29992 the following is a possible use:
29993
29994 39/3
29995 type Mark_Release_Pool_Type
29996 (Pool_Size : Storage_Elements.Storage_Count)
29997 is new Subpools.Root_Storage_Pool_With_Subpools with private;
29998 -- As defined in package MR_Pool, see *note 13.11.6::
29999
30000 40
30001 ...
30002
30003 41/3
30004 Our_Pool : Mark_Release_Pool_Type (Pool_Size => 2000);
30005 My_Mark : MR_Pool.Subpool_Handle; -- See *note 13.11.6::
30006
30007 42/3
30008 type Acc is access ...;
30009 for Acc'Storage_Pool use Our_Pool;
30010 ...
30011
30012 43/3
30013 My_Mark := Mark(Our_Pool);
30014 ... -- Allocate objects using "new (My_Mark) Designated(...)".
30015 Release(My_Mark); -- Finalize objects and reclaim storage.
30016
30017 * Menu:
30018
30019 * 13.11.1 :: Storage Allocation Attributes
30020 * 13.11.2 :: Unchecked Storage Deallocation
30021 * 13.11.3 :: Default Storage Pools
30022 * 13.11.4 :: Storage Subpools
30023 * 13.11.5 :: Subpool Reclamation
30024 * 13.11.6 :: Storage Subpool Example
30025
30026 \1f
30027 File: arm2012.info, Node: 13.11.1, Next: 13.11.2, Up: 13.11
30028
30029 13.11.1 Storage Allocation Attributes
30030 -------------------------------------
30031
30032 1/3
30033 The Max_Size_In_Storage_Elements and Max_Alignment_For_Allocation
30034 attributes may be useful in writing user-defined pool types.
30035
30036 _Static Semantics_
30037
30038 2/3
30039 For every subtype S, the following attributes are defined:
30040
30041 3/3
30042 S'Max_Size_In_Storage_Elements
30043 Denotes the maximum value for Size_In_Storage_Elements
30044 that could be requested by the implementation via
30045 Allocate for an access type whose designated subtype is
30046 S. The value of this attribute is of type
30047 universal_integer.
30048
30049 4/3
30050 S'Max_Alignment_For_Allocation
30051 Denotes the maximum value for Alignment that could be
30052 requested by the implementation via Allocate for an
30053 access type whose designated subtype is S. The value of
30054 this attribute is of type universal_integer.
30055
30056 5/3
30057 For a type with access discriminants, if the implementation allocates
30058 space for a coextension in the same pool as that of the object having
30059 the access discriminant, then these attributes account for any calls on
30060 Allocate that could be performed to provide space for such coextensions.
30061
30062 \1f
30063 File: arm2012.info, Node: 13.11.2, Next: 13.11.3, Prev: 13.11.1, Up: 13.11
30064
30065 13.11.2 Unchecked Storage Deallocation
30066 --------------------------------------
30067
30068 1
30069 Unchecked storage deallocation of an object designated by a value of an
30070 access type is achieved by a call to an instance of the generic
30071 procedure Unchecked_Deallocation.
30072
30073 _Static Semantics_
30074
30075 2
30076 The following language-defined generic library procedure exists:
30077
30078 3/3
30079 generic
30080 type Object(<>) is limited private;
30081 type Name is access Object;
30082 procedure Ada.Unchecked_Deallocation(X : in out Name)
30083 with Convention => Intrinsic;
30084 pragma Preelaborate(Ada.Unchecked_Deallocation);
30085
30086 _Legality Rules_
30087
30088 3.1/3
30089 A call on an instance of Unchecked_Deallocation is illegal if the actual
30090 access type of the instance is a type for which the Storage_Size has
30091 been specified by a static expression with value zero or is defined by
30092 the language to be zero. In addition to the places where Legality Rules
30093 normally apply (see *note 12.3::), this rule applies also in the private
30094 part of an instance of a generic unit.
30095
30096 _Dynamic Semantics_
30097
30098 4
30099 Given an instance of Unchecked_Deallocation declared as follows:
30100
30101 5
30102 procedure Free is
30103 new Ada.Unchecked_Deallocation(
30104 object_subtype_name, access_to_variable_subtype_name);
30105
30106 6
30107 Procedure Free has the following effect:
30108
30109 7
30110 1. After executing Free(X), the value of X is null.
30111
30112 8
30113 2. Free(X), when X is already equal to null, has no effect.
30114
30115 9/3
30116 3. Free(X), when X is not equal to null first performs
30117 finalization of the object designated by X (and any coextensions of
30118 the object -- see *note 3.10.2::), as described in *note 7.6.1::.
30119 It then deallocates the storage occupied by the object designated
30120 by X (and any coextensions). If the storage pool is a user-defined
30121 object, then the storage is deallocated by calling Deallocate as
30122 described in *note 13.11::. There is one exception: if the object
30123 being freed contains tasks, the object might not be deallocated.
30124
30125 10/2
30126 After Free(X), the object designated by X, and any subcomponents (and
30127 coextensions) thereof, no longer exist; their storage can be reused for
30128 other purposes.
30129
30130 _Bounded (Run-Time) Errors_
30131
30132 11
30133 It is a bounded error to free a discriminated, unterminated task object.
30134 The possible consequences are:
30135
30136 12
30137 * No exception is raised.
30138
30139 13
30140 * Program_Error or Tasking_Error is raised at the point of the
30141 deallocation.
30142
30143 14
30144 * Program_Error or Tasking_Error is raised in the task the next time
30145 it references any of the discriminants.
30146
30147 15
30148 In the first two cases, the storage for the discriminants (and for any
30149 enclosing object if it is designated by an access discriminant of the
30150 task) is not reclaimed prior to task termination.
30151
30152 _Erroneous Execution_
30153
30154 16/3
30155 Evaluating a name that denotes a nonexistent object, or a protected
30156 subprogram or subprogram renaming whose associated object (if any) is
30157 nonexistent, is erroneous. The execution of a call to an instance of
30158 Unchecked_Deallocation is erroneous if the object was created other than
30159 by an allocator for an access type whose pool is Name'Storage_Pool.
30160
30161 _Implementation Advice_
30162
30163 17
30164 For a standard storage pool, Free should actually reclaim the storage.
30165
30166 17.1/3
30167 A call on an instance of Unchecked_Deallocation with a nonnull access
30168 value should raise Program_Error if the actual access type of the
30169 instance is a type for which the Storage_Size has been specified to be
30170 zero or is defined by the language to be zero.
30171
30172 NOTES
30173
30174 18
30175 30 The rules here that refer to Free apply to any instance of
30176 Unchecked_Deallocation.
30177
30178 19
30179 31 Unchecked_Deallocation cannot be instantiated for an
30180 access-to-constant type. This is implied by the rules of *note
30181 12.5.4::.
30182
30183 \1f
30184 File: arm2012.info, Node: 13.11.3, Next: 13.11.4, Prev: 13.11.2, Up: 13.11
30185
30186 13.11.3 Default Storage Pools
30187 -----------------------------
30188
30189 1/3
30190 This paragraph was deleted.
30191
30192 _Syntax_
30193
30194 2/3
30195 The form of a pragma Default_Storage_Pool is as follows:
30196
30197 3/3
30198 pragma Default_Storage_Pool (storage_pool_indicator);
30199
30200 3.1/3
30201 storage_pool_indicator ::= storage_pool_name | null
30202
30203 3.2/3
30204 A pragma Default_Storage_Pool is allowed immediately within the
30205 visible part of a package_specification, immediately within a
30206 declarative_part, or as a configuration pragma.
30207
30208 _Name Resolution Rules_
30209
30210 3.3/3
30211 The storage_pool_name is expected to be of type Root_Storage_Pool'Class.
30212
30213 _Legality Rules_
30214
30215 4/3
30216 The storage_pool_name shall denote a variable.
30217
30218 4.1/3
30219 If the pragma is used as a configuration pragma, the
30220 storage_pool_indicator shall be null, and it defines the default pool to
30221 be null within all applicable compilation units (see *note 10.1.5::),
30222 except within the immediate scope of another pragma
30223 Default_Storage_Pool. Otherwise, the pragma occurs immediately within a
30224 sequence of declarations, and it defines the default pool within the
30225 immediate scope of the pragma to be either null or the pool denoted by
30226 the storage_pool_name, except within the immediate scope of a later
30227 pragma Default_Storage_Pool. Thus, an inner pragma overrides an outer
30228 one.
30229
30230 4.2/3
30231 A pragma Default_Storage_Pool shall not be used as a configuration
30232 pragma that applies to a compilation unit that is within the immediate
30233 scope of another pragma Default_Storage_Pool.
30234
30235 _Static Semantics_
30236
30237 5/3
30238 The language-defined aspect Default_Storage_Pool may be specified for a
30239 generic instance; it defines the default pool for access types within an
30240 instance. The expected type for the Default_Storage_Pool aspect is
30241 Root_Storage_Pool'Class. The aspect_definition must be a name that
30242 denotes a variable. This aspect overrides any Default_Storage_Pool
30243 pragma that might apply to the generic unit; if the aspect is not
30244 specified, the default pool of the instance is that defined for the
30245 generic unit.
30246
30247 6/3
30248 For nonderived access types declared in places where the default pool is
30249 defined by the pragma or aspect, their Storage_Pool or Storage_Size
30250 attribute is determined as follows, unless Storage_Pool or Storage_Size
30251 is specified for the type:
30252
30253 6.1/3
30254 * If the default pool is null, the Storage_Size attribute is defined
30255 by the language to be zero. Therefore, an allocator for such a
30256 type is illegal.
30257
30258 6.2/3
30259 * If the default pool is nonnull, the Storage_Pool attribute is that
30260 pool.
30261
30262 6.3/3
30263 Otherwise, there is no default pool; the standard storage pool is used
30264 for the type as described in *note 13.11::.
30265
30266 7/3
30267 This paragraph was deleted.
30268
30269 _Implementation Permissions_
30270
30271 8/3
30272 An object created by an allocator that is passed as the actual parameter
30273 to an access parameter may be allocated on the stack, and automatically
30274 reclaimed, regardless of the default pool..
30275
30276 NOTES
30277
30278 9/3
30279 32 Default_Storage_Pool may be used with restrictions
30280 No_Coextensions and No_Access_Parameter_Allocators (see *note
30281 H.4::) to ensure that all allocators use the default pool.
30282
30283 \1f
30284 File: arm2012.info, Node: 13.11.4, Next: 13.11.5, Prev: 13.11.3, Up: 13.11
30285
30286 13.11.4 Storage Subpools
30287 ------------------------
30288
30289 1/3
30290 This subclause defines a package to support the partitioning of a
30291 storage pool into subpools. A subpool may be specified as the default
30292 to be used for allocation from the associated storage pool, or a
30293 particular subpool may be specified as part of an allocator (see *note
30294 4.8::).
30295
30296 _Static Semantics_
30297
30298 2/3
30299 The following language-defined library package exists:
30300
30301 3/3
30302 package System.Storage_Pools.Subpools is
30303 pragma Preelaborate (Subpools);
30304
30305 4/3
30306 type Root_Storage_Pool_With_Subpools is
30307 abstract new Root_Storage_Pool with private;
30308
30309 5/3
30310 type Root_Subpool is abstract tagged limited private;
30311
30312 6/3
30313 type Subpool_Handle is access all Root_Subpool'Class;
30314 for Subpool_Handle'Storage_Size use 0;
30315
30316 7/3
30317 function Create_Subpool (Pool : in out Root_Storage_Pool_With_Subpools)
30318 return not null Subpool_Handle is abstract;
30319
30320 8/3
30321 -- The following operations are intended for pool implementers:
30322
30323 9/3
30324 function Pool_of_Subpool (Subpool : not null Subpool_Handle)
30325 return access Root_Storage_Pool_With_Subpools'Class;
30326
30327 10/3
30328 procedure Set_Pool_of_Subpool (
30329 Subpool : in not null Subpool_Handle;
30330 To : in out Root_Storage_Pool_With_Subpools'Class);
30331
30332 11/3
30333 procedure Allocate_From_Subpool (
30334 Pool : in out Root_Storage_Pool_With_Subpools;
30335 Storage_Address : out Address;
30336 Size_In_Storage_Elements : in Storage_Elements.Storage_Count;
30337 Alignment : in Storage_Elements.Storage_Count;
30338 Subpool : in not null Subpool_Handle) is abstract
30339 with Pre'Class => Pool_of_Subpool(Subpool) = Pool'Access;
30340
30341 12/3
30342 procedure Deallocate_Subpool (
30343 Pool : in out Root_Storage_Pool_With_Subpools;
30344 Subpool : in out Subpool_Handle) is abstract
30345 with Pre'Class => Pool_of_Subpool(Subpool) = Pool'Access;
30346
30347 13/3
30348 function Default_Subpool_for_Pool (
30349 Pool : in out Root_Storage_Pool_With_Subpools)
30350 return not null Subpool_Handle;
30351
30352 14/3
30353 overriding
30354 procedure Allocate (
30355 Pool : in out Root_Storage_Pool_With_Subpools;
30356 Storage_Address : out Address;
30357 Size_In_Storage_Elements : in Storage_Elements.Storage_Count;
30358 Alignment : in Storage_Elements.Storage_Count);
30359
30360 15/3
30361 overriding
30362 procedure Deallocate (
30363 Pool : in out Root_Storage_Pool_With_Subpools;
30364 Storage_Address : in Address;
30365 Size_In_Storage_Elements : in Storage_Elements.Storage_Count;
30366 Alignment : in Storage_Elements.Storage_Count) is null;
30367
30368 16/3
30369 overriding
30370 function Storage_Size (Pool : Root_Storage_Pool_With_Subpools)
30371 return Storage_Elements.Storage_Count
30372 is (Storage_Elements.Storage_Count'Last);
30373
30374 17/3
30375 private
30376 ... -- not specified by the language
30377 end System.Storage_Pools.Subpools;
30378
30379 18/3
30380 A subpool is a separately reclaimable portion of a storage pool,
30381 identified by an object of type Subpool_Handle (a subpool handle). A
30382 subpool handle also identifies the enclosing storage pool, a storage
30383 pool that supports subpools, which is a storage pool whose type is
30384 descended from Root_Storage_Pool_With_Subpools. A subpool is created by
30385 calling Create_Subpool or a similar constructor; the constructor returns
30386 the subpool handle.
30387
30388 19/3
30389 A subpool object is an object of a type descended from Root_Subpool.
30390 Typically, subpool objects are managed by the containing storage pool;
30391 only the handles need be exposed to clients of the storage pool.
30392 Subpool objects are designated by subpool handles, and are the run-time
30393 representation of a subpool.
30394
30395 20/3
30396 Each subpool belongs to a single storage pool (which will always be a
30397 pool that supports subpools). An access to the pool that a subpool
30398 belongs to can be obtained by calling Pool_of_Subpool with the subpool
30399 handle. Set_Pool_of_Subpool causes the subpool of the subpool handle to
30400 belong to the given pool; this is intended to be called from subpool
30401 constructors like Create_Subpool. Set_Pool_of_Subpool propagates
30402 Program_Error if the subpool already belongs to a pool.
30403
30404 21/3
30405 When an allocator for a type whose storage pool supports subpools is
30406 evaluated, a call is made on Allocate_From_Subpool passing in a
30407 Subpool_Handle, in addition to the parameters as defined for calls on
30408 Allocate (see *note 13.11::). The subpool designated by the
30409 subpool_handle_name is used, if specified in an allocator. Otherwise,
30410 Default_Subpool_for_Pool of the Pool is used to provide a subpool
30411 handle. All requirements on the Allocate procedure also apply to
30412 Allocate_from_Subpool.
30413
30414 _Legality Rules_
30415
30416 22/3
30417 If a storage pool that supports subpools is specified as the
30418 Storage_Pool for an access type, the access type is called a subpool
30419 access type. A subpool access type shall be a pool-specific access
30420 type.
30421
30422 23/3
30423 The accessibility level of a subpool access type shall not be statically
30424 deeper than that of the storage pool object. If the specified storage
30425 pool object is a storage pool that supports subpools, then the name that
30426 denotes the object shall not denote part of a formal parameter, nor
30427 shall it denote part of a dereference of a value of a non-library-level
30428 general access type. In addition to the places where Legality Rules
30429 normally apply (see *note 12.3::), these rules also apply in the private
30430 part of an instance of a generic unit.
30431
30432 _Dynamic Semantics_
30433
30434 24/3
30435 When an access type with a specified storage pool is frozen (see *note
30436 13.14::), if the tag of the storage pool object identifies a storage
30437 pool that supports subpools, the following checks are made:
30438
30439 25/3
30440 * the name used to specify the storage pool object does not denote
30441 part of a formal parameter nor part of a dereference of a value of
30442 a non-library-level general access type; and
30443
30444 26/3
30445 * the accessibility level of the access type is not deeper than that
30446 of the storage pool object.
30447
30448 27/3
30449 Program_Error is raised if either of these checks fail.
30450
30451 28/3
30452 A call to Subpools.Allocate(P, Addr, Size, Align) does the following:
30453
30454 29/3
30455 Allocate_From_Subpool
30456 (Root_Storage_Pool_With_Subpools'Class(P),
30457 Addr, Size, Align,
30458 Subpool => Default_Subpool_for_Pool
30459 (Root_Storage_Pool_With_Subpools'Class(P)));
30460
30461 30/3
30462 An allocator that allocates in a subpool raises Program_Error if the
30463 allocated object has task parts.
30464
30465 31/3
30466 Unless overridden, Default_Subpool_for_Pool propagates Program_Error.
30467
30468 _Implementation Permissions_
30469
30470 32/3
30471 When an allocator for a type whose storage pool is of type
30472 Root_Storage_Pool'Class is evaluated, but supports subpools, the
30473 implementation may call Allocate rather than Allocate_From_Subpool.
30474 This will have the same effect, so long as Allocate has not been
30475 overridden.
30476
30477 NOTES
30478
30479 33/3
30480 33 A user-defined storage pool type that supports subpools can be
30481 implemented by extending the Root_Storage_Pool_With_Subpools type,
30482 and overriding the primitive subprograms Create_Subpool,
30483 Allocate_From_Subpool, and Deallocate_Subpool. Create_Subpool
30484 should call Set_Pool_Of_Subpool before returning the subpool
30485 handle. To make use of such a pool, a user would declare an object
30486 of the type extension, use it to define the Storage_Pool attribute
30487 of one or more access types, and then call Create_Subpool to obtain
30488 subpool handles associated with the pool.
30489
30490 34/3
30491 34 A user-defined storage pool type that supports subpools may
30492 define additional subpool constructors similar to Create_Subpool
30493 (these typically will have additional parameters).
30494
30495 35/3
30496 35 The pool implementor should override Default_Subpool_For_Pool
30497 if the pool is to support a default subpool for the pool. The
30498 implementor can override Deallocate if individual object
30499 reclamation is to be supported, and can override Storage_Size if
30500 there is some limit on the total size of the storage pool. The
30501 implementor can override Initialize and Finalize if there is any
30502 need for nontrivial initialization and finalization for the pool as
30503 a whole. For example, Finalize might reclaim blocks of storage
30504 that are allocated over and above the space occupied by the pool
30505 object itself. The pool implementor may extend the Root_Subpool
30506 type as necessary to carry additional information with each subpool
30507 provided by Create_Subpool.
30508
30509 \1f
30510 File: arm2012.info, Node: 13.11.5, Next: 13.11.6, Prev: 13.11.4, Up: 13.11
30511
30512 13.11.5 Subpool Reclamation
30513 ---------------------------
30514
30515 1/3
30516 A subpool may be explicitly deallocated using
30517 Unchecked_Deallocate_Subpool.
30518
30519 _Static Semantics_
30520
30521 2/3
30522 The following language-defined library procedure exists:
30523
30524 3/3
30525 with System.Storage_Pools.Subpools;
30526 procedure Ada.Unchecked_Deallocate_Subpool
30527 (Subpool : in out System.Storage_Pools.Subpools.Subpool_Handle);
30528
30529 4/3
30530 If Subpool is null, a call on Unchecked_Deallocate_Subpool has no
30531 effect. Otherwise, the subpool is finalized, and Subpool is set to
30532 null.
30533
30534 5/3
30535 Finalization of a subpool has the following effects:
30536
30537 6/3
30538 * The subpool no longer belongs to any pool;
30539
30540 7/3
30541 * Any of the objects allocated from the subpool that still exist are
30542 finalized in an arbitrary order;
30543
30544 8/3
30545 * The following dispatching call is then made:
30546
30547 9/3
30548 Deallocate_Subpool(Pool_of_Subpool(Subpool).all, Subpool);
30549
30550 10/3
30551 Finalization of a Root_Storage_Pool_With_Subpools object finalizes all
30552 subpools that belong to that pool that have not yet been finalized.
30553
30554 \1f
30555 File: arm2012.info, Node: 13.11.6, Prev: 13.11.5, Up: 13.11
30556
30557 13.11.6 Storage Subpool Example
30558 -------------------------------
30559
30560 _Examples_
30561
30562 1/3
30563 The following example is a simple but complete implementation of the
30564 classic Mark/Release pool using subpools:
30565
30566 2/3
30567 with System.Storage_Pools.Subpools;
30568 with System.Storage_Elements;
30569 with Ada.Unchecked_Deallocate_Subpool;
30570 package MR_Pool is
30571
30572 3/3
30573 use System.Storage_Pools;
30574 -- For uses of Subpools.
30575 use System.Storage_Elements;
30576 -- For uses of Storage_Count and Storage_Array.
30577
30578 4/3
30579 -- Mark and Release work in a stack fashion, and allocations are not allowed
30580 -- from a subpool other than the one at the top of the stack. This is also
30581 -- the default pool.
30582
30583 5/3
30584 subtype Subpool_Handle is Subpools.Subpool_Handle;
30585
30586 6/3
30587 type Mark_Release_Pool_Type (Pool_Size : Storage_Count) is new
30588 Subpools.Root_Storage_Pool_With_Subpools with private;
30589
30590 7/3
30591 function Mark (Pool : in out Mark_Release_Pool_Type)
30592 return not null Subpool_Handle;
30593
30594 8/3
30595 procedure Release (Subpool : in out Subpool_Handle) renames
30596 Ada.Unchecked_Deallocate_Subpool;
30597
30598 9/3
30599 private
30600
30601 10/3
30602 type MR_Subpool is new Subpools.Root_Subpool with record
30603 Start : Storage_Count;
30604 end record;
30605 subtype Subpool_Indexes is Positive range 1 .. 10;
30606 type Subpool_Array is array (Subpool_Indexes) of aliased MR_Subpool;
30607
30608 11/3
30609 type Mark_Release_Pool_Type (Pool_Size : Storage_Count) is new
30610 Subpools.Root_Storage_Pool_With_Subpools with record
30611 Storage : Storage_Array (0 .. Pool_Size-1);
30612 Next_Allocation : Storage_Count := 0;
30613 Markers : Subpool_Array;
30614 Current_Pool : Subpool_Indexes := 1;
30615 end record;
30616
30617 12/3
30618 overriding
30619 function Create_Subpool (Pool : in out Mark_Release_Pool_Type)
30620 return not null Subpool_Handle;
30621
30622 13/3
30623 function Mark (Pool : in out Mark_Release_Pool_Type)
30624 return not null Subpool_Handle renames Create_Subpool;
30625
30626 14/3
30627 overriding
30628 procedure Allocate_From_Subpool (
30629 Pool : in out Mark_Release_Pool_Type;
30630 Storage_Address : out System.Address;
30631 Size_In_Storage_Elements : in Storage_Count;
30632 Alignment : in Storage_Count;
30633 Subpool : not null Subpool_Handle);
30634
30635 15/3
30636 overriding
30637 procedure Deallocate_Subpool (
30638 Pool : in out Mark_Release_Pool_Type;
30639 Subpool : in out Subpool_Handle);
30640
30641 16/3
30642 overriding
30643 function Default_Subpool_for_Pool (Pool : in out Mark_Release_Pool_Type)
30644 return not null Subpool_Handle;
30645
30646 17/3
30647 overriding
30648 procedure Initialize (Pool : in out Mark_Release_Pool_Type);
30649
30650 18/3
30651 -- We don't need Finalize.
30652
30653 19/3
30654 end MR_Pool;
30655
30656 20/3
30657 package body MR_Pool is
30658
30659 21/3
30660 use type Subpool_Handle;
30661
30662 22/3
30663 procedure Initialize (Pool : in out Mark_Release_Pool_Type) is
30664 -- Initialize the first default subpool.
30665 begin
30666 Pool.Markers(1).Start := 1;
30667 Subpools.Set_Pool_of_Subpool
30668 (Pool.Markers(1)'Unchecked_Access, Pool);
30669 end Initialize;
30670
30671 23/3
30672 function Create_Subpool (Pool : in out Mark_Release_Pool_Type)
30673 return not null Subpool_Handle is
30674 -- Mark the current allocation location.
30675 begin
30676 if Pool.Current_Pool = Subpool_Indexes'Last then
30677 raise Storage_Error; -- No more subpools.
30678 end if;
30679 Pool.Current_Pool := Pool.Current_Pool + 1; -- Move to the next subpool
30680
30681 24/3
30682 return Result : constant not null Subpool_Handle :=
30683 Pool.Markers(Pool.Current_Pool)'Unchecked_Access
30684 do
30685 Pool.Markers(Pool.Current_Pool).Start := Pool.Next_Allocation;
30686 Subpools.Set_Pool_of_Subpool (Result, Pool);
30687 end return;
30688 end Create_Subpool;
30689
30690 25/3
30691 procedure Deallocate_Subpool (
30692 Pool : in out Mark_Release_Pool_Type;
30693 Subpool : in out Subpool_Handle) is
30694 begin
30695 if Subpool /= Pool.Markers(Pool.Current_Pool)'Unchecked_Access then
30696 raise Program_Error; -- Only the last marked subpool can be released.
30697 end if;
30698 if Pool.Current_Pool /= 1 then
30699 Pool.Next_Allocation := Pool.Markers(Pool.Current_Pool).Start;
30700 Pool.Current_Pool := Pool.Current_Pool - 1; -- Move to the previous subpool
30701 else -- Reinitialize the default subpool:
30702 Pool.Next_Allocation := 1;
30703 Subpools.Set_Pool_of_Subpool
30704 (Pool.Markers(1)'Unchecked_Access, Pool);
30705 end if;
30706 end Deallocate_Subpool;
30707
30708 26/3
30709 function Default_Subpool_for_Pool (Pool : in out Mark_Release_Pool_Type)
30710 return not null Subpool_Handle is
30711 begin
30712 return Pool.Markers(Pool.Current_Pool)'Unchecked_Access;
30713 end Default_Subpool_for_Pool;
30714
30715 27/3
30716 procedure Allocate_From_Subpool (
30717 Pool : in out Mark_Release_Pool_Type;
30718 Storage_Address : out System.Address;
30719 Size_In_Storage_Elements : in Storage_Count;
30720 Alignment : in Storage_Count;
30721 Subpool : not null Subpool_Handle) is
30722 begin
30723 if Subpool /= Pool.Markers(Pool.Current_Pool)'Unchecked_Access then
30724 raise Program_Error; -- Only the last marked subpool can be used for allocations.
30725 end if;
30726
30727 28/3
30728 -- Correct the alignment if necessary:
30729 Pool.Next_Allocation := Pool.Next_Allocation +
30730 ((-Pool.Next_Allocation) mod Alignment);
30731 if Pool.Next_Allocation + Size_In_Storage_Elements >
30732 Pool.Pool_Size then
30733 raise Storage_Error; -- Out of space.
30734 end if;
30735 Storage_Address := Pool.Storage (Pool.Next_Allocation)'Address;
30736 Pool.Next_Allocation :=
30737 Pool.Next_Allocation + Size_In_Storage_Elements;
30738 end Allocate_From_Subpool;
30739
30740 29/3
30741 end MR_Pool;
30742
30743 \1f
30744 File: arm2012.info, Node: 13.12, Next: 13.13, Prev: 13.11, Up: 13
30745
30746 13.12 Pragma Restrictions and Pragma Profile
30747 ============================================
30748
30749 1/3
30750 A pragma Restrictions expresses the user's intent to abide by certain
30751 restrictions. A pragma Profile expresses the user's intent to abide by
30752 a set of Restrictions or other specified run-time policies. These may
30753 facilitate the construction of simpler run-time environments.
30754
30755 _Syntax_
30756
30757 2
30758 The form of a pragma Restrictions is as follows:
30759
30760 3
30761 pragma Restrictions(restriction{, restriction});
30762
30763 4/2
30764 restriction ::= restriction_identifier
30765 | restriction_parameter_identifier =>
30766 restriction_parameter_argument
30767
30768 4.1/2
30769 restriction_parameter_argument ::= name | expression
30770
30771 _Name Resolution Rules_
30772
30773 5
30774 Unless otherwise specified for a particular restriction, the expression
30775 is expected to be of any integer type.
30776
30777 _Legality Rules_
30778
30779 6
30780 Unless otherwise specified for a particular restriction, the expression
30781 shall be static, and its value shall be nonnegative.
30782
30783 Paragraph 7 was deleted.
30784
30785 _Post-Compilation Rules_
30786
30787 8/3
30788 A pragma Restrictions is a configuration pragma. If a pragma
30789 Restrictions applies to any compilation unit included in the partition,
30790 this may impose either (or both) of two kinds of requirements, as
30791 specified for the particular restriction:
30792
30793 8.1/3
30794 * A restriction may impose requirements on some or all of the units
30795 comprising the partition. Unless otherwise specified for a
30796 particular restriction, such a requirement applies to all of the
30797 units comprising the partition and is enforced via a
30798 post-compilation check.
30799
30800 8.2/3
30801 * A restriction may impose requirements on the run-time behavior of
30802 the program, as indicated by the specification of run-time behavior
30803 associated with a violation of the requirement.
30804
30805 8.3/1
30806 For the purpose of checking whether a partition contains constructs that
30807 violate any restriction (unless specified otherwise for a particular
30808 restriction):
30809
30810 8.4/1
30811 * Generic instances are logically expanded at the point of
30812 instantiation;
30813
30814 8.5/1
30815 * If an object of a type is declared or allocated and not explicitly
30816 initialized, then all expressions appearing in the definition for
30817 the type and any of its ancestors are presumed to be used;
30818
30819 8.6/1
30820 * A default_expression for a formal parameter or a generic formal
30821 object is considered to be used if and only if the corresponding
30822 actual parameter is not provided in a given call or instantiation.
30823
30824 _Implementation Permissions_
30825
30826 8.7/3
30827 An implementation may provide implementation-defined restrictions; the
30828 identifier for an implementation-defined restriction shall differ from
30829 those of the language-defined restrictions.
30830
30831 9
30832 An implementation may place limitations on the values of the expression
30833 that are supported, and limitations on the supported combinations of
30834 restrictions. The consequences of violating such limitations are
30835 implementation defined.
30836
30837 9.1/1
30838 An implementation is permitted to omit restriction checks for code that
30839 is recognized at compile time to be unreachable and for which no code is
30840 generated.
30841
30842 9.2/1
30843 Whenever enforcement of a restriction is not required prior to
30844 execution, an implementation may nevertheless enforce the restriction
30845 prior to execution of a partition to which the restriction applies,
30846 provided that every execution of the partition would violate the
30847 restriction.
30848
30849 _Syntax_
30850
30851 10/3
30852 The form of a pragma Profile is as follows:
30853
30854 11/3
30855 pragma Profile (profile_identifier {, profile_
30856 pragma_argument_association});
30857
30858 _Legality Rules_
30859
30860 12/3
30861 The profile_identifier shall be the name of a usage profile. The
30862 semantics of any profile_pragma_argument_association (*note 2.8:
30863 S0020.)s are defined by the usage profile specified by the
30864 profile_identifier.
30865
30866 _Static Semantics_
30867
30868 13/3
30869 A profile is equivalent to the set of configuration pragmas that is
30870 defined for each usage profile.
30871
30872 _Post-Compilation Rules_
30873
30874 14/3
30875 A pragma Profile is a configuration pragma. There may be more than one
30876 pragma Profile for a partition.
30877
30878 _Implementation Permissions_
30879
30880 15/3
30881 An implementation may provide implementation-defined usage profiles; the
30882 identifier for an implementation-defined usage profile shall differ from
30883 those of the language-defined usage profiles.
30884
30885 NOTES
30886
30887 16/2
30888 36 Restrictions intended to facilitate the construction of
30889 efficient tasking run-time systems are defined in *note D.7::.
30890 Restrictions intended for use when constructing high integrity
30891 systems are defined in *note H.4::.
30892
30893 17
30894 37 An implementation has to enforce the restrictions in cases
30895 where enforcement is required, even if it chooses not to take
30896 advantage of the restrictions in terms of efficiency.
30897
30898 * Menu:
30899
30900 * 13.12.1 :: Language-Defined Restrictions and Profiles
30901
30902 \1f
30903 File: arm2012.info, Node: 13.12.1, Up: 13.12
30904
30905 13.12.1 Language-Defined Restrictions and Profiles
30906 --------------------------------------------------
30907
30908 _Static Semantics_
30909
30910 1/2
30911 The following restriction_identifiers are language defined (additional
30912 restrictions are defined in the Specialized Needs Annexes):
30913
30914 1.1/3
30915 No_Implementation_Aspect_Specifications
30916 There are no implementation-defined aspects specified by
30917 an aspect_specification. This restriction applies only
30918 to the current compilation or environment, not the entire
30919 partition.
30920
30921 2/2
30922 No_Implementation_Attributes
30923 There are no implementation-defined attributes. This
30924 restriction applies only to the current compilation or
30925 environment, not the entire partition.
30926
30927 2.1/3
30928 No_Implementation_Identifiers
30929 There are no usage names that denote declarations with
30930 implementation-defined identifiers that occur within
30931 language-defined packages or instances of
30932 language-defined generic packages. Such identifiers can
30933 arise as follows:
30934
30935 2.2/3
30936 * The following language-defined packages and generic
30937 packages allow implementation-defined identifiers:
30938
30939 2.3/3
30940 * package System (see *note 13.7::);
30941
30942 2.4/3
30943 * package Standard (see *note A.1::);
30944
30945 2.5/3
30946 * package Ada.Command_Line (see *note
30947 A.15::);
30948
30949 2.6/3
30950 * package Interfaces.C (see *note B.3::);
30951
30952 2.7/3
30953 * package Interfaces.C.Strings (see *note
30954 B.3.1::);
30955
30956 2.8/3
30957 * package Interfaces.C.Pointers (see *note
30958 B.3.2::);
30959
30960 2.9/3
30961 * package Interfaces.COBOL (see *note
30962 B.4::);
30963
30964 2.10/3
30965 * package Interfaces.Fortran (see *note
30966 B.5::);
30967
30968 2.11/3
30969 * The following language-defined packages contain only
30970 implementation-defined identifiers:
30971
30972 2.12/3
30973 * package System.Machine_Code (see *note
30974 13.8::);
30975
30976 2.13/3
30977 * package Ada.Directories.Information (see
30978 *note A.16::);
30979
30980 2.14/3
30981 * nested Implementation packages of the
30982 Queue containers (see *note A.18.28::-31);
30983
30984 2.15/3
30985 * package Interfaces (see *note B.2::);
30986
30987 2.16/3
30988 * package Ada.Interrupts.Names (see *note
30989 C.3.2::).
30990
30991 2.17/3
30992 For package Standard, Standard.Long_Integer and
30993 Standard.Long_Float are considered language-defined
30994 identifiers, but identifiers such as
30995 Standard.Short_Short_Integer are considered
30996 implementation-defined.
30997
30998 2.18/3
30999 This restriction applies only to the current compilation
31000 or environment, not the entire partition.
31001
31002 3/2
31003 No_Implementation_Pragmas
31004 There are no implementation-defined pragmas or pragma
31005 arguments. This restriction applies only to the current
31006 compilation or environment, not the entire partition.
31007
31008 3.1/3
31009 No_Implementation_Units
31010 There is no mention in the context_clause of any
31011 implementation-defined descendants of packages Ada,
31012 Interfaces, or System. This restriction applies only to
31013 the current compilation or environment, not the entire
31014 partition.
31015
31016 4/3
31017 No_Obsolescent_Features
31018 There is no use of language features defined in Annex J.
31019 It is implementation defined whether uses of the
31020 renamings of *note J.1:: and of the pragmas of *note
31021 J.15:: are detected by this restriction. This
31022 restriction applies only to the current compilation or
31023 environment, not the entire partition.
31024
31025 5/3
31026 The following restriction_parameter_identifiers are language defined:
31027
31028 6/2
31029 No_Dependence
31030 Specifies a library unit on which there are no semantic
31031 dependences.
31032
31033 6.1/3
31034 No_Specification_of_Aspect
31035 Identifies an aspect for which no aspect_specification,
31036 attribute_definition_clause, or pragma is given.
31037
31038 6.2/3
31039 No_Use_Of_Attribute
31040 Identifies an attribute for which no attribute_reference
31041 or attribute_definition_clause is given.
31042
31043 6.3/3
31044 No_Use_Of_Pragma
31045 Identifies a pragma which is not to be used.
31046
31047 _Legality Rules_
31048
31049 7/2
31050 The restriction_parameter_argument of a No_Dependence restriction shall
31051 be a name; the name shall have the form of a full expanded name of a
31052 library unit, but need not denote a unit present in the environment.
31053
31054 7.1/3
31055 The restriction_parameter_argument of a No_Specification_of_Aspect
31056 restriction shall be an identifier; this is an identifier specific to a
31057 pragma (see *note 2.8::) and does not denote any declaration.
31058
31059 7.2/3
31060 The restriction_parameter_argument of a No_Use_Of_Attribute restriction
31061 shall be an identifier or one of the reserved words Access, Delta,
31062 Digits, Mod, or Range; this is an identifier specific to a pragma.
31063
31064 7.3/3
31065 The restriction_parameter_argument of a No_Use_Of_Pragma restriction
31066 shall be an identifier or the reserved word Interface; this is an
31067 identifier specific to a pragma.
31068
31069 _Post-Compilation Rules_
31070
31071 8/3
31072 No compilation unit included in the partition shall depend semantically
31073 on the library unit identified by the name of a No_Dependence
31074 restriction.
31075
31076 _Static Semantics_
31077
31078 9/3
31079 The following profile_identifier is language defined:
31080
31081 10/3
31082 No_Implementation_Extensions
31083
31084 11/3
31085 For usage profile No_Implementation_Extensions, there shall be no
31086 profile_pragma_argument_associations.
31087
31088 12/3
31089 The No_Implementation_Extensions usage profile is equivalent to the
31090 following restrictions:
31091
31092 13/3
31093 No_Implementation_Aspect_Specifications,
31094 No_Implementation_Attributes,
31095 No_Implementation_Identifiers,
31096 No_Implementation_Pragmas,
31097 No_Implementation_Units.
31098
31099 \1f
31100 File: arm2012.info, Node: 13.13, Next: 13.14, Prev: 13.12, Up: 13
31101
31102 13.13 Streams
31103 =============
31104
31105 1
31106 A stream is a sequence of elements comprising values from possibly
31107 different types and allowing sequential access to these values. A
31108 stream type is a type in the class whose root type is
31109 Streams.Root_Stream_Type. A stream type may be implemented in various
31110 ways, such as an external sequential file, an internal buffer, or a
31111 network channel.
31112
31113 * Menu:
31114
31115 * 13.13.1 :: The Package Streams
31116 * 13.13.2 :: Stream-Oriented Attributes
31117
31118 \1f
31119 File: arm2012.info, Node: 13.13.1, Next: 13.13.2, Up: 13.13
31120
31121 13.13.1 The Package Streams
31122 ---------------------------
31123
31124 _Static Semantics_
31125
31126 1
31127 The abstract type Root_Stream_Type is the root type of the class of
31128 stream types. The types in this class represent different kinds of
31129 streams. A new stream type is defined by extending the root type (or
31130 some other stream type), overriding the Read and Write operations, and
31131 optionally defining additional primitive subprograms, according to the
31132 requirements of the particular kind of stream. The predefined
31133 stream-oriented attributes like T'Read and T'Write make dispatching
31134 calls on the Read and Write procedures of the Root_Stream_Type.
31135 (User-defined T'Read and T'Write attributes can also make such calls, or
31136 can call the Read and Write attributes of other types.)
31137
31138 2
31139 package Ada.Streams is
31140 pragma Pure(Streams);
31141
31142 3/2
31143 type Root_Stream_Type is abstract tagged limited private;
31144 pragma Preelaborable_Initialization(Root_Stream_Type);
31145
31146 4/1
31147 type Stream_Element is mod implementation-defined;
31148 type Stream_Element_Offset is range implementation-defined;
31149 subtype Stream_Element_Count is
31150 Stream_Element_Offset range 0..Stream_Element_Offset'Last;
31151 type Stream_Element_Array is
31152 array(Stream_Element_Offset range <>) of aliased Stream_Element;
31153
31154 5
31155 procedure Read(
31156 Stream : in out Root_Stream_Type;
31157 Item : out Stream_Element_Array;
31158 Last : out Stream_Element_Offset) is abstract;
31159
31160 6
31161 procedure Write(
31162 Stream : in out Root_Stream_Type;
31163 Item : in Stream_Element_Array) is abstract;
31164
31165 7
31166 private
31167 ... -- not specified by the language
31168 end Ada.Streams;
31169
31170 8/2
31171 The Read operation transfers stream elements from the specified stream
31172 to fill the array Item. Elements are transferred until Item'Length
31173 elements have been transferred, or until the end of the stream is
31174 reached. If any elements are transferred, the index of the last stream
31175 element transferred is returned in Last. Otherwise, Item'First - 1 is
31176 returned in Last. Last is less than Item'Last only if the end of the
31177 stream is reached.
31178
31179 9
31180 The Write operation appends Item to the specified stream.
31181
31182 _Implementation Permissions_
31183
31184 9.1/1
31185 If Stream_Element'Size is not a multiple of System.Storage_Unit, then
31186 the components of Stream_Element_Array need not be aliased.
31187
31188 NOTES
31189
31190 10
31191 38 See *note A.12.1::, "*note A.12.1:: The Package
31192 Streams.Stream_IO" for an example of extending type
31193 Root_Stream_Type.
31194
31195 11/2
31196 39 If the end of stream has been reached, and Item'First is
31197 Stream_Element_Offset'First, Read will raise Constraint_Error.
31198
31199 \1f
31200 File: arm2012.info, Node: 13.13.2, Prev: 13.13.1, Up: 13.13
31201
31202 13.13.2 Stream-Oriented Attributes
31203 ----------------------------------
31204
31205 1/3
31206 The type-related operational attributes Write, Read, Output, and Input
31207 convert values to a stream of elements and reconstruct values from a
31208 stream.
31209
31210 _Static Semantics_
31211
31212 1.1/2
31213 For every subtype S of an elementary type T, the following
31214 representation attribute is defined:
31215
31216 1.2/3
31217 S'Stream_Size
31218 Denotes the number of bits read from or written to a
31219 stream by the default implementations of S'Read and
31220 S'Write. Hence, the number of stream elements required
31221 per item of elementary type T is:
31222
31223 1.3/2
31224 T'Stream_Size / Ada.Streams.Stream_Element'Size
31225
31226 1.4/2
31227 The value of this attribute is of type universal_integer
31228 and is a multiple of Stream_Element'Size.
31229
31230 1.5/2
31231 Stream_Size may be specified for first subtypes via an
31232 attribute_definition_clause; the expression of such a
31233 clause shall be static, nonnegative, and a multiple of
31234 Stream_Element'Size.
31235
31236 _Implementation Advice_
31237
31238 1.6/2
31239 If not specified, the value of Stream_Size for an elementary type should
31240 be the number of bits that corresponds to the minimum number of stream
31241 elements required by the first subtype of the type, rounded up to the
31242 nearest factor or multiple of the word size that is also a multiple of
31243 the stream element size.
31244
31245 1.7/2
31246 The recommended level of support for the Stream_Size attribute is:
31247
31248 1.8/2
31249 * A Stream_Size clause should be supported for a discrete or fixed
31250 point type T if the specified Stream_Size is a multiple of
31251 Stream_Element'Size and is no less than the size of the first
31252 subtype of T, and no greater than the size of the largest type of
31253 the same elementary class (signed integer, modular integer,
31254 enumeration, ordinary fixed point, or decimal fixed point).
31255
31256 _Static Semantics_
31257
31258 2
31259 For every subtype S of a specific type T, the following attributes are
31260 defined.
31261
31262 3
31263 S'Write
31264 S'Write denotes a procedure with the following
31265 specification:
31266
31267 4/2
31268 procedure S'Write(
31269 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31270 Item : in T)
31271
31272 5
31273 S'Write writes the value of Item to Stream.
31274
31275 6
31276 S'Read
31277 S'Read denotes a procedure with the following
31278 specification:
31279
31280 7/2
31281 procedure S'Read(
31282 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31283 Item : out T)
31284
31285 8
31286 S'Read reads the value of Item from Stream.
31287
31288 8.1/3
31289 For an untagged derived type, the Write (resp. Read) attribute is
31290 inherited according to the rules given in *note 13.1:: if the attribute
31291 is specified and available for the parent type at the point where T is
31292 declared. For a tagged derived type, these attributes are not
31293 inherited, but rather the default implementations are used.
31294
31295 8.2/2
31296 The default implementations of the Write and Read attributes, where
31297 available, execute as follows:
31298
31299 9/3
31300 For elementary types, Read reads (and Write writes) the number of stream
31301 elements implied by the Stream_Size for the type T; the representation
31302 of those stream elements is implementation defined. For composite
31303 types, the Write or Read attribute for each component is called in
31304 canonical order, which is last dimension varying fastest for an array
31305 (unless the convention of the array is Fortran, in which case it is
31306 first dimension varying fastest), and positional aggregate order for a
31307 record. Bounds are not included in the stream if T is an array type.
31308 If T is a discriminated type, discriminants are included only if they
31309 have defaults. If T is a tagged type, the tag is not included. For
31310 type extensions, the Write or Read attribute for the parent type is
31311 called, followed by the Write or Read attribute of each component of the
31312 extension part, in canonical order. For a limited type extension, if
31313 the attribute of the parent type or any progenitor type of T is
31314 available anywhere within the immediate scope of T, and the attribute of
31315 the parent type or the type of any of the extension components is not
31316 available at the freezing point of T, then the attribute of T shall be
31317 directly specified.
31318
31319 9.1/3
31320 If T is a discriminated type and its discriminants have defaults, then
31321 S'Read first reads the discriminants from the stream without modifying
31322 Item. S'Read then creates an object of type T constrained by these
31323 discriminants. The value of this object is then converted to the
31324 subtype of Item and is assigned to Item. Finally, the Read attribute
31325 for each nondiscriminant component of Item is called in canonical order
31326 as described above. Normal default initialization and finalization take
31327 place for the created object.
31328
31329 9.2/3
31330 Constraint_Error is raised by the predefined Write attribute if the
31331 value of the elementary item is outside the range of values
31332 representable using Stream_Size bits. For a signed integer type, an
31333 enumeration type, or a fixed point type, the range is unsigned only if
31334 the integer code for the lower bound of the first subtype is
31335 nonnegative, and a (symmetric) signed range that covers all values of
31336 the first subtype would require more than Stream_Size bits; otherwise,
31337 the range is signed.
31338
31339 10
31340 For every subtype S'Class of a class-wide type T'Class:
31341
31342 11
31343 S'Class'Write
31344 S'Class'Write denotes a procedure with the following
31345 specification:
31346
31347 12/2
31348 procedure S'Class'Write(
31349 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31350 Item : in T'Class)
31351
31352 13
31353 Dispatches to the subprogram denoted by the Write
31354 attribute of the specific type identified by the tag of
31355 Item.
31356
31357 14
31358 S'Class'Read
31359 S'Class'Read denotes a procedure with the following
31360 specification:
31361
31362 15/2
31363 procedure S'Class'Read(
31364 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31365 Item : out T'Class)
31366
31367 16
31368 Dispatches to the subprogram denoted by the Read
31369 attribute of the specific type identified by the tag of
31370 Item.
31371
31372 Paragraph 17 was deleted.
31373
31374 _Static Semantics_
31375
31376 18
31377 For every subtype S of a specific type T, the following attributes are
31378 defined.
31379
31380 19
31381 S'Output
31382 S'Output denotes a procedure with the following
31383 specification:
31384
31385 20/2
31386 procedure S'Output(
31387 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31388 Item : in T)
31389
31390 21
31391 S'Output writes the value of Item to Stream, including
31392 any bounds or discriminants.
31393
31394 22
31395 S'Input
31396 S'Input denotes a function with the following
31397 specification:
31398
31399 23/2
31400 function S'Input(
31401 Stream : not null access Ada.Streams.Root_Stream_Type'Class)
31402 return T
31403
31404 24
31405 S'Input reads and returns one value from Stream, using
31406 any bounds or discriminants written by a corresponding
31407 S'Output to determine how much to read.
31408
31409 25/3
31410 For an untagged derived type, the Output (resp. Input) attribute is
31411 inherited according to the rules given in *note 13.1:: if the attribute
31412 is specified and available for the parent type at the point where T is
31413 declared. For a tagged derived type, these attributes are not
31414 inherited, but rather the default implementations are used.
31415
31416 25.1/2
31417 The default implementations of the Output and Input attributes, where
31418 available, execute as follows:
31419
31420 26/3
31421 * If T is an array type, S'Output first writes the bounds, and
31422 S'Input first reads the bounds. If T has discriminants without
31423 defaults, S'Output first writes the discriminants (using the Write
31424 attribute of the discriminant type for each), and S'Input first
31425 reads the discriminants (using the Read attribute of the
31426 discriminant type for each).
31427
31428 27/3
31429 * S'Output then calls S'Write to write the value of Item to the
31430 stream. S'Input then creates an object of type T, with the bounds
31431 or (when without defaults) the discriminants, if any, taken from
31432 the stream, passes it to S'Read, and returns the value of the
31433 object. If T has discriminants, then this object is unconstrained
31434 if and only the discriminants have defaults. Normal default
31435 initialization and finalization take place for this object (see
31436 *note 3.3.1::, *note 7.6::, and *note 7.6.1::).
31437
31438 27.1/2
31439 If T is an abstract type, then S'Input is an abstract function.
31440
31441 28
31442 For every subtype S'Class of a class-wide type T'Class:
31443
31444 29
31445 S'Class'Output
31446 S'Class'Output denotes a procedure with the following
31447 specification:
31448
31449 30/2
31450 procedure S'Class'Output(
31451 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31452 Item : in T'Class)
31453
31454 31/2
31455 First writes the external tag of Item to Stream (by
31456 calling String'Output(Stream,
31457 Tags.External_Tag(Item'Tag)) -- see *note 3.9::) and then
31458 dispatches to the subprogram denoted by the Output
31459 attribute of the specific type identified by the tag.
31460 Tag_Error is raised if the tag of Item identifies a type
31461 declared at an accessibility level deeper than that of S.
31462
31463 32
31464 S'Class'Input
31465 S'Class'Input denotes a function with the following
31466 specification:
31467
31468 33/2
31469 function S'Class'Input(
31470 Stream : not null access Ada.Streams.Root_Stream_Type'Class)
31471 return T'Class
31472
31473 34/3
31474 First reads the external tag from Stream and determines
31475 the corresponding internal tag (by calling
31476 Tags.Descendant_Tag(String'Input(Stream), S'Tag) which
31477 might raise Tag_Error -- see *note 3.9::) and then
31478 dispatches to the subprogram denoted by the Input
31479 attribute of the specific type identified by the internal
31480 tag; returns that result. If the specific type
31481 identified by the internal tag is abstract,
31482 Constraint_Error is raised.
31483
31484 35/3
31485 In the default implementation of Read and Input for a composite type,
31486 for each scalar component that is a discriminant or that has an implicit
31487 initial value, a check is made that the value returned by Read for the
31488 component belongs to its subtype. Constraint_Error is raised if this
31489 check fails. For other scalar components, no check is made. For each
31490 component that is of an access type, if the implementation can detect
31491 that the value returned by Read for the component is not a value of its
31492 subtype, Constraint_Error is raised. If the value is not a value of its
31493 subtype and this error is not detected, the component has an abnormal
31494 value, and erroneous execution can result (see *note 13.9.1::). In the
31495 default implementation of Read for a composite type with defaulted
31496 discriminants, if the actual parameter of Read is constrained, a check
31497 is made that the discriminants read from the stream are equal to those
31498 of the actual parameter. Constraint_Error is raised if this check
31499 fails.
31500
31501 36/2
31502 It is unspecified at which point and in which order these checks are
31503 performed. In particular, if Constraint_Error is raised due to the
31504 failure of one of these checks, it is unspecified how many stream
31505 elements have been read from the stream.
31506
31507 37/1
31508 In the default implementation of Read and Input for a type, End_Error is
31509 raised if the end of the stream is reached before the reading of a value
31510 of the type is completed.
31511
31512 38/3
31513 The stream-oriented attributes may be specified for any type via an
31514 attribute_definition_clause. The subprogram name given in such a clause
31515 shall statically denote a subprogram that is not an abstract subprogram.
31516 Furthermore, if a stream-oriented attribute is specified for an
31517 interface type by an attribute_definition_clause, the subprogram name
31518 given in the clause shall statically denote a null procedure.
31519
31520 39/2
31521 A stream-oriented attribute for a subtype of a specific type T is
31522 available at places where one of the following conditions is true:
31523
31524 40/2
31525 * T is nonlimited.
31526
31527 41/2
31528 * The attribute_designator is Read (resp. Write) and T is a limited
31529 record extension, and the attribute Read (resp. Write) is
31530 available for the parent type of T and for the types of all of the
31531 extension components.
31532
31533 42/2
31534 * T is a limited untagged derived type, and the attribute was
31535 inherited for the type.
31536
31537 43/2
31538 * The attribute_designator is Input (resp. Output), and T is a
31539 limited type, and the attribute Read (resp. Write) is available
31540 for T.
31541
31542 44/2
31543 * The attribute has been specified via an
31544 attribute_definition_clause, and the attribute_definition_clause is
31545 visible.
31546
31547 45/2
31548 A stream-oriented attribute for a subtype of a class-wide type T'Class
31549 is available at places where one of the following conditions is true:
31550
31551 46/2
31552 * T is nonlimited;
31553
31554 47/2
31555 * the attribute has been specified via an
31556 attribute_definition_clause, and the attribute_definition_clause is
31557 visible; or
31558
31559 48/2
31560 * the corresponding attribute of T is available, provided that if T
31561 has a partial view, the corresponding attribute is available at the
31562 end of the visible part where T is declared.
31563
31564 49/2
31565 An attribute_reference for one of the stream-oriented attributes is
31566 illegal unless the attribute is available at the place of the
31567 attribute_reference. Furthermore, an attribute_reference for T'Input is
31568 illegal if T is an abstract type.
31569
31570 50/3
31571 In the parameter_and_result_profiles for the default implementations of
31572 the stream-oriented attributes, the subtype of the Item parameter is the
31573 base subtype of T if T is a scalar type, and the first subtype
31574 otherwise. The same rule applies to the result of the Input attribute.
31575
31576 51/3
31577 For an attribute_definition_clause specifying one of these attributes,
31578 the subtype of the Item parameter shall be the first subtype or the base
31579 subtype if scalar, and the first subtype if not scalar. The same rule
31580 applies to the result of the Input function.
31581
31582 52/3
31583 A type is said to support external streaming if Read and Write
31584 attributes are provided for sending values of such a type between active
31585 partitions, with Write marshalling the representation, and Read
31586 unmarshalling the representation. A limited type supports external
31587 streaming only if it has available Read and Write attributes. A type
31588 with a part that is of a nonremote access type supports external
31589 streaming only if that access type or the type of some part that
31590 includes the access type component, has Read and Write attributes that
31591 have been specified via an attribute_definition_clause, and that
31592 attribute_definition_clause is visible. An anonymous access type does
31593 not support external streaming. All other types (including remote
31594 access types, see *note E.2.2::) support external streaming.
31595
31596 _Erroneous Execution_
31597
31598 53/2
31599 If the internal tag returned by Descendant_Tag to T'Class'Input
31600 identifies a type that is not library-level and whose tag has not been
31601 created, or does not exist in the partition at the time of the call,
31602 execution is erroneous.
31603
31604 _Implementation Requirements_
31605
31606 54/1
31607 For every subtype S of a language-defined nonlimited specific type T,
31608 the output generated by S'Output or S'Write shall be readable by S'Input
31609 or S'Read, respectively. This rule applies across partitions if the
31610 implementation conforms to the Distributed Systems Annex.
31611
31612 55/3
31613 If Constraint_Error is raised during a call to Read because of failure
31614 of one the above checks, the implementation shall ensure that the
31615 discriminants of the actual parameter of Read are not modified.
31616
31617 _Implementation Permissions_
31618
31619 56/3
31620 The number of calls performed by the predefined implementation of the
31621 stream-oriented attributes on the Read and Write operations of the
31622 stream type is unspecified. An implementation may take advantage of
31623 this permission to perform internal buffering. However, all the calls
31624 on the Read and Write operations of the stream type needed to implement
31625 an explicit invocation of a stream-oriented attribute shall take place
31626 before this invocation returns. An explicit invocation is one appearing
31627 explicitly in the program text, possibly through a generic instantiation
31628 (see *note 12.3::).
31629
31630 56.1/3
31631 If T is a discriminated type and its discriminants have defaults, then
31632 in two cases an execution of the default implementation of S'Read is not
31633 required to create an anonymous object of type T: If the discriminant
31634 values that are read in are equal to the corresponding discriminant
31635 values of Item, then no object of type T need be created and Item may be
31636 used instead. If they are not equal and Item is a constrained variable,
31637 then Constraint_Error may be raised at that point, before any further
31638 values are read from the stream and before the object of type T is
31639 created.
31640
31641 56.2/3
31642 A default implementation of S'Input that calls the default
31643 implementation of S'Read may create a constrained anonymous object with
31644 discriminants that match those in the stream.
31645
31646 NOTES
31647
31648 57
31649 40 For a definite subtype S of a type T, only T'Write and T'Read
31650 are needed to pass an arbitrary value of the subtype through a
31651 stream. For an indefinite subtype S of a type T, T'Output and
31652 T'Input will normally be needed, since T'Write and T'Read do not
31653 pass bounds, discriminants, or tags.
31654
31655 58
31656 41 User-specified attributes of S'Class are not inherited by other
31657 class-wide types descended from S.
31658
31659 _Examples_
31660
31661 59
31662 Example of user-defined Write attribute:
31663
31664 60/2
31665 procedure My_Write(
31666 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
31667 Item : My_Integer'Base);
31668 for My_Integer'Write use My_Write;
31669
31670 \1f
31671 File: arm2012.info, Node: 13.14, Prev: 13.13, Up: 13
31672
31673 13.14 Freezing Rules
31674 ====================
31675
31676 1/3
31677 This subclause defines a place in the program text where each declared
31678 entity becomes "frozen." A use of an entity, such as a reference to it
31679 by name, or (for a type) an expression of the type, causes freezing of
31680 the entity in some contexts, as described below. The Legality Rules
31681 forbid certain kinds of uses of an entity in the region of text where it
31682 is frozen.
31683
31684 2
31685 The freezing of an entity occurs at one or more places (freezing points)
31686 in the program text where the representation for the entity has to be
31687 fully determined. Each entity is frozen from its first freezing point
31688 to the end of the program text (given the ordering of compilation units
31689 defined in *note 10.1.4::).
31690
31691 2.1/3
31692 This subclause also defines a place in the program text where the
31693 profile of each declared callable entity becomes frozen. A use of a
31694 callable entity causes freezing of its profile in some contexts, as
31695 described below. At the place where the profile of a callable entity
31696 becomes frozen, the entity itself becomes frozen.
31697
31698 3/3
31699 The end of a declarative_part, protected_body, or a declaration of a
31700 library package or generic library package, causes freezing of each
31701 entity and profile declared within it, except for incomplete types. A
31702 noninstance body other than a renames-as-body causes freezing of each
31703 entity and profile declared before it within the same declarative_part
31704 that is not an incomplete type; it only causes freezing of an incomplete
31705 type if the body is within the immediate scope of the incomplete type.
31706
31707 4/1
31708 A construct that (explicitly or implicitly) references an entity can
31709 cause the freezing of the entity, as defined by subsequent paragraphs.
31710 At the place where a construct causes freezing, each name, expression,
31711 implicit_dereference, or range within the construct causes freezing:
31712
31713 5/3
31714 * The occurrence of a generic_instantiation causes freezing, except
31715 that a name which is a generic actual parameter whose corresponding
31716 generic formal parameter is a formal incomplete type (see *note
31717 12.5.1::) does not cause freezing. In addition, if a parameter of
31718 the instantiation is defaulted, the default_expression or
31719 default_name for that parameter causes freezing.
31720
31721 6
31722 * The occurrence of an object_declaration that has no corresponding
31723 completion causes freezing.
31724
31725 7
31726 * The declaration of a record extension causes freezing of the parent
31727 subtype.
31728
31729 7.1/2
31730 * The declaration of a record extension, interface type, task unit,
31731 or protected unit causes freezing of any progenitor types specified
31732 in the declaration.
31733
31734 7.2/3
31735 * At the freezing point of the entity associated with an
31736 aspect_specification, any expressions or names within the
31737 aspect_specification cause freezing. Any static expressions within
31738 an aspect_specification also cause freezing at the end of the
31739 immediately enclosing declaration list.
31740
31741 8/3
31742 A static expression (other than within an aspect_specification) causes
31743 freezing where it occurs. An object name or nonstatic expression causes
31744 freezing where it occurs, unless the name or expression is part of a
31745 default_expression, a default_name, the expression of an expression
31746 function, an aspect_specification, or a per-object expression of a
31747 component's constraint, in which case, the freezing occurs later as part
31748 of another construct or at the freezing point of an associated entity.
31749
31750 8.1/3
31751 An implicit call freezes the same entities and profiles that would be
31752 frozen by an explicit call. This is true even if the implicit call is
31753 removed via implementation permissions.
31754
31755 8.2/1
31756 If an expression is implicitly converted to a type or subtype T, then at
31757 the place where the expression causes freezing, T is frozen.
31758
31759 9
31760 The following rules define which entities are frozen at the place where
31761 a construct causes freezing:
31762
31763 10
31764 * At the place where an expression causes freezing, the type of the
31765 expression is frozen, unless the expression is an enumeration
31766 literal used as a discrete_choice of the array_aggregate (*note
31767 4.3.3: S0113.) of an enumeration_representation_clause (*note 13.4:
31768 S0310.).
31769
31770 10.1/3
31771 * At the place where a function call causes freezing, the profile of
31772 the function is frozen. Furthermore, if a parameter of the call is
31773 defaulted, the default_expression for that parameter causes
31774 freezing. If the function call is to an expression function, the
31775 expression of the expression function causes freezing.
31776
31777 10.2/3
31778 * At the place where a generic_instantiation causes freezing of a
31779 callable entity, the profile of that entity is frozen unless the
31780 formal subprogram corresponding to the callable entity has a
31781 parameter or result of a formal untagged incomplete type; if the
31782 callable entity is an expression function, the expression of the
31783 expression function causes freezing.
31784
31785 10.3/3
31786 * At the place where a use of the Access or Unchecked_Access
31787 attribute whose prefix denotes an expression function causes
31788 freezing, the expression of the expression function causes
31789 freezing.
31790
31791 11
31792 * At the place where a name causes freezing, the entity denoted by
31793 the name is frozen, unless the name is a prefix of an expanded
31794 name; at the place where an object name causes freezing, the
31795 nominal subtype associated with the name is frozen.
31796
31797 11.1/1
31798 * At the place where an implicit_dereference causes freezing, the
31799 nominal subtype associated with the implicit_dereference is frozen.
31800
31801 12
31802 * At the place where a range causes freezing, the type of the range
31803 is frozen.
31804
31805 13
31806 * At the place where an allocator causes freezing, the designated
31807 subtype of its type is frozen. If the type of the allocator is a
31808 derived type, then all ancestor types are also frozen.
31809
31810 14/3
31811 * At the place where a profile is frozen, each subtype of the profile
31812 is frozen. If the corresponding callable entity is a member of an
31813 entry family, the index subtype of the family is frozen.
31814
31815 15
31816 * At the place where a subtype is frozen, its type is frozen. At the
31817 place where a type is frozen, any expressions or names within the
31818 full type definition cause freezing; the first subtype, and any
31819 component subtypes, index subtypes, and parent subtype of the type
31820 are frozen as well. For a specific tagged type, the corresponding
31821 class-wide type is frozen as well. For a class-wide type, the
31822 corresponding specific type is frozen as well.
31823
31824 15.1/3
31825 * At the place where a specific tagged type is frozen, the primitive
31826 subprograms of the type are frozen. At the place where a type is
31827 frozen, any subprogram named in an attribute_definition_clause for
31828 the type is frozen.
31829
31830 _Legality Rules_
31831
31832 16
31833 The explicit declaration of a primitive subprogram of a tagged type
31834 shall occur before the type is frozen (see *note 3.9.2::).
31835
31836 17
31837 A type shall be completely defined before it is frozen (see *note
31838 3.11.1:: and *note 7.3::).
31839
31840 18
31841 The completion of a deferred constant declaration shall occur before the
31842 constant is frozen (see *note 7.4::).
31843
31844 19/1
31845 An operational or representation item that directly specifies an aspect
31846 of an entity shall appear before the entity is frozen (see *note
31847 13.1::).
31848
31849 _Dynamic Semantics_
31850
31851 20/2
31852 The tag (see *note 3.9::) of a tagged type T is created at the point
31853 where T is frozen.
31854
31855 \1f
31856 File: arm2012.info, Node: Annex A, Next: Annex B, Prev: 13, Up: Top
31857
31858 Annex A Predefined Language Environment
31859 ***************************************
31860
31861 1
31862 This Annex contains the specifications of library units that shall be
31863 provided by every implementation. There are three root library units:
31864 Ada, Interfaces, and System; other library units are children of these:
31865
31866 2/3
31867
31868
31869
31870 Standard -- *note A.1::
31871 Ada -- *note A.2::
31872 Assertions -- *note 11.4.2::
31873 Asynchronous_Task_Control -- *note D.11::
31874 Calendar -- *note 9.6::
31875 Arithmetic -- *note 9.6.1::
31876 Formatting -- *note 9.6.1::
31877 Time_Zones -- *note 9.6.1::
31878 Characters -- *note A.3.1::
31879 Conversions -- *note A.3.4::
31880 Handling -- *note A.3.2::
31881 Latin_1 -- *note A.3.3::
31882 Command_Line -- *note A.15::
31883 Complex_Text_IO -- *note G.1.3::
31884 Containers -- *note A.18.1::
31885 Bounded_Doubly_Linked_Lists
31886 -- *note A.18.20::
31887 Bounded_Hashed_Maps -- *note A.18.21::
31888 Bounded_Hashed_Sets -- *note A.18.23::
31889 Bounded_Multiway_Trees -- *note A.18.25::
31890 Bounded_Ordered_Maps -- *note A.18.22::
31891 Bounded_Ordered_Sets -- *note A.18.24::
31892 Bounded_Priority_Queues -- *note A.18.31::
31893 Bounded_Synchronized_Queues
31894 -- *note A.18.29::
31895 Bounded_Vectors -- *note A.18.19::
31896 Doubly_Linked_Lists -- *note A.18.3::
31897 Generic_Array_Sort -- *note A.18.26::
31898 Generic_Constrained_Array_Sort
31899 -- *note A.18.26::
31900 Generic_Sort -- *note A.18.26::
31901 Hashed_Maps -- *note A.18.5::
31902 Hashed_Sets -- *note A.18.8::
31903 Indefinite_Doubly_Linked_Lists
31904 -- *note A.18.12::
31905 Indefinite_Hashed_Maps -- *note A.18.13::
31906 Indefinite_Hashed_Sets -- *note A.18.15::
31907 Indefinite_Holders -- *note A.18.18::
31908 Indefinite_Multiway_Trees -- *note A.18.17::
31909 Indefinite_Ordered_Maps -- *note A.18.14::
31910 Indefinite_Ordered_Sets -- *note A.18.16::
31911 Indefinite_Vectors -- *note A.18.11::
31912
31913 Standard (...continued)
31914 Ada (...continued)
31915 Containers (...continued)
31916 Multiway_Trees -- *note A.18.10::
31917 Ordered_Maps -- *note A.18.6::
31918 Ordered_Sets -- *note A.18.9::
31919 Synchronized_Queue_Interfaces
31920 -- *note A.18.27::
31921 Unbounded_Priority_Queues
31922 -- *note A.18.30::
31923 Unbounded_Synchronized_Queues
31924 -- *note A.18.28::
31925 Vectors -- *note A.18.2::
31926 Decimal -- *note F.2::
31927 Direct_IO -- *note A.8.4::
31928 Directories -- *note A.16::
31929 Hierarchical_File_Names -- *note A.16.1::
31930 Information -- *note A.16::
31931 Dispatching -- *note D.2.1::
31932 EDF -- *note D.2.6::
31933 Non_Preemptive -- *note D.2.4::
31934 Round_Robin -- *note D.2.5::
31935 Dynamic_Priorities -- *note D.5.1::
31936 Environment_Variables -- *note A.17::
31937 Exceptions -- *note 11.4.1::
31938 Execution_Time -- *note D.14::
31939 Group_Budgets -- *note D.14.2::
31940 Interrupts -- *note D.14.3::
31941 Timers -- *note D.14.1::
31942 Finalization -- *note 7.6::
31943 Float_Text_IO -- *note A.10.9::
31944 Float_Wide_Text_IO -- *note A.11::
31945 Float_Wide_Wide_Text_IO -- *note A.11::
31946 Integer_Text_IO -- *note A.10.8::
31947 Integer_Wide_Text_IO -- *note A.11::
31948 Integer_Wide_Wide_Text_IO -- *note A.11::
31949 Interrupts -- *note C.3.2::
31950 Names -- *note C.3.2::
31951 IO_Exceptions -- *note A.13::
31952 Iterator_Interfaces -- *note 5.5.1::
31953 Locales -- *note A.19::
31954
31955 Standard (...continued)
31956 Ada (...continued)
31957 Numerics -- *note A.5::
31958 Complex_Arrays -- *note G.3.2::
31959 Complex_Elementary_Functions -- *note G.1.2::
31960 Complex_Types -- *note G.1.1::
31961 Discrete_Random -- *note A.5.2::
31962 Elementary_Functions -- *note A.5.1::
31963 Float_Random -- *note A.5.2::
31964 Generic_Complex_Arrays -- *note G.3.2::
31965 Generic_Complex_Elementary_Functions
31966 -- *note G.1.2::
31967 Generic_Complex_Types -- *note G.1.1::
31968 Generic_Elementary_Functions -- *note A.5.1::
31969 Generic_Real_Arrays -- *note G.3.1::
31970 Real_Arrays -- *note G.3.1::
31971 Real_Time -- *note D.8::
31972 Timing_Events -- *note D.15::
31973 Sequential_IO -- *note A.8.1::
31974 Storage_IO -- *note A.9::
31975 Streams -- *note 13.13.1::
31976 Stream_IO -- *note A.12.1::
31977 Strings -- *note A.4.1::
31978 Bounded -- *note A.4.4::
31979 Equal_Case_Insensitive -- *note A.4.10::
31980 Hash -- *note A.4.9::
31981 Hash_Case_Insensitive -- *note A.4.9::
31982 Less_Case_Insensitive -- *note A.4.10::
31983 Fixed -- *note A.4.3::
31984 Equal_Case_Insensitive -- *note A.4.10::
31985 Hash -- *note A.4.9::
31986 Hash_Case_Insensitive -- *note A.4.9::
31987 Less_Case_Insensitive -- *note A.4.10::
31988 Equal_Case_Insensitive -- *note A.4.10::
31989 Hash -- *note A.4.9::
31990 Hash_Case_Insensitive -- *note A.4.9::
31991 Less_Case_Insensitive -- *note A.4.10::
31992 Maps -- *note A.4.2::
31993 Constants -- *note A.4.6::
31994 Unbounded -- *note A.4.5::
31995 Equal_Case_Insensitive -- *note A.4.10::
31996 Hash -- *note A.4.9::
31997 Hash_Case_Insensitive -- *note A.4.9::
31998 Less_Case_Insensitive -- *note A.4.10::
31999 UTF_Encoding -- *note A.4.11::
32000 Conversions -- *note A.4.11::
32001 Strings -- *note A.4.11::
32002 Wide_Strings -- *note A.4.11::
32003 Wide_Wide_Strings -- *note A.4.11::
32004
32005 Standard (...continued)
32006 Ada (...continued)
32007 Strings (...continued)
32008 Wide_Bounded -- *note A.4.7::
32009 Wide_Equal_Case_Insensitive
32010 -- *note A.4.7::
32011 Wide_Hash -- *note A.4.7::
32012 Wide_Hash_Case_Insensitive -- *note A.4.7::
32013 Wide_Equal_Case_Insensitive -- *note A.4.7::
32014 Wide_Fixed -- *note A.4.7::
32015 Wide_Equal_Case_Insensitive
32016 -- *note A.4.7::
32017 Wide_Hash -- *note A.4.7::
32018 Wide_Hash_Case_Insensitive -- *note A.4.7::
32019 Wide_Hash -- *note A.4.7::
32020 Wide_Hash_Case_Insensitive -- *note A.4.7::
32021 Wide_Maps -- *note A.4.7::
32022 Wide_Constants -- *note A.4.7::
32023 Wide_Unbounded -- *note A.4.7::
32024 Wide_Equal_Case_Insensitive
32025 -- *note A.4.7::
32026 Wide_Hash -- *note A.4.7::
32027 Wide_Hash_Case_Insensitive -- *note A.4.7::
32028 Wide_Wide_Bounded -- *note A.4.8::
32029 Wide_Wide_Equal_Case_Insensitive
32030 -- *note A.4.8::
32031 Wide_Wide_Hash -- *note A.4.8::
32032 Wide_Wide_Hash_Case_Insensitive
32033 -- *note A.4.8::
32034 Wide_Wide_Equal_Case_Insensitive
32035 -- *note A.4.8::
32036 Wide_Wide_Fixed -- *note A.4.8::
32037 Wide_Wide_Equal_Case_Insensitive
32038 -- *note A.4.8::
32039 Wide_Wide_Hash -- *note A.4.8::
32040 Wide_Wide_Hash_Case_Insensitive
32041 -- *note A.4.8::
32042 Wide_Wide_Hash -- *note A.4.8::
32043 Wide_Wide_Hash_Case_Insensitive
32044 -- *note A.4.8::
32045 Wide_Wide_Maps -- *note A.4.8::
32046 Wide_Wide_Constants -- *note A.4.8::
32047 Wide_Wide_Unbounded -- *note A.4.8::
32048 Wide_Wide_Equal_Case_Insensitive
32049 -- *note A.4.8::
32050 Wide_Wide_Hash -- *note A.4.8::
32051 Wide_Wide_Hash_Case_Insensitive
32052 -- *note A.4.8::
32053 Synchronous_Barriers -- *note D.10.1::
32054 Synchronous_Task_Control -- *note D.10::
32055 EDF -- *note D.10::
32056
32057 Standard (...continued)
32058 Ada (...continued)
32059 Tags -- *note 3.9::
32060 Generic_Dispatching_Constructor -- *note 3.9::
32061 Task_Attributes -- *note C.7.2::
32062 Task_Identification -- *note C.7.1::
32063 Task_Termination -- *note C.7.3::
32064 Text_IO -- *note A.10.1::
32065 Bounded_IO -- *note A.10.11::
32066 Complex_IO -- *note G.1.3::
32067 Editing -- *note F.3.3::
32068 Text_Streams -- *note A.12.2::
32069 Unbounded_IO -- *note A.10.12::
32070 Unchecked_Conversion -- *note 13.9::
32071 Unchecked_Deallocate_Subpool -- *note 13.11.5::
32072 Unchecked_Deallocation -- *note 13.11.2::
32073 Wide_Characters -- *note A.3.1::
32074 Handling -- *note A.3.5::
32075 Wide_Text_IO -- *note A.11::
32076 Complex_IO -- *note G.1.4::
32077 Editing -- *note F.3.4::
32078 Text_Streams -- *note A.12.3::
32079 Wide_Bounded_IO -- *note A.11::
32080 Wide_Unbounded_IO -- *note A.11::
32081 Wide_Wide_Characters -- *note A.3.1::
32082 Handling -- *note A.3.6::
32083 Wide_Wide_Text_IO -- *note A.11::
32084 Complex_IO -- *note G.1.5::
32085 Editing -- *note F.3.5::
32086 Text_Streams -- *note A.12.4::
32087 Wide_Wide_Bounded_IO -- *note A.11::
32088 Wide_Wide_Unbounded_IO -- *note A.11::
32089
32090 Interfaces -- *note B.2::
32091 C -- *note B.3::
32092 Pointers -- *note B.3.2::
32093 Strings -- *note B.3.1::
32094 COBOL -- *note B.4::
32095 Fortran -- *note B.5::
32096
32097 System -- *note 13.7::
32098 Address_To_Access_Conversions -- *note 13.7.2::
32099 Machine_Code -- *note 13.8::
32100 Multiprocessors -- *note D.16::
32101 Dispatching_Domains -- *note D.16.1::
32102 RPC -- *note E.5::
32103 Storage_Elements -- *note 13.7.1::
32104 Storage_Pools -- *note 13.11::
32105 Subpools -- *note 13.11.4::
32106
32107 _Implementation Requirements_
32108
32109 3/2
32110 The implementation shall ensure that each language-defined subprogram is
32111 reentrant in the sense that concurrent calls on the same subprogram
32112 perform as specified, so long as all parameters that could be passed by
32113 reference denote nonoverlapping objects.
32114
32115 3.1/3
32116 If a descendant of a language-defined tagged type is declared, the
32117 implementation shall ensure that each inherited language-defined
32118 subprogram behaves as described in this International Standard. In
32119 particular, overriding a language-defined subprogram shall not alter the
32120 effect of any inherited language-defined subprogram.
32121
32122 _Implementation Permissions_
32123
32124 4
32125 The implementation may restrict the replacement of language-defined
32126 compilation units. The implementation may restrict children of
32127 language-defined library units (other than Standard).
32128
32129 * Menu:
32130
32131 * A.1 :: The Package Standard
32132 * A.2 :: The Package Ada
32133 * A.3 :: Character Handling
32134 * A.4 :: String Handling
32135 * A.5 :: The Numerics Packages
32136 * A.6 :: Input-Output
32137 * A.7 :: External Files and File Objects
32138 * A.8 :: Sequential and Direct Files
32139 * A.9 :: The Generic Package Storage_IO
32140 * A.10 :: Text Input-Output
32141 * A.11 :: Wide Text Input-Output and Wide Wide Text Input-Output
32142 * A.12 :: Stream Input-Output
32143 * A.13 :: Exceptions in Input-Output
32144 * A.14 :: File Sharing
32145 * A.15 :: The Package Command_Line
32146 * A.16 :: The Package Directories
32147 * A.17 :: The Package Environment_Variables
32148 * A.18 :: Containers
32149 * A.19 :: The Package Locales
32150
32151 \1f
32152 File: arm2012.info, Node: A.1, Next: A.2, Up: Annex A
32153
32154 A.1 The Package Standard
32155 ========================
32156
32157 1/3
32158 This subclause outlines the specification of the package Standard
32159 containing all predefined identifiers in the language. The
32160 corresponding package body is not specified by the language.
32161
32162 2
32163 The operators that are predefined for the types declared in the package
32164 Standard are given in comments since they are implicitly declared.
32165 Italics are used for pseudo-names of anonymous types (such as root_real)
32166 and for undefined information (such as implementation-defined).
32167
32168 _Static Semantics_
32169
32170 3
32171 The library package Standard has the following declaration:
32172
32173 4
32174 package Standard is
32175 pragma Pure(Standard);
32176
32177 5
32178 type Boolean is (False, True);
32179
32180 6
32181 -- The predefined relational operators for this type are as follows:
32182
32183 7/1
32184 -- function "=" (Left, Right : Boolean'Base) return Boolean;
32185 -- function "/=" (Left, Right : Boolean'Base) return Boolean;
32186 -- function "<" (Left, Right : Boolean'Base) return Boolean;
32187 -- function "<=" (Left, Right : Boolean'Base) return Boolean;
32188 -- function ">" (Left, Right : Boolean'Base) return Boolean;
32189 -- function ">=" (Left, Right : Boolean'Base) return Boolean;
32190
32191 8
32192 -- The predefined logical operators and the predefined logical
32193 -- negation operator are as follows:
32194
32195 9/1
32196 -- function "and" (Left, Right : Boolean'Base) return Boolean'Base;
32197 -- function "or" (Left, Right : Boolean'Base) return Boolean'Base;
32198 -- function "xor" (Left, Right : Boolean'Base) return Boolean'Base;
32199
32200 10/1
32201 -- function "not" (Right : Boolean'Base) return Boolean'Base;
32202
32203 11/2
32204 -- The integer type root_integer and the
32205 -- corresponding universal type universal_integer are predefined.
32206
32207 12
32208 type Integer is range implementation-defined;
32209
32210 13
32211 subtype Natural is Integer range 0 .. Integer'Last;
32212 subtype Positive is Integer range 1 .. Integer'Last;
32213
32214 14
32215 -- The predefined operators for type Integer are as follows:
32216
32217 15
32218 -- function "=" (Left, Right : Integer'Base) return Boolean;
32219 -- function "/=" (Left, Right : Integer'Base) return Boolean;
32220 -- function "<" (Left, Right : Integer'Base) return Boolean;
32221 -- function "<=" (Left, Right : Integer'Base) return Boolean;
32222 -- function ">" (Left, Right : Integer'Base) return Boolean;
32223 -- function ">=" (Left, Right : Integer'Base) return Boolean;
32224
32225 16
32226 -- function "+" (Right : Integer'Base) return Integer'Base;
32227 -- function "-" (Right : Integer'Base) return Integer'Base;
32228 -- function "abs" (Right : Integer'Base) return Integer'Base;
32229
32230 17
32231 -- function "+" (Left, Right : Integer'Base) return Integer'Base;
32232 -- function "-" (Left, Right : Integer'Base) return Integer'Base;
32233 -- function "*" (Left, Right : Integer'Base) return Integer'Base;
32234 -- function "/" (Left, Right : Integer'Base) return Integer'Base;
32235 -- function "rem" (Left, Right : Integer'Base) return Integer'Base;
32236 -- function "mod" (Left, Right : Integer'Base) return Integer'Base;
32237
32238 18
32239 -- function "**" (Left : Integer'Base; Right : Natural)
32240 -- return Integer'Base;
32241
32242 19
32243 -- The specification of each operator for the type
32244 -- root_integer, or for any additional predefined integer
32245 -- type, is obtained by replacing Integer by the name of the type
32246 -- in the specification of the corresponding operator of the type
32247 -- Integer. The right operand of the exponentiation operator
32248 -- remains as subtype Natural.
32249
32250 20/2
32251 -- The floating point type root_real and the
32252 -- corresponding universal type universal_real are predefined.
32253
32254 21
32255 type Float is digits implementation-defined;
32256
32257 22
32258 -- The predefined operators for this type are as follows:
32259
32260 23
32261 -- function "=" (Left, Right : Float) return Boolean;
32262 -- function "/=" (Left, Right : Float) return Boolean;
32263 -- function "<" (Left, Right : Float) return Boolean;
32264 -- function "<=" (Left, Right : Float) return Boolean;
32265 -- function ">" (Left, Right : Float) return Boolean;
32266 -- function ">=" (Left, Right : Float) return Boolean;
32267
32268 24
32269 -- function "+" (Right : Float) return Float;
32270 -- function "-" (Right : Float) return Float;
32271 -- function "abs" (Right : Float) return Float;
32272
32273 25
32274 -- function "+" (Left, Right : Float) return Float;
32275 -- function "-" (Left, Right : Float) return Float;
32276 -- function "*" (Left, Right : Float) return Float;
32277 -- function "/" (Left, Right : Float) return Float;
32278
32279 26
32280 -- function "**" (Left : Float; Right : Integer'Base) return Float;
32281
32282 27
32283 -- The specification of each operator for the type root_real, or for
32284 -- any additional predefined floating point type, is obtained by
32285 -- replacing Float by the name of the type in the specification of the
32286 -- corresponding operator of the type Float.
32287
32288 28
32289 -- In addition, the following operators are predefined for the root
32290 -- numeric types:
32291
32292 29
32293 function "*" (Left : root_integer; Right : root_real)
32294 return root_real;
32295
32296 30
32297 function "*" (Left : root_real; Right : root_integer)
32298 return root_real;
32299
32300 31
32301 function "/" (Left : root_real; Right : root_integer)
32302 return root_real;
32303
32304 32
32305 -- The type universal_fixed is predefined.
32306 -- The only multiplying operators defined between
32307 -- fixed point types are
32308
32309 33
32310 function "*" (Left : universal_fixed; Right : universal_fixed)
32311 return universal_fixed;
32312
32313 34
32314 function "/" (Left : universal_fixed; Right : universal_fixed)
32315 return universal_fixed;
32316
32317 34.1/2
32318 -- The type universal_access is predefined.
32319 -- The following equality operators are predefined:
32320
32321 34.2/2
32322 function "=" (Left, Right: universal_access) return Boolean;
32323 function "/=" (Left, Right: universal_access) return Boolean;
32324
32325 35/3
32326 -- The declaration of type Character is based on the standard ISO 8859-1 character set.
32327
32328 -- There are no character literals corresponding to the positions for control characters.
32329 -- They are indicated in italics in this definition. See *note 3.5.2::.
32330
32331 type Character is
32332 (nul, soh, stx, etx, eot, enq, ack, bel, --0 (16#00#) .. 7 (16#07#)
32333 bs, ht, lf, vt, ff, cr, so, si, --8 (16#08#) .. 15 (16#0F#)
32334
32335 dle, dc1, dc2, dc3, dc4, nak, syn, etb, --16 (16#10#) .. 23 (16#17#)
32336 can, em, sub, esc, fs, gs, rs, us, --24 (16#18#) .. 31 (16#1F#)
32337
32338 ' ', '!', '"', '#', '$', '%', '&', ''', --32 (16#20#) .. 39 (16#27#)
32339 '(', ')', '*', '+', ',', '-', '.', '/', --40 (16#28#) .. 47 (16#2F#)
32340
32341 '0', '1', '2', '3', '4', '5', '6', '7', --48 (16#30#) .. 55 (16#37#)
32342 '8', '9', ':', ';', '<', '=', '>', '?', --56 (16#38#) .. 63 (16#3F#)
32343
32344 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', --64 (16#40#) .. 71 (16#47#)
32345 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', --72 (16#48#) .. 79 (16#4F#)
32346
32347 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', --80 (16#50#) .. 87 (16#57#)
32348 'X', 'Y', 'Z', '[', '\', ']', '^', '_', --88 (16#58#) .. 95 (16#5F#)
32349
32350 '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', --96 (16#60#) .. 103 (16#67#)
32351 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', --104 (16#68#) .. 111 (16#6F#)
32352
32353 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', --112 (16#70#) .. 119 (16#77#)
32354 'x', 'y', 'z', '{', '|', '}', '~', del, --120 (16#78#) .. 127 (16#7F#)
32355
32356 reserved_128, reserved_129, bph, nbh, --128 (16#80#) .. 131 (16#83#)
32357 reserved_132, nel, ssa, esa, --132 (16#84#) .. 135 (16#87#)
32358 hts, htj, vts, pld, plu, ri, ss2, ss3, --136 (16#88#) .. 143 (16#8F#)
32359
32360 dcs, pu1, pu2, sts, cch, mw, spa, epa, --144 (16#90#) .. 151 (16#97#)
32361 sos, reserved_153, sci, csi, --152 (16#98#) .. 155 (16#9B#)
32362 st, osc, pm, apc, --156 (16#9C#) .. 159 (16#9F#)
32363
32364 ' ', '¡', '¢', '£', '¤', '¥', '¦', '§', --160 (16#A0#) .. 167 (16#A7#)
32365 '¨', '©', 'ª', '«', --168 (16#A8#) .. 171 (16#AB#)
32366 ¬', soft_hyphen, '®', '¯', --172 (16#AC#) .. 175 (16#AF#)
32367
32368 '°', '±', '²', '³', '´', 'µ', '¶', '·', --176 (16#B0#) .. 183 (16#B7#)
32369 '¸', '¹', 'º', '»', '¼', '½', '¾', '¿', --184 (16#B8#) .. 191 (16#BF#)
32370
32371 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', --192 (16#C0#) .. 199 (16#C7#)
32372 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', --200 (16#C8#) .. 207 (16#CF#)
32373
32374 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', --208 (16#D0#) .. 215 (16#D7#)
32375 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', --216 (16#D8#) .. 223 (16#DF#)
32376
32377 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', --224 (16#E0#) .. 231 (16#E7#)
32378 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', --232 (16#E8#) .. 239 (16#EF#)
32379
32380 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', --240 (16#F0#) .. 247 (16#F7#)
32381 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ');--248 (16#F8#) .. 255 (16#FF#)
32382
32383 36
32384 -- The predefined operators for the type Character are the same as for
32385 -- any enumeration type.
32386
32387
32388 36.1/3
32389 -- The declaration of type Wide_Character is based on the standard ISO/IEC 10646:2011 BMP character
32390 -- set. The first 256 positions have the same contents as type Character. See *note 3.5.2::.
32391
32392 type Wide_Character is (nul, soh ... Hex_0000FFFE, Hex_0000FFFF);
32393
32394 36.2/3
32395 -- The declaration of type Wide_Wide_Character is based on the full
32396 -- ISO/IEC 10646:2011 character set. The first 65536 positions have the
32397 -- same contents as type Wide_Character. See *note 3.5.2::.
32398
32399 type Wide_Wide_Character is (nul, soh ... Hex_7FFFFFFE, Hex_7FFFFFFF);
32400 for Wide_Wide_Character'Size use 32;
32401
32402 36.3/2
32403 package ASCII is ... end ASCII; --Obsolescent; see *note J.5::
32404
32405
32406
32407 37/3
32408 -- Predefined string types:
32409
32410 type String is array(Positive range <>) of Character
32411 with Pack;
32412
32413 38
32414 -- The predefined operators for this type are as follows:
32415
32416 39
32417 -- function "=" (Left, Right: String) return Boolean;
32418 -- function "/=" (Left, Right: String) return Boolean;
32419 -- function "<" (Left, Right: String) return Boolean;
32420 -- function "<=" (Left, Right: String) return Boolean;
32421 -- function ">" (Left, Right: String) return Boolean;
32422 -- function ">=" (Left, Right: String) return Boolean;
32423
32424 40
32425 -- function "&" (Left: String; Right: String) return String;
32426 -- function "&" (Left: Character; Right: String) return String;
32427 -- function "&" (Left: String; Right: Character) return String;
32428 -- function "&" (Left: Character; Right: Character) return String;
32429
32430 41/3
32431 type Wide_String is array(Positive range <>) of Wide_Character
32432 with Pack;
32433
32434 42
32435 -- The predefined operators for this type correspond to those for String.
32436
32437 42.1/3
32438 type Wide_Wide_String is array (Positive range <>)
32439 of Wide_Wide_Character
32440 with Pack;
32441
32442 42.2/2
32443 -- The predefined operators for this type correspond to those for String.
32444
32445 43
32446 type Duration is delta implementation-defined range implementation-defined;
32447
32448 44
32449 -- The predefined operators for the type Duration are the same as for
32450 -- any fixed point type.
32451
32452 45
32453 -- The predefined exceptions:
32454
32455 46
32456 Constraint_Error: exception;
32457 Program_Error : exception;
32458 Storage_Error : exception;
32459 Tasking_Error : exception;
32460
32461 47
32462 end Standard;
32463
32464 48
32465 Standard has no private part.
32466
32467 49/2
32468 In each of the types Character, Wide_Character, and Wide_Wide_Character,
32469 the character literals for the space character (position 32) and the
32470 non-breaking space character (position 160) correspond to different
32471 values. Unless indicated otherwise, each occurrence of the character
32472 literal ' ' in this International Standard refers to the space
32473 character. Similarly, the character literals for hyphen (position 45)
32474 and soft hyphen (position 173) correspond to different values. Unless
32475 indicated otherwise, each occurrence of the character literal '-' in
32476 this International Standard refers to the hyphen character.
32477
32478 _Dynamic Semantics_
32479
32480 50
32481 Elaboration of the body of Standard has no effect.
32482
32483 _Implementation Permissions_
32484
32485 51
32486 An implementation may provide additional predefined integer types and
32487 additional predefined floating point types. Not all of these types need
32488 have names.
32489
32490 _Implementation Advice_
32491
32492 52
32493 If an implementation provides additional named predefined integer types,
32494 then the names should end with "Integer" as in "Long_Integer". If an
32495 implementation provides additional named predefined floating point
32496 types, then the names should end with "Float" as in "Long_Float".
32497
32498 NOTES
32499
32500 53
32501 1 Certain aspects of the predefined entities cannot be completely
32502 described in the language itself. For example, although the
32503 enumeration type Boolean can be written showing the two enumeration
32504 literals False and True, the short-circuit control forms cannot be
32505 expressed in the language.
32506
32507 54
32508 2 As explained in *note 8.1::, "*note 8.1:: Declarative Region"
32509 and *note 10.1.4::, "*note 10.1.4:: The Compilation Process", the
32510 declarative region of the package Standard encloses every library
32511 unit and consequently the main subprogram; the declaration of every
32512 library unit is assumed to occur within this declarative region.
32513 Library_items are assumed to be ordered in such a way that there
32514 are no forward semantic dependences. However, as explained in
32515 *note 8.3::, "*note 8.3:: Visibility", the only library units that
32516 are visible within a given compilation unit are the library units
32517 named by all with_clauses that apply to the given unit, and
32518 moreover, within the declarative region of a given library unit,
32519 that library unit itself.
32520
32521 55
32522 3 If all block_statements of a program are named, then the name of
32523 each program unit can always be written as an expanded name
32524 starting with Standard (unless Standard is itself hidden). The
32525 name of a library unit cannot be a homograph of a name (such as
32526 Integer) that is already declared in Standard.
32527
32528 56
32529 4 The exception Standard.Numeric_Error is defined in *note J.6::.
32530
32531 \1f
32532 File: arm2012.info, Node: A.2, Next: A.3, Prev: A.1, Up: Annex A
32533
32534 A.2 The Package Ada
32535 ===================
32536
32537 _Static Semantics_
32538
32539 1
32540 The following language-defined library package exists:
32541
32542 2
32543 package Ada is
32544 pragma Pure(Ada);
32545 end Ada;
32546
32547 3
32548 Ada serves as the parent of most of the other language-defined library
32549 units; its declaration is empty (except for the pragma Pure).
32550
32551 _Legality Rules_
32552
32553 4
32554 In the standard mode, it is illegal to compile a child of package Ada.
32555
32556 \1f
32557 File: arm2012.info, Node: A.3, Next: A.4, Prev: A.2, Up: Annex A
32558
32559 A.3 Character Handling
32560 ======================
32561
32562 1/3
32563 This subclause presents the packages related to character processing: an
32564 empty declared pure package Characters and child packages
32565 Characters.Handling and Characters.Latin_1. The package
32566 Characters.Handling provides classification and conversion functions for
32567 Character data, and some simple functions for dealing with
32568 Wide_Character and Wide_Wide_Character data. The child package
32569 Characters.Latin_1 declares a set of constants initialized to values of
32570 type Character.
32571
32572 * Menu:
32573
32574 * A.3.1 :: The Packages Characters, Wide_Characters, and Wide_Wide_Characters
32575 * A.3.2 :: The Package Characters.Handling
32576 * A.3.3 :: The Package Characters.Latin_1
32577 * A.3.4 :: The Package Characters.Conversions
32578 * A.3.5 :: The Package Wide_Characters.Handling
32579 * A.3.6 :: The Package Wide_Wide_Characters.Handling
32580
32581 \1f
32582 File: arm2012.info, Node: A.3.1, Next: A.3.2, Up: A.3
32583
32584 A.3.1 The Packages Characters, Wide_Characters, and Wide_Wide_Characters
32585 ------------------------------------------------------------------------
32586
32587 _Static Semantics_
32588
32589 1
32590 The library package Characters has the following declaration:
32591
32592 2
32593 package Ada.Characters is
32594 pragma Pure(Characters);
32595 end Ada.Characters;
32596
32597 3/2
32598 The library package Wide_Characters has the following declaration:
32599
32600 4/2
32601 package Ada.Wide_Characters is
32602 pragma Pure(Wide_Characters);
32603 end Ada.Wide_Characters;
32604
32605 5/2
32606 The library package Wide_Wide_Characters has the following declaration:
32607
32608 6/2
32609 package Ada.Wide_Wide_Characters is
32610 pragma Pure(Wide_Wide_Characters);
32611 end Ada.Wide_Wide_Characters;
32612
32613 _Implementation Advice_
32614
32615 7/3
32616 If an implementation chooses to provide implementation-defined
32617 operations on Wide_Character or Wide_String (such as collating and
32618 sorting, etc.) it should do so by providing child units of
32619 Wide_Characters. Similarly if it chooses to provide
32620 implementation-defined operations on Wide_Wide_Character or
32621 Wide_Wide_String it should do so by providing child units of
32622 Wide_Wide_Characters.
32623
32624 \1f
32625 File: arm2012.info, Node: A.3.2, Next: A.3.3, Prev: A.3.1, Up: A.3
32626
32627 A.3.2 The Package Characters.Handling
32628 -------------------------------------
32629
32630 _Static Semantics_
32631
32632 1
32633 The library package Characters.Handling has the following declaration:
32634
32635 2/2
32636 with Ada.Characters.Conversions;
32637 package Ada.Characters.Handling is
32638 pragma Pure(Handling);
32639
32640 3
32641 --Character classification functions
32642
32643 4/3
32644 function Is_Control (Item : in Character) return Boolean;
32645 function Is_Graphic (Item : in Character) return Boolean;
32646 function Is_Letter (Item : in Character) return Boolean;
32647 function Is_Lower (Item : in Character) return Boolean;
32648 function Is_Upper (Item : in Character) return Boolean;
32649 function Is_Basic (Item : in Character) return Boolean;
32650 function Is_Digit (Item : in Character) return Boolean;
32651 function Is_Decimal_Digit (Item : in Character) return Boolean
32652 renames Is_Digit;
32653 function Is_Hexadecimal_Digit (Item : in Character) return Boolean;
32654 function Is_Alphanumeric (Item : in Character) return Boolean;
32655 function Is_Special (Item : in Character) return Boolean;
32656 function Is_Line_Terminator (Item : in Character) return Boolean;
32657 function Is_Mark (Item : in Character) return Boolean;
32658 function Is_Other_Format (Item : in Character) return Boolean;
32659 function Is_Punctuation_Connector (Item : in Character) return Boolean;
32660 function Is_Space (Item : in Character) return Boolean;
32661
32662 5
32663 --Conversion functions for Character and String
32664
32665 6
32666 function To_Lower (Item : in Character) return Character;
32667 function To_Upper (Item : in Character) return Character;
32668 function To_Basic (Item : in Character) return Character;
32669
32670 7
32671 function To_Lower (Item : in String) return String;
32672 function To_Upper (Item : in String) return String;
32673 function To_Basic (Item : in String) return String;
32674
32675 8
32676 --Classifications of and conversions between Character and ISO 646
32677
32678 9
32679 subtype ISO_646 is
32680 Character range Character'Val(0) .. Character'Val(127);
32681
32682 10
32683 function Is_ISO_646 (Item : in Character) return Boolean;
32684 function Is_ISO_646 (Item : in String) return Boolean;
32685
32686 11
32687 function To_ISO_646 (Item : in Character;
32688 Substitute : in ISO_646 := ' ')
32689 return ISO_646;
32690
32691 12
32692 function To_ISO_646 (Item : in String;
32693 Substitute : in ISO_646 := ' ')
32694 return String;
32695
32696 13/2
32697 -- The functions Is_Character, Is_String, To_Character, To_String, To_Wide_Character,
32698 -- and To_Wide_String are obsolescent; see *note J.14::.
32699
32700 Paragraphs 14 through 18 were deleted.
32701
32702 19
32703 end Ada.Characters.Handling;
32704
32705 20
32706 In the description below for each function that returns a Boolean
32707 result, the effect is described in terms of the conditions under which
32708 the value True is returned. If these conditions are not met, then the
32709 function returns False.
32710
32711 21
32712 Each of the following classification functions has a formal Character
32713 parameter, Item, and returns a Boolean result.
32714
32715 22
32716 Is_Control
32717 True if Item is a control character. A control character
32718 is a character whose position is in one of the ranges
32719 0..31 or 127..159.
32720
32721 23
32722 Is_Graphic
32723 True if Item is a graphic character. A graphic character
32724 is a character whose position is in one of the ranges
32725 32..126 or 160..255.
32726
32727 24
32728 Is_Letter
32729 True if Item is a letter. A letter is a character that
32730 is in one of the ranges 'A'..'Z' or 'a'..'z', or whose
32731 position is in one of the ranges 192..214, 216..246, or
32732 248..255.
32733
32734 25
32735 Is_Lower
32736 True if Item is a lower-case letter. A lower-case letter
32737 is a character that is in the range 'a'..'z', or whose
32738 position is in one of the ranges 223..246 or 248..255.
32739
32740 26
32741 Is_Upper
32742 True if Item is an upper-case letter. An upper-case
32743 letter is a character that is in the range 'A'..'Z' or
32744 whose position is in one of the ranges 192..214 or 216..
32745 222.
32746
32747 27
32748 Is_Basic
32749 True if Item is a basic letter. A basic letter is a
32750 character that is in one of the ranges 'A'..'Z' and
32751 'a'..'z', or that is one of the following: 'Æ', 'æ', 'Ð',
32752 'ð', 'Þ', 'þ', or 'ß'.
32753
32754 28
32755 Is_Digit
32756 True if Item is a decimal digit. A decimal digit is a
32757 character in the range '0'..'9'.
32758
32759 29
32760 Is_Decimal_Digit
32761 A renaming of Is_Digit.
32762
32763 30
32764 Is_Hexadecimal_Digit
32765 True if Item is a hexadecimal digit. A hexadecimal digit
32766 is a character that is either a decimal digit or that is
32767 in one of the ranges 'A' .. 'F' or 'a' .. 'f'.
32768
32769 31
32770 Is_Alphanumeric
32771 True if Item is an alphanumeric character. An
32772 alphanumeric character is a character that is either a
32773 letter or a decimal digit.
32774
32775 32
32776 Is_Special
32777 True if Item is a special graphic character. A special
32778 graphic character is a graphic character that is not
32779 alphanumeric.
32780
32781 32.1/3
32782 Is_Line_Terminator
32783 True if Item is a character with position 10 .. 13
32784 (Line_Feed, Line_Tabulation, Form_Feed, Carriage_Return)
32785 or 133 (Next_Line).
32786
32787 32.2/3
32788 Is_Mark
32789 Never True (no value of type Character has categories
32790 Mark, Non-Spacing or Mark, Spacing Combining).
32791
32792 32.3/3
32793 Is_Other_Format
32794 True if Item is a character with position 173
32795 (Soft_Hyphen).
32796
32797 32.4/3
32798 Is_Punctuation_Connector
32799 True if Item is a character with position 95 ('_', known
32800 as Low_Line or Underscore).
32801
32802 32.5/3
32803 Is_Space
32804 True if Item is a character with position 32 (' ') or 160
32805 (No_Break_Space).
32806
32807 33
32808 Each of the names To_Lower, To_Upper, and To_Basic refers to two
32809 functions: one that converts from Character to Character, and the other
32810 that converts from String to String. The result of each
32811 Character-to-Character function is described below, in terms of the
32812 conversion applied to Item, its formal Character parameter. The result
32813 of each String-to-String conversion is obtained by applying to each
32814 element of the function's String parameter the corresponding
32815 Character-to-Character conversion; the result is the null String if the
32816 value of the formal parameter is the null String. The lower bound of
32817 the result String is 1.
32818
32819 34
32820 To_Lower
32821 Returns the corresponding lower-case value for Item if
32822 Is_Upper(Item), and returns Item otherwise.
32823
32824 35
32825 To_Upper
32826 Returns the corresponding upper-case value for Item if
32827 Is_Lower(Item) and Item has an upper-case form, and
32828 returns Item otherwise. The lower case letters 'ß' and
32829 'ÿ' do not have upper case forms.
32830
32831 36
32832 To_Basic
32833 Returns the letter corresponding to Item but with no
32834 diacritical mark, if Item is a letter but not a basic
32835 letter; returns Item otherwise.
32836
32837 37
32838 The following set of functions test for membership in the ISO 646
32839 character range, or convert between ISO 646 and Character.
32840
32841 38
32842 Is_ISO_646
32843 The function whose formal parameter, Item, is of type
32844 Character returns True if Item is in the subtype ISO_646.
32845
32846 39
32847 Is_ISO_646
32848 The function whose formal parameter, Item, is of type
32849 String returns True if Is_ISO_646(Item(I)) is True for
32850 each I in Item'Range.
32851
32852 40
32853 To_ISO_646
32854 The function whose first formal parameter, Item, is of
32855 type Character returns Item if Is_ISO_646(Item), and
32856 returns the Substitute ISO_646 character otherwise.
32857
32858 41
32859 To_ISO_646
32860 The function whose first formal parameter, Item, is of
32861 type String returns the String whose Range is
32862 1..Item'Length and each of whose elements is given by
32863 To_ISO_646 of the corresponding element in Item.
32864
32865 Paragraphs 42 through 49 were deleted.
32866
32867 NOTES
32868
32869 50
32870 5 A basic letter is a letter without a diacritical mark.
32871
32872 51
32873 6 Except for the hexadecimal digits, basic letters, and ISO_646
32874 characters, the categories identified in the classification
32875 functions form a strict hierarchy:
32876
32877 52
32878 -- Control characters
32879
32880 53
32881 -- Graphic characters
32882
32883 54
32884 -- Alphanumeric characters
32885
32886 55
32887 -- Letters
32888
32889 56
32890 -- Upper-case letters
32891
32892 57
32893 -- Lower-case letters
32894
32895 58
32896 -- Decimal digits
32897
32898 59
32899 -- Special graphic characters
32900
32901 60/3
32902 7 There are certain characters which are defined to be lower case
32903 letters by ISO 10646 and are therefore allowed in identifiers, but
32904 are not considered lower case letters by Ada.Characters.Handling.
32905
32906 \1f
32907 File: arm2012.info, Node: A.3.3, Next: A.3.4, Prev: A.3.2, Up: A.3
32908
32909 A.3.3 The Package Characters.Latin_1
32910 ------------------------------------
32911
32912 1
32913 The package Characters.Latin_1 declares constants for characters in ISO
32914 8859-1.
32915
32916 _Static Semantics_
32917
32918 2
32919 The library package Characters.Latin_1 has the following declaration:
32920
32921 3
32922 package Ada.Characters.Latin_1 is
32923 pragma Pure(Latin_1);
32924
32925 4
32926 -- Control characters:
32927
32928 5
32929 NUL : constant Character := Character'Val(0);
32930 SOH : constant Character := Character'Val(1);
32931 STX : constant Character := Character'Val(2);
32932 ETX : constant Character := Character'Val(3);
32933 EOT : constant Character := Character'Val(4);
32934 ENQ : constant Character := Character'Val(5);
32935 ACK : constant Character := Character'Val(6);
32936 BEL : constant Character := Character'Val(7);
32937 BS : constant Character := Character'Val(8);
32938 HT : constant Character := Character'Val(9);
32939 LF : constant Character := Character'Val(10);
32940 VT : constant Character := Character'Val(11);
32941 FF : constant Character := Character'Val(12);
32942 CR : constant Character := Character'Val(13);
32943 SO : constant Character := Character'Val(14);
32944 SI : constant Character := Character'Val(15);
32945
32946 6
32947 DLE : constant Character := Character'Val(16);
32948 DC1 : constant Character := Character'Val(17);
32949 DC2 : constant Character := Character'Val(18);
32950 DC3 : constant Character := Character'Val(19);
32951 DC4 : constant Character := Character'Val(20);
32952 NAK : constant Character := Character'Val(21);
32953 SYN : constant Character := Character'Val(22);
32954 ETB : constant Character := Character'Val(23);
32955 CAN : constant Character := Character'Val(24);
32956 EM : constant Character := Character'Val(25);
32957 SUB : constant Character := Character'Val(26);
32958 ESC : constant Character := Character'Val(27);
32959 FS : constant Character := Character'Val(28);
32960 GS : constant Character := Character'Val(29);
32961 RS : constant Character := Character'Val(30);
32962 US : constant Character := Character'Val(31);
32963
32964 7
32965 -- ISO 646 graphic characters:
32966
32967 8
32968 Space : constant Character := ' '; -- Character'Val(32)
32969 Exclamation : constant Character := '!'; -- Character'Val(33)
32970 Quotation : constant Character := '"'; -- Character'Val(34)
32971 Number_Sign : constant Character := '#'; -- Character'Val(35)
32972 Dollar_Sign : constant Character := '$'; -- Character'Val(36)
32973 Percent_Sign : constant Character := '%'; -- Character'Val(37)
32974 Ampersand : constant Character := '&'; -- Character'Val(38)
32975 Apostrophe : constant Character := '''; -- Character'Val(39)
32976 Left_Parenthesis : constant Character := '('; -- Character'Val(40)
32977 Right_Parenthesis : constant Character := ')'; -- Character'Val(41)
32978 Asterisk : constant Character := '*'; -- Character'Val(42)
32979 Plus_Sign : constant Character := '+'; -- Character'Val(43)
32980 Comma : constant Character := ','; -- Character'Val(44)
32981 Hyphen : constant Character := '-'; -- Character'Val(45)
32982 Minus_Sign : Character renames Hyphen;
32983 Full_Stop : constant Character := '.'; -- Character'Val(46)
32984 Solidus : constant Character := '/'; -- Character'Val(47)
32985
32986 9
32987 -- Decimal digits '0' though '9' are at positions 48 through 57
32988
32989 10
32990 Colon : constant Character := ':'; -- Character'Val(58)
32991 Semicolon : constant Character := ';'; -- Character'Val(59)
32992 Less_Than_Sign : constant Character := '<'; -- Character'Val(60)
32993 Equals_Sign : constant Character := '='; -- Character'Val(61)
32994 Greater_Than_Sign : constant Character := '>'; -- Character'Val(62)
32995 Question : constant Character := '?'; -- Character'Val(63)
32996 Commercial_At : constant Character := '@'; -- Character'Val(64)
32997
32998 11
32999 -- Letters 'A' through 'Z' are at positions 65 through 90
33000
33001 12
33002 Left_Square_Bracket : constant Character := '['; -- Character'Val(91)
33003 Reverse_Solidus : constant Character := '\'; -- Character'Val(92)
33004 Right_Square_Bracket : constant Character := ']'; -- Character'Val(93)
33005 Circumflex : constant Character := '^'; -- Character'Val(94)
33006 Low_Line : constant Character := '_'; -- Character'Val(95)
33007
33008 13
33009 Grave : constant Character := '`'; -- Character'Val(96)
33010 LC_A : constant Character := 'a'; -- Character'Val(97)
33011 LC_B : constant Character := 'b'; -- Character'Val(98)
33012 LC_C : constant Character := 'c'; -- Character'Val(99)
33013 LC_D : constant Character := 'd'; -- Character'Val(100)
33014 LC_E : constant Character := 'e'; -- Character'Val(101)
33015 LC_F : constant Character := 'f'; -- Character'Val(102)
33016 LC_G : constant Character := 'g'; -- Character'Val(103)
33017 LC_H : constant Character := 'h'; -- Character'Val(104)
33018 LC_I : constant Character := 'i'; -- Character'Val(105)
33019 LC_J : constant Character := 'j'; -- Character'Val(106)
33020 LC_K : constant Character := 'k'; -- Character'Val(107)
33021 LC_L : constant Character := 'l'; -- Character'Val(108)
33022 LC_M : constant Character := 'm'; -- Character'Val(109)
33023 LC_N : constant Character := 'n'; -- Character'Val(110)
33024 LC_O : constant Character := 'o'; -- Character'Val(111)
33025
33026 14
33027 LC_P : constant Character := 'p'; -- Character'Val(112)
33028 LC_Q : constant Character := 'q'; -- Character'Val(113)
33029 LC_R : constant Character := 'r'; -- Character'Val(114)
33030 LC_S : constant Character := 's'; -- Character'Val(115)
33031 LC_T : constant Character := 't'; -- Character'Val(116)
33032 LC_U : constant Character := 'u'; -- Character'Val(117)
33033 LC_V : constant Character := 'v'; -- Character'Val(118)
33034 LC_W : constant Character := 'w'; -- Character'Val(119)
33035 LC_X : constant Character := 'x'; -- Character'Val(120)
33036 LC_Y : constant Character := 'y'; -- Character'Val(121)
33037 LC_Z : constant Character := 'z'; -- Character'Val(122)
33038 Left_Curly_Bracket : constant Character := '{'; -- Character'Val(123)
33039 Vertical_Line : constant Character := '|'; -- Character'Val(124)
33040 Right_Curly_Bracket : constant Character := '}'; -- Character'Val(125)
33041 Tilde : constant Character := '~'; -- Character'Val(126)
33042 DEL : constant Character := Character'Val(127);
33043
33044 15
33045 -- ISO 6429 control characters:
33046
33047 16
33048 IS4 : Character renames FS;
33049 IS3 : Character renames GS;
33050 IS2 : Character renames RS;
33051 IS1 : Character renames US;
33052
33053 17
33054 Reserved_128 : constant Character := Character'Val(128);
33055 Reserved_129 : constant Character := Character'Val(129);
33056 BPH : constant Character := Character'Val(130);
33057 NBH : constant Character := Character'Val(131);
33058 Reserved_132 : constant Character := Character'Val(132);
33059 NEL : constant Character := Character'Val(133);
33060 SSA : constant Character := Character'Val(134);
33061 ESA : constant Character := Character'Val(135);
33062 HTS : constant Character := Character'Val(136);
33063 HTJ : constant Character := Character'Val(137);
33064 VTS : constant Character := Character'Val(138);
33065 PLD : constant Character := Character'Val(139);
33066 PLU : constant Character := Character'Val(140);
33067 RI : constant Character := Character'Val(141);
33068 SS2 : constant Character := Character'Val(142);
33069 SS3 : constant Character := Character'Val(143);
33070
33071 18
33072 DCS : constant Character := Character'Val(144);
33073 PU1 : constant Character := Character'Val(145);
33074 PU2 : constant Character := Character'Val(146);
33075 STS : constant Character := Character'Val(147);
33076 CCH : constant Character := Character'Val(148);
33077 MW : constant Character := Character'Val(149);
33078 SPA : constant Character := Character'Val(150);
33079 EPA : constant Character := Character'Val(151);
33080
33081 19
33082 SOS : constant Character := Character'Val(152);
33083 Reserved_153 : constant Character := Character'Val(153);
33084 SCI : constant Character := Character'Val(154);
33085 CSI : constant Character := Character'Val(155);
33086 ST : constant Character := Character'Val(156);
33087 OSC : constant Character := Character'Val(157);
33088 PM : constant Character := Character'Val(158);
33089 APC : constant Character := Character'Val(159);
33090
33091 20
33092 -- Other graphic characters:
33093
33094 21/3
33095 -- Character positions 160 (16#A0#) .. 175 (16#AF#):
33096 No_Break_Space : constant Character := ' '; --Character'Val(160)
33097 NBSP : Character renames No_Break_Space;
33098 Inverted_Exclamation : constant Character := '¡'; --Character'Val(161)
33099 Cent_Sign : constant Character := '¢'; --Character'Val(162)
33100 Pound_Sign : constant Character := '£'; --Character'Val(163)
33101 Currency_Sign : constant Character := '¤'; --Character'Val(164)
33102 Yen_Sign : constant Character := '¥'; --Character'Val(165)
33103 Broken_Bar : constant Character := '¦'; --Character'Val(166)
33104 Section_Sign : constant Character := '§'; --Character'Val(167)
33105 Diaeresis : constant Character := '¨'; --Character'Val(168)
33106 Copyright_Sign : constant Character := '©'; --Character'Val(169)
33107 Feminine_Ordinal_Indicator : constant Character := 'ª'; --Character'Val(170)
33108 Left_Angle_Quotation : constant Character := '«'; --Character'Val(171)
33109 Not_Sign : constant Character := '¬'; --Character'Val(172)
33110 Soft_Hyphen : constant Character := Character'Val(173);
33111 Registered_Trade_Mark_Sign : constant Character := '®'; --Character'Val(174)
33112 Macron : constant Character := '¯'; --Character'Val(175)
33113
33114 22
33115 -- Character positions 176 (16#B0#) .. 191 (16#BF#):
33116 Degree_Sign : constant Character := '°'; --Character'Val(176)
33117 Ring_Above : Character renames Degree_Sign;
33118 Plus_Minus_Sign : constant Character := '±'; --Character'Val(177)
33119 Superscript_Two : constant Character := '²'; --Character'Val(178)
33120 Superscript_Three : constant Character := '³'; --Character'Val(179)
33121 Acute : constant Character := '´'; --Character'Val(180)
33122 Micro_Sign : constant Character := 'µ'; --Character'Val(181)
33123 Pilcrow_Sign : constant Character := '¶'; --Character'Val(182)
33124 Paragraph_Sign : Character renames Pilcrow_Sign;
33125 Middle_Dot : constant Character := '·'; --Character'Val(183)
33126 Cedilla : constant Character := '¸'; --Character'Val(184)
33127 Superscript_One : constant Character := '¹'; --Character'Val(185)
33128 Masculine_Ordinal_Indicator: constant Character := 'º'; --Character'Val(186)
33129 Right_Angle_Quotation : constant Character := '»'; --Character'Val(187)
33130 Fraction_One_Quarter : constant Character := '¼'; --Character'Val(188)
33131 Fraction_One_Half : constant Character := '½'; --Character'Val(189)
33132 Fraction_Three_Quarters : constant Character := '¾'; --Character'Val(190)
33133 Inverted_Question : constant Character := '¿'; --Character'Val(191)
33134
33135 23
33136 -- Character positions 192 (16#C0#) .. 207 (16#CF#):
33137 UC_A_Grave : constant Character := 'À'; --Character'Val(192)
33138 UC_A_Acute : constant Character := 'Á'; --Character'Val(193)
33139 UC_A_Circumflex : constant Character := 'Â'; --Character'Val(194)
33140 UC_A_Tilde : constant Character := 'Ã'; --Character'Val(195)
33141 UC_A_Diaeresis : constant Character := 'Ä'; --Character'Val(196)
33142 UC_A_Ring : constant Character := 'Å'; --Character'Val(197)
33143 UC_AE_Diphthong : constant Character := 'Æ'; --Character'Val(198)
33144 UC_C_Cedilla : constant Character := 'Ç'; --Character'Val(199)
33145 UC_E_Grave : constant Character := 'È'; --Character'Val(200)
33146 UC_E_Acute : constant Character := 'É'; --Character'Val(201)
33147 UC_E_Circumflex : constant Character := 'Ê'; --Character'Val(202)
33148 UC_E_Diaeresis : constant Character := 'Ë'; --Character'Val(203)
33149 UC_I_Grave : constant Character := 'Ì'; --Character'Val(204)
33150 UC_I_Acute : constant Character := 'Í'; --Character'Val(205)
33151 UC_I_Circumflex : constant Character := 'Î'; --Character'Val(206)
33152 UC_I_Diaeresis : constant Character := 'Ï'; --Character'Val(207)
33153
33154 24
33155 -- Character positions 208 (16#D0#) .. 223 (16#DF#):
33156 UC_Icelandic_Eth : constant Character := 'Ð'; --Character'Val(208)
33157 UC_N_Tilde : constant Character := 'Ñ'; --Character'Val(209)
33158 UC_O_Grave : constant Character := 'Ò'; --Character'Val(210)
33159 UC_O_Acute : constant Character := 'Ó'; --Character'Val(211)
33160 UC_O_Circumflex : constant Character := 'Ô'; --Character'Val(212)
33161 UC_O_Tilde : constant Character := 'Õ'; --Character'Val(213)
33162 UC_O_Diaeresis : constant Character := 'Ö'; --Character'Val(214)
33163 Multiplication_Sign : constant Character := '×'; --Character'Val(215)
33164 UC_O_Oblique_Stroke : constant Character := 'Ø'; --Character'Val(216)
33165 UC_U_Grave : constant Character := 'Ù'; --Character'Val(217)
33166 UC_U_Acute : constant Character := 'Ú'; --Character'Val(218)
33167 UC_U_Circumflex : constant Character := 'Û'; --Character'Val(219)
33168 UC_U_Diaeresis : constant Character := 'Ü'; --Character'Val(220)
33169 UC_Y_Acute : constant Character := 'Ý'; --Character'Val(221)
33170 UC_Icelandic_Thorn : constant Character := 'Þ'; --Character'Val(222)
33171 LC_German_Sharp_S : constant Character := 'ß'; --Character'Val(223)
33172
33173 25
33174 -- Character positions 224 (16#E0#) .. 239 (16#EF#):
33175 LC_A_Grave : constant Character := 'à'; --Character'Val(224)
33176 LC_A_Acute : constant Character := 'á'; --Character'Val(225)
33177 LC_A_Circumflex : constant Character := 'â'; --Character'Val(226)
33178 LC_A_Tilde : constant Character := 'ã'; --Character'Val(227)
33179 LC_A_Diaeresis : constant Character := 'ä'; --Character'Val(228)
33180 LC_A_Ring : constant Character := 'å'; --Character'Val(229)
33181 LC_AE_Diphthong : constant Character := 'æ'; --Character'Val(230)
33182 LC_C_Cedilla : constant Character := 'ç'; --Character'Val(231)
33183 LC_E_Grave : constant Character := 'è'; --Character'Val(232)
33184 LC_E_Acute : constant Character := 'é'; --Character'Val(233)
33185 LC_E_Circumflex : constant Character := 'ê'; --Character'Val(234)
33186 LC_E_Diaeresis : constant Character := 'ë'; --Character'Val(235)
33187 LC_I_Grave : constant Character := 'ì'; --Character'Val(236)
33188 LC_I_Acute : constant Character := 'í'; --Character'Val(237)
33189 LC_I_Circumflex : constant Character := 'î'; --Character'Val(238)
33190 LC_I_Diaeresis : constant Character := 'ï'; --Character'Val(239)
33191
33192 26
33193 -- Character positions 240 (16#F0#) .. 255 (16#FF#):
33194 LC_Icelandic_Eth : constant Character := 'ð'; --Character'Val(240)
33195 LC_N_Tilde : constant Character := 'ñ'; --Character'Val(241)
33196 LC_O_Grave : constant Character := 'ò'; --Character'Val(242)
33197 LC_O_Acute : constant Character := 'ó'; --Character'Val(243)
33198 LC_O_Circumflex : constant Character := 'ô'; --Character'Val(244)
33199 LC_O_Tilde : constant Character := 'õ'; --Character'Val(245)
33200 LC_O_Diaeresis : constant Character := 'ö'; --Character'Val(246)
33201 Division_Sign : constant Character := '÷'; --Character'Val(247)
33202 LC_O_Oblique_Stroke : constant Character := 'ø'; --Character'Val(248)
33203 LC_U_Grave : constant Character := 'ù'; --Character'Val(249)
33204 LC_U_Acute : constant Character := 'ú'; --Character'Val(250)
33205 LC_U_Circumflex : constant Character := 'û'; --Character'Val(251)
33206 LC_U_Diaeresis : constant Character := 'ü'; --Character'Val(252)
33207 LC_Y_Acute : constant Character := 'ý'; --Character'Val(253)
33208 LC_Icelandic_Thorn : constant Character := 'þ'; --Character'Val(254)
33209 LC_Y_Diaeresis : constant Character := 'ÿ'; --Character'Val(255)
33210 end Ada.Characters.Latin_1;
33211
33212 _Implementation Permissions_
33213
33214 27
33215 An implementation may provide additional packages as children of
33216 Ada.Characters, to declare names for the symbols of the local character
33217 set or other character sets.
33218
33219 \1f
33220 File: arm2012.info, Node: A.3.4, Next: A.3.5, Prev: A.3.3, Up: A.3
33221
33222 A.3.4 The Package Characters.Conversions
33223 ----------------------------------------
33224
33225 _Static Semantics_
33226
33227 1/2
33228 The library package Characters.Conversions has the following
33229 declaration:
33230
33231 2/2
33232 package Ada.Characters.Conversions is
33233 pragma Pure(Conversions);
33234
33235 3/2
33236 function Is_Character (Item : in Wide_Character) return Boolean;
33237 function Is_String (Item : in Wide_String) return Boolean;
33238 function Is_Character (Item : in Wide_Wide_Character) return Boolean;
33239 function Is_String (Item : in Wide_Wide_String) return Boolean;
33240 function Is_Wide_Character (Item : in Wide_Wide_Character)
33241 return Boolean;
33242 function Is_Wide_String (Item : in Wide_Wide_String)
33243 return Boolean;
33244
33245 4/2
33246 function To_Wide_Character (Item : in Character) return Wide_Character;
33247 function To_Wide_String (Item : in String) return Wide_String;
33248 function To_Wide_Wide_Character (Item : in Character)
33249 return Wide_Wide_Character;
33250 function To_Wide_Wide_String (Item : in String)
33251 return Wide_Wide_String;
33252 function To_Wide_Wide_Character (Item : in Wide_Character)
33253 return Wide_Wide_Character;
33254 function To_Wide_Wide_String (Item : in Wide_String)
33255 return Wide_Wide_String;
33256
33257 5/2
33258 function To_Character (Item : in Wide_Character;
33259 Substitute : in Character := ' ')
33260 return Character;
33261 function To_String (Item : in Wide_String;
33262 Substitute : in Character := ' ')
33263 return String;
33264 function To_Character (Item : in Wide_Wide_Character;
33265 Substitute : in Character := ' ')
33266 return Character;
33267 function To_String (Item : in Wide_Wide_String;
33268 Substitute : in Character := ' ')
33269 return String;
33270 function To_Wide_Character (Item : in Wide_Wide_Character;
33271 Substitute : in Wide_Character := ' ')
33272 return Wide_Character;
33273 function To_Wide_String (Item : in Wide_Wide_String;
33274 Substitute : in Wide_Character := ' ')
33275 return Wide_String;
33276
33277 6/2
33278 end Ada.Characters.Conversions;
33279
33280 7/2
33281 The functions in package Characters.Conversions test Wide_Wide_Character
33282 or Wide_Character values for membership in Wide_Character or Character,
33283 or convert between corresponding characters of Wide_Wide_Character,
33284 Wide_Character, and Character.
33285
33286 8/2
33287 function Is_Character (Item : in Wide_Character) return Boolean;
33288
33289 9/2
33290 Returns True if Wide_Character'Pos(Item) <=
33291 Character'Pos(Character'Last).
33292
33293 10/2
33294 function Is_Character (Item : in Wide_Wide_Character) return Boolean;
33295
33296 11/2
33297 Returns True if Wide_Wide_Character'Pos(Item) <=
33298 Character'Pos(Character'Last).
33299
33300 12/2
33301 function Is_Wide_Character (Item : in Wide_Wide_Character) return Boolean;
33302
33303 13/2
33304 Returns True if Wide_Wide_Character'Pos(Item) <=
33305 Wide_Character'Pos(Wide_Character'Last).
33306
33307 14/2
33308 function Is_String (Item : in Wide_String) return Boolean;
33309 function Is_String (Item : in Wide_Wide_String) return Boolean;
33310
33311 15/2
33312 Returns True if Is_Character(Item(I)) is True for each I in
33313 Item'Range.
33314
33315 16/2
33316 function Is_Wide_String (Item : in Wide_Wide_String) return Boolean;
33317
33318 17/2
33319 Returns True if Is_Wide_Character(Item(I)) is True for each I
33320 in Item'Range.
33321
33322 18/2
33323 function To_Character (Item : in Wide_Character;
33324 Substitute : in Character := ' ') return Character;
33325 function To_Character (Item : in Wide_Wide_Character;
33326 Substitute : in Character := ' ') return Character;
33327
33328 19/2
33329 Returns the Character corresponding to Item if
33330 Is_Character(Item), and returns the Substitute Character
33331 otherwise.
33332
33333 20/2
33334 function To_Wide_Character (Item : in Character) return Wide_Character;
33335
33336 21/2
33337 Returns the Wide_Character X such that Character'Pos(Item) =
33338 Wide_Character'Pos (X).
33339
33340 22/2
33341 function To_Wide_Character (Item : in Wide_Wide_Character;
33342 Substitute : in Wide_Character := ' ')
33343 return Wide_Character;
33344
33345 23/2
33346 Returns the Wide_Character corresponding to Item if
33347 Is_Wide_Character(Item), and returns the Substitute
33348 Wide_Character otherwise.
33349
33350 24/2
33351 function To_Wide_Wide_Character (Item : in Character)
33352 return Wide_Wide_Character;
33353
33354 25/2
33355 Returns the Wide_Wide_Character X such that
33356 Character'Pos(Item) = Wide_Wide_Character'Pos (X).
33357
33358 26/2
33359 function To_Wide_Wide_Character (Item : in Wide_Character)
33360 return Wide_Wide_Character;
33361
33362 27/2
33363 Returns the Wide_Wide_Character X such that
33364 Wide_Character'Pos(Item) = Wide_Wide_Character'Pos (X).
33365
33366 28/2
33367 function To_String (Item : in Wide_String;
33368 Substitute : in Character := ' ') return String;
33369 function To_String (Item : in Wide_Wide_String;
33370 Substitute : in Character := ' ') return String;
33371
33372 29/2
33373 Returns the String whose range is 1..Item'Length and each of
33374 whose elements is given by To_Character of the corresponding
33375 element in Item.
33376
33377 30/2
33378 function To_Wide_String (Item : in String) return Wide_String;
33379
33380 31/2
33381 Returns the Wide_String whose range is 1..Item'Length and each
33382 of whose elements is given by To_Wide_Character of the
33383 corresponding element in Item.
33384
33385 32/2
33386 function To_Wide_String (Item : in Wide_Wide_String;
33387 Substitute : in Wide_Character := ' ')
33388 return Wide_String;
33389
33390 33/2
33391 Returns the Wide_String whose range is 1..Item'Length and each
33392 of whose elements is given by To_Wide_Character of the
33393 corresponding element in Item with the given Substitute
33394 Wide_Character.
33395
33396 34/2
33397 function To_Wide_Wide_String (Item : in String) return Wide_Wide_String;
33398 function To_Wide_Wide_String (Item : in Wide_String)
33399 return Wide_Wide_String;
33400
33401 35/2
33402 Returns the Wide_Wide_String whose range is 1..Item'Length and
33403 each of whose elements is given by To_Wide_Wide_Character of
33404 the corresponding element in Item.
33405
33406 \1f
33407 File: arm2012.info, Node: A.3.5, Next: A.3.6, Prev: A.3.4, Up: A.3
33408
33409 A.3.5 The Package Wide_Characters.Handling
33410 ------------------------------------------
33411
33412 1/3
33413 The package Wide_Characters.Handling provides operations for classifying
33414 Wide_Characters and case folding for Wide_Characters.
33415
33416 _Static Semantics_
33417
33418 2/3
33419 The library package Wide_Characters.Handling has the following
33420 declaration:
33421
33422 3/3
33423 package Ada.Wide_Characters.Handling is
33424 pragma Pure(Handling);
33425
33426 4/3
33427 function Character_Set_Version return String;
33428
33429 5/3
33430 function Is_Control (Item : Wide_Character) return Boolean;
33431
33432 6/3
33433 function Is_Letter (Item : Wide_Character) return Boolean;
33434
33435 7/3
33436 function Is_Lower (Item : Wide_Character) return Boolean;
33437
33438 8/3
33439 function Is_Upper (Item : Wide_Character) return Boolean;
33440
33441 9/3
33442 function Is_Digit (Item : Wide_Character) return Boolean;
33443
33444 10/3
33445 function Is_Decimal_Digit (Item : Wide_Character) return Boolean
33446 renames Is_Digit;
33447
33448 11/3
33449 function Is_Hexadecimal_Digit (Item : Wide_Character) return Boolean;
33450
33451 12/3
33452 function Is_Alphanumeric (Item : Wide_Character) return Boolean;
33453
33454 13/3
33455 function Is_Special (Item : Wide_Character) return Boolean;
33456
33457 14/3
33458 function Is_Line_Terminator (Item : Wide_Character) return Boolean;
33459
33460 15/3
33461 function Is_Mark (Item : Wide_Character) return Boolean;
33462
33463 16/3
33464 function Is_Other_Format (Item : Wide_Character) return Boolean;
33465
33466 17/3
33467 function Is_Punctuation_Connector (Item : Wide_Character) return Boolean;
33468
33469 18/3
33470 function Is_Space (Item : Wide_Character) return Boolean;
33471
33472 19/3
33473 function Is_Graphic (Item : Wide_Character) return Boolean;
33474
33475 20/3
33476 function To_Lower (Item : Wide_Character) return Wide_Character;
33477 function To_Upper (Item : Wide_Character) return Wide_Character;
33478
33479 21/3
33480 function To_Lower (Item : Wide_String) return Wide_String;
33481 function To_Upper (Item : Wide_String) return Wide_String;
33482
33483 22/3
33484 end Ada.Wide_Characters.Handling;
33485
33486 23/3
33487 The subprograms defined in Wide_Characters.Handling are locale
33488 independent.
33489
33490 24/3
33491 function Character_Set_Version return String;
33492
33493 25/3
33494 Returns an implementation-defined identifier that identifies
33495 the version of the character set standard that is used for
33496 categorizing characters by the implementation.
33497
33498 26/3
33499 function Is_Control (Item : Wide_Character) return Boolean;
33500
33501 27/3
33502 Returns True if the Wide_Character designated by Item is
33503 categorized as other_control; otherwise returns False.
33504
33505 28/3
33506 function Is_Letter (Item : Wide_Character) return Boolean;
33507
33508 29/3
33509 Returns True if the Wide_Character designated by Item is
33510 categorized as letter_uppercase, letter_lowercase,
33511 letter_titlecase, letter_modifier, letter_other, or
33512 number_letter; otherwise returns False.
33513
33514 30/3
33515 function Is_Lower (Item : Wide_Character) return Boolean;
33516
33517 31/3
33518 Returns True if the Wide_Character designated by Item is
33519 categorized as letter_lowercase; otherwise returns False.
33520
33521 32/3
33522 function Is_Upper (Item : Wide_Character) return Boolean;
33523
33524 33/3
33525 Returns True if the Wide_Character designated by Item is
33526 categorized as letter_uppercase; otherwise returns False.
33527
33528 34/3
33529 function Is_Digit (Item : Wide_Character) return Boolean;
33530
33531 35/3
33532 Returns True if the Wide_Character designated by Item is
33533 categorized as number_decimal; otherwise returns False.
33534
33535 36/3
33536 function Is_Hexadecimal_Digit (Item : Wide_Character) return Boolean;
33537
33538 37/3
33539 Returns True if the Wide_Character designated by Item is
33540 categorized as number_decimal, or is in the range 'A' .. 'F'
33541 or 'a' .. 'f'; otherwise returns False.
33542
33543 38/3
33544 function Is_Alphanumeric (Item : Wide_Character) return Boolean;
33545
33546 39/3
33547 Returns True if the Wide_Character designated by Item is
33548 categorized as letter_uppercase, letter_lowercase,
33549 letter_titlecase, letter_modifier, letter_other,
33550 number_letter, or number_decimal; otherwise returns False.
33551
33552 40/3
33553 function Is_Special (Item : Wide_Character) return Boolean;
33554
33555 41/3
33556 Returns True if the Wide_Character designated by Item is
33557 categorized as graphic_character, but not categorized as
33558 letter_uppercase, letter_lowercase, letter_titlecase,
33559 letter_modifier, letter_other, number_letter, or
33560 number_decimal; otherwise returns False.
33561
33562 42/3
33563 function Is_Line_Terminator (Item : Wide_Character) return Boolean;
33564
33565 43/3
33566 Returns True if the Wide_Character designated by Item is
33567 categorized as separator_line or separator_paragraph, or if
33568 Item is a conventional line terminator character (Line_Feed,
33569 Line_Tabulation, Form_Feed, Carriage_Return, Next_Line);
33570 otherwise returns False.
33571
33572 44/3
33573 function Is_Mark (Item : Wide_Character) return Boolean;
33574
33575 45/3
33576 Returns True if the Wide_Character designated by Item is
33577 categorized as mark_non_spacing or mark_spacing_combining;
33578 otherwise returns False.
33579
33580 46/3
33581 function Is_Other_Format (Item : Wide_Character) return Boolean;
33582
33583 47/3
33584 Returns True if the Wide_Character designated by Item is
33585 categorized as other_format; otherwise returns False.
33586
33587 48/3
33588 function Is_Punctuation_Connector (Item : Wide_Character) return Boolean;
33589
33590 49/3
33591 Returns True if the Wide_Character designated by Item is
33592 categorized as punctuation_connector; otherwise returns False.
33593
33594 50/3
33595 function Is_Space (Item : Wide_Character) return Boolean;
33596
33597 51/3
33598 Returns True if the Wide_Character designated by Item is
33599 categorized as separator_space; otherwise returns False.
33600
33601 52/3
33602 function Is_Graphic (Item : Wide_Character) return Boolean;
33603
33604 53/3
33605 Returns True if the Wide_Character designated by Item is
33606 categorized as graphic_character; otherwise returns False.
33607
33608 54/3
33609 function To_Lower (Item : Wide_Character) return Wide_Character;
33610
33611 55/3
33612 Returns the Simple Lowercase Mapping as defined by documents
33613 referenced in the note in Clause 1 of ISO/IEC 10646:2011 of
33614 the Wide_Character designated by Item. If the Simple
33615 Lowercase Mapping does not exist for the Wide_Character
33616 designated by Item, then the value of Item is returned.
33617
33618 56/3
33619 function To_Lower (Item : Wide_String) return Wide_String;
33620
33621 57/3
33622 Returns the result of applying the To_Lower conversion to each
33623 Wide_Character element of the Wide_String designated by Item.
33624 The result is the null Wide_String if the value of the formal
33625 parameter is the null Wide_String. The lower bound of the
33626 result Wide_String is 1.
33627
33628 58/3
33629 function To_Upper (Item : Wide_Character) return Wide_Character;
33630
33631 59/3
33632 Returns the Simple Uppercase Mapping as defined by documents
33633 referenced in the note in Clause 1 of ISO/IEC 10646:2011 of
33634 the Wide_Character designated by Item. If the Simple
33635 Uppercase Mapping does not exist for the Wide_Character
33636 designated by Item, then the value of Item is returned.
33637
33638 60/3
33639 function To_Upper (Item : Wide_String) return Wide_String;
33640
33641 61/3
33642 Returns the result of applying the To_Upper conversion to each
33643 Wide_Character element of the Wide_String designated by Item.
33644 The result is the null Wide_String if the value of the formal
33645 parameter is the null Wide_String. The lower bound of the
33646 result Wide_String is 1.
33647
33648 _Implementation Advice_
33649
33650 62/3
33651 The string returned by Character_Set_Version should include either
33652 "10646:" or "Unicode".
33653
33654 NOTES
33655
33656 63/3
33657 8 The results returned by these functions may depend on which
33658 particular version of the 10646 standard is supported by the
33659 implementation (see *note 2.1::).
33660
33661 64/3
33662 9 The case insensitive equality comparison routines provided in
33663 *note A.4.10::, "*note A.4.10:: String Comparison" are also
33664 available for wide strings (see *note A.4.7::).
33665
33666 \1f
33667 File: arm2012.info, Node: A.3.6, Prev: A.3.5, Up: A.3
33668
33669 A.3.6 The Package Wide_Wide_Characters.Handling
33670 -----------------------------------------------
33671
33672 1/3
33673 The package Wide_Wide_Characters.Handling has the same contents as
33674 Wide_Characters.Handling except that each occurrence of Wide_Character
33675 is replaced by Wide_Wide_Character, and each occurrence of Wide_String
33676 is replaced by Wide_Wide_String.
33677
33678 \1f
33679 File: arm2012.info, Node: A.4, Next: A.5, Prev: A.3, Up: Annex A
33680
33681 A.4 String Handling
33682 ===================
33683
33684 1/3
33685 This subclause presents the specifications of the package Strings and
33686 several child packages, which provide facilities for dealing with string
33687 data. Fixed-length, bounded-length, and unbounded-length strings are
33688 supported, for String, Wide_String, and Wide_Wide_String. The
33689 string-handling subprograms include searches for pattern strings and for
33690 characters in program-specified sets, translation (via a
33691 character-to-character mapping), and transformation (replacing,
33692 inserting, overwriting, and deleting of substrings).
33693
33694 * Menu:
33695
33696 * A.4.1 :: The Package Strings
33697 * A.4.2 :: The Package Strings.Maps
33698 * A.4.3 :: Fixed-Length String Handling
33699 * A.4.4 :: Bounded-Length String Handling
33700 * A.4.5 :: Unbounded-Length String Handling
33701 * A.4.6 :: String-Handling Sets and Mappings
33702 * A.4.7 :: Wide_String Handling
33703 * A.4.8 :: Wide_Wide_String Handling
33704 * A.4.9 :: String Hashing
33705 * A.4.10 :: String Comparison
33706 * A.4.11 :: String Encoding
33707
33708 \1f
33709 File: arm2012.info, Node: A.4.1, Next: A.4.2, Up: A.4
33710
33711 A.4.1 The Package Strings
33712 -------------------------
33713
33714 1
33715 The package Strings provides declarations common to the string handling
33716 packages.
33717
33718 _Static Semantics_
33719
33720 2
33721 The library package Strings has the following declaration:
33722
33723 3
33724 package Ada.Strings is
33725 pragma Pure(Strings);
33726
33727 4/2
33728 Space : constant Character := ' ';
33729 Wide_Space : constant Wide_Character := ' ';
33730 Wide_Wide_Space : constant Wide_Wide_Character := ' ';
33731
33732 5
33733 Length_Error, Pattern_Error, Index_Error, Translation_Error : exception;
33734
33735 6
33736 type Alignment is (Left, Right, Center);
33737 type Truncation is (Left, Right, Error);
33738 type Membership is (Inside, Outside);
33739 type Direction is (Forward, Backward);
33740 type Trim_End is (Left, Right, Both);
33741 end Ada.Strings;
33742
33743 \1f
33744 File: arm2012.info, Node: A.4.2, Next: A.4.3, Prev: A.4.1, Up: A.4
33745
33746 A.4.2 The Package Strings.Maps
33747 ------------------------------
33748
33749 1
33750 The package Strings.Maps defines the types, operations, and other
33751 entities needed for character sets and character-to-character mappings.
33752
33753 _Static Semantics_
33754
33755 2
33756 The library package Strings.Maps has the following declaration:
33757
33758 3/2
33759 package Ada.Strings.Maps is
33760 pragma Pure(Maps);
33761
33762 4/2
33763 -- Representation for a set of character values:
33764 type Character_Set is private;
33765 pragma Preelaborable_Initialization(Character_Set);
33766
33767 5
33768 Null_Set : constant Character_Set;
33769
33770 6
33771 type Character_Range is
33772 record
33773 Low : Character;
33774 High : Character;
33775 end record;
33776 -- Represents Character range Low..High
33777
33778 7
33779 type Character_Ranges is array (Positive range <>) of Character_Range;
33780
33781 8
33782 function To_Set (Ranges : in Character_Ranges)return Character_Set;
33783
33784 9
33785 function To_Set (Span : in Character_Range)return Character_Set;
33786
33787 10
33788 function To_Ranges (Set : in Character_Set) return Character_Ranges;
33789
33790 11
33791 function "=" (Left, Right : in Character_Set) return Boolean;
33792
33793 12
33794 function "not" (Right : in Character_Set) return Character_Set;
33795 function "and" (Left, Right : in Character_Set) return Character_Set;
33796 function "or" (Left, Right : in Character_Set) return Character_Set;
33797 function "xor" (Left, Right : in Character_Set) return Character_Set;
33798 function "-" (Left, Right : in Character_Set) return Character_Set;
33799
33800 13
33801 function Is_In (Element : in Character;
33802 Set : in Character_Set)
33803 return Boolean;
33804
33805 14
33806 function Is_Subset (Elements : in Character_Set;
33807 Set : in Character_Set)
33808 return Boolean;
33809
33810 15
33811 function "<=" (Left : in Character_Set;
33812 Right : in Character_Set)
33813 return Boolean renames Is_Subset;
33814
33815 16
33816 -- Alternative representation for a set of character values:
33817 subtype Character_Sequence is String;
33818
33819 17
33820 function To_Set (Sequence : in Character_Sequence)return Character_Set;
33821
33822 18
33823 function To_Set (Singleton : in Character) return Character_Set;
33824
33825 19
33826 function To_Sequence (Set : in Character_Set) return Character_Sequence;
33827
33828 20/2
33829 -- Representation for a character to character mapping:
33830 type Character_Mapping is private;
33831 pragma Preelaborable_Initialization(Character_Mapping);
33832
33833 21
33834 function Value (Map : in Character_Mapping;
33835 Element : in Character)
33836 return Character;
33837
33838 22
33839 Identity : constant Character_Mapping;
33840
33841 23
33842 function To_Mapping (From, To : in Character_Sequence)
33843 return Character_Mapping;
33844
33845 24
33846 function To_Domain (Map : in Character_Mapping)
33847 return Character_Sequence;
33848 function To_Range (Map : in Character_Mapping)
33849 return Character_Sequence;
33850
33851 25
33852 type Character_Mapping_Function is
33853 access function (From : in Character) return Character;
33854
33855 26
33856 private
33857 ... -- not specified by the language
33858 end Ada.Strings.Maps;
33859
33860 27
33861 An object of type Character_Set represents a set of characters.
33862
33863 28
33864 Null_Set represents the set containing no characters.
33865
33866 29
33867 An object Obj of type Character_Range represents the set of characters
33868 in the range Obj.Low .. Obj.High.
33869
33870 30
33871 An object Obj of type Character_Ranges represents the union of the sets
33872 corresponding to Obj(I) for I in Obj'Range.
33873
33874 31
33875 function To_Set (Ranges : in Character_Ranges) return Character_Set;
33876
33877 32/3
33878 If Ranges'Length=0 then Null_Set is returned; otherwise, the
33879 returned value represents the set corresponding to Ranges.
33880
33881 33
33882 function To_Set (Span : in Character_Range) return Character_Set;
33883
33884 34
33885 The returned value represents the set containing each
33886 character in Span.
33887
33888 35
33889 function To_Ranges (Set : in Character_Set) return Character_Ranges;
33890
33891 36/3
33892 If Set = Null_Set, then an empty Character_Ranges array is
33893 returned; otherwise, the shortest array of contiguous ranges
33894 of Character values in Set, in increasing order of Low, is
33895 returned.
33896
33897 37
33898 function "=" (Left, Right : in Character_Set) return Boolean;
33899
33900 38
33901 The function "=" returns True if Left and Right represent
33902 identical sets, and False otherwise.
33903
33904 39
33905 Each of the logical operators "not", "and", "or", and "xor" returns a
33906 Character_Set value that represents the set obtained by applying the
33907 corresponding operation to the set(s) represented by the parameter(s) of
33908 the operator. "-"(Left, Right) is equivalent to "and"(Left,
33909 "not"(Right)).
33910
33911 40
33912 function Is_In (Element : in Character;
33913 Set : in Character_Set);
33914 return Boolean;
33915
33916 41
33917 Is_In returns True if Element is in Set, and False otherwise.
33918
33919 42
33920 function Is_Subset (Elements : in Character_Set;
33921 Set : in Character_Set)
33922 return Boolean;
33923
33924 43
33925 Is_Subset returns True if Elements is a subset of Set, and
33926 False otherwise.
33927
33928 44
33929 subtype Character_Sequence is String;
33930
33931 45
33932 The Character_Sequence subtype is used to portray a set of
33933 character values and also to identify the domain and range of
33934 a character mapping.
33935
33936 46
33937 function To_Set (Sequence : in Character_Sequence) return Character_Set;
33938
33939 function To_Set (Singleton : in Character) return Character_Set;
33940
33941 47
33942 Sequence portrays the set of character values that it
33943 explicitly contains (ignoring duplicates). Singleton portrays
33944 the set comprising a single Character. Each of the To_Set
33945 functions returns a Character_Set value that represents the
33946 set portrayed by Sequence or Singleton.
33947
33948 48
33949 function To_Sequence (Set : in Character_Set) return Character_Sequence;
33950
33951 49
33952 The function To_Sequence returns a Character_Sequence value
33953 containing each of the characters in the set represented by
33954 Set, in ascending order with no duplicates.
33955
33956 50
33957 type Character_Mapping is private;
33958
33959 51
33960 An object of type Character_Mapping represents a
33961 Character-to-Character mapping.
33962
33963 52
33964 function Value (Map : in Character_Mapping;
33965 Element : in Character)
33966 return Character;
33967
33968 53
33969 The function Value returns the Character value to which
33970 Element maps with respect to the mapping represented by Map.
33971
33972 54
33973 A character C matches a pattern character P with respect to a given
33974 Character_Mapping value Map if Value(Map, C) = P. A string S matches a
33975 pattern string P with respect to a given Character_Mapping if their
33976 lengths are the same and if each character in S matches its
33977 corresponding character in the pattern string P.
33978
33979 55
33980 String handling subprograms that deal with character mappings have
33981 parameters whose type is Character_Mapping.
33982
33983 56
33984 Identity : constant Character_Mapping;
33985
33986 57
33987 Identity maps each Character to itself.
33988
33989 58
33990 function To_Mapping (From, To : in Character_Sequence)
33991 return Character_Mapping;
33992
33993 59
33994 To_Mapping produces a Character_Mapping such that each element
33995 of From maps to the corresponding element of To, and each
33996 other character maps to itself. If From'Length /= To'Length,
33997 or if some character is repeated in From, then
33998 Translation_Error is propagated.
33999
34000 60
34001 function To_Domain (Map : in Character_Mapping) return Character_Sequence;
34002
34003 61
34004 To_Domain returns the shortest Character_Sequence value D such
34005 that each character not in D maps to itself, and such that the
34006 characters in D are in ascending order. The lower bound of D
34007 is 1.
34008
34009 62
34010 function To_Range (Map : in Character_Mapping) return Character_Sequence;
34011
34012 63/1
34013 To_Range returns the Character_Sequence value R, such that if
34014 D = To_Domain(Map), then R has the same bounds as D, and D(I)
34015 maps to R(I) for each I in D'Range.
34016
34017 64
34018 An object F of type Character_Mapping_Function maps a Character value C
34019 to the Character value F.all(C), which is said to match C with respect
34020 to mapping function F.
34021
34022 NOTES
34023
34024 65
34025 10 Character_Mapping and Character_Mapping_Function are used both
34026 for character equivalence mappings in the search subprograms (such
34027 as for case insensitivity) and as transformational mappings in the
34028 Translate subprograms.
34029
34030 66
34031 11 To_Domain(Identity) and To_Range(Identity) each returns the
34032 null string.
34033
34034 _Examples_
34035
34036 67
34037 To_Mapping("ABCD", "ZZAB") returns a Character_Mapping that maps 'A' and
34038 'B' to 'Z', 'C' to 'A', 'D' to 'B', and each other Character to itself.
34039
34040 \1f
34041 File: arm2012.info, Node: A.4.3, Next: A.4.4, Prev: A.4.2, Up: A.4
34042
34043 A.4.3 Fixed-Length String Handling
34044 ----------------------------------
34045
34046 1
34047 The language-defined package Strings.Fixed provides string-handling
34048 subprograms for fixed-length strings; that is, for values of type
34049 Standard.String. Several of these subprograms are procedures that
34050 modify the contents of a String that is passed as an out or an in out
34051 parameter; each has additional parameters to control the effect when the
34052 logical length of the result differs from the parameter's length.
34053
34054 2
34055 For each function that returns a String, the lower bound of the returned
34056 value is 1.
34057
34058 3
34059 The basic model embodied in the package is that a fixed-length string
34060 comprises significant characters and possibly padding (with space
34061 characters) on either or both ends. When a shorter string is copied to
34062 a longer string, padding is inserted, and when a longer string is copied
34063 to a shorter one, padding is stripped. The Move procedure in
34064 Strings.Fixed, which takes a String as an out parameter, allows the
34065 programmer to control these effects. Similar control is provided by the
34066 string transformation procedures.
34067
34068 _Static Semantics_
34069
34070 4
34071 The library package Strings.Fixed has the following declaration:
34072
34073 5
34074 with Ada.Strings.Maps;
34075 package Ada.Strings.Fixed is
34076 pragma Preelaborate(Fixed);
34077
34078 6
34079 -- "Copy" procedure for strings of possibly different lengths
34080
34081 7
34082 procedure Move (Source : in String;
34083 Target : out String;
34084 Drop : in Truncation := Error;
34085 Justify : in Alignment := Left;
34086 Pad : in Character := Space);
34087
34088 8
34089 -- Search subprograms
34090
34091 8.1/2
34092 function Index (Source : in String;
34093 Pattern : in String;
34094 From : in Positive;
34095 Going : in Direction := Forward;
34096 Mapping : in Maps.Character_Mapping := Maps.Identity)
34097 return Natural;
34098
34099 8.2/2
34100 function Index (Source : in String;
34101 Pattern : in String;
34102 From : in Positive;
34103 Going : in Direction := Forward;
34104 Mapping : in Maps.Character_Mapping_Function)
34105 return Natural;
34106
34107 9
34108 function Index (Source : in String;
34109 Pattern : in String;
34110 Going : in Direction := Forward;
34111 Mapping : in Maps.Character_Mapping
34112 := Maps.Identity)
34113 return Natural;
34114
34115 10
34116 function Index (Source : in String;
34117 Pattern : in String;
34118 Going : in Direction := Forward;
34119 Mapping : in Maps.Character_Mapping_Function)
34120 return Natural;
34121
34122 10.1/2
34123 function Index (Source : in String;
34124 Set : in Maps.Character_Set;
34125 From : in Positive;
34126 Test : in Membership := Inside;
34127 Going : in Direction := Forward)
34128 return Natural;
34129
34130 11
34131 function Index (Source : in String;
34132 Set : in Maps.Character_Set;
34133 Test : in Membership := Inside;
34134 Going : in Direction := Forward)
34135 return Natural;
34136
34137 11.1/2
34138 function Index_Non_Blank (Source : in String;
34139 From : in Positive;
34140 Going : in Direction := Forward)
34141 return Natural;
34142
34143 12
34144 function Index_Non_Blank (Source : in String;
34145 Going : in Direction := Forward)
34146 return Natural;
34147
34148 13
34149 function Count (Source : in String;
34150 Pattern : in String;
34151 Mapping : in Maps.Character_Mapping
34152 := Maps.Identity)
34153 return Natural;
34154
34155 14
34156 function Count (Source : in String;
34157 Pattern : in String;
34158 Mapping : in Maps.Character_Mapping_Function)
34159 return Natural;
34160
34161 15
34162 function Count (Source : in String;
34163 Set : in Maps.Character_Set)
34164 return Natural;
34165
34166 15.1/3
34167 procedure Find_Token (Source : in String;
34168 Set : in Maps.Character_Set;
34169 From : in Positive;
34170 Test : in Membership;
34171 First : out Positive;
34172 Last : out Natural);
34173
34174 16
34175 procedure Find_Token (Source : in String;
34176 Set : in Maps.Character_Set;
34177 Test : in Membership;
34178 First : out Positive;
34179 Last : out Natural);
34180
34181 17
34182 -- String translation subprograms
34183
34184 18
34185 function Translate (Source : in String;
34186 Mapping : in Maps.Character_Mapping)
34187 return String;
34188
34189 19
34190 procedure Translate (Source : in out String;
34191 Mapping : in Maps.Character_Mapping);
34192
34193 20
34194 function Translate (Source : in String;
34195 Mapping : in Maps.Character_Mapping_Function)
34196 return String;
34197
34198 21
34199 procedure Translate (Source : in out String;
34200 Mapping : in Maps.Character_Mapping_Function);
34201
34202 22
34203 -- String transformation subprograms
34204
34205 23
34206 function Replace_Slice (Source : in String;
34207 Low : in Positive;
34208 High : in Natural;
34209 By : in String)
34210 return String;
34211
34212 24
34213 procedure Replace_Slice (Source : in out String;
34214 Low : in Positive;
34215 High : in Natural;
34216 By : in String;
34217 Drop : in Truncation := Error;
34218 Justify : in Alignment := Left;
34219 Pad : in Character := Space);
34220
34221 25
34222 function Insert (Source : in String;
34223 Before : in Positive;
34224 New_Item : in String)
34225 return String;
34226
34227 26
34228 procedure Insert (Source : in out String;
34229 Before : in Positive;
34230 New_Item : in String;
34231 Drop : in Truncation := Error);
34232
34233 27
34234 function Overwrite (Source : in String;
34235 Position : in Positive;
34236 New_Item : in String)
34237 return String;
34238
34239 28
34240 procedure Overwrite (Source : in out String;
34241 Position : in Positive;
34242 New_Item : in String;
34243 Drop : in Truncation := Right);
34244
34245 29
34246 function Delete (Source : in String;
34247 From : in Positive;
34248 Through : in Natural)
34249 return String;
34250
34251 30
34252 procedure Delete (Source : in out String;
34253 From : in Positive;
34254 Through : in Natural;
34255 Justify : in Alignment := Left;
34256 Pad : in Character := Space);
34257
34258 31
34259 --String selector subprograms
34260 function Trim (Source : in String;
34261 Side : in Trim_End)
34262 return String;
34263
34264 32
34265 procedure Trim (Source : in out String;
34266 Side : in Trim_End;
34267 Justify : in Alignment := Left;
34268 Pad : in Character := Space);
34269
34270 33
34271 function Trim (Source : in String;
34272 Left : in Maps.Character_Set;
34273 Right : in Maps.Character_Set)
34274 return String;
34275
34276 34
34277 procedure Trim (Source : in out String;
34278 Left : in Maps.Character_Set;
34279 Right : in Maps.Character_Set;
34280 Justify : in Alignment := Strings.Left;
34281 Pad : in Character := Space);
34282
34283 35
34284 function Head (Source : in String;
34285 Count : in Natural;
34286 Pad : in Character := Space)
34287 return String;
34288
34289 36
34290 procedure Head (Source : in out String;
34291 Count : in Natural;
34292 Justify : in Alignment := Left;
34293 Pad : in Character := Space);
34294
34295 37
34296 function Tail (Source : in String;
34297 Count : in Natural;
34298 Pad : in Character := Space)
34299 return String;
34300
34301 38
34302 procedure Tail (Source : in out String;
34303 Count : in Natural;
34304 Justify : in Alignment := Left;
34305 Pad : in Character := Space);
34306
34307 39
34308 --String constructor functions
34309
34310 40
34311 function "*" (Left : in Natural;
34312 Right : in Character) return String;
34313
34314 41
34315 function "*" (Left : in Natural;
34316 Right : in String) return String;
34317
34318 42
34319 end Ada.Strings.Fixed;
34320
34321 43
34322 The effects of the above subprograms are as follows.
34323
34324 44
34325 procedure Move (Source : in String;
34326 Target : out String;
34327 Drop : in Truncation := Error;
34328 Justify : in Alignment := Left;
34329 Pad : in Character := Space);
34330
34331 45/3
34332 The Move procedure copies characters from Source to Target.
34333 If Source has the same length as Target, then the effect is to
34334 assign Source to Target. If Source is shorter than Target,
34335 then:
34336
34337 46
34338 * If Justify=Left, then Source is copied into the first
34339 Source'Length characters of Target.
34340
34341 47
34342 * If Justify=Right, then Source is copied into the last
34343 Source'Length characters of Target.
34344
34345 48
34346 * If Justify=Center, then Source is copied into the middle
34347 Source'Length characters of Target. In this case, if the
34348 difference in length between Target and Source is odd,
34349 then the extra Pad character is on the right.
34350
34351 49
34352 * Pad is copied to each Target character not otherwise
34353 assigned.
34354
34355 50
34356 If Source is longer than Target, then the effect is based on
34357 Drop.
34358
34359 51
34360 * If Drop=Left, then the rightmost Target'Length characters
34361 of Source are copied into Target.
34362
34363 52
34364 * If Drop=Right, then the leftmost Target'Length characters
34365 of Source are copied into Target.
34366
34367 53
34368 * If Drop=Error, then the effect depends on the value of
34369 the Justify parameter and also on whether any characters
34370 in Source other than Pad would fail to be copied:
34371
34372 54
34373 * If Justify=Left, and if each of the rightmost
34374 Source'Length-Target'Length characters in
34375 Source is Pad, then the leftmost Target'Length
34376 characters of Source are copied to Target.
34377
34378 55
34379 * If Justify=Right, and if each of the leftmost
34380 Source'Length-Target'Length characters in
34381 Source is Pad, then the rightmost Target'Length
34382 characters of Source are copied to Target.
34383
34384 56
34385 * Otherwise, Length_Error is propagated.
34386
34387 56.1/2
34388 function Index (Source : in String;
34389 Pattern : in String;
34390 From : in Positive;
34391 Going : in Direction := Forward;
34392 Mapping : in Maps.Character_Mapping := Maps.Identity)
34393 return Natural;
34394
34395 function Index (Source : in String;
34396 Pattern : in String;
34397 From : in Positive;
34398 Going : in Direction := Forward;
34399 Mapping : in Maps.Character_Mapping_Function)
34400 return Natural;
34401
34402 56.2/3
34403 Each Index function searches, starting from From, for a slice
34404 of Source, with length Pattern'Length, that matches Pattern
34405 with respect to Mapping; the parameter Going indicates the
34406 direction of the lookup. If Source is the null string, Index
34407 returns 0; otherwise, if From is not in Source'Range, then
34408 Index_Error is propagated. If Going = Forward, then Index
34409 returns the smallest index I which is greater than or equal to
34410 From such that the slice of Source starting at I matches
34411 Pattern. If Going = Backward, then Index returns the largest
34412 index I such that the slice of Source starting at I matches
34413 Pattern and has an upper bound less than or equal to From. If
34414 there is no such slice, then 0 is returned. If Pattern is the
34415 null string, then Pattern_Error is propagated.
34416
34417 57
34418 function Index (Source : in String;
34419 Pattern : in String;
34420 Going : in Direction := Forward;
34421 Mapping : in Maps.Character_Mapping
34422 := Maps.Identity)
34423 return Natural;
34424
34425 function Index (Source : in String;
34426 Pattern : in String;
34427 Going : in Direction := Forward;
34428 Mapping : in Maps.Character_Mapping_Function)
34429 return Natural;
34430
34431 58/2
34432 If Going = Forward, returns
34433
34434 58.1/2
34435 Index (Source, Pattern, Source'First, Forward, Mapping);
34436
34437 58.2/3
34438 otherwise, returns
34439
34440 58.3/2
34441 Index (Source, Pattern, Source'Last, Backward, Mapping);
34442
34443 58.4/2
34444 function Index (Source : in String;
34445 Set : in Maps.Character_Set;
34446 From : in Positive;
34447 Test : in Membership := Inside;
34448 Going : in Direction := Forward)
34449 return Natural;
34450
34451 58.5/3
34452 Index searches for the first or last occurrence of any of a
34453 set of characters (when Test=Inside), or any of the complement
34454 of a set of characters (when Test=Outside). If Source is the
34455 null string, Index returns 0; otherwise, if From is not in
34456 Source'Range, then Index_Error is propagated. Otherwise, it
34457 returns the smallest index I >= From (if Going=Forward) or the
34458 largest index I <= From (if Going=Backward) such that
34459 Source(I) satisfies the Test condition with respect to Set; it
34460 returns 0 if there is no such Character in Source.
34461
34462 59
34463 function Index (Source : in String;
34464 Set : in Maps.Character_Set;
34465 Test : in Membership := Inside;
34466 Going : in Direction := Forward)
34467 return Natural;
34468
34469 60/2
34470 If Going = Forward, returns
34471
34472 60.1/2
34473 Index (Source, Set, Source'First, Test, Forward);
34474
34475 60.2/3
34476 otherwise, returns
34477
34478 60.3/2
34479 Index (Source, Set, Source'Last, Test, Backward);
34480
34481 60.4/2
34482 function Index_Non_Blank (Source : in String;
34483 From : in Positive;
34484 Going : in Direction := Forward)
34485 return Natural;
34486
34487 60.5/2
34488 Returns Index (Source, Maps.To_Set(Space), From, Outside,
34489 Going);
34490
34491 61
34492 function Index_Non_Blank (Source : in String;
34493 Going : in Direction := Forward)
34494 return Natural;
34495
34496 62
34497 Returns Index(Source, Maps.To_Set(Space), Outside, Going)
34498
34499 63
34500 function Count (Source : in String;
34501 Pattern : in String;
34502 Mapping : in Maps.Character_Mapping
34503 := Maps.Identity)
34504 return Natural;
34505
34506 function Count (Source : in String;
34507 Pattern : in String;
34508 Mapping : in Maps.Character_Mapping_Function)
34509 return Natural;
34510
34511 64
34512 Returns the maximum number of nonoverlapping slices of Source
34513 that match Pattern with respect to Mapping. If Pattern is the
34514 null string then Pattern_Error is propagated.
34515
34516 65
34517 function Count (Source : in String;
34518 Set : in Maps.Character_Set)
34519 return Natural;
34520
34521 66
34522 Returns the number of occurrences in Source of characters that
34523 are in Set.
34524
34525 66.1/3
34526 procedure Find_Token (Source : in String;
34527 Set : in Maps.Character_Set;
34528 From : in Positive;
34529 Test : in Membership;
34530 First : out Positive;
34531 Last : out Natural);
34532
34533 66.2/3
34534 If Source is not the null string and From is not in
34535 Source'Range, then Index_Error is raised. Otherwise, First is
34536 set to the index of the first character in Source(From ..
34537 Source'Last) that satisfies the Test condition. Last is set
34538 to the largest index such that all characters in Source(First
34539 .. Last) satisfy the Test condition. If no characters in
34540 Source(From .. Source'Last) satisfy the Test condition, First
34541 is set to From, and Last is set to 0.
34542
34543 67
34544 procedure Find_Token (Source : in String;
34545 Set : in Maps.Character_Set;
34546 Test : in Membership;
34547 First : out Positive;
34548 Last : out Natural);
34549
34550 68/3
34551 Equivalent to Find_Token (Source, Set, Source'First, Test,
34552 First, Last).
34553
34554 69
34555 function Translate (Source : in String;
34556 Mapping : in Maps.Character_Mapping)
34557 return String;
34558
34559 function Translate (Source : in String;
34560 Mapping : in Maps.Character_Mapping_Function)
34561 return String;
34562
34563 70
34564 Returns the string S whose length is Source'Length and such
34565 that S(I) is the character to which Mapping maps the
34566 corresponding element of Source, for I in 1..Source'Length.
34567
34568 71
34569 procedure Translate (Source : in out String;
34570 Mapping : in Maps.Character_Mapping);
34571
34572 procedure Translate (Source : in out String;
34573 Mapping : in Maps.Character_Mapping_Function);
34574
34575 72
34576 Equivalent to Source := Translate(Source, Mapping).
34577
34578 73
34579 function Replace_Slice (Source : in String;
34580 Low : in Positive;
34581 High : in Natural;
34582 By : in String)
34583 return String;
34584
34585 74/1
34586 If Low > Source'Last+1, or High < Source'First-1, then
34587 Index_Error is propagated. Otherwise:
34588
34589 74.1/1
34590 * If High >= Low, then the returned string comprises
34591 Source(Source'First..Low-1) & By &
34592 Source(High+1..Source'Last), but with lower bound 1.
34593
34594 74.2/1
34595 * If High < Low, then the returned string is Insert(Source,
34596 Before=>Low, New_Item=>By).
34597
34598 75
34599 procedure Replace_Slice (Source : in out String;
34600 Low : in Positive;
34601 High : in Natural;
34602 By : in String;
34603 Drop : in Truncation := Error;
34604 Justify : in Alignment := Left;
34605 Pad : in Character := Space);
34606
34607 76
34608 Equivalent to Move(Replace_Slice(Source, Low, High, By),
34609 Source, Drop, Justify, Pad).
34610
34611 77
34612 function Insert (Source : in String;
34613 Before : in Positive;
34614 New_Item : in String)
34615 return String;
34616
34617 78/3
34618 Propagates Index_Error if Before is not in Source'First ..
34619 Source'Last+1; otherwise, returns
34620 Source(Source'First..Before-1) & New_Item &
34621 Source(Before..Source'Last), but with lower bound 1.
34622
34623 79
34624 procedure Insert (Source : in out String;
34625 Before : in Positive;
34626 New_Item : in String;
34627 Drop : in Truncation := Error);
34628
34629 80
34630 Equivalent to Move(Insert(Source, Before, New_Item), Source,
34631 Drop).
34632
34633 81
34634 function Overwrite (Source : in String;
34635 Position : in Positive;
34636 New_Item : in String)
34637 return String;
34638
34639 82/3
34640 Propagates Index_Error if Position is not in Source'First ..
34641 Source'Last+1; otherwise, returns the string obtained from
34642 Source by consecutively replacing characters starting at
34643 Position with corresponding characters from New_Item. If the
34644 end of Source is reached before the characters in New_Item are
34645 exhausted, the remaining characters from New_Item are appended
34646 to the string.
34647
34648 83
34649 procedure Overwrite (Source : in out String;
34650 Position : in Positive;
34651 New_Item : in String;
34652 Drop : in Truncation := Right);
34653
34654 84
34655 Equivalent to Move(Overwrite(Source, Position, New_Item),
34656 Source, Drop).
34657
34658 85
34659 function Delete (Source : in String;
34660 From : in Positive;
34661 Through : in Natural)
34662 return String;
34663
34664 86/3
34665 If From <= Through, the returned string is
34666 Replace_Slice(Source, From, Through, ""); otherwise, it is
34667 Source with lower bound 1.
34668
34669 87
34670 procedure Delete (Source : in out String;
34671 From : in Positive;
34672 Through : in Natural;
34673 Justify : in Alignment := Left;
34674 Pad : in Character := Space);
34675
34676 88
34677 Equivalent to Move(Delete(Source, From, Through), Source,
34678 Justify => Justify, Pad => Pad).
34679
34680 89
34681 function Trim (Source : in String;
34682 Side : in Trim_End)
34683 return String;
34684
34685 90
34686 Returns the string obtained by removing from Source all
34687 leading Space characters (if Side = Left), all trailing Space
34688 characters (if Side = Right), or all leading and trailing
34689 Space characters (if Side = Both).
34690
34691 91
34692 procedure Trim (Source : in out String;
34693 Side : in Trim_End;
34694 Justify : in Alignment := Left;
34695 Pad : in Character := Space);
34696
34697 92
34698 Equivalent to Move(Trim(Source, Side), Source,
34699 Justify=>Justify, Pad=>Pad).
34700
34701 93
34702 function Trim (Source : in String;
34703 Left : in Maps.Character_Set;
34704 Right : in Maps.Character_Set)
34705 return String;
34706
34707 94
34708 Returns the string obtained by removing from Source all
34709 leading characters in Left and all trailing characters in
34710 Right.
34711
34712 95
34713 procedure Trim (Source : in out String;
34714 Left : in Maps.Character_Set;
34715 Right : in Maps.Character_Set;
34716 Justify : in Alignment := Strings.Left;
34717 Pad : in Character := Space);
34718
34719 96
34720 Equivalent to Move(Trim(Source, Left, Right), Source, Justify
34721 => Justify, Pad=>Pad).
34722
34723 97
34724 function Head (Source : in String;
34725 Count : in Natural;
34726 Pad : in Character := Space)
34727 return String;
34728
34729 98/3
34730 Returns a string of length Count. If Count <= Source'Length,
34731 the string comprises the first Count characters of Source.
34732 Otherwise, its contents are Source concatenated with
34733 Count-Source'Length Pad characters.
34734
34735 99
34736 procedure Head (Source : in out String;
34737 Count : in Natural;
34738 Justify : in Alignment := Left;
34739 Pad : in Character := Space);
34740
34741 100
34742 Equivalent to Move(Head(Source, Count, Pad), Source,
34743 Drop=>Error, Justify=>Justify, Pad=>Pad).
34744
34745 101
34746 function Tail (Source : in String;
34747 Count : in Natural;
34748 Pad : in Character := Space)
34749 return String;
34750
34751 102/3
34752 Returns a string of length Count. If Count <= Source'Length,
34753 the string comprises the last Count characters of Source.
34754 Otherwise, its contents are Count-Source'Length Pad characters
34755 concatenated with Source.
34756
34757 103
34758 procedure Tail (Source : in out String;
34759 Count : in Natural;
34760 Justify : in Alignment := Left;
34761 Pad : in Character := Space);
34762
34763 104
34764 Equivalent to Move(Tail(Source, Count, Pad), Source,
34765 Drop=>Error, Justify=>Justify, Pad=>Pad).
34766
34767 105
34768 function "*" (Left : in Natural;
34769 Right : in Character) return String;
34770
34771 function "*" (Left : in Natural;
34772 Right : in String) return String;
34773
34774 106/1
34775 These functions replicate a character or string a specified
34776 number of times. The first function returns a string whose
34777 length is Left and each of whose elements is Right. The
34778 second function returns a string whose length is
34779 Left*Right'Length and whose value is the null string if Left =
34780 0 and otherwise is (Left-1)*Right & Right with lower bound 1.
34781
34782 NOTES
34783
34784 107/3
34785 12 In the Index and Count functions taking Pattern and Mapping
34786 parameters, the actual String parameter passed to Pattern should
34787 comprise characters occurring as target characters of the mapping.
34788 Otherwise, the pattern will not match.
34789
34790 108
34791 13 In the Insert subprograms, inserting at the end of a string is
34792 obtained by passing Source'Last+1 as the Before parameter.
34793
34794 109
34795 14 If a null Character_Mapping_Function is passed to any of the
34796 string handling subprograms, Constraint_Error is propagated.
34797
34798 \1f
34799 File: arm2012.info, Node: A.4.4, Next: A.4.5, Prev: A.4.3, Up: A.4
34800
34801 A.4.4 Bounded-Length String Handling
34802 ------------------------------------
34803
34804 1
34805 The language-defined package Strings.Bounded provides a generic package
34806 each of whose instances yields a private type Bounded_String and a set
34807 of operations. An object of a particular Bounded_String type represents
34808 a String whose low bound is 1 and whose length can vary conceptually
34809 between 0 and a maximum size established at the generic instantiation.
34810 The subprograms for fixed-length string handling are either overloaded
34811 directly for Bounded_String, or are modified as needed to reflect the
34812 variability in length. Additionally, since the Bounded_String type is
34813 private, appropriate constructor and selector operations are provided.
34814
34815 _Static Semantics_
34816
34817 2
34818 The library package Strings.Bounded has the following declaration:
34819
34820 3
34821 with Ada.Strings.Maps;
34822 package Ada.Strings.Bounded is
34823 pragma Preelaborate(Bounded);
34824
34825 4
34826 generic
34827 Max : Positive; -- Maximum length of a Bounded_String
34828 package Generic_Bounded_Length is
34829
34830 5
34831 Max_Length : constant Positive := Max;
34832
34833 6
34834 type Bounded_String is private;
34835
34836 7
34837 Null_Bounded_String : constant Bounded_String;
34838
34839 8
34840 subtype Length_Range is Natural range 0 .. Max_Length;
34841
34842 9
34843 function Length (Source : in Bounded_String) return Length_Range;
34844
34845 10
34846 -- Conversion, Concatenation, and Selection functions
34847
34848 11
34849 function To_Bounded_String (Source : in String;
34850 Drop : in Truncation := Error)
34851 return Bounded_String;
34852
34853 12
34854 function To_String (Source : in Bounded_String) return String;
34855
34856 12.1/2
34857 procedure Set_Bounded_String
34858 (Target : out Bounded_String;
34859 Source : in String;
34860 Drop : in Truncation := Error);
34861
34862 13
34863 function Append (Left, Right : in Bounded_String;
34864 Drop : in Truncation := Error)
34865 return Bounded_String;
34866
34867 14
34868 function Append (Left : in Bounded_String;
34869 Right : in String;
34870 Drop : in Truncation := Error)
34871 return Bounded_String;
34872
34873 15
34874 function Append (Left : in String;
34875 Right : in Bounded_String;
34876 Drop : in Truncation := Error)
34877 return Bounded_String;
34878
34879 16
34880 function Append (Left : in Bounded_String;
34881 Right : in Character;
34882 Drop : in Truncation := Error)
34883 return Bounded_String;
34884
34885 17
34886 function Append (Left : in Character;
34887 Right : in Bounded_String;
34888 Drop : in Truncation := Error)
34889 return Bounded_String;
34890
34891 18
34892 procedure Append (Source : in out Bounded_String;
34893 New_Item : in Bounded_String;
34894 Drop : in Truncation := Error);
34895
34896 19
34897 procedure Append (Source : in out Bounded_String;
34898 New_Item : in String;
34899 Drop : in Truncation := Error);
34900
34901 20
34902 procedure Append (Source : in out Bounded_String;
34903 New_Item : in Character;
34904 Drop : in Truncation := Error);
34905
34906 21
34907 function "&" (Left, Right : in Bounded_String)
34908 return Bounded_String;
34909
34910 22
34911 function "&" (Left : in Bounded_String; Right : in String)
34912 return Bounded_String;
34913
34914 23
34915 function "&" (Left : in String; Right : in Bounded_String)
34916 return Bounded_String;
34917
34918 24
34919 function "&" (Left : in Bounded_String; Right : in Character)
34920 return Bounded_String;
34921
34922 25
34923 function "&" (Left : in Character; Right : in Bounded_String)
34924 return Bounded_String;
34925
34926 26
34927 function Element (Source : in Bounded_String;
34928 Index : in Positive)
34929 return Character;
34930
34931 27
34932 procedure Replace_Element (Source : in out Bounded_String;
34933 Index : in Positive;
34934 By : in Character);
34935
34936 28
34937 function Slice (Source : in Bounded_String;
34938 Low : in Positive;
34939 High : in Natural)
34940 return String;
34941
34942 28.1/2
34943 function Bounded_Slice
34944 (Source : in Bounded_String;
34945 Low : in Positive;
34946 High : in Natural)
34947 return Bounded_String;
34948
34949 28.2/2
34950 procedure Bounded_Slice
34951 (Source : in Bounded_String;
34952 Target : out Bounded_String;
34953 Low : in Positive;
34954 High : in Natural);
34955
34956 29
34957 function "=" (Left, Right : in Bounded_String) return Boolean;
34958 function "=" (Left : in Bounded_String; Right : in String)
34959 return Boolean;
34960
34961 30
34962 function "=" (Left : in String; Right : in Bounded_String)
34963 return Boolean;
34964
34965 31
34966 function "<" (Left, Right : in Bounded_String) return Boolean;
34967
34968 32
34969 function "<" (Left : in Bounded_String; Right : in String)
34970 return Boolean;
34971
34972 33
34973 function "<" (Left : in String; Right : in Bounded_String)
34974 return Boolean;
34975
34976 34
34977 function "<=" (Left, Right : in Bounded_String) return Boolean;
34978
34979 35
34980 function "<=" (Left : in Bounded_String; Right : in String)
34981 return Boolean;
34982
34983 36
34984 function "<=" (Left : in String; Right : in Bounded_String)
34985 return Boolean;
34986
34987 37
34988 function ">" (Left, Right : in Bounded_String) return Boolean;
34989
34990 38
34991 function ">" (Left : in Bounded_String; Right : in String)
34992 return Boolean;
34993
34994 39
34995 function ">" (Left : in String; Right : in Bounded_String)
34996 return Boolean;
34997
34998 40
34999 function ">=" (Left, Right : in Bounded_String) return Boolean;
35000
35001 41
35002 function ">=" (Left : in Bounded_String; Right : in String)
35003 return Boolean;
35004
35005 42
35006 function ">=" (Left : in String; Right : in Bounded_String)
35007 return Boolean;
35008
35009 43/2
35010 -- Search subprograms
35011
35012 43.1/2
35013 function Index (Source : in Bounded_String;
35014 Pattern : in String;
35015 From : in Positive;
35016 Going : in Direction := Forward;
35017 Mapping : in Maps.Character_Mapping := Maps.Identity)
35018 return Natural;
35019
35020 43.2/2
35021 function Index (Source : in Bounded_String;
35022 Pattern : in String;
35023 From : in Positive;
35024 Going : in Direction := Forward;
35025 Mapping : in Maps.Character_Mapping_Function)
35026 return Natural;
35027
35028 44
35029 function Index (Source : in Bounded_String;
35030 Pattern : in String;
35031 Going : in Direction := Forward;
35032 Mapping : in Maps.Character_Mapping
35033 := Maps.Identity)
35034 return Natural;
35035
35036 45
35037 function Index (Source : in Bounded_String;
35038 Pattern : in String;
35039 Going : in Direction := Forward;
35040 Mapping : in Maps.Character_Mapping_Function)
35041 return Natural;
35042
35043 45.1/2
35044 function Index (Source : in Bounded_String;
35045 Set : in Maps.Character_Set;
35046 From : in Positive;
35047 Test : in Membership := Inside;
35048 Going : in Direction := Forward)
35049 return Natural;
35050
35051 46
35052 function Index (Source : in Bounded_String;
35053 Set : in Maps.Character_Set;
35054 Test : in Membership := Inside;
35055 Going : in Direction := Forward)
35056 return Natural;
35057
35058 46.1/2
35059 function Index_Non_Blank (Source : in Bounded_String;
35060 From : in Positive;
35061 Going : in Direction := Forward)
35062 return Natural;
35063
35064 47
35065 function Index_Non_Blank (Source : in Bounded_String;
35066 Going : in Direction := Forward)
35067 return Natural;
35068
35069 48
35070 function Count (Source : in Bounded_String;
35071 Pattern : in String;
35072 Mapping : in Maps.Character_Mapping
35073 := Maps.Identity)
35074 return Natural;
35075
35076 49
35077 function Count (Source : in Bounded_String;
35078 Pattern : in String;
35079 Mapping : in Maps.Character_Mapping_Function)
35080 return Natural;
35081
35082 50
35083 function Count (Source : in Bounded_String;
35084 Set : in Maps.Character_Set)
35085 return Natural;
35086
35087 50.1/3
35088 procedure Find_Token (Source : in Bounded_String;
35089 Set : in Maps.Character_Set;
35090 From : in Positive;
35091 Test : in Membership;
35092 First : out Positive;
35093 Last : out Natural);
35094
35095 51
35096 procedure Find_Token (Source : in Bounded_String;
35097 Set : in Maps.Character_Set;
35098 Test : in Membership;
35099 First : out Positive;
35100 Last : out Natural);
35101
35102 52
35103 -- String translation subprograms
35104
35105 53
35106 function Translate (Source : in Bounded_String;
35107 Mapping : in Maps.Character_Mapping)
35108 return Bounded_String;
35109
35110 54
35111 procedure Translate (Source : in out Bounded_String;
35112 Mapping : in Maps.Character_Mapping);
35113
35114 55
35115 function Translate (Source : in Bounded_String;
35116 Mapping : in Maps.Character_Mapping_Function)
35117 return Bounded_String;
35118
35119 56
35120 procedure Translate (Source : in out Bounded_String;
35121 Mapping : in Maps.Character_Mapping_Function);
35122
35123 57
35124 -- String transformation subprograms
35125
35126 58
35127 function Replace_Slice (Source : in Bounded_String;
35128 Low : in Positive;
35129 High : in Natural;
35130 By : in String;
35131 Drop : in Truncation := Error)
35132 return Bounded_String;
35133
35134 59
35135 procedure Replace_Slice (Source : in out Bounded_String;
35136 Low : in Positive;
35137 High : in Natural;
35138 By : in String;
35139 Drop : in Truncation := Error);
35140
35141 60
35142 function Insert (Source : in Bounded_String;
35143 Before : in Positive;
35144 New_Item : in String;
35145 Drop : in Truncation := Error)
35146 return Bounded_String;
35147
35148 61
35149 procedure Insert (Source : in out Bounded_String;
35150 Before : in Positive;
35151 New_Item : in String;
35152 Drop : in Truncation := Error);
35153
35154 62
35155 function Overwrite (Source : in Bounded_String;
35156 Position : in Positive;
35157 New_Item : in String;
35158 Drop : in Truncation := Error)
35159 return Bounded_String;
35160
35161 63
35162 procedure Overwrite (Source : in out Bounded_String;
35163 Position : in Positive;
35164 New_Item : in String;
35165 Drop : in Truncation := Error);
35166
35167 64
35168 function Delete (Source : in Bounded_String;
35169 From : in Positive;
35170 Through : in Natural)
35171 return Bounded_String;
35172
35173 65
35174 procedure Delete (Source : in out Bounded_String;
35175 From : in Positive;
35176 Through : in Natural);
35177
35178 66
35179 --String selector subprograms
35180
35181 67
35182 function Trim (Source : in Bounded_String;
35183 Side : in Trim_End)
35184 return Bounded_String;
35185 procedure Trim (Source : in out Bounded_String;
35186 Side : in Trim_End);
35187
35188 68
35189 function Trim (Source : in Bounded_String;
35190 Left : in Maps.Character_Set;
35191 Right : in Maps.Character_Set)
35192 return Bounded_String;
35193
35194 69
35195 procedure Trim (Source : in out Bounded_String;
35196 Left : in Maps.Character_Set;
35197 Right : in Maps.Character_Set);
35198
35199 70
35200 function Head (Source : in Bounded_String;
35201 Count : in Natural;
35202 Pad : in Character := Space;
35203 Drop : in Truncation := Error)
35204 return Bounded_String;
35205
35206 71
35207 procedure Head (Source : in out Bounded_String;
35208 Count : in Natural;
35209 Pad : in Character := Space;
35210 Drop : in Truncation := Error);
35211
35212 72
35213 function Tail (Source : in Bounded_String;
35214 Count : in Natural;
35215 Pad : in Character := Space;
35216 Drop : in Truncation := Error)
35217 return Bounded_String;
35218
35219 73
35220 procedure Tail (Source : in out Bounded_String;
35221 Count : in Natural;
35222 Pad : in Character := Space;
35223 Drop : in Truncation := Error);
35224
35225 74
35226 --String constructor subprograms
35227
35228 75
35229 function "*" (Left : in Natural;
35230 Right : in Character)
35231 return Bounded_String;
35232
35233 76
35234 function "*" (Left : in Natural;
35235 Right : in String)
35236 return Bounded_String;
35237
35238 77
35239 function "*" (Left : in Natural;
35240 Right : in Bounded_String)
35241 return Bounded_String;
35242
35243 78
35244 function Replicate (Count : in Natural;
35245 Item : in Character;
35246 Drop : in Truncation := Error)
35247 return Bounded_String;
35248
35249 79
35250 function Replicate (Count : in Natural;
35251 Item : in String;
35252 Drop : in Truncation := Error)
35253 return Bounded_String;
35254
35255 80
35256 function Replicate (Count : in Natural;
35257 Item : in Bounded_String;
35258 Drop : in Truncation := Error)
35259 return Bounded_String;
35260
35261 81
35262 private
35263 ... -- not specified by the language
35264 end Generic_Bounded_Length;
35265
35266 82
35267 end Ada.Strings.Bounded;
35268
35269 83
35270 Null_Bounded_String represents the null string. If an object of type
35271 Bounded_String is not otherwise initialized, it will be initialized to
35272 the same value as Null_Bounded_String.
35273
35274 84
35275 function Length (Source : in Bounded_String) return Length_Range;
35276
35277 85
35278 The Length function returns the length of the string
35279 represented by Source.
35280
35281 86
35282 function To_Bounded_String (Source : in String;
35283 Drop : in Truncation := Error)
35284 return Bounded_String;
35285
35286 87/3
35287 If Source'Length <= Max_Length, then this function returns a
35288 Bounded_String that represents Source. Otherwise, the effect
35289 depends on the value of Drop:
35290
35291 88
35292 * If Drop=Left, then the result is a Bounded_String that
35293 represents the string comprising the rightmost Max_Length
35294 characters of Source.
35295
35296 89
35297 * If Drop=Right, then the result is a Bounded_String that
35298 represents the string comprising the leftmost Max_Length
35299 characters of Source.
35300
35301 90
35302 * If Drop=Error, then Strings.Length_Error is propagated.
35303
35304 91
35305 function To_String (Source : in Bounded_String) return String;
35306
35307 92
35308 To_String returns the String value with lower bound 1
35309 represented by Source. If B is a Bounded_String, then B =
35310 To_Bounded_String(To_String(B)).
35311
35312 92.1/2
35313 procedure Set_Bounded_String
35314 (Target : out Bounded_String;
35315 Source : in String;
35316 Drop : in Truncation := Error);
35317
35318 92.2/2
35319 Equivalent to Target := To_Bounded_String (Source, Drop);
35320
35321 93
35322 Each of the Append functions returns a Bounded_String obtained by
35323 concatenating the string or character given or represented by one of the
35324 parameters, with the string or character given or represented by the
35325 other parameter, and applying To_Bounded_String to the concatenation
35326 result string, with Drop as provided to the Append function.
35327
35328 94
35329 Each of the procedures Append(Source, New_Item, Drop) has the same
35330 effect as the corresponding assignment Source := Append(Source,
35331 New_Item, Drop).
35332
35333 95
35334 Each of the "&" functions has the same effect as the corresponding
35335 Append function, with Error as the Drop parameter.
35336
35337 96
35338 function Element (Source : in Bounded_String;
35339 Index : in Positive)
35340 return Character;
35341
35342 97
35343 Returns the character at position Index in the string
35344 represented by Source; propagates Index_Error if Index >
35345 Length(Source).
35346
35347 98
35348 procedure Replace_Element (Source : in out Bounded_String;
35349 Index : in Positive;
35350 By : in Character);
35351
35352 99
35353 Updates Source such that the character at position Index in
35354 the string represented by Source is By; propagates Index_Error
35355 if Index > Length(Source).
35356
35357 100
35358 function Slice (Source : in Bounded_String;
35359 Low : in Positive;
35360 High : in Natural)
35361 return String;
35362
35363 101/1
35364 Returns the slice at positions Low through High in the string
35365 represented by Source; propagates Index_Error if Low >
35366 Length(Source)+1 or High > Length(Source). The bounds of the
35367 returned string are Low and High..
35368
35369 101.1/2
35370 function Bounded_Slice
35371 (Source : in Bounded_String;
35372 Low : in Positive;
35373 High : in Natural)
35374 return Bounded_String;
35375
35376 101.2/2
35377 Returns the slice at positions Low through High in the string
35378 represented by Source as a bounded string; propagates
35379 Index_Error if Low > Length(Source)+1 or High >
35380 Length(Source).
35381
35382 101.3/2
35383 procedure Bounded_Slice
35384 (Source : in Bounded_String;
35385 Target : out Bounded_String;
35386 Low : in Positive;
35387 High : in Natural);
35388
35389 101.4/2
35390 Equivalent to Target := Bounded_Slice (Source, Low, High);
35391
35392 102
35393 Each of the functions "=", "<", ">", "<=", and ">=" returns the same
35394 result as the corresponding String operation applied to the String
35395 values given or represented by the two parameters.
35396
35397 103
35398 Each of the search subprograms (Index, Index_Non_Blank, Count,
35399 Find_Token) has the same effect as the corresponding subprogram in
35400 Strings.Fixed applied to the string represented by the Bounded_String
35401 parameter.
35402
35403 104
35404 Each of the Translate subprograms, when applied to a Bounded_String, has
35405 an analogous effect to the corresponding subprogram in Strings.Fixed.
35406 For the Translate function, the translation is applied to the string
35407 represented by the Bounded_String parameter, and the result is converted
35408 (via To_Bounded_String) to a Bounded_String. For the Translate
35409 procedure, the string represented by the Bounded_String parameter after
35410 the translation is given by the Translate function for fixed-length
35411 strings applied to the string represented by the original value of the
35412 parameter.
35413
35414 105/1
35415 Each of the transformation subprograms (Replace_Slice, Insert,
35416 Overwrite, Delete), selector subprograms (Trim, Head, Tail), and
35417 constructor functions ("*") has an effect based on its corresponding
35418 subprogram in Strings.Fixed, and Replicate is based on Fixed."*". In
35419 the case of a function, the corresponding fixed-length string subprogram
35420 is applied to the string represented by the Bounded_String parameter.
35421 To_Bounded_String is applied the result string, with Drop (or Error in
35422 the case of Generic_Bounded_Length."*") determining the effect when the
35423 string length exceeds Max_Length. In the case of a procedure, the
35424 corresponding function in Strings.Bounded.Generic_Bounded_Length is
35425 applied, with the result assigned into the Source parameter.
35426
35427 _Implementation Advice_
35428
35429 106
35430 Bounded string objects should not be implemented by implicit pointers
35431 and dynamic allocation.
35432
35433 \1f
35434 File: arm2012.info, Node: A.4.5, Next: A.4.6, Prev: A.4.4, Up: A.4
35435
35436 A.4.5 Unbounded-Length String Handling
35437 --------------------------------------
35438
35439 1
35440 The language-defined package Strings.Unbounded provides a private type
35441 Unbounded_String and a set of operations. An object of type
35442 Unbounded_String represents a String whose low bound is 1 and whose
35443 length can vary conceptually between 0 and Natural'Last. The
35444 subprograms for fixed-length string handling are either overloaded
35445 directly for Unbounded_String, or are modified as needed to reflect the
35446 flexibility in length. Since the Unbounded_String type is private,
35447 relevant constructor and selector operations are provided.
35448
35449 _Static Semantics_
35450
35451 2
35452 The library package Strings.Unbounded has the following declaration:
35453
35454 3
35455 with Ada.Strings.Maps;
35456 package Ada.Strings.Unbounded is
35457 pragma Preelaborate(Unbounded);
35458
35459 4/2
35460 type Unbounded_String is private;
35461 pragma Preelaborable_Initialization(Unbounded_String);
35462
35463 5
35464 Null_Unbounded_String : constant Unbounded_String;
35465
35466 6
35467 function Length (Source : in Unbounded_String) return Natural;
35468
35469 7
35470 type String_Access is access all String;
35471 procedure Free (X : in out String_Access);
35472
35473 8
35474 -- Conversion, Concatenation, and Selection functions
35475
35476 9
35477 function To_Unbounded_String (Source : in String)
35478 return Unbounded_String;
35479
35480 10
35481 function To_Unbounded_String (Length : in Natural)
35482 return Unbounded_String;
35483
35484 11
35485 function To_String (Source : in Unbounded_String) return String;
35486
35487 11.1/2
35488 procedure Set_Unbounded_String
35489 (Target : out Unbounded_String;
35490 Source : in String);
35491
35492 12
35493 procedure Append (Source : in out Unbounded_String;
35494 New_Item : in Unbounded_String);
35495
35496 13
35497 procedure Append (Source : in out Unbounded_String;
35498 New_Item : in String);
35499
35500 14
35501 procedure Append (Source : in out Unbounded_String;
35502 New_Item : in Character);
35503
35504 15
35505 function "&" (Left, Right : in Unbounded_String)
35506 return Unbounded_String;
35507
35508 16
35509 function "&" (Left : in Unbounded_String; Right : in String)
35510 return Unbounded_String;
35511
35512 17
35513 function "&" (Left : in String; Right : in Unbounded_String)
35514 return Unbounded_String;
35515
35516 18
35517 function "&" (Left : in Unbounded_String; Right : in Character)
35518 return Unbounded_String;
35519
35520 19
35521 function "&" (Left : in Character; Right : in Unbounded_String)
35522 return Unbounded_String;
35523
35524 20
35525 function Element (Source : in Unbounded_String;
35526 Index : in Positive)
35527 return Character;
35528
35529 21
35530 procedure Replace_Element (Source : in out Unbounded_String;
35531 Index : in Positive;
35532 By : in Character);
35533
35534 22
35535 function Slice (Source : in Unbounded_String;
35536 Low : in Positive;
35537 High : in Natural)
35538 return String;
35539
35540 22.1/2
35541 function Unbounded_Slice
35542 (Source : in Unbounded_String;
35543 Low : in Positive;
35544 High : in Natural)
35545 return Unbounded_String;
35546
35547 22.2/2
35548 procedure Unbounded_Slice
35549 (Source : in Unbounded_String;
35550 Target : out Unbounded_String;
35551 Low : in Positive;
35552 High : in Natural);
35553
35554 23
35555 function "=" (Left, Right : in Unbounded_String) return Boolean;
35556
35557 24
35558 function "=" (Left : in Unbounded_String; Right : in String)
35559 return Boolean;
35560
35561 25
35562 function "=" (Left : in String; Right : in Unbounded_String)
35563 return Boolean;
35564
35565 26
35566 function "<" (Left, Right : in Unbounded_String) return Boolean;
35567
35568 27
35569 function "<" (Left : in Unbounded_String; Right : in String)
35570 return Boolean;
35571
35572 28
35573 function "<" (Left : in String; Right : in Unbounded_String)
35574 return Boolean;
35575
35576 29
35577 function "<=" (Left, Right : in Unbounded_String) return Boolean;
35578
35579 30
35580 function "<=" (Left : in Unbounded_String; Right : in String)
35581 return Boolean;
35582
35583 31
35584 function "<=" (Left : in String; Right : in Unbounded_String)
35585 return Boolean;
35586
35587 32
35588 function ">" (Left, Right : in Unbounded_String) return Boolean;
35589
35590 33
35591 function ">" (Left : in Unbounded_String; Right : in String)
35592 return Boolean;
35593
35594 34
35595 function ">" (Left : in String; Right : in Unbounded_String)
35596 return Boolean;
35597
35598 35
35599 function ">=" (Left, Right : in Unbounded_String) return Boolean;
35600
35601 36
35602 function ">=" (Left : in Unbounded_String; Right : in String)
35603 return Boolean;
35604
35605 37
35606 function ">=" (Left : in String; Right : in Unbounded_String)
35607 return Boolean;
35608
35609 38
35610 -- Search subprograms
35611
35612 38.1/2
35613 function Index (Source : in Unbounded_String;
35614 Pattern : in String;
35615 From : in Positive;
35616 Going : in Direction := Forward;
35617 Mapping : in Maps.Character_Mapping := Maps.Identity)
35618 return Natural;
35619
35620 38.2/2
35621 function Index (Source : in Unbounded_String;
35622 Pattern : in String;
35623 From : in Positive;
35624 Going : in Direction := Forward;
35625 Mapping : in Maps.Character_Mapping_Function)
35626 return Natural;
35627
35628 39
35629 function Index (Source : in Unbounded_String;
35630 Pattern : in String;
35631 Going : in Direction := Forward;
35632 Mapping : in Maps.Character_Mapping
35633 := Maps.Identity)
35634 return Natural;
35635
35636 40
35637 function Index (Source : in Unbounded_String;
35638 Pattern : in String;
35639 Going : in Direction := Forward;
35640 Mapping : in Maps.Character_Mapping_Function)
35641 return Natural;
35642
35643 40.1/2
35644 function Index (Source : in Unbounded_String;
35645 Set : in Maps.Character_Set;
35646 From : in Positive;
35647 Test : in Membership := Inside;
35648 Going : in Direction := Forward)
35649 return Natural;
35650
35651 41
35652 function Index (Source : in Unbounded_String;
35653 Set : in Maps.Character_Set;
35654 Test : in Membership := Inside;
35655 Going : in Direction := Forward) return Natural;
35656
35657 41.1/2
35658 function Index_Non_Blank (Source : in Unbounded_String;
35659 From : in Positive;
35660 Going : in Direction := Forward)
35661 return Natural;
35662
35663 42
35664 function Index_Non_Blank (Source : in Unbounded_String;
35665 Going : in Direction := Forward)
35666 return Natural;
35667
35668 43
35669 function Count (Source : in Unbounded_String;
35670 Pattern : in String;
35671 Mapping : in Maps.Character_Mapping
35672 := Maps.Identity)
35673 return Natural;
35674
35675 44
35676 function Count (Source : in Unbounded_String;
35677 Pattern : in String;
35678 Mapping : in Maps.Character_Mapping_Function)
35679 return Natural;
35680
35681 45
35682 function Count (Source : in Unbounded_String;
35683 Set : in Maps.Character_Set)
35684 return Natural;
35685
35686 45.1/3
35687 procedure Find_Token (Source : in Unbounded_String;
35688 Set : in Maps.Character_Set;
35689 From : in Positive;
35690 Test : in Membership;
35691 First : out Positive;
35692 Last : out Natural);
35693
35694 46
35695 procedure Find_Token (Source : in Unbounded_String;
35696 Set : in Maps.Character_Set;
35697 Test : in Membership;
35698 First : out Positive;
35699 Last : out Natural);
35700
35701 47
35702 -- String translation subprograms
35703
35704 48
35705 function Translate (Source : in Unbounded_String;
35706 Mapping : in Maps.Character_Mapping)
35707 return Unbounded_String;
35708
35709 49
35710 procedure Translate (Source : in out Unbounded_String;
35711 Mapping : in Maps.Character_Mapping);
35712
35713 50
35714 function Translate (Source : in Unbounded_String;
35715 Mapping : in Maps.Character_Mapping_Function)
35716 return Unbounded_String;
35717
35718 51
35719 procedure Translate (Source : in out Unbounded_String;
35720 Mapping : in Maps.Character_Mapping_Function);
35721
35722 52
35723 -- String transformation subprograms
35724
35725 53
35726 function Replace_Slice (Source : in Unbounded_String;
35727 Low : in Positive;
35728 High : in Natural;
35729 By : in String)
35730 return Unbounded_String;
35731
35732 54
35733 procedure Replace_Slice (Source : in out Unbounded_String;
35734 Low : in Positive;
35735 High : in Natural;
35736 By : in String);
35737
35738 55
35739 function Insert (Source : in Unbounded_String;
35740 Before : in Positive;
35741 New_Item : in String)
35742 return Unbounded_String;
35743
35744 56
35745 procedure Insert (Source : in out Unbounded_String;
35746 Before : in Positive;
35747 New_Item : in String);
35748
35749 57
35750 function Overwrite (Source : in Unbounded_String;
35751 Position : in Positive;
35752 New_Item : in String)
35753 return Unbounded_String;
35754
35755 58
35756 procedure Overwrite (Source : in out Unbounded_String;
35757 Position : in Positive;
35758 New_Item : in String);
35759
35760 59
35761 function Delete (Source : in Unbounded_String;
35762 From : in Positive;
35763 Through : in Natural)
35764 return Unbounded_String;
35765
35766 60
35767 procedure Delete (Source : in out Unbounded_String;
35768 From : in Positive;
35769 Through : in Natural);
35770
35771 61
35772 function Trim (Source : in Unbounded_String;
35773 Side : in Trim_End)
35774 return Unbounded_String;
35775
35776 62
35777 procedure Trim (Source : in out Unbounded_String;
35778 Side : in Trim_End);
35779
35780 63
35781 function Trim (Source : in Unbounded_String;
35782 Left : in Maps.Character_Set;
35783 Right : in Maps.Character_Set)
35784 return Unbounded_String;
35785
35786 64
35787 procedure Trim (Source : in out Unbounded_String;
35788 Left : in Maps.Character_Set;
35789 Right : in Maps.Character_Set);
35790
35791 65
35792 function Head (Source : in Unbounded_String;
35793 Count : in Natural;
35794 Pad : in Character := Space)
35795 return Unbounded_String;
35796
35797 66
35798 procedure Head (Source : in out Unbounded_String;
35799 Count : in Natural;
35800 Pad : in Character := Space);
35801
35802 67
35803 function Tail (Source : in Unbounded_String;
35804 Count : in Natural;
35805 Pad : in Character := Space)
35806 return Unbounded_String;
35807
35808 68
35809 procedure Tail (Source : in out Unbounded_String;
35810 Count : in Natural;
35811 Pad : in Character := Space);
35812
35813 69
35814 function "*" (Left : in Natural;
35815 Right : in Character)
35816 return Unbounded_String;
35817
35818 70
35819 function "*" (Left : in Natural;
35820 Right : in String)
35821 return Unbounded_String;
35822
35823 71
35824 function "*" (Left : in Natural;
35825 Right : in Unbounded_String)
35826 return Unbounded_String;
35827
35828 72
35829 private
35830 ... -- not specified by the language
35831 end Ada.Strings.Unbounded;
35832
35833 72.1/2
35834 The type Unbounded_String needs finalization (see *note 7.6::).
35835
35836 73
35837 Null_Unbounded_String represents the null String. If an object of type
35838 Unbounded_String is not otherwise initialized, it will be initialized to
35839 the same value as Null_Unbounded_String.
35840
35841 74
35842 The function Length returns the length of the String represented by
35843 Source.
35844
35845 75
35846 The type String_Access provides a (nonprivate) access type for explicit
35847 processing of unbounded-length strings. The procedure Free performs an
35848 unchecked deallocation of an object of type String_Access.
35849
35850 76
35851 The function To_Unbounded_String(Source : in String) returns an
35852 Unbounded_String that represents Source. The function
35853 To_Unbounded_String(Length : in Natural) returns an Unbounded_String
35854 that represents an uninitialized String whose length is Length.
35855
35856 77
35857 The function To_String returns the String with lower bound 1 represented
35858 by Source. To_String and To_Unbounded_String are related as follows:
35859
35860 78
35861 * If S is a String, then To_String(To_Unbounded_String(S)) = S.
35862
35863 79
35864 * If U is an Unbounded_String, then To_Unbounded_String(To_String(U))
35865 = U.
35866
35867 79.1/2
35868 The procedure Set_Unbounded_String sets Target to an Unbounded_String
35869 that represents Source.
35870
35871 80
35872 For each of the Append procedures, the resulting string represented by
35873 the Source parameter is given by the concatenation of the original value
35874 of Source and the value of New_Item.
35875
35876 81
35877 Each of the "&" functions returns an Unbounded_String obtained by
35878 concatenating the string or character given or represented by one of the
35879 parameters, with the string or character given or represented by the
35880 other parameter, and applying To_Unbounded_String to the concatenation
35881 result string.
35882
35883 82
35884 The Element, Replace_Element, and Slice subprograms have the same effect
35885 as the corresponding bounded-length string subprograms.
35886
35887 82.1/3
35888 The function Unbounded_Slice returns the slice at positions Low through
35889 High in the string represented by Source as an Unbounded_String. The
35890 procedure Unbounded_Slice sets Target to the Unbounded_String
35891 representing the slice at positions Low through High in the string
35892 represented by Source. Both subprograms propagate Index_Error if Low >
35893 Length(Source)+1 or High > Length(Source).
35894
35895 83
35896 Each of the functions "=", "<", ">", "<=", and ">=" returns the same
35897 result as the corresponding String operation applied to the String
35898 values given or represented by Left and Right.
35899
35900 84
35901 Each of the search subprograms (Index, Index_Non_Blank, Count,
35902 Find_Token) has the same effect as the corresponding subprogram in
35903 Strings.Fixed applied to the string represented by the Unbounded_String
35904 parameter.
35905
35906 85
35907 The Translate function has an analogous effect to the corresponding
35908 subprogram in Strings.Fixed. The translation is applied to the string
35909 represented by the Unbounded_String parameter, and the result is
35910 converted (via To_Unbounded_String) to an Unbounded_String.
35911
35912 86
35913 Each of the transformation functions (Replace_Slice, Insert, Overwrite,
35914 Delete), selector functions (Trim, Head, Tail), and constructor
35915 functions ("*") is likewise analogous to its corresponding subprogram in
35916 Strings.Fixed. For each of the subprograms, the corresponding
35917 fixed-length string subprogram is applied to the string represented by
35918 the Unbounded_String parameter, and To_Unbounded_String is applied the
35919 result string.
35920
35921 87
35922 For each of the procedures Translate, Replace_Slice, Insert, Overwrite,
35923 Delete, Trim, Head, and Tail, the resulting string represented by the
35924 Source parameter is given by the corresponding function for fixed-length
35925 strings applied to the string represented by Source's original value.
35926
35927 _Implementation Requirements_
35928
35929 88
35930 No storage associated with an Unbounded_String object shall be lost upon
35931 assignment or scope exit.
35932
35933 \1f
35934 File: arm2012.info, Node: A.4.6, Next: A.4.7, Prev: A.4.5, Up: A.4
35935
35936 A.4.6 String-Handling Sets and Mappings
35937 ---------------------------------------
35938
35939 1
35940 The language-defined package Strings.Maps.Constants declares
35941 Character_Set and Character_Mapping constants corresponding to
35942 classification and conversion functions in package Characters.Handling.
35943
35944 _Static Semantics_
35945
35946 2
35947 The library package Strings.Maps.Constants has the following
35948 declaration:
35949
35950 3/2
35951 package Ada.Strings.Maps.Constants is
35952 pragma Pure(Constants);
35953
35954 4
35955 Control_Set : constant Character_Set;
35956 Graphic_Set : constant Character_Set;
35957 Letter_Set : constant Character_Set;
35958 Lower_Set : constant Character_Set;
35959 Upper_Set : constant Character_Set;
35960 Basic_Set : constant Character_Set;
35961 Decimal_Digit_Set : constant Character_Set;
35962 Hexadecimal_Digit_Set : constant Character_Set;
35963 Alphanumeric_Set : constant Character_Set;
35964 Special_Set : constant Character_Set;
35965 ISO_646_Set : constant Character_Set;
35966
35967 5
35968 Lower_Case_Map : constant Character_Mapping;
35969 --Maps to lower case for letters, else identity
35970 Upper_Case_Map : constant Character_Mapping;
35971 --Maps to upper case for letters, else identity
35972 Basic_Map : constant Character_Mapping;
35973 --Maps to basic letter for letters, else identity
35974
35975 6
35976 private
35977 ... -- not specified by the language
35978 end Ada.Strings.Maps.Constants;
35979
35980 7
35981 Each of these constants represents a correspondingly named set of
35982 characters or character mapping in Characters.Handling (see *note
35983 A.3.2::).
35984
35985 NOTES
35986
35987 8/3
35988 15 There are certain characters which are defined to be lower case
35989 letters by ISO 10646 and are therefore allowed in identifiers, but
35990 are not considered lower case letters by
35991 Ada.Strings.Maps.Constants.
35992
35993 \1f
35994 File: arm2012.info, Node: A.4.7, Next: A.4.8, Prev: A.4.6, Up: A.4
35995
35996 A.4.7 Wide_String Handling
35997 --------------------------
35998
35999 1/3
36000 Facilities for handling strings of Wide_Character elements are found in
36001 the packages Strings.Wide_Maps, Strings.Wide_Fixed,
36002 Strings.Wide_Bounded, Strings.Wide_Unbounded, and
36003 Strings.Wide_Maps.Wide_Constants, and in the library functions
36004 Strings.Wide_Hash, Strings.Wide_Fixed.Wide_Hash,
36005 Strings.Wide_Bounded.Wide_Hash, Strings.Wide_Unbounded.Wide_Hash,
36006 Strings.Wide_Hash_Case_Insensitive,
36007 Strings.Wide_Fixed.Wide_Hash_Case_Insensitive,
36008 Strings.Wide_Bounded.Wide_Hash_Case_Insensitive,
36009 Strings.Wide_Unbounded.Wide_Hash_Case_Insensitive,
36010 Strings.Wide_Equal_Case_Insensitive,
36011 Strings.Wide_Fixed.Wide_Equal_Case_Insensitive,
36012 Strings.Wide_Bounded.Wide_Equal_Case_Insensitive, and
36013 Strings.Wide_Unbounded.Wide_Equal_Case_Insensitive. They provide the
36014 same string-handling operations as the corresponding packages and
36015 functions for strings of Character elements.
36016
36017 _Static Semantics_
36018
36019 2
36020 The package Strings.Wide_Maps has the following declaration.
36021
36022 3
36023 package Ada.Strings.Wide_Maps is
36024 pragma Preelaborate(Wide_Maps);
36025
36026 4/2
36027 -- Representation for a set of Wide_Character values:
36028 type Wide_Character_Set is private;
36029 pragma Preelaborable_Initialization(Wide_Character_Set);
36030
36031 5
36032 Null_Set : constant Wide_Character_Set;
36033
36034 6
36035 type Wide_Character_Range is
36036 record
36037 Low : Wide_Character;
36038 High : Wide_Character;
36039 end record;
36040 -- Represents Wide_Character range Low..High
36041
36042 7
36043 type Wide_Character_Ranges is array (Positive range <>)
36044 of Wide_Character_Range;
36045
36046 8
36047 function To_Set (Ranges : in Wide_Character_Ranges)
36048 return Wide_Character_Set;
36049
36050 9
36051 function To_Set (Span : in Wide_Character_Range)
36052 return Wide_Character_Set;
36053
36054 10
36055 function To_Ranges (Set : in Wide_Character_Set)
36056 return Wide_Character_Ranges;
36057
36058 11
36059 function "=" (Left, Right : in Wide_Character_Set) return Boolean;
36060
36061 12
36062 function "not" (Right : in Wide_Character_Set)
36063 return Wide_Character_Set;
36064 function "and" (Left, Right : in Wide_Character_Set)
36065 return Wide_Character_Set;
36066 function "or" (Left, Right : in Wide_Character_Set)
36067 return Wide_Character_Set;
36068 function "xor" (Left, Right : in Wide_Character_Set)
36069 return Wide_Character_Set;
36070 function "-" (Left, Right : in Wide_Character_Set)
36071 return Wide_Character_Set;
36072
36073 13
36074 function Is_In (Element : in Wide_Character;
36075 Set : in Wide_Character_Set)
36076 return Boolean;
36077
36078 14
36079 function Is_Subset (Elements : in Wide_Character_Set;
36080 Set : in Wide_Character_Set)
36081 return Boolean;
36082
36083 15
36084 function "<=" (Left : in Wide_Character_Set;
36085 Right : in Wide_Character_Set)
36086 return Boolean renames Is_Subset;
36087
36088 16
36089 -- Alternative representation for a set of Wide_Character values:
36090 subtype Wide_Character_Sequence is Wide_String;
36091
36092 17
36093 function To_Set (Sequence : in Wide_Character_Sequence)
36094 return Wide_Character_Set;
36095
36096 18
36097 function To_Set (Singleton : in Wide_Character)
36098 return Wide_Character_Set;
36099
36100 19
36101 function To_Sequence (Set : in Wide_Character_Set)
36102 return Wide_Character_Sequence;
36103
36104 20/2
36105 -- Representation for a Wide_Character to Wide_Character mapping:
36106 type Wide_Character_Mapping is private;
36107 pragma Preelaborable_Initialization(Wide_Character_Mapping);
36108
36109 21
36110 function Value (Map : in Wide_Character_Mapping;
36111 Element : in Wide_Character)
36112 return Wide_Character;
36113
36114 22
36115 Identity : constant Wide_Character_Mapping;
36116
36117 23
36118 function To_Mapping (From, To : in Wide_Character_Sequence)
36119 return Wide_Character_Mapping;
36120
36121 24
36122 function To_Domain (Map : in Wide_Character_Mapping)
36123 return Wide_Character_Sequence;
36124
36125 25
36126 function To_Range (Map : in Wide_Character_Mapping)
36127 return Wide_Character_Sequence;
36128
36129 26
36130 type Wide_Character_Mapping_Function is
36131 access function (From : in Wide_Character) return Wide_Character;
36132
36133 27
36134 private
36135 ... -- not specified by the language
36136 end Ada.Strings.Wide_Maps;
36137
36138 28
36139 The context clause for each of the packages Strings.Wide_Fixed,
36140 Strings.Wide_Bounded, and Strings.Wide_Unbounded identifies
36141 Strings.Wide_Maps instead of Strings.Maps.
36142
36143 28.1/3
36144 Types Wide_Character_Set and Wide_Character_Mapping need finalization.
36145
36146 29/3
36147 For each of the packages Strings.Fixed, Strings.Bounded,
36148 Strings.Unbounded, and Strings.Maps.Constants, and for library functions
36149 Strings.Hash, Strings.Fixed.Hash, Strings.Bounded.Hash,
36150 Strings.Unbounded.Hash, Strings.Hash_Case_Insensitive,
36151 Strings.Fixed.Hash_Case_Insensitive,
36152 Strings.Bounded.Hash_Case_Insensitive,
36153 Strings.Unbounded.Hash_Case_Insensitive, Strings.Equal_Case_Insensitive,
36154 Strings.Fixed.Equal_Case_Insensitive,
36155 Strings.Bounded.Equal_Case_Insensitive, and
36156 Strings.Unbounded.Equal_Case_Insensitive, the corresponding wide string
36157 package or function has the same contents except that
36158
36159 30
36160 * Wide_Space replaces Space
36161
36162 31
36163 * Wide_Character replaces Character
36164
36165 32
36166 * Wide_String replaces String
36167
36168 33
36169 * Wide_Character_Set replaces Character_Set
36170
36171 34
36172 * Wide_Character_Mapping replaces Character_Mapping
36173
36174 35
36175 * Wide_Character_Mapping_Function replaces Character_Mapping_Function
36176
36177 36
36178 * Wide_Maps replaces Maps
36179
36180 37
36181 * Bounded_Wide_String replaces Bounded_String
36182
36183 38
36184 * Null_Bounded_Wide_String replaces Null_Bounded_String
36185
36186 39
36187 * To_Bounded_Wide_String replaces To_Bounded_String
36188
36189 40
36190 * To_Wide_String replaces To_String
36191
36192 40.1/2
36193 * Set_Bounded_Wide_String replaces Set_Bounded_String
36194
36195 41
36196 * Unbounded_Wide_String replaces Unbounded_String
36197
36198 42
36199 * Null_Unbounded_Wide_String replaces Null_Unbounded_String
36200
36201 43
36202 * Wide_String_Access replaces String_Access
36203
36204 44
36205 * To_Unbounded_Wide_String replaces To_Unbounded_String
36206
36207 44.1/2
36208 * Set_Unbounded_Wide_String replaces Set_Unbounded_String
36209
36210 45
36211 The following additional declaration is present in
36212 Strings.Wide_Maps.Wide_Constants:
36213
36214 46/2
36215 Character_Set : constant Wide_Maps.Wide_Character_Set;
36216 --Contains each Wide_Character value WC such that
36217 --Characters.Conversions.Is_Character(WC) is True
36218
36219 46.1/2
36220 Each Wide_Character_Set constant in the package
36221 Strings.Wide_Maps.Wide_Constants contains no values outside the
36222 Character portion of Wide_Character. Similarly, each
36223 Wide_Character_Mapping constant in this package is the identity mapping
36224 when applied to any element outside the Character portion of
36225 Wide_Character.
36226
36227 46.2/2
36228 Pragma Pure is replaced by pragma Preelaborate in
36229 Strings.Wide_Maps.Wide_Constants.
36230
36231 NOTES
36232
36233 47
36234 16 If a null Wide_Character_Mapping_Function is passed to any of
36235 the Wide_String handling subprograms, Constraint_Error is
36236 propagated.
36237
36238 \1f
36239 File: arm2012.info, Node: A.4.8, Next: A.4.9, Prev: A.4.7, Up: A.4
36240
36241 A.4.8 Wide_Wide_String Handling
36242 -------------------------------
36243
36244 1/3
36245 Facilities for handling strings of Wide_Wide_Character elements are
36246 found in the packages Strings.Wide_Wide_Maps, Strings.Wide_Wide_Fixed,
36247 Strings.Wide_Wide_Bounded, Strings.Wide_Wide_Unbounded, and
36248 Strings.Wide_Wide_Maps.Wide_Wide_Constants, and in the library functions
36249 Strings.Wide_Wide_Hash, Strings.Wide_Wide_Fixed.Wide_Wide_Hash,
36250 Strings.Wide_Wide_Bounded.Wide_Wide_Hash,
36251 Strings.Wide_Wide_Unbounded.Wide_Wide_Hash,
36252 Strings.Wide_Wide_Hash_Case_Insensitive,
36253 Strings.Wide_Wide_Fixed.Wide_Wide_Hash_Case_Insensitive,
36254 Strings.Wide_Wide_Bounded.Wide_Wide_Hash_Case_Insensitive,
36255 Strings.Wide_Wide_Unbounded.Wide_Wide_Hash_Case_Insensitive,
36256 Strings.Wide_Wide_Equal_Case_Insensitive,
36257 Strings.Wide_Wide_Fixed.Wide_Wide_Equal_Case_Insensitive,
36258 Strings.Wide_Wide_Bounded.Wide_Wide_Equal_Case_Insensitive, and
36259 Strings.Wide_Wide_Unbounded.Wide_Wide_Equal_Case_Insensitive. They
36260 provide the same string-handling operations as the corresponding
36261 packages and functions for strings of Character elements.
36262
36263 _Static Semantics_
36264
36265 2/2
36266 The library package Strings.Wide_Wide_Maps has the following
36267 declaration.
36268
36269 3/2
36270 package Ada.Strings.Wide_Wide_Maps is
36271 pragma Preelaborate(Wide_Wide_Maps);
36272
36273 4/2
36274 -- Representation for a set of Wide_Wide_Character values:
36275 type Wide_Wide_Character_Set is private;
36276 pragma Preelaborable_Initialization(Wide_Wide_Character_Set);
36277
36278 5/2
36279 Null_Set : constant Wide_Wide_Character_Set;
36280
36281 6/2
36282 type Wide_Wide_Character_Range is
36283 record
36284 Low : Wide_Wide_Character;
36285 High : Wide_Wide_Character;
36286 end record;
36287 -- Represents Wide_Wide_Character range Low..High
36288
36289 7/2
36290 type Wide_Wide_Character_Ranges is array (Positive range <>)
36291 of Wide_Wide_Character_Range;
36292
36293 8/2
36294 function To_Set (Ranges : in Wide_Wide_Character_Ranges)
36295 return Wide_Wide_Character_Set;
36296
36297 9/2
36298 function To_Set (Span : in Wide_Wide_Character_Range)
36299 return Wide_Wide_Character_Set;
36300
36301 10/2
36302 function To_Ranges (Set : in Wide_Wide_Character_Set)
36303 return Wide_Wide_Character_Ranges;
36304
36305 11/2
36306 function "=" (Left, Right : in Wide_Wide_Character_Set) return Boolean;
36307
36308 12/2
36309 function "not" (Right : in Wide_Wide_Character_Set)
36310 return Wide_Wide_Character_Set;
36311 function "and" (Left, Right : in Wide_Wide_Character_Set)
36312 return Wide_Wide_Character_Set;
36313 function "or" (Left, Right : in Wide_Wide_Character_Set)
36314 return Wide_Wide_Character_Set;
36315 function "xor" (Left, Right : in Wide_Wide_Character_Set)
36316 return Wide_Wide_Character_Set;
36317 function "-" (Left, Right : in Wide_Wide_Character_Set)
36318 return Wide_Wide_Character_Set;
36319
36320 13/2
36321 function Is_In (Element : in Wide_Wide_Character;
36322 Set : in Wide_Wide_Character_Set)
36323 return Boolean;
36324
36325 14/2
36326 function Is_Subset (Elements : in Wide_Wide_Character_Set;
36327 Set : in Wide_Wide_Character_Set)
36328 return Boolean;
36329
36330 15/2
36331 function "<=" (Left : in Wide_Wide_Character_Set;
36332 Right : in Wide_Wide_Character_Set)
36333 return Boolean renames Is_Subset;
36334
36335 16/2
36336 -- Alternative representation for a set of Wide_Wide_Character values:
36337 subtype Wide_Wide_Character_Sequence is Wide_Wide_String;
36338
36339 17/2
36340 function To_Set (Sequence : in Wide_Wide_Character_Sequence)
36341 return Wide_Wide_Character_Set;
36342
36343 18/2
36344 function To_Set (Singleton : in Wide_Wide_Character)
36345 return Wide_Wide_Character_Set;
36346
36347 19/2
36348 function To_Sequence (Set : in Wide_Wide_Character_Set)
36349 return Wide_Wide_Character_Sequence;
36350
36351 20/2
36352 -- Representation for a Wide_Wide_Character to Wide_Wide_Character
36353 -- mapping:
36354 type Wide_Wide_Character_Mapping is private;
36355 pragma Preelaborable_Initialization(Wide_Wide_Character_Mapping);
36356
36357 21/2
36358 function Value (Map : in Wide_Wide_Character_Mapping;
36359 Element : in Wide_Wide_Character)
36360 return Wide_Wide_Character;
36361
36362 22/2
36363 Identity : constant Wide_Wide_Character_Mapping;
36364
36365 23/2
36366 function To_Mapping (From, To : in Wide_Wide_Character_Sequence)
36367 return Wide_Wide_Character_Mapping;
36368
36369 24/2
36370 function To_Domain (Map : in Wide_Wide_Character_Mapping)
36371 return Wide_Wide_Character_Sequence;
36372
36373 25/2
36374 function To_Range (Map : in Wide_Wide_Character_Mapping)
36375 return Wide_Wide_Character_Sequence;
36376
36377 26/2
36378 type Wide_Wide_Character_Mapping_Function is
36379 access function (From : in Wide_Wide_Character)
36380 return Wide_Wide_Character;
36381
36382 27/2
36383 private
36384 ... -- not specified by the language
36385 end Ada.Strings.Wide_Wide_Maps;
36386
36387 28/2
36388 The context clause for each of the packages Strings.Wide_Wide_Fixed,
36389 Strings.Wide_Wide_Bounded, and Strings.Wide_Wide_Unbounded identifies
36390 Strings.Wide_Wide_Maps instead of Strings.Maps.
36391
36392 28.1/3
36393 Types Wide_Wide_Character_Set and Wide_Wide_Character_Mapping need
36394 finalization.
36395
36396 29/3
36397 For each of the packages Strings.Fixed, Strings.Bounded,
36398 Strings.Unbounded, and Strings.Maps.Constants, and for library functions
36399 Strings.Hash, Strings.Fixed.Hash, Strings.Bounded.Hash,
36400 Strings.Unbounded.Hash, Strings.Hash_Case_Insensitive,
36401 Strings.Fixed.Hash_Case_Insensitive,
36402 Strings.Bounded.Hash_Case_Insensitive,
36403 Strings.Unbounded.Hash_Case_Insensitive, Strings.Equal_Case_Insensitive,
36404 Strings.Fixed.Equal_Case_Insensitive,
36405 Strings.Bounded.Equal_Case_Insensitive, and
36406 Strings.Unbounded.Equal_Case_Insensitive, the corresponding wide wide
36407 string package or function has the same contents except that
36408
36409 30/2
36410 * Wide_Wide_Space replaces Space
36411
36412 31/2
36413 * Wide_Wide_Character replaces Character
36414
36415 32/2
36416 * Wide_Wide_String replaces String
36417
36418 33/2
36419 * Wide_Wide_Character_Set replaces Character_Set
36420
36421 34/2
36422 * Wide_Wide_Character_Mapping replaces Character_Mapping
36423
36424 35/2
36425 * Wide_Wide_Character_Mapping_Function replaces
36426 Character_Mapping_Function
36427
36428 36/2
36429 * Wide_Wide_Maps replaces Maps
36430
36431 37/2
36432 * Bounded_Wide_Wide_String replaces Bounded_String
36433
36434 38/2
36435 * Null_Bounded_Wide_Wide_String replaces Null_Bounded_String
36436
36437 39/2
36438 * To_Bounded_Wide_Wide_String replaces To_Bounded_String
36439
36440 40/2
36441 * To_Wide_Wide_String replaces To_String
36442
36443 41/2
36444 * Set_Bounded_Wide_Wide_String replaces Set_Bounded_String
36445
36446 42/2
36447 * Unbounded_Wide_Wide_String replaces Unbounded_String
36448
36449 43/2
36450 * Null_Unbounded_Wide_Wide_String replaces Null_Unbounded_String
36451
36452 44/2
36453 * Wide_Wide_String_Access replaces String_Access
36454
36455 45/2
36456 * To_Unbounded_Wide_Wide_String replaces To_Unbounded_String
36457
36458 46/2
36459 * Set_Unbounded_Wide_Wide_String replaces Set_Unbounded_String
36460
36461 47/2
36462 The following additional declarations are present in
36463 Strings.Wide_Wide_Maps.Wide_Wide_Constants:
36464
36465 48/2
36466 Character_Set : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
36467 -- Contains each Wide_Wide_Character value WWC such that
36468 -- Characters.Conversions.Is_Character(WWC) is True
36469 Wide_Character_Set : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
36470 -- Contains each Wide_Wide_Character value WWC such that
36471 -- Characters.Conversions.Is_Wide_Character(WWC) is True
36472
36473 49/2
36474 Each Wide_Wide_Character_Set constant in the package
36475 Strings.Wide_Wide_Maps.Wide_Wide_Constants contains no values outside
36476 the Character portion of Wide_Wide_Character. Similarly, each
36477 Wide_Wide_Character_Mapping constant in this package is the identity
36478 mapping when applied to any element outside the Character portion of
36479 Wide_Wide_Character.
36480
36481 50/2
36482 Pragma Pure is replaced by pragma Preelaborate in
36483 Strings.Wide_Wide_Maps.Wide_Wide_Constants.
36484
36485 NOTES
36486
36487 51/2
36488 17 If a null Wide_Wide_Character_Mapping_Function is passed to any
36489 of the Wide_Wide_String handling subprograms, Constraint_Error is
36490 propagated.
36491
36492 \1f
36493 File: arm2012.info, Node: A.4.9, Next: A.4.10, Prev: A.4.8, Up: A.4
36494
36495 A.4.9 String Hashing
36496 --------------------
36497
36498 _Static Semantics_
36499
36500 1/2
36501 The library function Strings.Hash has the following declaration:
36502
36503 2/3
36504 with Ada.Containers;
36505 function Ada.Strings.Hash (Key : String) return Containers.Hash_Type;
36506 pragma Pure(Ada.Strings.Hash);
36507
36508 3/2
36509 Returns an implementation-defined value which is a function of
36510 the value of Key. If A and B are strings such that A equals
36511 B, Hash(A) equals Hash(B).
36512
36513 4/2
36514 The library function Strings.Fixed.Hash has the following declaration:
36515
36516 5/3
36517 with Ada.Containers, Ada.Strings.Hash;
36518 function Ada.Strings.Fixed.Hash (Key : String) return Containers.Hash_Type
36519 renames Ada.Strings.Hash;
36520
36521 6/2
36522 The generic library function Strings.Bounded.Hash has the following
36523 declaration:
36524
36525 7/3
36526 with Ada.Containers;
36527 generic
36528 with package Bounded is
36529 new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
36530 function Ada.Strings.Bounded.Hash (Key : Bounded.Bounded_String)
36531 return Containers.Hash_Type;
36532 pragma Preelaborate(Ada.Strings.Bounded.Hash);
36533
36534 8/3
36535 Equivalent to Strings.Hash (Bounded.To_String (Key));
36536
36537 9/2
36538 The library function Strings.Unbounded.Hash has the following
36539 declaration:
36540
36541 10/3
36542 with Ada.Containers;
36543 function Ada.Strings.Unbounded.Hash (Key : Unbounded_String)
36544 return Containers.Hash_Type;
36545 pragma Preelaborate(Ada.Strings.Unbounded.Hash);
36546
36547 11/3
36548 Equivalent to Strings.Hash (To_String (Key));
36549
36550 11.1/3
36551 The library function Strings.Hash_Case_Insensitive has the following
36552 declaration:
36553
36554 11.2/3
36555 with Ada.Containers;
36556 function Ada.Strings.Hash_Case_Insensitive (Key : String)
36557 return Containers.Hash_Type;
36558 pragma Pure(Ada.Strings.Hash_Case_Insensitive);
36559
36560 11.3/3
36561 Returns an implementation-defined value which is a function of
36562 the value of Key, converted to lower case. If A and B are
36563 strings such that Strings.Equal_Case_Insensitive (A, B) (see
36564 *note A.4.10::) is True, then Hash_Case_Insensitive(A) equals
36565 Hash_Case_Insensitive(B).
36566
36567 11.4/3
36568 The library function Strings.Fixed.Hash_Case_Insensitive has the
36569 following declaration:
36570
36571 11.5/3
36572 with Ada.Containers, Ada.Strings.Hash_Case_Insensitive;
36573 function Ada.Strings.Fixed.Hash_Case_Insensitive (Key : String)
36574 return Containers.Hash_Type renames Ada.Strings.Hash_Case_Insensitive;
36575
36576 11.6/3
36577 The generic library function Strings.Bounded.Hash_Case_Insensitive has
36578 the following declaration:
36579
36580 11.7/3
36581 with Ada.Containers;
36582 generic
36583 with package Bounded is
36584 new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
36585 function Ada.Strings.Bounded.Hash_Case_Insensitive
36586 (Key : Bounded.Bounded_String) return Containers.Hash_Type;
36587 pragma Preelaborate(Ada.Strings.Bounded.Hash_Case_Insensitive);
36588
36589 11.8/3
36590 Equivalent to Strings.Hash_Case_Insensitive (Bounded.To_String
36591 (Key));
36592
36593 11.9/3
36594 The library function Strings.Unbounded.Hash_Case_Insensitive has the
36595 following declaration:
36596
36597 11.10/3
36598 with Ada.Containers;
36599 function Ada.Strings.Unbounded.Hash_Case_Insensitive
36600 (Key : Unbounded_String) return Containers.Hash_Type;
36601 pragma Preelaborate(Ada.Strings.Unbounded.Hash_Case_Insensitive);
36602
36603 11.11/3
36604 Equivalent to Strings.Hash_Case_Insensitive (To_String (Key));
36605
36606 _Implementation Advice_
36607
36608 12/2
36609 The Hash functions should be good hash functions, returning a wide
36610 spread of values for different string values. It should be unlikely for
36611 similar strings to return the same value.
36612
36613 \1f
36614 File: arm2012.info, Node: A.4.10, Next: A.4.11, Prev: A.4.9, Up: A.4
36615
36616 A.4.10 String Comparison
36617 ------------------------
36618
36619 _Static Semantics_
36620
36621 1/3
36622 The library function Strings.Equal_Case_Insensitive has the following
36623 declaration:
36624
36625 2/3
36626 function Ada.Strings.Equal_Case_Insensitive (Left, Right : String)
36627 return Boolean;
36628 pragma Pure(Ada.Strings.Equal_Case_Insensitive);
36629
36630 3/3
36631 Returns True if the strings consist of the same sequence of
36632 characters after applying locale-independent simple case
36633 folding, as defined by documents referenced in the note in
36634 Clause 1 of ISO/IEC 10646:2011. Otherwise, returns False.
36635 This function uses the same method as is used to determine
36636 whether two identifiers are the same.
36637
36638 4/3
36639 The library function Strings.Fixed.Equal_Case_Insensitive has the
36640 following declaration:
36641
36642 5/3
36643 with Ada.Strings.Equal_Case_Insensitive;
36644 function Ada.Strings.Fixed.Equal_Case_Insensitive
36645 (Left, Right : String) return Boolean
36646 renames Ada.Strings.Equal_Case_Insensitive;
36647
36648 6/3
36649 The generic library function Strings.Bounded.Equal_Case_Insensitive has
36650 the following declaration:
36651
36652 7/3
36653 generic
36654 with package Bounded is
36655 new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
36656 function Ada.Strings.Bounded.Equal_Case_Insensitive
36657 (Left, Right : Bounded.Bounded_String) return Boolean;
36658 pragma Preelaborate(Ada.Strings.Bounded.Equal_Case_Insensitive);
36659
36660 8/3
36661 Equivalent to Strings.Equal_Case_Insensitive
36662 (Bounded.To_String (Left), Bounded.To_String (Right));
36663
36664 9/3
36665 The library function Strings.Unbounded.Equal_Case_Insensitive has the
36666 following declaration:
36667
36668 10/3
36669 function Ada.Strings.Unbounded.Equal_Case_Insensitive
36670 (Left, Right : Unbounded_String) return Boolean;
36671 pragma Preelaborate(Ada.Strings.Unbounded.Equal_Case_Insensitive);
36672
36673 11/3
36674 Equivalent to Strings.Equal_Case_Insensitive (To_String
36675 (Left), To_String (Right));
36676
36677 12/3
36678 The library function Strings.Less_Case_Insensitive has the following
36679 declaration:
36680
36681 13/3
36682 function Ada.Strings.Less_Case_Insensitive (Left, Right : String)
36683 return Boolean;
36684 pragma Pure(Ada.Strings.Less_Case_Insensitive);
36685
36686 14/3
36687 Performs a lexicographic comparison of strings Left and Right,
36688 converted to lower case.
36689
36690 15/3
36691 The library function Strings.Fixed.Less_Case_Insensitive has the
36692 following declaration:
36693
36694 16/3
36695 with Ada.Strings.Less_Case_Insensitive;
36696 function Ada.Strings.Fixed.Less_Case_Insensitive
36697 (Left, Right : String) return Boolean
36698 renames Ada.Strings.Less_Case_Insensitive;
36699
36700 17/3
36701 The generic library function Strings.Bounded.Less_Case_Insensitive has
36702 the following declaration:
36703
36704 18/3
36705 generic
36706 with package Bounded is
36707 new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
36708 function Ada.Strings.Bounded.Less_Case_Insensitive
36709 (Left, Right : Bounded.Bounded_String) return Boolean;
36710 pragma Preelaborate(Ada.Strings.Bounded.Less_Case_Insensitive);
36711
36712 19/3
36713 Equivalent to Strings.Less_Case_Insensitive (Bounded.To_String
36714 (Left), Bounded.To_String (Right));
36715
36716 20/3
36717 The library function Strings.Unbounded.Less_Case_Insensitive has the
36718 following declaration:
36719
36720 21/3
36721 function Ada.Strings.Unbounded.Less_Case_Insensitive
36722 (Left, Right : Unbounded_String) return Boolean;
36723 pragma Preelaborate(Ada.Strings.Unbounded.Less_Case_Insensitive);
36724
36725 22/3
36726 Equivalent to Strings.Less_Case_Insensitive (To_String (Left),
36727 To_String (Right));
36728
36729 \1f
36730 File: arm2012.info, Node: A.4.11, Prev: A.4.10, Up: A.4
36731
36732 A.4.11 String Encoding
36733 ----------------------
36734
36735 1/3
36736 Facilities for encoding, decoding, and converting strings in various
36737 character encoding schemes are provided by packages
36738 Strings.UTF_Encoding, Strings.UTF_Encoding.Conversions,
36739 Strings.UTF_Encoding.Strings, Strings.UTF_Encoding.Wide_Strings, and
36740 Strings.UTF_Encoding.Wide_Wide_Strings.
36741
36742 _Static Semantics_
36743
36744 2/3
36745 The encoding library packages have the following declarations:
36746
36747 3/3
36748 package Ada.Strings.UTF_Encoding is
36749 pragma Pure (UTF_Encoding);
36750
36751 4/3
36752 -- Declarations common to the string encoding packages
36753 type Encoding_Scheme is (UTF_8, UTF_16BE, UTF_16LE);
36754
36755 5/3
36756 subtype UTF_String is String;
36757
36758 6/3
36759 subtype UTF_8_String is String;
36760
36761 7/3
36762 subtype UTF_16_Wide_String is Wide_String;
36763
36764 8/3
36765 Encoding_Error : exception;
36766
36767 9/3
36768 BOM_8 : constant UTF_8_String :=
36769 Character'Val(16#EF#) &
36770 Character'Val(16#BB#) &
36771 Character'Val(16#BF#);
36772
36773 10/3
36774 BOM_16BE : constant UTF_String :=
36775 Character'Val(16#FE#) &
36776 Character'Val(16#FF#);
36777
36778 11/3
36779 BOM_16LE : constant UTF_String :=
36780 Character'Val(16#FF#) &
36781 Character'Val(16#FE#);
36782
36783 12/3
36784 BOM_16 : constant UTF_16_Wide_String :=
36785 (1 => Wide_Character'Val(16#FEFF#));
36786
36787 13/3
36788 function Encoding (Item : UTF_String;
36789 Default : Encoding_Scheme := UTF_8)
36790 return Encoding_Scheme;
36791
36792 14/3
36793 end Ada.Strings.UTF_Encoding;
36794
36795 15/3
36796 package Ada.Strings.UTF_Encoding.Conversions is
36797 pragma Pure (Conversions);
36798
36799 16/3
36800 -- Conversions between various encoding schemes
36801 function Convert (Item : UTF_String;
36802 Input_Scheme : Encoding_Scheme;
36803 Output_Scheme : Encoding_Scheme;
36804 Output_BOM : Boolean := False) return UTF_String;
36805
36806 17/3
36807 function Convert (Item : UTF_String;
36808 Input_Scheme : Encoding_Scheme;
36809 Output_BOM : Boolean := False)
36810 return UTF_16_Wide_String;
36811
36812 18/3
36813 function Convert (Item : UTF_8_String;
36814 Output_BOM : Boolean := False)
36815 return UTF_16_Wide_String;
36816
36817 19/3
36818 function Convert (Item : UTF_16_Wide_String;
36819 Output_Scheme : Encoding_Scheme;
36820 Output_BOM : Boolean := False) return UTF_String;
36821
36822 20/3
36823 function Convert (Item : UTF_16_Wide_String;
36824 Output_BOM : Boolean := False) return UTF_8_String;
36825
36826 21/3
36827 end Ada.Strings.UTF_Encoding.Conversions;
36828
36829 22/3
36830 package Ada.Strings.UTF_Encoding.Strings is
36831 pragma Pure (Strings);
36832
36833 23/3
36834 -- Encoding / decoding between String and various encoding schemes
36835 function Encode (Item : String;
36836 Output_Scheme : Encoding_Scheme;
36837 Output_BOM : Boolean := False) return UTF_String;
36838
36839 24/3
36840 function Encode (Item : String;
36841 Output_BOM : Boolean := False) return UTF_8_String;
36842
36843 25/3
36844 function Encode (Item : String;
36845 Output_BOM : Boolean := False)
36846 return UTF_16_Wide_String;
36847
36848 26/3
36849 function Decode (Item : UTF_String;
36850 Input_Scheme : Encoding_Scheme) return String;
36851
36852 27/3
36853 function Decode (Item : UTF_8_String) return String;
36854
36855 28/3
36856 function Decode (Item : UTF_16_Wide_String) return String;
36857
36858 29/3
36859 end Ada.Strings.UTF_Encoding.Strings;
36860
36861 30/3
36862 package Ada.Strings.UTF_Encoding.Wide_Strings is
36863 pragma Pure (Wide_Strings);
36864
36865 31/3
36866 -- Encoding / decoding between Wide_String and various encoding schemes
36867 function Encode (Item : Wide_String;
36868 Output_Scheme : Encoding_Scheme;
36869 Output_BOM : Boolean := False) return UTF_String;
36870
36871 32/3
36872 function Encode (Item : Wide_String;
36873 Output_BOM : Boolean := False) return UTF_8_String;
36874
36875 33/3
36876 function Encode (Item : Wide_String;
36877 Output_BOM : Boolean := False)
36878 return UTF_16_Wide_String;
36879
36880 34/3
36881 function Decode (Item : UTF_String;
36882 Input_Scheme : Encoding_Scheme) return Wide_String;
36883
36884 35/3
36885 function Decode (Item : UTF_8_String) return Wide_String;
36886
36887 36/3
36888 function Decode (Item : UTF_16_Wide_String) return Wide_String;
36889
36890 37/3
36891 end Ada.Strings.UTF_Encoding.Wide_Strings;
36892
36893 38/3
36894 package Ada.Strings.UTF_Encoding.Wide_Wide_Strings is
36895 pragma Pure (Wide_Wide_Strings);
36896
36897 39/3
36898 -- Encoding / decoding between Wide_Wide_String and various encoding schemes
36899 function Encode (Item : Wide_Wide_String;
36900 Output_Scheme : Encoding_Scheme;
36901 Output_BOM : Boolean := False) return UTF_String;
36902
36903 40/3
36904 function Encode (Item : Wide_Wide_String;
36905 Output_BOM : Boolean := False) return UTF_8_String;
36906
36907 41/3
36908 function Encode (Item : Wide_Wide_String;
36909 Output_BOM : Boolean := False)
36910 return UTF_16_Wide_String;
36911
36912 42/3
36913 function Decode (Item : UTF_String;
36914 Input_Scheme : Encoding_Scheme) return Wide_Wide_String;
36915
36916 43/3
36917 function Decode (Item : UTF_8_String) return Wide_Wide_String;
36918
36919 44/3
36920 function Decode (Item : UTF_16_Wide_String) return Wide_Wide_String;
36921
36922 45/3
36923 end Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
36924
36925 46/3
36926 The type Encoding_Scheme defines encoding schemes. UTF_8 corresponds to
36927 the UTF-8 encoding scheme defined by Annex D of ISO/IEC 10646. UTF_16BE
36928 corresponds to the UTF-16 encoding scheme defined by Annex C of ISO/IEC
36929 10646 in 8 bit, big-endian order; and UTF_16LE corresponds to the UTF-16
36930 encoding scheme in 8 bit, little-endian order.
36931
36932 47/3
36933 The subtype UTF_String is used to represent a String of 8-bit values
36934 containing a sequence of values encoded in one of three ways (UTF-8,
36935 UTF-16BE, or UTF-16LE). The subtype UTF_8_String is used to represent a
36936 String of 8-bit values containing a sequence of values encoded in UTF-8.
36937 The subtype UTF_16_Wide_String is used to represent a Wide_String of
36938 16-bit values containing a sequence of values encoded in UTF-16.
36939
36940 48/3
36941 The BOM_8, BOM_16BE, BOM_16LE, and BOM_16 constants correspond to values
36942 used at the start of a string to indicate the encoding.
36943
36944 49/3
36945 Each of the Encode functions takes a String, Wide_String, or
36946 Wide_Wide_String Item parameter that is assumed to be an array of
36947 unencoded characters. Each of the Convert functions takes a UTF_String,
36948 UTF_8_String, or UTF_16_String Item parameter that is assumed to contain
36949 characters whose position values correspond to a valid encoding sequence
36950 according to the encoding scheme required by the function or specified
36951 by its Input_Scheme parameter.
36952
36953 50/3
36954 Each of the Convert and Encode functions returns a UTF_String,
36955 UTF_8_String, or UTF_16_String value whose characters have position
36956 values that correspond to the encoding of the Item parameter according
36957 to the encoding scheme required by the function or specified by its
36958 Output_Scheme parameter. For UTF_8, no overlong encoding is returned.
36959 A BOM is included at the start of the returned string if the Output_BOM
36960 parameter is set to True. The lower bound of the returned string is 1.
36961
36962 51/3
36963 Each of the Decode functions takes a UTF_String, UTF_8_String, or
36964 UTF_16_String Item parameter which is assumed to contain characters
36965 whose position values correspond to a valid encoding sequence according
36966 to the encoding scheme required by the function or specified by its
36967 Input_Scheme parameter, and returns the corresponding String,
36968 Wide_String, or Wide_Wide_String value. The lower bound of the returned
36969 string is 1.
36970
36971 52/3
36972 For each of the Convert and Decode functions, an initial BOM in the
36973 input that matches the expected encoding scheme is ignored, and a
36974 different initial BOM causes Encoding_Error to be propagated.
36975
36976 53/3
36977 The exception Encoding_Error is also propagated in the following
36978 situations:
36979
36980 54/3
36981 * By a Decode function when a UTF encoded string contains an invalid
36982 encoding sequence.
36983
36984 55/3
36985 * By a Decode function when the expected encoding is UTF-16BE or
36986 UTF-16LE and the input string has an odd length.
36987
36988 56/3
36989 * By a Decode function yielding a String when the decoding of a
36990 sequence results in a code point whose value exceeds 16#FF#.
36991
36992 57/3
36993 * By a Decode function yielding a Wide_String when the decoding of a
36994 sequence results in a code point whose value exceeds 16#FFFF#.
36995
36996 58/3
36997 * By an Encode function taking a Wide_String as input when an invalid
36998 character appears in the input. In particular, the characters
36999 whose position is in the range 16#D800# .. 16#DFFF# are invalid
37000 because they conflict with UTF-16 surrogate encodings, and the
37001 characters whose position is 16#FFFE# or 16#FFFF# are also invalid
37002 because they conflict with BOM codes.
37003
37004 59/3
37005 function Encoding (Item : UTF_String;
37006 Default : Encoding_Scheme := UTF_8)
37007 return Encoding_Scheme;
37008
37009 60/3
37010 Inspects a UTF_String value to determine whether it starts
37011 with a BOM for UTF-8, UTF-16BE, or UTF_16LE. If so, returns
37012 the scheme corresponding to the BOM; otherwise, returns the
37013 value of Default.
37014
37015 61/3
37016 function Convert (Item : UTF_String;
37017 Input_Scheme : Encoding_Scheme;
37018 Output_Scheme : Encoding_Scheme;
37019 Output_BOM : Boolean := False) return UTF_String;
37020
37021 62/3
37022 Returns the value of Item (originally encoded in UTF-8,
37023 UTF-16LE, or UTF-16BE as specified by Input_Scheme) encoded in
37024 one of these three schemes as specified by Output_Scheme.
37025
37026 63/3
37027 function Convert (Item : UTF_String;
37028 Input_Scheme : Encoding_Scheme;
37029 Output_BOM : Boolean := False)
37030 return UTF_16_Wide_String;
37031
37032 64/3
37033 Returns the value of Item (originally encoded in UTF-8,
37034 UTF-16LE, or UTF-16BE as specified by Input_Scheme) encoded in
37035 UTF-16.
37036
37037 65/3
37038 function Convert (Item : UTF_8_String;
37039 Output_BOM : Boolean := False)
37040 return UTF_16_Wide_String;
37041
37042 66/3
37043 Returns the value of Item (originally encoded in UTF-8)
37044 encoded in UTF-16.
37045
37046 67/3
37047 function Convert (Item : UTF_16_Wide_String;
37048 Output_Scheme : Encoding_Scheme;
37049 Output_BOM : Boolean := False) return UTF_String;
37050
37051 68/3
37052 Returns the value of Item (originally encoded in UTF-16)
37053 encoded in UTF-8, UTF-16LE, or UTF-16BE as specified by
37054 Output_Scheme.
37055
37056 69/3
37057 function Convert (Item : UTF_16_Wide_String;
37058 Output_BOM : Boolean := False) return UTF_8_String;
37059
37060 70/3
37061 Returns the value of Item (originally encoded in UTF-16)
37062 encoded in UTF-8.
37063
37064 71/3
37065 function Encode (Item : String;
37066 Output_Scheme : Encoding_Scheme;
37067 Output_BOM : Boolean := False) return UTF_String;
37068
37069 72/3
37070 Returns the value of Item encoded in UTF-8, UTF-16LE, or
37071 UTF-16BE as specified by Output_Scheme.
37072
37073 73/3
37074 function Encode (Item : String;
37075 Output_BOM : Boolean := False) return UTF_8_String;
37076
37077 74/3
37078 Returns the value of Item encoded in UTF-8.
37079
37080 75/3
37081 function Encode (Item : String;
37082 Output_BOM : Boolean := False) return UTF_16_Wide_String;
37083
37084 76/3
37085 Returns the value of Item encoded in UTF_16.
37086
37087 77/3
37088 function Decode (Item : UTF_String;
37089 Input_Scheme : Encoding_Scheme) return String;
37090
37091 78/3
37092 Returns the result of decoding Item, which is encoded in
37093 UTF-8, UTF-16LE, or UTF-16BE as specified by Input_Scheme.
37094
37095 79/3
37096 function Decode (Item : UTF_8_String) return String;
37097
37098 80/3
37099 Returns the result of decoding Item, which is encoded in
37100 UTF-8.
37101
37102 81/3
37103 function Decode (Item : UTF_16_Wide_String) return String;
37104
37105 82/3
37106 Returns the result of decoding Item, which is encoded in
37107 UTF-16.
37108
37109 83/3
37110 function Encode (Item : Wide_String;
37111 Output_Scheme : Encoding_Scheme;
37112 Output_BOM : Boolean := False) return UTF_String;
37113
37114 84/3
37115 Returns the value of Item encoded in UTF-8, UTF-16LE, or
37116 UTF-16BE as specified by Output_Scheme.
37117
37118 85/3
37119 function Encode (Item : Wide_String;
37120 Output_BOM : Boolean := False) return UTF_8_String;
37121
37122 86/3
37123 Returns the value of Item encoded in UTF-8.
37124
37125 87/3
37126 function Encode (Item : Wide_String;
37127 Output_BOM : Boolean := False) return UTF_16_Wide_String;
37128
37129 88/3
37130 Returns the value of Item encoded in UTF_16.
37131
37132 89/3
37133 function Decode (Item : UTF_String;
37134 Input_Scheme : Encoding_Scheme) return Wide_String;
37135
37136 90/3
37137 Returns the result of decoding Item, which is encoded in
37138 UTF-8, UTF-16LE, or UTF-16BE as specified by Input_Scheme.
37139
37140 91/3
37141 function Decode (Item : UTF_8_String) return Wide_String;
37142
37143 92/3
37144 Returns the result of decoding Item, which is encoded in
37145 UTF-8.
37146
37147 93/3
37148 function Decode (Item : UTF_16_Wide_String) return Wide_String;
37149
37150 94/3
37151 Returns the result of decoding Item, which is encoded in
37152 UTF-16.
37153
37154 95/3
37155 function Encode (Item : Wide_Wide_String;
37156 Output_Scheme : Encoding_Scheme;
37157 Output_BOM : Boolean := False) return UTF_String;
37158
37159 96/3
37160 Returns the value of Item encoded in UTF-8, UTF-16LE, or
37161 UTF-16BE as specified by Output_Scheme.
37162
37163 97/3
37164 function Encode (Item : Wide_Wide_String;
37165 Output_BOM : Boolean := False) return UTF_8_String;
37166
37167 98/3
37168 Returns the value of Item encoded in UTF-8.
37169
37170 99/3
37171 function Encode (Item : Wide_Wide_String;
37172 Output_BOM : Boolean := False) return UTF_16_Wide_String;
37173
37174 100/3
37175 Returns the value of Item encoded in UTF_16.
37176
37177 101/3
37178 function Decode (Item : UTF_String;
37179 Input_Scheme : Encoding_Scheme) return Wide_Wide_String;
37180
37181 102/3
37182 Returns the result of decoding Item, which is encoded in
37183 UTF-8, UTF-16LE, or UTF-16BE as specified by Input_Scheme.
37184
37185 103/3
37186 function Decode (Item : UTF_8_String) return Wide_Wide_String;
37187
37188 104/3
37189 Returns the result of decoding Item, which is encoded in
37190 UTF-8.
37191
37192 105/3
37193 function Decode (Item : UTF_16_Wide_String) return Wide_Wide_String;
37194
37195 106/3
37196 Returns the result of decoding Item, which is encoded in
37197 UTF-16.
37198
37199 _Implementation Advice_
37200
37201 107/3
37202 If an implementation supports other encoding schemes, another similar
37203 child of Ada.Strings should be defined.
37204
37205 NOTES
37206
37207 108/3
37208 18 A BOM (Byte-Order Mark, code position 16#FEFF#) can be included
37209 in a file or other entity to indicate the encoding; it is skipped
37210 when decoding. Typically, only the first line of a file or other
37211 entity contains a BOM. When decoding, the Encoding function can be
37212 called on the first line to determine the encoding; this encoding
37213 will then be used in subsequent calls to Decode to convert all of
37214 the lines to an internal format.
37215
37216 \1f
37217 File: arm2012.info, Node: A.5, Next: A.6, Prev: A.4, Up: Annex A
37218
37219 A.5 The Numerics Packages
37220 =========================
37221
37222 1
37223 The library package Numerics is the parent of several child units that
37224 provide facilities for mathematical computation. One child, the generic
37225 package Generic_Elementary_Functions, is defined in *note A.5.1::,
37226 together with nongeneric equivalents; two others, the package
37227 Float_Random and the generic package Discrete_Random, are defined in
37228 *note A.5.2::. Additional (optional) children are defined in *note
37229 Annex G::, "*note Annex G:: Numerics".
37230
37231 _Static Semantics_
37232
37233 2/1
37234 This paragraph was deleted.
37235
37236 3/2
37237 package Ada.Numerics is
37238 pragma Pure(Numerics);
37239 Argument_Error : exception;
37240 Pi : constant :=
37241 3.14159_26535_89793_23846_26433_83279_50288_41971_69399_37511;
37242 PI : constant := Pi;
37243 e : constant :=
37244 2.71828_18284_59045_23536_02874_71352_66249_77572_47093_69996;
37245 end Ada.Numerics;
37246
37247 4
37248 The Argument_Error exception is raised by a subprogram in a child unit
37249 of Numerics to signal that one or more of the actual subprogram
37250 parameters are outside the domain of the corresponding mathematical
37251 function.
37252
37253 _Implementation Permissions_
37254
37255 5
37256 The implementation may specify the values of Pi and e to a larger number
37257 of significant digits.
37258
37259 * Menu:
37260
37261 * A.5.1 :: Elementary Functions
37262 * A.5.2 :: Random Number Generation
37263 * A.5.3 :: Attributes of Floating Point Types
37264 * A.5.4 :: Attributes of Fixed Point Types
37265
37266 \1f
37267 File: arm2012.info, Node: A.5.1, Next: A.5.2, Up: A.5
37268
37269 A.5.1 Elementary Functions
37270 --------------------------
37271
37272 1
37273 Implementation-defined approximations to the mathematical functions
37274 known as the "elementary functions" are provided by the subprograms in
37275 Numerics.Generic_Elementary_Functions. Nongeneric equivalents of this
37276 generic package for each of the predefined floating point types are also
37277 provided as children of Numerics.
37278
37279 _Static Semantics_
37280
37281 2
37282 The generic library package Numerics.Generic_Elementary_Functions has
37283 the following declaration:
37284
37285 3
37286 generic
37287 type Float_Type is digits <>;
37288
37289 package Ada.Numerics.Generic_Elementary_Functions is
37290 pragma Pure(Generic_Elementary_Functions);
37291
37292 4
37293 function Sqrt (X : Float_Type'Base) return Float_Type'Base;
37294 function Log (X : Float_Type'Base) return Float_Type'Base;
37295 function Log (X, Base : Float_Type'Base) return Float_Type'Base;
37296 function Exp (X : Float_Type'Base) return Float_Type'Base;
37297 function "**" (Left, Right : Float_Type'Base) return Float_Type'Base;
37298
37299 5
37300 function Sin (X : Float_Type'Base) return Float_Type'Base;
37301 function Sin (X, Cycle : Float_Type'Base) return Float_Type'Base;
37302 function Cos (X : Float_Type'Base) return Float_Type'Base;
37303 function Cos (X, Cycle : Float_Type'Base) return Float_Type'Base;
37304 function Tan (X : Float_Type'Base) return Float_Type'Base;
37305 function Tan (X, Cycle : Float_Type'Base) return Float_Type'Base;
37306 function Cot (X : Float_Type'Base) return Float_Type'Base;
37307 function Cot (X, Cycle : Float_Type'Base) return Float_Type'Base;
37308
37309 6
37310 function Arcsin (X : Float_Type'Base) return Float_Type'Base;
37311 function Arcsin (X, Cycle : Float_Type'Base) return Float_Type'Base;
37312 function Arccos (X : Float_Type'Base) return Float_Type'Base;
37313 function Arccos (X, Cycle : Float_Type'Base) return Float_Type'Base;
37314 function Arctan (Y : Float_Type'Base;
37315 X : Float_Type'Base := 1.0)
37316 return Float_Type'Base;
37317 function Arctan (Y : Float_Type'Base;
37318 X : Float_Type'Base := 1.0;
37319 Cycle : Float_Type'Base) return Float_Type'Base;
37320 function Arccot (X : Float_Type'Base;
37321 Y : Float_Type'Base := 1.0)
37322 return Float_Type'Base;
37323 function Arccot (X : Float_Type'Base;
37324 Y : Float_Type'Base := 1.0;
37325 Cycle : Float_Type'Base) return Float_Type'Base;
37326
37327 7
37328 function Sinh (X : Float_Type'Base) return Float_Type'Base;
37329 function Cosh (X : Float_Type'Base) return Float_Type'Base;
37330 function Tanh (X : Float_Type'Base) return Float_Type'Base;
37331 function Coth (X : Float_Type'Base) return Float_Type'Base;
37332 function Arcsinh (X : Float_Type'Base) return Float_Type'Base;
37333 function Arccosh (X : Float_Type'Base) return Float_Type'Base;
37334 function Arctanh (X : Float_Type'Base) return Float_Type'Base;
37335 function Arccoth (X : Float_Type'Base) return Float_Type'Base;
37336
37337 8
37338 end Ada.Numerics.Generic_Elementary_Functions;
37339
37340 9/1
37341 The library package Numerics.Elementary_Functions is declared pure and
37342 defines the same subprograms as Numerics.Generic_Elementary_Functions,
37343 except that the predefined type Float is systematically substituted for
37344 Float_Type'Base throughout. Nongeneric equivalents of
37345 Numerics.Generic_Elementary_Functions for each of the other predefined
37346 floating point types are defined similarly, with the names
37347 Numerics.Short_Elementary_Functions, Numerics.Long_Elementary_Functions,
37348 etc.
37349
37350 10
37351 The functions have their usual mathematical meanings. When the Base
37352 parameter is specified, the Log function computes the logarithm to the
37353 given base; otherwise, it computes the natural logarithm. When the
37354 Cycle parameter is specified, the parameter X of the forward
37355 trigonometric functions (Sin, Cos, Tan, and Cot) and the results of the
37356 inverse trigonometric functions (Arcsin, Arccos, Arctan, and Arccot) are
37357 measured in units such that a full cycle of revolution has the given
37358 value; otherwise, they are measured in radians.
37359
37360 11
37361 The computed results of the mathematically multivalued functions are
37362 rendered single-valued by the following conventions, which are meant to
37363 imply the principal branch:
37364
37365 12
37366 * The results of the Sqrt and Arccosh functions and that of the
37367 exponentiation operator are nonnegative.
37368
37369 13
37370 * The result of the Arcsin function is in the quadrant containing the
37371 point (1.0, x), where x is the value of the parameter X. This
37372 quadrant is I or IV; thus, the range of the Arcsin function is
37373 approximately -PI/2.0 to PI/2.0 (-Cycle/4.0 to Cycle/4.0, if the
37374 parameter Cycle is specified).
37375
37376 14
37377 * The result of the Arccos function is in the quadrant containing the
37378 point (x, 1.0), where x is the value of the parameter X. This
37379 quadrant is I or II; thus, the Arccos function ranges from 0.0 to
37380 approximately PI (Cycle/2.0, if the parameter Cycle is specified).
37381
37382 15
37383 * The results of the Arctan and Arccot functions are in the quadrant
37384 containing the point (x, y), where x and y are the values of the
37385 parameters X and Y, respectively. This may be any quadrant (I
37386 through IV) when the parameter X (resp., Y) of Arctan (resp.,
37387 Arccot) is specified, but it is restricted to quadrants I and IV
37388 (resp., I and II) when that parameter is omitted. Thus, the range
37389 when that parameter is specified is approximately -PI to PI
37390 (-Cycle/2.0 to Cycle/2.0, if the parameter Cycle is specified);
37391 when omitted, the range of Arctan (resp., Arccot) is that of Arcsin
37392 (resp., Arccos), as given above. When the point (x, y) lies on the
37393 negative x-axis, the result approximates
37394
37395 16
37396 * PI (resp., -PI) when the sign of the parameter Y is positive
37397 (resp., negative), if Float_Type'Signed_Zeros is True;
37398
37399 17
37400 * PI, if Float_Type'Signed_Zeros is False.
37401
37402 18
37403 (In the case of the inverse trigonometric functions, in which a result
37404 lying on or near one of the axes may not be exactly representable, the
37405 approximation inherent in computing the result may place it in an
37406 adjacent quadrant, close to but on the wrong side of the axis.)
37407
37408 _Dynamic Semantics_
37409
37410 19
37411 The exception Numerics.Argument_Error is raised, signaling a parameter
37412 value outside the domain of the corresponding mathematical function, in
37413 the following cases:
37414
37415 20
37416 * by any forward or inverse trigonometric function with specified
37417 cycle, when the value of the parameter Cycle is zero or negative;
37418
37419 21
37420 * by the Log function with specified base, when the value of the
37421 parameter Base is zero, one, or negative;
37422
37423 22
37424 * by the Sqrt and Log functions, when the value of the parameter X is
37425 negative;
37426
37427 23
37428 * by the exponentiation operator, when the value of the left operand
37429 is negative or when both operands have the value zero;
37430
37431 24
37432 * by the Arcsin, Arccos, and Arctanh functions, when the absolute
37433 value of the parameter X exceeds one;
37434
37435 25
37436 * by the Arctan and Arccot functions, when the parameters X and Y
37437 both have the value zero;
37438
37439 26
37440 * by the Arccosh function, when the value of the parameter X is less
37441 than one; and
37442
37443 27
37444 * by the Arccoth function, when the absolute value of the parameter X
37445 is less than one.
37446
37447 28
37448 The exception Constraint_Error is raised, signaling a pole of the
37449 mathematical function (analogous to dividing by zero), in the following
37450 cases, provided that Float_Type'Machine_Overflows is True:
37451
37452 29
37453 * by the Log, Cot, and Coth functions, when the value of the
37454 parameter X is zero;
37455
37456 30
37457 * by the exponentiation operator, when the value of the left operand
37458 is zero and the value of the exponent is negative;
37459
37460 31
37461 * by the Tan function with specified cycle, when the value of the
37462 parameter X is an odd multiple of the quarter cycle;
37463
37464 32
37465 * by the Cot function with specified cycle, when the value of the
37466 parameter X is zero or a multiple of the half cycle; and
37467
37468 33
37469 * by the Arctanh and Arccoth functions, when the absolute value of
37470 the parameter X is one.
37471
37472 34
37473 Constraint_Error can also be raised when a finite result overflows (see
37474 *note G.2.4::); this may occur for parameter values sufficiently near
37475 poles, and, in the case of some of the functions, for parameter values
37476 with sufficiently large magnitudes. When Float_Type'Machine_Overflows
37477 is False, the result at poles is unspecified.
37478
37479 35
37480 When one parameter of a function with multiple parameters represents a
37481 pole and another is outside the function's domain, the latter takes
37482 precedence (i.e., Numerics.Argument_Error is raised).
37483
37484 _Implementation Requirements_
37485
37486 36
37487 In the implementation of Numerics.Generic_Elementary_Functions, the
37488 range of intermediate values allowed during the calculation of a final
37489 result shall not be affected by any range constraint of the subtype
37490 Float_Type.
37491
37492 37
37493 In the following cases, evaluation of an elementary function shall yield
37494 the prescribed result, provided that the preceding rules do not call for
37495 an exception to be raised:
37496
37497 38
37498 * When the parameter X has the value zero, the Sqrt, Sin, Arcsin,
37499 Tan, Sinh, Arcsinh, Tanh, and Arctanh functions yield a result of
37500 zero, and the Exp, Cos, and Cosh functions yield a result of one.
37501
37502 39
37503 * When the parameter X has the value one, the Sqrt function yields a
37504 result of one, and the Log, Arccos, and Arccosh functions yield a
37505 result of zero.
37506
37507 40
37508 * When the parameter Y has the value zero and the parameter X has a
37509 positive value, the Arctan and Arccot functions yield a result of
37510 zero.
37511
37512 41
37513 * The results of the Sin, Cos, Tan, and Cot functions with specified
37514 cycle are exact when the mathematical result is zero; those of the
37515 first two are also exact when the mathematical result is ± 1.0.
37516
37517 42
37518 * Exponentiation by a zero exponent yields the value one.
37519 Exponentiation by a unit exponent yields the value of the left
37520 operand. Exponentiation of the value one yields the value one.
37521 Exponentiation of the value zero yields the value zero.
37522
37523 43
37524 Other accuracy requirements for the elementary functions, which apply
37525 only in implementations conforming to the Numerics Annex, and then only
37526 in the "strict" mode defined there (see *note G.2::), are given in *note
37527 G.2.4::.
37528
37529 44
37530 When Float_Type'Signed_Zeros is True, the sign of a zero result shall be
37531 as follows:
37532
37533 45
37534 * A prescribed zero result delivered at the origin by one of the odd
37535 functions (Sin, Arcsin, Sinh, Arcsinh, Tan, Arctan or Arccot as a
37536 function of Y when X is fixed and positive, Tanh, and Arctanh) has
37537 the sign of the parameter X (Y, in the case of Arctan or Arccot).
37538
37539 46
37540 * A prescribed zero result delivered by one of the odd functions away
37541 from the origin, or by some other elementary function, has an
37542 implementation-defined sign.
37543
37544 47
37545 * A zero result that is not a prescribed result (i.e., one that
37546 results from rounding or underflow) has the correct mathematical
37547 sign.
37548
37549 _Implementation Permissions_
37550
37551 48
37552 The nongeneric equivalent packages may, but need not, be actual
37553 instantiations of the generic package for the appropriate predefined
37554 type.
37555
37556 \1f
37557 File: arm2012.info, Node: A.5.2, Next: A.5.3, Prev: A.5.1, Up: A.5
37558
37559 A.5.2 Random Number Generation
37560 ------------------------------
37561
37562 1
37563 Facilities for the generation of pseudo-random floating point numbers
37564 are provided in the package Numerics.Float_Random; the generic package
37565 Numerics.Discrete_Random provides similar facilities for the generation
37566 of pseudo-random integers and pseudo-random values of enumeration types.
37567 For brevity, pseudo-random values of any of these types are called
37568 random numbers.
37569
37570 2
37571 Some of the facilities provided are basic to all applications of random
37572 numbers. These include a limited private type each of whose objects
37573 serves as the generator of a (possibly distinct) sequence of random
37574 numbers; a function to obtain the "next" random number from a given
37575 sequence of random numbers (that is, from its generator); and
37576 subprograms to initialize or reinitialize a given generator to a
37577 time-dependent state or a state denoted by a single integer.
37578
37579 3
37580 Other facilities are provided specifically for advanced applications.
37581 These include subprograms to save and restore the state of a given
37582 generator; a private type whose objects can be used to hold the saved
37583 state of a generator; and subprograms to obtain a string representation
37584 of a given generator state, or, given such a string representation, the
37585 corresponding state.
37586
37587 _Static Semantics_
37588
37589 4
37590 The library package Numerics.Float_Random has the following declaration:
37591
37592 5
37593 package Ada.Numerics.Float_Random is
37594
37595 6
37596 -- Basic facilities
37597
37598 7
37599 type Generator is limited private;
37600
37601 8
37602 subtype Uniformly_Distributed is Float range 0.0 .. 1.0;
37603 function Random (Gen : Generator) return Uniformly_Distributed;
37604
37605 9
37606 procedure Reset (Gen : in Generator;
37607 Initiator : in Integer);
37608 procedure Reset (Gen : in Generator);
37609
37610 10
37611 -- Advanced facilities
37612
37613 11
37614 type State is private;
37615
37616 12
37617 procedure Save (Gen : in Generator;
37618 To_State : out State);
37619 procedure Reset (Gen : in Generator;
37620 From_State : in State);
37621
37622 13
37623 Max_Image_Width : constant := implementation-defined integer value;
37624
37625 14
37626 function Image (Of_State : State) return String;
37627 function Value (Coded_State : String) return State;
37628
37629 15
37630 private
37631 ... -- not specified by the language
37632 end Ada.Numerics.Float_Random;
37633
37634 15.1/2
37635 The type Generator needs finalization (see *note 7.6::).
37636
37637 16
37638 The generic library package Numerics.Discrete_Random has the following
37639 declaration:
37640
37641 17
37642
37643 generic
37644 type Result_Subtype is (<>);
37645 package Ada.Numerics.Discrete_Random is
37646
37647 18
37648 -- Basic facilities
37649
37650 19
37651 type Generator is limited private;
37652
37653 20
37654 function Random (Gen : Generator) return Result_Subtype;
37655
37656 21
37657 procedure Reset (Gen : in Generator;
37658 Initiator : in Integer);
37659 procedure Reset (Gen : in Generator);
37660
37661 22
37662 -- Advanced facilities
37663
37664 23
37665 type State is private;
37666
37667 24
37668 procedure Save (Gen : in Generator;
37669 To_State : out State);
37670 procedure Reset (Gen : in Generator;
37671 From_State : in State);
37672
37673 25
37674 Max_Image_Width : constant := implementation-defined integer value;
37675
37676 26
37677 function Image (Of_State : State) return String;
37678 function Value (Coded_State : String) return State;
37679
37680 27
37681 private
37682 ... -- not specified by the language
37683 end Ada.Numerics.Discrete_Random;
37684
37685 27.1/2
37686 The type Generator needs finalization (see *note 7.6::) in every
37687 instantiation of Numerics.Discrete_Random.
37688
37689 28
37690 An object of the limited private type Generator is associated with a
37691 sequence of random numbers. Each generator has a hidden (internal)
37692 state, which the operations on generators use to determine the position
37693 in the associated sequence. All generators are implicitly initialized
37694 to an unspecified state that does not vary from one program execution to
37695 another; they may also be explicitly initialized, or reinitialized, to a
37696 time-dependent state, to a previously saved state, or to a state
37697 uniquely denoted by an integer value.
37698
37699 29/3
37700 An object of the private type State can be used to hold the internal
37701 state of a generator. Such objects are only needed if the application
37702 is designed to save and restore generator states or to examine or
37703 manufacture them. The implicit initial value of type State corresponds
37704 to the implicit initial value of all generators.
37705
37706 30
37707 The operations on generators affect the state and therefore the future
37708 values of the associated sequence. The semantics of the operations on
37709 generators and states are defined below.
37710
37711 31
37712 function Random (Gen : Generator) return Uniformly_Distributed;
37713 function Random (Gen : Generator) return Result_Subtype;
37714
37715 32
37716 Obtains the "next" random number from the given generator,
37717 relative to its current state, according to an
37718 implementation-defined algorithm. The result of the function
37719 in Numerics.Float_Random is delivered as a value of the
37720 subtype Uniformly_Distributed, which is a subtype of the
37721 predefined type Float having a range of 0.0 .. 1.0. The
37722 result of the function in an instantiation of
37723 Numerics.Discrete_Random is delivered as a value of the
37724 generic formal subtype Result_Subtype.
37725
37726 33
37727 procedure Reset (Gen : in Generator;
37728 Initiator : in Integer);
37729 procedure Reset (Gen : in Generator);
37730
37731 34
37732 Sets the state of the specified generator to one that is an
37733 unspecified function of the value of the parameter Initiator
37734 (or to a time-dependent state, if only a generator parameter
37735 is specified). The latter form of the procedure is known as
37736 the time-dependent Reset procedure.
37737
37738 35
37739 procedure Save (Gen : in Generator;
37740 To_State : out State);
37741 procedure Reset (Gen : in Generator;
37742 From_State : in State);
37743
37744 36
37745 Save obtains the current state of a generator. Reset gives a
37746 generator the specified state. A generator that is reset to a
37747 state previously obtained by invoking Save is restored to the
37748 state it had when Save was invoked.
37749
37750 37
37751 function Image (Of_State : State) return String;
37752 function Value (Coded_State : String) return State;
37753
37754 38
37755 Image provides a representation of a state coded (in an
37756 implementation-defined way) as a string whose length is
37757 bounded by the value of Max_Image_Width. Value is the inverse
37758 of Image: Value(Image(S)) = S for each state S that can be
37759 obtained from a generator by invoking Save.
37760
37761 _Dynamic Semantics_
37762
37763 39
37764 Instantiation of Numerics.Discrete_Random with a subtype having a null
37765 range raises Constraint_Error.
37766
37767 40/1
37768 This paragraph was deleted.
37769
37770 _Bounded (Run-Time) Errors_
37771
37772 40.1/1
37773 It is a bounded error to invoke Value with a string that is not the
37774 image of any generator state. If the error is detected,
37775 Constraint_Error or Program_Error is raised. Otherwise, a call to Reset
37776 with the resulting state will produce a generator such that calls to
37777 Random with this generator will produce a sequence of values of the
37778 appropriate subtype, but which might not be random in character. That
37779 is, the sequence of values might not fulfill the implementation
37780 requirements of this subclause.
37781
37782 _Implementation Requirements_
37783
37784 41
37785 A sufficiently long sequence of random numbers obtained by successive
37786 calls to Random is approximately uniformly distributed over the range of
37787 the result subtype.
37788
37789 42
37790 The Random function in an instantiation of Numerics.Discrete_Random is
37791 guaranteed to yield each value in its result subtype in a finite number
37792 of calls, provided that the number of such values does not exceed 2 15.
37793
37794 43
37795 Other performance requirements for the random number generator, which
37796 apply only in implementations conforming to the Numerics Annex, and then
37797 only in the "strict" mode defined there (see *note G.2::), are given in
37798 *note G.2.5::.
37799
37800 _Documentation Requirements_
37801
37802 44
37803 No one algorithm for random number generation is best for all
37804 applications. To enable the user to determine the suitability of the
37805 random number generators for the intended application, the
37806 implementation shall describe the algorithm used and shall give its
37807 period, if known exactly, or a lower bound on the period, if the exact
37808 period is unknown. Periods that are so long that the periodicity is
37809 unobservable in practice can be described in such terms, without giving
37810 a numerical bound.
37811
37812 45
37813 The implementation also shall document the minimum time interval between
37814 calls to the time-dependent Reset procedure that are guaranteed to
37815 initiate different sequences, and it shall document the nature of the
37816 strings that Value will accept without raising Constraint_Error.
37817
37818 _Implementation Advice_
37819
37820 46
37821 Any storage associated with an object of type Generator should be
37822 reclaimed on exit from the scope of the object.
37823
37824 47
37825 If the generator period is sufficiently long in relation to the number
37826 of distinct initiator values, then each possible value of Initiator
37827 passed to Reset should initiate a sequence of random numbers that does
37828 not, in a practical sense, overlap the sequence initiated by any other
37829 value. If this is not possible, then the mapping between initiator
37830 values and generator states should be a rapidly varying function of the
37831 initiator value.
37832
37833 NOTES
37834
37835 48
37836 19 If two or more tasks are to share the same generator, then the
37837 tasks have to synchronize their access to the generator as for any
37838 shared variable (see *note 9.10::).
37839
37840 49
37841 20 Within a given implementation, a repeatable random number
37842 sequence can be obtained by relying on the implicit initialization
37843 of generators or by explicitly initializing a generator with a
37844 repeatable initiator value. Different sequences of random numbers
37845 can be obtained from a given generator in different program
37846 executions by explicitly initializing the generator to a
37847 time-dependent state.
37848
37849 50
37850 21 A given implementation of the Random function in
37851 Numerics.Float_Random may or may not be capable of delivering the
37852 values 0.0 or 1.0. Portable applications should assume that these
37853 values, or values sufficiently close to them to behave
37854 indistinguishably from them, can occur. If a sequence of random
37855 integers from some fixed range is needed, the application should
37856 use the Random function in an appropriate instantiation of
37857 Numerics.Discrete_Random, rather than transforming the result of
37858 the Random function in Numerics.Float_Random. However, some
37859 applications with unusual requirements, such as for a sequence of
37860 random integers each drawn from a different range, will find it
37861 more convenient to transform the result of the floating point
37862 Random function. For M >= 1, the expression
37863
37864 51
37865 Integer(Float(M) * Random(G)) mod M
37866
37867 52
37868 transforms the result of Random(G) to an integer uniformly
37869 distributed over the range 0 .. M-1; it is valid even if Random
37870 delivers 0.0 or 1.0. Each value of the result range is possible,
37871 provided that M is not too large. Exponentially distributed
37872 (floating point) random numbers with mean and standard deviation
37873 1.0 can be obtained by the transformation
37874
37875 53/2
37876 -Log(Random(G) + Float'Model_Small)
37877
37878 54
37879 where Log comes from Numerics.Elementary_Functions (see *note
37880 A.5.1::); in this expression, the addition of Float'Model_Small
37881 avoids the exception that would be raised were Log to be given the
37882 value zero, without affecting the result (in most implementations)
37883 when Random returns a nonzero value.
37884
37885 _Examples_
37886
37887 55
37888 Example of a program that plays a simulated dice game:
37889
37890 56
37891 with Ada.Numerics.Discrete_Random;
37892 procedure Dice_Game is
37893 subtype Die is Integer range 1 .. 6;
37894 subtype Dice is Integer range 2*Die'First .. 2*Die'Last;
37895 package Random_Die is new Ada.Numerics.Discrete_Random (Die);
37896 use Random_Die;
37897 G : Generator;
37898 D : Dice;
37899 begin
37900 Reset (G); -- Start the generator in a unique state in each run
37901 loop
37902 -- Roll a pair of dice; sum and process the results
37903 D := Random(G) + Random(G);
37904 ...
37905 end loop;
37906 end Dice_Game;
37907
37908 57
37909 Example of a program that simulates coin tosses:
37910
37911 58
37912 with Ada.Numerics.Discrete_Random;
37913 procedure Flip_A_Coin is
37914 type Coin is (Heads, Tails);
37915 package Random_Coin is new Ada.Numerics.Discrete_Random (Coin);
37916 use Random_Coin;
37917 G : Generator;
37918 begin
37919 Reset (G); -- Start the generator in a unique state in each run
37920 loop
37921 -- Toss a coin and process the result
37922 case Random(G) is
37923 when Heads =>
37924 ...
37925 when Tails =>
37926 ...
37927 end case;
37928 ...
37929 end loop;
37930 end Flip_A_Coin;
37931
37932 59
37933 Example of a parallel simulation of a physical system, with a separate
37934 generator of event probabilities in each task:
37935
37936 60
37937 with Ada.Numerics.Float_Random;
37938 procedure Parallel_Simulation is
37939 use Ada.Numerics.Float_Random;
37940 task type Worker is
37941 entry Initialize_Generator (Initiator : in Integer);
37942 ...
37943 end Worker;
37944 W : array (1 .. 10) of Worker;
37945 task body Worker is
37946 G : Generator;
37947 Probability_Of_Event : Uniformly_Distributed;
37948 begin
37949 accept Initialize_Generator (Initiator : in Integer) do
37950 Reset (G, Initiator);
37951 end Initialize_Generator;
37952 loop
37953 ...
37954 Probability_Of_Event := Random(G);
37955 ...
37956 end loop;
37957 end Worker;
37958 begin
37959 -- Initialize the generators in the Worker tasks to different states
37960 for I in W'Range loop
37961 W(I).Initialize_Generator (I);
37962 end loop;
37963 ... -- Wait for the Worker tasks to terminate
37964 end Parallel_Simulation;
37965
37966 NOTES
37967
37968 61
37969 22 Notes on the last example: Although each Worker task
37970 initializes its generator to a different state, those states will
37971 be the same in every execution of the program. The generator
37972 states can be initialized uniquely in each program execution by
37973 instantiating Ada.Numerics.Discrete_Random for the type Integer in
37974 the main procedure, resetting the generator obtained from that
37975 instance to a time-dependent state, and then using random integers
37976 obtained from that generator to initialize the generators in each
37977 Worker task.
37978
37979 \1f
37980 File: arm2012.info, Node: A.5.3, Next: A.5.4, Prev: A.5.2, Up: A.5
37981
37982 A.5.3 Attributes of Floating Point Types
37983 ----------------------------------------
37984
37985 _Static Semantics_
37986
37987 1
37988 The following representation-oriented attributes are defined for every
37989 subtype S of a floating point type T.
37990
37991 2
37992 S'Machine_Radix
37993 Yields the radix of the hardware representation of the
37994 type T. The value of this attribute is of the type
37995 universal_integer.
37996
37997 3
37998 The values of other representation-oriented attributes of a floating
37999 point subtype, and of the "primitive function" attributes of a floating
38000 point subtype described later, are defined in terms of a particular
38001 representation of nonzero values called the canonical form. The
38002 canonical form (for the type T) is the form
38003 ± mantissa · T'Machine_Radixexponent
38004 where
38005
38006 4
38007 * mantissa is a fraction in the number base T'Machine_Radix, the
38008 first digit of which is nonzero, and
38009
38010 5
38011 * exponent is an integer.
38012
38013 6
38014 S'Machine_Mantissa
38015 Yields the largest value of p such that every value
38016 expressible in the canonical form (for the type T),
38017 having a p-digit mantissa and an exponent between
38018 T'Machine_Emin and T'Machine_Emax, is a machine number
38019 (see *note 3.5.7::) of the type T. This attribute yields
38020 a value of the type universal_integer.
38021
38022 7
38023 S'Machine_Emin
38024 Yields the smallest (most negative) value of exponent
38025 such that every value expressible in the canonical form
38026 (for the type T), having a mantissa of T'Machine_Mantissa
38027 digits, is a machine number (see *note 3.5.7::) of the
38028 type T. This attribute yields a value of the type
38029 universal_integer.
38030
38031 8
38032 S'Machine_Emax
38033 Yields the largest (most positive) value of exponent such
38034 that every value expressible in the canonical form (for
38035 the type T), having a mantissa of T'Machine_Mantissa
38036 digits, is a machine number (see *note 3.5.7::) of the
38037 type T. This attribute yields a value of the type
38038 universal_integer.
38039
38040 9
38041 S'Denorm
38042 Yields the value True if every value expressible in the
38043 form
38044 ± mantissa · T'Machine_RadixT'Machine_Emin
38045 where mantissa is a nonzero T'Machine_Mantissa-digit
38046 fraction in the number base T'Machine_Radix, the first
38047 digit of which is zero, is a machine number (see *note
38048 3.5.7::) of the type T; yields the value False otherwise.
38049 The value of this attribute is of the predefined type
38050 Boolean.
38051
38052 10
38053 The values described by the formula in the definition of S'Denorm are
38054 called denormalized numbers. A nonzero machine number that is not a
38055 denormalized number is a normalized number. A normalized number x of a
38056 given type T is said to be represented in canonical form when it is
38057 expressed in the canonical form (for the type T) with a mantissa having
38058 T'Machine_Mantissa digits; the resulting form is the canonical-form
38059 representation of x.
38060
38061 11
38062 S'Machine_Rounds
38063 Yields the value True if rounding is performed on inexact
38064 results of every predefined operation that yields a
38065 result of the type T; yields the value False otherwise.
38066 The value of this attribute is of the predefined type
38067 Boolean.
38068
38069 12
38070 S'Machine_Overflows
38071 Yields the value True if overflow and divide-by-zero are
38072 detected and reported by raising Constraint_Error for
38073 every predefined operation that yields a result of the
38074 type T; yields the value False otherwise. The value of
38075 this attribute is of the predefined type Boolean.
38076
38077 13
38078 S'Signed_Zeros
38079 Yields the value True if the hardware representation for
38080 the type T has the capability of representing both
38081 positively and negatively signed zeros, these being
38082 generated and used by the predefined operations of the
38083 type T as specified in IEC 559:1989; yields the value
38084 False otherwise. The value of this attribute is of the
38085 predefined type Boolean.
38086
38087 14
38088 For every value x of a floating point type T, the normalized exponent of
38089 x is defined as follows:
38090
38091 15
38092 * the normalized exponent of zero is (by convention) zero;
38093
38094 16
38095 * for nonzero x, the normalized exponent of x is the unique integer k
38096 such that T'Machine_Radixk-1 <= |x| < T'Machine_Radixk.
38097
38098 17
38099 The following primitive function attributes are defined for any subtype
38100 S of a floating point type T.
38101
38102 18
38103 S'Exponent
38104 S'Exponent denotes a function with the following
38105 specification:
38106
38107 19
38108 function S'Exponent (X : T)
38109 return universal_integer
38110
38111 20
38112 The function yields the normalized exponent of X.
38113
38114 21
38115 S'Fraction
38116 S'Fraction denotes a function with the following
38117 specification:
38118
38119 22
38120 function S'Fraction (X : T)
38121 return T
38122
38123 23
38124 The function yields the value X · T'Machine_Radix-k,
38125 where k is the normalized exponent of X. A zero result,
38126 which can only occur when X is zero, has the sign of X.
38127
38128 24
38129 S'Compose
38130 S'Compose denotes a function with the following
38131 specification:
38132
38133 25
38134 function S'Compose (Fraction : T;
38135 Exponent : universal_integer)
38136 return T
38137
38138 26
38139 Let v be the value Fraction · T'Machine_RadixExponent-k,
38140 where k is the normalized exponent of Fraction. If v is
38141 a machine number of the type T, or if |v| >=
38142 T'Model_Small, the function yields v; otherwise, it
38143 yields either one of the machine numbers of the type T
38144 adjacent to v. Constraint_Error is optionally raised if
38145 v is outside the base range of S. A zero result has the
38146 sign of Fraction when S'Signed_Zeros is True.
38147
38148 27
38149 S'Scaling
38150 S'Scaling denotes a function with the following
38151 specification:
38152
38153 28
38154 function S'Scaling (X : T;
38155 Adjustment : universal_integer)
38156 return T
38157
38158 29
38159 Let v be the value X · T'Machine_RadixAdjustment. If v
38160 is a machine number of the type T, or if |v| >=
38161 T'Model_Small, the function yields v; otherwise, it
38162 yields either one of the machine numbers of the type T
38163 adjacent to v. Constraint_Error is optionally raised if
38164 v is outside the base range of S. A zero result has the
38165 sign of X when S'Signed_Zeros is True.
38166
38167 30
38168 S'Floor
38169 S'Floor denotes a function with the following
38170 specification:
38171
38172 31
38173 function S'Floor (X : T)
38174 return T
38175
38176 32
38177 The function yields the value 'floor(X)', i.e., the
38178 largest (most positive) integral value less than or equal
38179 to X. When X is zero, the result has the sign of X; a
38180 zero result otherwise has a positive sign.
38181
38182 33
38183 S'Ceiling
38184 S'Ceiling denotes a function with the following
38185 specification:
38186
38187 34
38188 function S'Ceiling (X : T)
38189 return T
38190
38191 35
38192 The function yields the value 'ceiling(X)', i.e., the
38193 smallest (most negative) integral value greater than or
38194 equal to X. When X is zero, the result has the sign of X;
38195 a zero result otherwise has a negative sign when
38196 S'Signed_Zeros is True.
38197
38198 36
38199 S'Rounding
38200 S'Rounding denotes a function with the following
38201 specification:
38202
38203 37
38204 function S'Rounding (X : T)
38205 return T
38206
38207 38
38208 The function yields the integral value nearest to X,
38209 rounding away from zero if X lies exactly halfway between
38210 two integers. A zero result has the sign of X when
38211 S'Signed_Zeros is True.
38212
38213 39
38214 S'Unbiased_Rounding
38215 S'Unbiased_Rounding denotes a function with the following
38216 specification:
38217
38218 40
38219 function S'Unbiased_Rounding (X : T)
38220 return T
38221
38222 41
38223 The function yields the integral value nearest to X,
38224 rounding toward the even integer if X lies exactly
38225 halfway between two integers. A zero result has the sign
38226 of X when S'Signed_Zeros is True.
38227
38228 41.1/2
38229 S'Machine_Rounding
38230 S'Machine_Rounding denotes a function with the following
38231 specification:
38232
38233 41.2/2
38234 function S'Machine_Rounding (X : T)
38235 return T
38236
38237 41.3/2
38238 The function yields the integral value nearest to X. If X
38239 lies exactly halfway between two integers, one of those
38240 integers is returned, but which of them is returned is
38241 unspecified. A zero result has the sign of X when
38242 S'Signed_Zeros is True. This function provides access to
38243 the rounding behavior which is most efficient on the
38244 target processor.
38245
38246 42
38247 S'Truncation
38248 S'Truncation denotes a function with the following
38249 specification:
38250
38251 43
38252 function S'Truncation (X : T)
38253 return T
38254
38255 44
38256 The function yields the value 'ceiling(X)' when X is
38257 negative, and 'floor(X)' otherwise. A zero result has
38258 the sign of X when S'Signed_Zeros is True.
38259
38260 45
38261 S'Remainder
38262 S'Remainder denotes a function with the following
38263 specification:
38264
38265 46
38266 function S'Remainder (X, Y : T)
38267 return T
38268
38269 47
38270 For nonzero Y, let v be the value X - n · Y, where n is
38271 the integer nearest to the exact value of X/Y; if |n -
38272 X/Y| = 1/2, then n is chosen to be even. If v is a
38273 machine number of the type T, the function yields v;
38274 otherwise, it yields zero. Constraint_Error is raised if
38275 Y is zero. A zero result has the sign of X when
38276 S'Signed_Zeros is True.
38277
38278 48
38279 S'Adjacent
38280 S'Adjacent denotes a function with the following
38281 specification:
38282
38283 49
38284 function S'Adjacent (X, Towards : T)
38285 return T
38286
38287 50
38288 If Towards = X, the function yields X; otherwise, it
38289 yields the machine number of the type T adjacent to X in
38290 the direction of Towards, if that machine number exists.
38291 If the result would be outside the base range of S,
38292 Constraint_Error is raised. When T'Signed_Zeros is True,
38293 a zero result has the sign of X. When Towards is zero,
38294 its sign has no bearing on the result.
38295
38296 51
38297 S'Copy_Sign
38298 S'Copy_Sign denotes a function with the following
38299 specification:
38300
38301 52
38302 function S'Copy_Sign (Value, Sign : T)
38303 return T
38304
38305 53
38306 If the value of Value is nonzero, the function yields a
38307 result whose magnitude is that of Value and whose sign is
38308 that of Sign; otherwise, it yields the value zero.
38309 Constraint_Error is optionally raised if the result is
38310 outside the base range of S. A zero result has the sign
38311 of Sign when S'Signed_Zeros is True.
38312
38313 54
38314 S'Leading_Part
38315 S'Leading_Part denotes a function with the following
38316 specification:
38317
38318 55
38319 function S'Leading_Part (X : T;
38320 Radix_Digits : universal_integer)
38321 return T
38322
38323 56
38324 Let v be the value T'Machine_Radixk-Radix_Digits, where k
38325 is the normalized exponent of X. The function yields the
38326 value
38327
38328 57
38329 * 'floor(X/v)' · v, when X is nonnegative and
38330 Radix_Digits is positive;
38331
38332 58
38333 * 'ceiling(X/v)' · v, when X is negative and
38334 Radix_Digits is positive.
38335
38336 59
38337 Constraint_Error is raised when Radix_Digits is zero or
38338 negative. A zero result, which can only occur when X is
38339 zero, has the sign of X.
38340
38341 60
38342 S'Machine
38343 S'Machine denotes a function with the following
38344 specification:
38345
38346 61
38347 function S'Machine (X : T)
38348 return T
38349
38350 62
38351 If X is a machine number of the type T, the function
38352 yields X; otherwise, it yields the value obtained by
38353 rounding or truncating X to either one of the adjacent
38354 machine numbers of the type T. Constraint_Error is raised
38355 if rounding or truncating X to the precision of the
38356 machine numbers results in a value outside the base range
38357 of S. A zero result has the sign of X when S'Signed_Zeros
38358 is True.
38359
38360 63
38361 The following model-oriented attributes are defined for any subtype S of
38362 a floating point type T.
38363
38364 64
38365 S'Model_Mantissa
38366 If the Numerics Annex is not supported, this attribute
38367 yields an implementation defined value that is greater
38368 than or equal to 'ceiling(d · log(10) /
38369 log(T'Machine_Radix))' + 1, where d is the requested
38370 decimal precision of T, and less than or equal to the
38371 value of T'Machine_Mantissa. See *note G.2.2:: for
38372 further requirements that apply to implementations
38373 supporting the Numerics Annex. The value of this
38374 attribute is of the type universal_integer.
38375
38376 65
38377 S'Model_Emin
38378 If the Numerics Annex is not supported, this attribute
38379 yields an implementation defined value that is greater
38380 than or equal to the value of T'Machine_Emin. See *note
38381 G.2.2:: for further requirements that apply to
38382 implementations supporting the Numerics Annex. The value
38383 of this attribute is of the type universal_integer.
38384
38385 66
38386 S'Model_Epsilon
38387 Yields the value T'Machine_Radix1 - T'Model_Mantissa.
38388 The value of this attribute is of the type
38389 universal_real.
38390
38391 67
38392 S'Model_Small
38393 Yields the value T'Machine_RadixT'Model_Emin - 1. The
38394 value of this attribute is of the type universal_real.
38395
38396 68
38397 S'Model
38398 S'Model denotes a function with the following
38399 specification:
38400
38401 69
38402 function S'Model (X : T)
38403 return T
38404
38405 70
38406 If the Numerics Annex is not supported, the meaning of
38407 this attribute is implementation defined; see *note
38408 G.2.2:: for the definition that applies to
38409 implementations supporting the Numerics Annex.
38410
38411 71
38412 S'Safe_First
38413 Yields the lower bound of the safe range (see *note
38414 3.5.7::) of the type T. If the Numerics Annex is not
38415 supported, the value of this attribute is implementation
38416 defined; see *note G.2.2:: for the definition that
38417 applies to implementations supporting the Numerics Annex.
38418 The value of this attribute is of the type
38419 universal_real.
38420
38421 72
38422 S'Safe_Last
38423 Yields the upper bound of the safe range (see *note
38424 3.5.7::) of the type T. If the Numerics Annex is not
38425 supported, the value of this attribute is implementation
38426 defined; see *note G.2.2:: for the definition that
38427 applies to implementations supporting the Numerics Annex.
38428 The value of this attribute is of the type
38429 universal_real.
38430
38431 \1f
38432 File: arm2012.info, Node: A.5.4, Prev: A.5.3, Up: A.5
38433
38434 A.5.4 Attributes of Fixed Point Types
38435 -------------------------------------
38436
38437 _Static Semantics_
38438
38439 1
38440 The following representation-oriented attributes are defined for every
38441 subtype S of a fixed point type T.
38442
38443 2
38444 S'Machine_Radix
38445 Yields the radix of the hardware representation of the
38446 type T. The value of this attribute is of the type
38447 universal_integer.
38448
38449 3
38450 S'Machine_Rounds
38451 Yields the value True if rounding is performed on inexact
38452 results of every predefined operation that yields a
38453 result of the type T; yields the value False otherwise.
38454 The value of this attribute is of the predefined type
38455 Boolean.
38456
38457 4
38458 S'Machine_Overflows
38459 Yields the value True if overflow and divide-by-zero are
38460 detected and reported by raising Constraint_Error for
38461 every predefined operation that yields a result of the
38462 type T; yields the value False otherwise. The value of
38463 this attribute is of the predefined type Boolean.
38464
38465 \1f
38466 File: arm2012.info, Node: A.6, Next: A.7, Prev: A.5, Up: Annex A
38467
38468 A.6 Input-Output
38469 ================
38470
38471 1/2
38472 Input-output is provided through language-defined packages, each of
38473 which is a child of the root package Ada. The generic packages
38474 Sequential_IO and Direct_IO define input-output operations applicable to
38475 files containing elements of a given type. The generic package
38476 Storage_IO supports reading from and writing to an in-memory buffer.
38477 Additional operations for text input-output are supplied in the packages
38478 Text_IO, Wide_Text_IO, and Wide_Wide_Text_IO. Heterogeneous input-output
38479 is provided through the child packages Streams.Stream_IO and
38480 Text_IO.Text_Streams (see also *note 13.13::). The package
38481 IO_Exceptions defines the exceptions needed by the predefined
38482 input-output packages.
38483
38484 \1f
38485 File: arm2012.info, Node: A.7, Next: A.8, Prev: A.6, Up: Annex A
38486
38487 A.7 External Files and File Objects
38488 ===================================
38489
38490 _Static Semantics_
38491
38492 1
38493 Values input from the external environment of the program, or output to
38494 the external environment, are considered to occupy external files. An
38495 external file can be anything external to the program that can produce a
38496 value to be read or receive a value to be written. An external file is
38497 identified by a string (the name). A second string (the form) gives
38498 further system-dependent characteristics that may be associated with the
38499 file, such as the physical organization or access rights. The
38500 conventions governing the interpretation of such strings shall be
38501 documented.
38502
38503 2/3
38504 Input and output operations are expressed as operations on objects of
38505 some file type, rather than directly in terms of the external files. In
38506 the remainder of this clause, the term file is always used to refer to a
38507 file object; the term external file is used otherwise.
38508
38509 3
38510 Input-output for sequential files of values of a single element type is
38511 defined by means of the generic package Sequential_IO. In order to
38512 define sequential input-output for a given element type, an
38513 instantiation of this generic unit, with the given type as actual
38514 parameter, has to be declared. The resulting package contains the
38515 declaration of a file type (called File_Type) for files of such
38516 elements, as well as the operations applicable to these files, such as
38517 the Open, Read, and Write procedures.
38518
38519 4/2
38520 Input-output for direct access files is likewise defined by a generic
38521 package called Direct_IO. Input-output in human-readable form is defined
38522 by the (nongeneric) packages Text_IO for Character and String data,
38523 Wide_Text_IO for Wide_Character and Wide_String data, and
38524 Wide_Wide_Text_IO for Wide_Wide_Character and Wide_Wide_String data.
38525 Input-output for files containing streams of elements representing
38526 values of possibly different types is defined by means of the
38527 (nongeneric) package Streams.Stream_IO.
38528
38529 5
38530 Before input or output operations can be performed on a file, the file
38531 first has to be associated with an external file. While such an
38532 association is in effect, the file is said to be open, and otherwise the
38533 file is said to be closed.
38534
38535 6
38536 The language does not define what happens to external files after the
38537 completion of the main program and all the library tasks (in particular,
38538 if corresponding files have not been closed). The effect of
38539 input-output for access types is unspecified.
38540
38541 7
38542 An open file has a current mode, which is a value of one of the
38543 following enumeration types:
38544
38545 8
38546 type File_Mode is (In_File, Inout_File, Out_File); -- for Direct_IO
38547
38548 9
38549 These values correspond respectively to the cases where only
38550 reading, both reading and writing, or only writing are to be
38551 performed.
38552
38553 10/2
38554 type File_Mode is (In_File, Out_File, Append_File);
38555 -- for Sequential_IO, Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, and Stream_IO
38556
38557 11
38558 These values correspond respectively to the cases where only
38559 reading, only writing, or only appending are to be performed.
38560
38561 12
38562 The mode of a file can be changed.
38563
38564 13/2
38565 Several file management operations are common to Sequential_IO,
38566 Direct_IO, Text_IO, Wide_Text_IO, and Wide_Wide_Text_IO. These
38567 operations are described in subclause *note A.8.2:: for sequential and
38568 direct files. Any additional effects concerning text input-output are
38569 described in subclause *note A.10.2::.
38570
38571 14/3
38572 The exceptions that can be propagated by the execution of an
38573 input-output subprogram are defined in the package IO_Exceptions; the
38574 situations in which they can be propagated are described following the
38575 description of the subprogram (and in subclause *note A.13::). The
38576 exceptions Storage_Error and Program_Error may be propagated.
38577 (Program_Error can only be propagated due to errors made by the caller
38578 of the subprogram.) Finally, exceptions can be propagated in certain
38579 implementation-defined situations.
38580
38581 NOTES
38582
38583 15/2
38584 23 Each instantiation of the generic packages Sequential_IO and
38585 Direct_IO declares a different type File_Type. In the case of
38586 Text_IO, Wide_Text_IO, Wide_Wide_Text_IO, and Streams.Stream_IO,
38587 the corresponding type File_Type is unique.
38588
38589 16
38590 24 A bidirectional device can often be modeled as two sequential
38591 files associated with the device, one of mode In_File, and one of
38592 mode Out_File. An implementation may restrict the number of files
38593 that may be associated with a given external file.
38594
38595 \1f
38596 File: arm2012.info, Node: A.8, Next: A.9, Prev: A.7, Up: Annex A
38597
38598 A.8 Sequential and Direct Files
38599 ===============================
38600
38601 _Static Semantics_
38602
38603 1/2
38604 Two kinds of access to external files are defined in this subclause:
38605 sequential access and direct access. The corresponding file types and
38606 the associated operations are provided by the generic packages
38607 Sequential_IO and Direct_IO. A file object to be used for sequential
38608 access is called a sequential file, and one to be used for direct access
38609 is called a direct file. Access to stream files is described in *note
38610 A.12.1::.
38611
38612 2
38613 For sequential access, the file is viewed as a sequence of values that
38614 are transferred in the order of their appearance (as produced by the
38615 program or by the external environment). When the file is opened with
38616 mode In_File or Out_File, transfer starts respectively from or to the
38617 beginning of the file. When the file is opened with mode Append_File,
38618 transfer to the file starts after the last element of the file.
38619
38620 3
38621 For direct access, the file is viewed as a set of elements occupying
38622 consecutive positions in linear order; a value can be transferred to or
38623 from an element of the file at any selected position. The position of
38624 an element is specified by its index, which is a number, greater than
38625 zero, of the implementation-defined integer type Count. The first
38626 element, if any, has index one; the index of the last element, if any,
38627 is called the current size; the current size is zero if there are no
38628 elements. The current size is a property of the external file.
38629
38630 4
38631 An open direct file has a current index, which is the index that will be
38632 used by the next read or write operation. When a direct file is opened,
38633 the current index is set to one. The current index of a direct file is
38634 a property of a file object, not of an external file.
38635
38636 * Menu:
38637
38638 * A.8.1 :: The Generic Package Sequential_IO
38639 * A.8.2 :: File Management
38640 * A.8.3 :: Sequential Input-Output Operations
38641 * A.8.4 :: The Generic Package Direct_IO
38642 * A.8.5 :: Direct Input-Output Operations
38643
38644 \1f
38645 File: arm2012.info, Node: A.8.1, Next: A.8.2, Up: A.8
38646
38647 A.8.1 The Generic Package Sequential_IO
38648 ---------------------------------------
38649
38650 _Static Semantics_
38651
38652 1
38653 The generic library package Sequential_IO has the following declaration:
38654
38655 2
38656 with Ada.IO_Exceptions;
38657 generic
38658 type Element_Type(<>) is private;
38659 package Ada.Sequential_IO is
38660
38661 3
38662 type File_Type is limited private;
38663
38664 4
38665 type File_Mode is (In_File, Out_File, Append_File);
38666
38667 5
38668 -- File management
38669
38670 6
38671 procedure Create(File : in out File_Type;
38672 Mode : in File_Mode := Out_File;
38673 Name : in String := "";
38674 Form : in String := "");
38675
38676 7
38677 procedure Open (File : in out File_Type;
38678 Mode : in File_Mode;
38679 Name : in String;
38680 Form : in String := "");
38681
38682 8
38683 procedure Close (File : in out File_Type);
38684 procedure Delete(File : in out File_Type);
38685 procedure Reset (File : in out File_Type; Mode : in File_Mode);
38686 procedure Reset (File : in out File_Type);
38687
38688 9
38689 function Mode (File : in File_Type) return File_Mode;
38690 function Name (File : in File_Type) return String;
38691 function Form (File : in File_Type) return String;
38692
38693 10
38694 function Is_Open(File : in File_Type) return Boolean;
38695
38696 11
38697 -- Input and output operations
38698
38699 12
38700 procedure Read (File : in File_Type; Item : out Element_Type);
38701 procedure Write (File : in File_Type; Item : in Element_Type);
38702
38703 13
38704 function End_Of_File(File : in File_Type) return Boolean;
38705
38706 14
38707 -- Exceptions
38708
38709 15
38710 Status_Error : exception renames IO_Exceptions.Status_Error;
38711 Mode_Error : exception renames IO_Exceptions.Mode_Error;
38712 Name_Error : exception renames IO_Exceptions.Name_Error;
38713 Use_Error : exception renames IO_Exceptions.Use_Error;
38714 Device_Error : exception renames IO_Exceptions.Device_Error;
38715 End_Error : exception renames IO_Exceptions.End_Error;
38716 Data_Error : exception renames IO_Exceptions.Data_Error;
38717
38718 16
38719 private
38720 ... -- not specified by the language
38721 end Ada.Sequential_IO;
38722
38723 17/2
38724 The type File_Type needs finalization (see *note 7.6::) in every
38725 instantiation of Sequential_IO.
38726
38727 \1f
38728 File: arm2012.info, Node: A.8.2, Next: A.8.3, Prev: A.8.1, Up: A.8
38729
38730 A.8.2 File Management
38731 ---------------------
38732
38733 _Static Semantics_
38734
38735 1
38736 The procedures and functions described in this subclause provide for the
38737 control of external files; their declarations are repeated in each of
38738 the packages for sequential, direct, text, and stream input-output. For
38739 text input-output, the procedures Create, Open, and Reset have
38740 additional effects described in subclause *note A.10.2::.
38741
38742 2
38743 procedure Create(File : in out File_Type;
38744 Mode : in File_Mode := default_mode;
38745 Name : in String := "";
38746 Form : in String := "");
38747
38748 3/2
38749 Establishes a new external file, with the given name and form,
38750 and associates this external file with the given file. The
38751 given file is left open. The current mode of the given file
38752 is set to the given access mode. The default access mode is
38753 the mode Out_File for sequential, stream, and text
38754 input-output; it is the mode Inout_File for direct
38755 input-output. For direct access, the size of the created file
38756 is implementation defined.
38757
38758 4
38759 A null string for Name specifies an external file that is not
38760 accessible after the completion of the main program (a
38761 temporary file). A null string for Form specifies the use of
38762 the default options of the implementation for the external
38763 file.
38764
38765 5
38766 The exception Status_Error is propagated if the given file is
38767 already open. The exception Name_Error is propagated if the
38768 string given as Name does not allow the identification of an
38769 external file. The exception Use_Error is propagated if, for
38770 the specified mode, the external environment does not support
38771 creation of an external file with the given name (in the
38772 absence of Name_Error) and form.
38773
38774 6
38775 procedure Open(File : in out File_Type;
38776 Mode : in File_Mode;
38777 Name : in String;
38778 Form : in String := "");
38779
38780 7
38781 Associates the given file with an existing external file
38782 having the given name and form, and sets the current mode of
38783 the given file to the given mode. The given file is left
38784 open.
38785
38786 8
38787 The exception Status_Error is propagated if the given file is
38788 already open. The exception Name_Error is propagated if the
38789 string given as Name does not allow the identification of an
38790 external file; in particular, this exception is propagated if
38791 no external file with the given name exists. The exception
38792 Use_Error is propagated if, for the specified mode, the
38793 external environment does not support opening for an external
38794 file with the given name (in the absence of Name_Error) and
38795 form.
38796
38797 9
38798 procedure Close(File : in out File_Type);
38799
38800 10
38801 Severs the association between the given file and its
38802 associated external file. The given file is left closed. In
38803 addition, for sequential files, if the file being closed has
38804 mode Out_File or Append_File, then the last element written
38805 since the most recent open or reset is the last element that
38806 can be read from the file. If no elements have been written
38807 and the file mode is Out_File, then the closed file is empty.
38808 If no elements have been written and the file mode is
38809 Append_File, then the closed file is unchanged.
38810
38811 11
38812 The exception Status_Error is propagated if the given file is
38813 not open.
38814
38815 12
38816 procedure Delete(File : in out File_Type);
38817
38818 13
38819 Deletes the external file associated with the given file. The
38820 given file is closed, and the external file ceases to exist.
38821
38822 14
38823 The exception Status_Error is propagated if the given file is
38824 not open. The exception Use_Error is propagated if deletion
38825 of the external file is not supported by the external
38826 environment.
38827
38828 15
38829 procedure Reset(File : in out File_Type; Mode : in File_Mode);
38830 procedure Reset(File : in out File_Type);
38831
38832 16/2
38833 Resets the given file so that reading from its elements can be
38834 restarted from the beginning of the external file (for modes
38835 In_File and Inout_File), and so that writing to its elements
38836 can be restarted at the beginning of the external file (for
38837 modes Out_File and Inout_File) or after the last element of
38838 the external file (for mode Append_File). In particular, for
38839 direct access this means that the current index is set to one.
38840 If a Mode parameter is supplied, the current mode of the given
38841 file is set to the given mode. In addition, for sequential
38842 files, if the given file has mode Out_File or Append_File when
38843 Reset is called, the last element written since the most
38844 recent open or reset is the last element that can be read from
38845 the external file. If no elements have been written and the
38846 file mode is Out_File, the reset file is empty. If no
38847 elements have been written and the file mode is Append_File,
38848 then the reset file is unchanged.
38849
38850 17
38851 The exception Status_Error is propagated if the file is not
38852 open. The exception Use_Error is propagated if the external
38853 environment does not support resetting for the external file
38854 and, also, if the external environment does not support
38855 resetting to the specified mode for the external file.
38856
38857 18
38858 function Mode(File : in File_Type) return File_Mode;
38859
38860 19
38861 Returns the current mode of the given file.
38862
38863 20
38864 The exception Status_Error is propagated if the file is not
38865 open.
38866
38867 21
38868 function Name(File : in File_Type) return String;
38869
38870 22/2
38871 Returns a string which uniquely identifies the external file
38872 currently associated with the given file (and may thus be used
38873 in an Open operation).
38874
38875 23
38876 The exception Status_Error is propagated if the given file is
38877 not open. The exception Use_Error is propagated if the
38878 associated external file is a temporary file that cannot be
38879 opened by any name.
38880
38881 24
38882 function Form(File : in File_Type) return String;
38883
38884 25
38885 Returns the form string for the external file currently
38886 associated with the given file. If an external environment
38887 allows alternative specifications of the form (for example,
38888 abbreviations using default options), the string returned by
38889 the function should correspond to a full specification (that
38890 is, it should indicate explicitly all options selected,
38891 including default options).
38892
38893 26
38894 The exception Status_Error is propagated if the given file is
38895 not open.
38896
38897 27
38898 function Is_Open(File : in File_Type) return Boolean;
38899
38900 28/3
38901 Returns True if the file is open (that is, if it is associated
38902 with an external file); otherwise, returns False.
38903
38904 _Implementation Permissions_
38905
38906 29
38907 An implementation may propagate Name_Error or Use_Error if an attempt is
38908 made to use an I/O feature that cannot be supported by the
38909 implementation due to limitations in the external environment. Any such
38910 restriction should be documented.
38911
38912 \1f
38913 File: arm2012.info, Node: A.8.3, Next: A.8.4, Prev: A.8.2, Up: A.8
38914
38915 A.8.3 Sequential Input-Output Operations
38916 ----------------------------------------
38917
38918 _Static Semantics_
38919
38920 1
38921 The operations available for sequential input and output are described
38922 in this subclause. The exception Status_Error is propagated if any of
38923 these operations is attempted for a file that is not open.
38924
38925 2
38926 procedure Read(File : in File_Type; Item : out Element_Type);
38927
38928 3
38929 Operates on a file of mode In_File. Reads an element from the
38930 given file, and returns the value of this element in the Item
38931 parameter.
38932
38933 4
38934 The exception Mode_Error is propagated if the mode is not
38935 In_File. The exception End_Error is propagated if no more
38936 elements can be read from the given file. The exception
38937 Data_Error can be propagated if the element read cannot be
38938 interpreted as a value of the subtype Element_Type (see *note
38939 A.13::, "*note A.13:: Exceptions in Input-Output").
38940
38941 5
38942 procedure Write(File : in File_Type; Item : in Element_Type);
38943
38944 6
38945 Operates on a file of mode Out_File or Append_File. Writes
38946 the value of Item to the given file.
38947
38948 7
38949 The exception Mode_Error is propagated if the mode is not
38950 Out_File or Append_File. The exception Use_Error is
38951 propagated if the capacity of the external file is exceeded.
38952
38953 8
38954 function End_Of_File(File : in File_Type) return Boolean;
38955
38956 9/3
38957 Operates on a file of mode In_File. Returns True if no more
38958 elements can be read from the given file; otherwise, returns
38959 False.
38960
38961 10
38962 The exception Mode_Error is propagated if the mode is not
38963 In_File.
38964
38965 \1f
38966 File: arm2012.info, Node: A.8.4, Next: A.8.5, Prev: A.8.3, Up: A.8
38967
38968 A.8.4 The Generic Package Direct_IO
38969 -----------------------------------
38970
38971 _Static Semantics_
38972
38973 1
38974 The generic library package Direct_IO has the following declaration:
38975
38976 2
38977 with Ada.IO_Exceptions;
38978 generic
38979 type Element_Type is private;
38980 package Ada.Direct_IO is
38981
38982 3
38983 type File_Type is limited private;
38984
38985 4
38986 type File_Mode is (In_File, Inout_File, Out_File);
38987 type Count is range 0 .. implementation-defined;
38988 subtype Positive_Count is Count range 1 .. Count'Last;
38989
38990 5
38991 -- File management
38992
38993 6
38994 procedure Create(File : in out File_Type;
38995 Mode : in File_Mode := Inout_File;
38996 Name : in String := "";
38997 Form : in String := "");
38998
38999 7
39000 procedure Open (File : in out File_Type;
39001 Mode : in File_Mode;
39002 Name : in String;
39003 Form : in String := "");
39004
39005 8
39006 procedure Close (File : in out File_Type);
39007 procedure Delete(File : in out File_Type);
39008 procedure Reset (File : in out File_Type; Mode : in File_Mode);
39009 procedure Reset (File : in out File_Type);
39010
39011 9
39012 function Mode (File : in File_Type) return File_Mode;
39013 function Name (File : in File_Type) return String;
39014 function Form (File : in File_Type) return String;
39015
39016 10
39017 function Is_Open(File : in File_Type) return Boolean;
39018
39019 11
39020 -- Input and output operations
39021
39022 12
39023 procedure Read (File : in File_Type; Item : out Element_Type;
39024 From : in Positive_Count);
39025 procedure Read (File : in File_Type; Item : out Element_Type);
39026
39027 13
39028 procedure Write(File : in File_Type; Item : in Element_Type;
39029 To : in Positive_Count);
39030 procedure Write(File : in File_Type; Item : in Element_Type);
39031
39032 14
39033 procedure Set_Index(File : in File_Type; To : in Positive_Count);
39034
39035 15
39036 function Index(File : in File_Type) return Positive_Count;
39037 function Size (File : in File_Type) return Count;
39038
39039 16
39040 function End_Of_File(File : in File_Type) return Boolean;
39041
39042 17
39043 -- Exceptions
39044
39045 18
39046 Status_Error : exception renames IO_Exceptions.Status_Error;
39047 Mode_Error : exception renames IO_Exceptions.Mode_Error;
39048 Name_Error : exception renames IO_Exceptions.Name_Error;
39049 Use_Error : exception renames IO_Exceptions.Use_Error;
39050 Device_Error : exception renames IO_Exceptions.Device_Error;
39051 End_Error : exception renames IO_Exceptions.End_Error;
39052 Data_Error : exception renames IO_Exceptions.Data_Error;
39053
39054 19
39055 private
39056 ... -- not specified by the language
39057 end Ada.Direct_IO;
39058
39059 20/2
39060 The type File_Type needs finalization (see *note 7.6::) in every
39061 instantiation of Direct_IO.
39062
39063 \1f
39064 File: arm2012.info, Node: A.8.5, Prev: A.8.4, Up: A.8
39065
39066 A.8.5 Direct Input-Output Operations
39067 ------------------------------------
39068
39069 _Static Semantics_
39070
39071 1
39072 The operations available for direct input and output are described in
39073 this subclause. The exception Status_Error is propagated if any of
39074 these operations is attempted for a file that is not open.
39075
39076 2
39077 procedure Read(File : in File_Type; Item : out Element_Type;
39078 From : in Positive_Count);
39079 procedure Read(File : in File_Type; Item : out Element_Type);
39080
39081 3
39082 Operates on a file of mode In_File or Inout_File. In the case
39083 of the first form, sets the current index of the given file to
39084 the index value given by the parameter From. Then (for both
39085 forms) returns, in the parameter Item, the value of the
39086 element whose position in the given file is specified by the
39087 current index of the file; finally, increases the current
39088 index by one.
39089
39090 4
39091 The exception Mode_Error is propagated if the mode of the
39092 given file is Out_File. The exception End_Error is propagated
39093 if the index to be used exceeds the size of the external file.
39094 The exception Data_Error can be propagated if the element read
39095 cannot be interpreted as a value of the subtype Element_Type
39096 (see *note A.13::).
39097
39098 5
39099 procedure Write(File : in File_Type; Item : in Element_Type;
39100 To : in Positive_Count);
39101 procedure Write(File : in File_Type; Item : in Element_Type);
39102
39103 6
39104 Operates on a file of mode Inout_File or Out_File. In the
39105 case of the first form, sets the index of the given file to
39106 the index value given by the parameter To. Then (for both
39107 forms) gives the value of the parameter Item to the element
39108 whose position in the given file is specified by the current
39109 index of the file; finally, increases the current index by
39110 one.
39111
39112 7
39113 The exception Mode_Error is propagated if the mode of the
39114 given file is In_File. The exception Use_Error is propagated
39115 if the capacity of the external file is exceeded.
39116
39117 8
39118 procedure Set_Index(File : in File_Type; To : in Positive_Count);
39119
39120 9
39121 Operates on a file of any mode. Sets the current index of the
39122 given file to the given index value (which may exceed the
39123 current size of the file).
39124
39125 10
39126 function Index(File : in File_Type) return Positive_Count;
39127
39128 11
39129 Operates on a file of any mode. Returns the current index of
39130 the given file.
39131
39132 12
39133 function Size(File : in File_Type) return Count;
39134
39135 13
39136 Operates on a file of any mode. Returns the current size of
39137 the external file that is associated with the given file.
39138
39139 14
39140 function End_Of_File(File : in File_Type) return Boolean;
39141
39142 15/3
39143 Operates on a file of mode In_File or Inout_File. Returns
39144 True if the current index exceeds the size of the external
39145 file; otherwise, returns False.
39146
39147 16
39148 The exception Mode_Error is propagated if the mode of the
39149 given file is Out_File.
39150
39151 NOTES
39152
39153 17
39154 25 Append_File mode is not supported for the generic package
39155 Direct_IO.
39156
39157 \1f
39158 File: arm2012.info, Node: A.9, Next: A.10, Prev: A.8, Up: Annex A
39159
39160 A.9 The Generic Package Storage_IO
39161 ==================================
39162
39163 1
39164 The generic package Storage_IO provides for reading from and writing to
39165 an in-memory buffer. This generic package supports the construction of
39166 user-defined input-output packages.
39167
39168 _Static Semantics_
39169
39170 2
39171 The generic library package Storage_IO has the following declaration:
39172
39173 3
39174 with Ada.IO_Exceptions;
39175 with System.Storage_Elements;
39176 generic
39177 type Element_Type is private;
39178 package Ada.Storage_IO is
39179 pragma Preelaborate(Storage_IO);
39180
39181 4
39182 Buffer_Size : constant System.Storage_Elements.Storage_Count :=
39183 implementation-defined;
39184 subtype Buffer_Type is
39185 System.Storage_Elements.Storage_Array(1..Buffer_Size);
39186
39187 5
39188 -- Input and output operations
39189
39190 6
39191 procedure Read (Buffer : in Buffer_Type; Item : out Element_Type);
39192
39193 7
39194 procedure Write(Buffer : out Buffer_Type; Item : in Element_Type);
39195
39196 8
39197 -- Exceptions
39198
39199 9
39200 Data_Error : exception renames IO_Exceptions.Data_Error;
39201 end Ada.Storage_IO;
39202
39203 10
39204 In each instance, the constant Buffer_Size has a value that is the size
39205 (in storage elements) of the buffer required to represent the content of
39206 an object of subtype Element_Type, including any implicit levels of
39207 indirection used by the implementation. The Read and Write procedures
39208 of Storage_IO correspond to the Read and Write procedures of Direct_IO
39209 (see *note A.8.4::), but with the content of the Item parameter being
39210 read from or written into the specified Buffer, rather than an external
39211 file.
39212
39213 NOTES
39214
39215 11
39216 26 A buffer used for Storage_IO holds only one element at a time;
39217 an external file used for Direct_IO holds a sequence of elements.
39218
39219 \1f
39220 File: arm2012.info, Node: A.10, Next: A.11, Prev: A.9, Up: Annex A
39221
39222 A.10 Text Input-Output
39223 ======================
39224
39225 _Static Semantics_
39226
39227 1/3
39228 This subclause describes the package Text_IO, which provides facilities
39229 for input and output in human-readable form. Each file is read or
39230 written sequentially, as a sequence of characters grouped into lines,
39231 and as a sequence of lines grouped into pages. The specification of the
39232 package is given below in subclause *note A.10.1::.
39233
39234 2/3
39235 The facilities for file management given above, in subclauses *note
39236 A.8.2:: and *note A.8.3::, are available for text input-output. In
39237 place of Read and Write, however, there are procedures Get and Put that
39238 input values of suitable types from text files, and output values to
39239 them. These values are provided to the Put procedures, and returned by
39240 the Get procedures, in a parameter Item. Several overloaded procedures
39241 of these names exist, for different types of Item. These Get procedures
39242 analyze the input sequences of characters based on lexical elements (see
39243 Clause *note 2::) and return the corresponding values; the Put
39244 procedures output the given values as appropriate lexical elements.
39245 Procedures Get and Put are also available that input and output
39246 individual characters treated as character values rather than as lexical
39247 elements. Related to character input are procedures to look ahead at
39248 the next character without reading it, and to read a character
39249 "immediately" without waiting for an end-of-line to signal availability.
39250
39251 3
39252 In addition to the procedures Get and Put for numeric and enumeration
39253 types of Item that operate on text files, analogous procedures are
39254 provided that read from and write to a parameter of type String. These
39255 procedures perform the same analysis and composition of character
39256 sequences as their counterparts which have a file parameter.
39257
39258 4
39259 For all Get and Put procedures that operate on text files, and for many
39260 other subprograms, there are forms with and without a file parameter.
39261 Each such Get procedure operates on an input file, and each such Put
39262 procedure operates on an output file. If no file is specified, a
39263 default input file or a default output file is used.
39264
39265 5
39266 At the beginning of program execution the default input and output files
39267 are the so-called standard input file and standard output file. These
39268 files are open, have respectively the current modes In_File and
39269 Out_File, and are associated with two implementation-defined external
39270 files. Procedures are provided to change the current default input file
39271 and the current default output file.
39272
39273 6
39274 At the beginning of program execution a default file for
39275 program-dependent error-related text output is the so-called standard
39276 error file. This file is open, has the current mode Out_File, and is
39277 associated with an implementation-defined external file. A procedure is
39278 provided to change the current default error file.
39279
39280 7
39281 From a logical point of view, a text file is a sequence of pages, a page
39282 is a sequence of lines, and a line is a sequence of characters; the end
39283 of a line is marked by a line terminator; the end of a page is marked by
39284 the combination of a line terminator immediately followed by a page
39285 terminator; and the end of a file is marked by the combination of a line
39286 terminator immediately followed by a page terminator and then a file
39287 terminator. Terminators are generated during output; either by calls of
39288 procedures provided expressly for that purpose; or implicitly as part of
39289 other operations, for example, when a bounded line length, a bounded
39290 page length, or both, have been specified for a file.
39291
39292 8
39293 The actual nature of terminators is not defined by the language and
39294 hence depends on the implementation. Although terminators are
39295 recognized or generated by certain of the procedures that follow, they
39296 are not necessarily implemented as characters or as sequences of
39297 characters. Whether they are characters (and if so which ones) in any
39298 particular implementation need not concern a user who neither explicitly
39299 outputs nor explicitly inputs control characters. The effect of input
39300 (Get) or output (Put) of control characters (other than horizontal
39301 tabulation) is not specified by the language.
39302
39303 9
39304 The characters of a line are numbered, starting from one; the number of
39305 a character is called its column number. For a line terminator, a
39306 column number is also defined: it is one more than the number of
39307 characters in the line. The lines of a page, and the pages of a file,
39308 are similarly numbered. The current column number is the column number
39309 of the next character or line terminator to be transferred. The current
39310 line number is the number of the current line. The current page number
39311 is the number of the current page. These numbers are values of the
39312 subtype Positive_Count of the type Count (by convention, the value zero
39313 of the type Count is used to indicate special conditions).
39314
39315 10
39316 type Count is range 0 .. implementation-defined;
39317 subtype Positive_Count is Count range 1 .. Count'Last;
39318
39319 11
39320 For an output file or an append file, a maximum line length can be
39321 specified and a maximum page length can be specified. If a value to be
39322 output cannot fit on the current line, for a specified maximum line
39323 length, then a new line is automatically started before the value is
39324 output; if, further, this new line cannot fit on the current page, for a
39325 specified maximum page length, then a new page is automatically started
39326 before the value is output. Functions are provided to determine the
39327 maximum line length and the maximum page length. When a file is opened
39328 with mode Out_File or Append_File, both values are zero: by convention,
39329 this means that the line lengths and page lengths are unbounded.
39330 (Consequently, output consists of a single line if the subprograms for
39331 explicit control of line and page structure are not used.) The constant
39332 Unbounded is provided for this purpose.
39333
39334 * Menu:
39335
39336 * A.10.1 :: The Package Text_IO
39337 * A.10.2 :: Text File Management
39338 * A.10.3 :: Default Input, Output, and Error Files
39339 * A.10.4 :: Specification of Line and Page Lengths
39340 * A.10.5 :: Operations on Columns, Lines, and Pages
39341 * A.10.6 :: Get and Put Procedures
39342 * A.10.7 :: Input-Output of Characters and Strings
39343 * A.10.8 :: Input-Output for Integer Types
39344 * A.10.9 :: Input-Output for Real Types
39345 * A.10.10 :: Input-Output for Enumeration Types
39346 * A.10.11 :: Input-Output for Bounded Strings
39347 * A.10.12 :: Input-Output for Unbounded Strings
39348
39349 \1f
39350 File: arm2012.info, Node: A.10.1, Next: A.10.2, Up: A.10
39351
39352 A.10.1 The Package Text_IO
39353 --------------------------
39354
39355 _Static Semantics_
39356
39357 1
39358 The library package Text_IO has the following declaration:
39359
39360 2
39361 with Ada.IO_Exceptions;
39362 package Ada.Text_IO is
39363
39364 3
39365 type File_Type is limited private;
39366
39367 4
39368 type File_Mode is (In_File, Out_File, Append_File);
39369
39370 5
39371 type Count is range 0 .. implementation-defined;
39372 subtype Positive_Count is Count range 1 .. Count'Last;
39373 Unbounded : constant Count := 0; -- line and page length
39374
39375 6
39376 subtype Field is Integer range 0 .. implementation-defined;
39377 subtype Number_Base is Integer range 2 .. 16;
39378
39379 7
39380 type Type_Set is (Lower_Case, Upper_Case);
39381
39382 8
39383 -- File Management
39384
39385 9
39386 procedure Create (File : in out File_Type;
39387 Mode : in File_Mode := Out_File;
39388 Name : in String := "";
39389 Form : in String := "");
39390
39391 10
39392 procedure Open (File : in out File_Type;
39393 Mode : in File_Mode;
39394 Name : in String;
39395 Form : in String := "");
39396
39397 11
39398 procedure Close (File : in out File_Type);
39399 procedure Delete (File : in out File_Type);
39400 procedure Reset (File : in out File_Type; Mode : in File_Mode);
39401 procedure Reset (File : in out File_Type);
39402
39403 12
39404 function Mode (File : in File_Type) return File_Mode;
39405 function Name (File : in File_Type) return String;
39406 function Form (File : in File_Type) return String;
39407
39408 13
39409 function Is_Open(File : in File_Type) return Boolean;
39410
39411 14
39412 -- Control of default input and output files
39413
39414 15
39415 procedure Set_Input (File : in File_Type);
39416 procedure Set_Output(File : in File_Type);
39417 procedure Set_Error (File : in File_Type);
39418
39419 16
39420 function Standard_Input return File_Type;
39421 function Standard_Output return File_Type;
39422 function Standard_Error return File_Type;
39423
39424 17
39425 function Current_Input return File_Type;
39426 function Current_Output return File_Type;
39427 function Current_Error return File_Type;
39428
39429 18
39430 type File_Access is access constant File_Type;
39431
39432 19
39433 function Standard_Input return File_Access;
39434 function Standard_Output return File_Access;
39435 function Standard_Error return File_Access;
39436
39437 20
39438 function Current_Input return File_Access;
39439 function Current_Output return File_Access;
39440 function Current_Error return File_Access;
39441
39442 21/1
39443 --Buffer control
39444 procedure Flush (File : in File_Type);
39445 procedure Flush;
39446
39447 22
39448 -- Specification of line and page lengths
39449
39450 23
39451 procedure Set_Line_Length(File : in File_Type; To : in Count);
39452 procedure Set_Line_Length(To : in Count);
39453
39454 24
39455 procedure Set_Page_Length(File : in File_Type; To : in Count);
39456 procedure Set_Page_Length(To : in Count);
39457
39458 25
39459 function Line_Length(File : in File_Type) return Count;
39460 function Line_Length return Count;
39461
39462 26
39463 function Page_Length(File : in File_Type) return Count;
39464 function Page_Length return Count;
39465
39466 27
39467 -- Column, Line, and Page Control
39468
39469 28
39470 procedure New_Line (File : in File_Type;
39471 Spacing : in Positive_Count := 1);
39472 procedure New_Line (Spacing : in Positive_Count := 1);
39473
39474 29
39475 procedure Skip_Line (File : in File_Type;
39476 Spacing : in Positive_Count := 1);
39477 procedure Skip_Line (Spacing : in Positive_Count := 1);
39478
39479 30
39480 function End_Of_Line(File : in File_Type) return Boolean;
39481 function End_Of_Line return Boolean;
39482
39483 31
39484 procedure New_Page (File : in File_Type);
39485 procedure New_Page;
39486
39487 32
39488 procedure Skip_Page (File : in File_Type);
39489 procedure Skip_Page;
39490
39491 33
39492 function End_Of_Page(File : in File_Type) return Boolean;
39493 function End_Of_Page return Boolean;
39494
39495 34
39496 function End_Of_File(File : in File_Type) return Boolean;
39497 function End_Of_File return Boolean;
39498
39499 35
39500 procedure Set_Col (File : in File_Type; To : in Positive_Count);
39501 procedure Set_Col (To : in Positive_Count);
39502
39503 36
39504 procedure Set_Line(File : in File_Type; To : in Positive_Count);
39505 procedure Set_Line(To : in Positive_Count);
39506
39507 37
39508 function Col (File : in File_Type) return Positive_Count;
39509 function Col return Positive_Count;
39510
39511 38
39512 function Line(File : in File_Type) return Positive_Count;
39513 function Line return Positive_Count;
39514
39515 39
39516 function Page(File : in File_Type) return Positive_Count;
39517 function Page return Positive_Count;
39518
39519 40
39520 -- Character Input-Output
39521
39522 41
39523 procedure Get(File : in File_Type; Item : out Character);
39524 procedure Get(Item : out Character);
39525
39526 42
39527 procedure Put(File : in File_Type; Item : in Character);
39528 procedure Put(Item : in Character);
39529
39530 43
39531 procedure Look_Ahead (File : in File_Type;
39532 Item : out Character;
39533 End_Of_Line : out Boolean);
39534 procedure Look_Ahead (Item : out Character;
39535 End_Of_Line : out Boolean);
39536
39537 44
39538 procedure Get_Immediate(File : in File_Type;
39539 Item : out Character);
39540 procedure Get_Immediate(Item : out Character);
39541
39542 45
39543 procedure Get_Immediate(File : in File_Type;
39544 Item : out Character;
39545 Available : out Boolean);
39546 procedure Get_Immediate(Item : out Character;
39547 Available : out Boolean);
39548
39549 46
39550 -- String Input-Output
39551
39552 47
39553 procedure Get(File : in File_Type; Item : out String);
39554 procedure Get(Item : out String);
39555
39556 48
39557 procedure Put(File : in File_Type; Item : in String);
39558 procedure Put(Item : in String);
39559
39560 49
39561 procedure Get_Line(File : in File_Type;
39562 Item : out String;
39563 Last : out Natural);
39564 procedure Get_Line(Item : out String; Last : out Natural);
39565
39566 49.1/2
39567 function Get_Line(File : in File_Type) return String;
39568 function Get_Line return String;
39569
39570 50
39571 procedure Put_Line(File : in File_Type; Item : in String);
39572 procedure Put_Line(Item : in String);
39573
39574 51
39575 -- Generic packages for Input-Output of Integer Types
39576
39577 52
39578 generic
39579 type Num is range <>;
39580 package Integer_IO is
39581
39582 53
39583 Default_Width : Field := Num'Width;
39584 Default_Base : Number_Base := 10;
39585
39586 54
39587 procedure Get(File : in File_Type;
39588 Item : out Num;
39589 Width : in Field := 0);
39590 procedure Get(Item : out Num;
39591 Width : in Field := 0);
39592
39593 55
39594 procedure Put(File : in File_Type;
39595 Item : in Num;
39596 Width : in Field := Default_Width;
39597 Base : in Number_Base := Default_Base);
39598 procedure Put(Item : in Num;
39599 Width : in Field := Default_Width;
39600 Base : in Number_Base := Default_Base);
39601 procedure Get(From : in String;
39602 Item : out Num;
39603 Last : out Positive);
39604 procedure Put(To : out String;
39605 Item : in Num;
39606 Base : in Number_Base := Default_Base);
39607
39608 56
39609 end Integer_IO;
39610
39611 57
39612 generic
39613 type Num is mod <>;
39614 package Modular_IO is
39615
39616 58
39617 Default_Width : Field := Num'Width;
39618 Default_Base : Number_Base := 10;
39619
39620 59
39621 procedure Get(File : in File_Type;
39622 Item : out Num;
39623 Width : in Field := 0);
39624 procedure Get(Item : out Num;
39625 Width : in Field := 0);
39626
39627 60
39628 procedure Put(File : in File_Type;
39629 Item : in Num;
39630 Width : in Field := Default_Width;
39631 Base : in Number_Base := Default_Base);
39632 procedure Put(Item : in Num;
39633 Width : in Field := Default_Width;
39634 Base : in Number_Base := Default_Base);
39635 procedure Get(From : in String;
39636 Item : out Num;
39637 Last : out Positive);
39638 procedure Put(To : out String;
39639 Item : in Num;
39640 Base : in Number_Base := Default_Base);
39641
39642 61
39643 end Modular_IO;
39644
39645 62
39646 -- Generic packages for Input-Output of Real Types
39647
39648 63
39649 generic
39650 type Num is digits <>;
39651 package Float_IO is
39652
39653 64
39654 Default_Fore : Field := 2;
39655 Default_Aft : Field := Num'Digits-1;
39656 Default_Exp : Field := 3;
39657
39658 65
39659 procedure Get(File : in File_Type;
39660 Item : out Num;
39661 Width : in Field := 0);
39662 procedure Get(Item : out Num;
39663 Width : in Field := 0);
39664
39665 66
39666 procedure Put(File : in File_Type;
39667 Item : in Num;
39668 Fore : in Field := Default_Fore;
39669 Aft : in Field := Default_Aft;
39670 Exp : in Field := Default_Exp);
39671 procedure Put(Item : in Num;
39672 Fore : in Field := Default_Fore;
39673 Aft : in Field := Default_Aft;
39674 Exp : in Field := Default_Exp);
39675
39676 67
39677 procedure Get(From : in String;
39678 Item : out Num;
39679 Last : out Positive);
39680 procedure Put(To : out String;
39681 Item : in Num;
39682 Aft : in Field := Default_Aft;
39683 Exp : in Field := Default_Exp);
39684 end Float_IO;
39685
39686 68
39687 generic
39688 type Num is delta <>;
39689 package Fixed_IO is
39690
39691 69
39692 Default_Fore : Field := Num'Fore;
39693 Default_Aft : Field := Num'Aft;
39694 Default_Exp : Field := 0;
39695
39696 70
39697 procedure Get(File : in File_Type;
39698 Item : out Num;
39699 Width : in Field := 0);
39700 procedure Get(Item : out Num;
39701 Width : in Field := 0);
39702
39703 71
39704 procedure Put(File : in File_Type;
39705 Item : in Num;
39706 Fore : in Field := Default_Fore;
39707 Aft : in Field := Default_Aft;
39708 Exp : in Field := Default_Exp);
39709 procedure Put(Item : in Num;
39710 Fore : in Field := Default_Fore;
39711 Aft : in Field := Default_Aft;
39712 Exp : in Field := Default_Exp);
39713
39714 72
39715 procedure Get(From : in String;
39716 Item : out Num;
39717 Last : out Positive);
39718 procedure Put(To : out String;
39719 Item : in Num;
39720 Aft : in Field := Default_Aft;
39721 Exp : in Field := Default_Exp);
39722 end Fixed_IO;
39723
39724 73
39725 generic
39726 type Num is delta <> digits <>;
39727 package Decimal_IO is
39728
39729 74
39730 Default_Fore : Field := Num'Fore;
39731 Default_Aft : Field := Num'Aft;
39732 Default_Exp : Field := 0;
39733
39734 75
39735 procedure Get(File : in File_Type;
39736 Item : out Num;
39737 Width : in Field := 0);
39738 procedure Get(Item : out Num;
39739 Width : in Field := 0);
39740
39741 76
39742 procedure Put(File : in File_Type;
39743 Item : in Num;
39744 Fore : in Field := Default_Fore;
39745 Aft : in Field := Default_Aft;
39746 Exp : in Field := Default_Exp);
39747 procedure Put(Item : in Num;
39748 Fore : in Field := Default_Fore;
39749 Aft : in Field := Default_Aft;
39750 Exp : in Field := Default_Exp);
39751
39752 77
39753 procedure Get(From : in String;
39754 Item : out Num;
39755 Last : out Positive);
39756 procedure Put(To : out String;
39757 Item : in Num;
39758 Aft : in Field := Default_Aft;
39759 Exp : in Field := Default_Exp);
39760 end Decimal_IO;
39761
39762 78
39763 -- Generic package for Input-Output of Enumeration Types
39764
39765 79
39766 generic
39767 type Enum is (<>);
39768 package Enumeration_IO is
39769
39770 80
39771 Default_Width : Field := 0;
39772 Default_Setting : Type_Set := Upper_Case;
39773
39774 81
39775 procedure Get(File : in File_Type;
39776 Item : out Enum);
39777 procedure Get(Item : out Enum);
39778
39779 82
39780 procedure Put(File : in File_Type;
39781 Item : in Enum;
39782 Width : in Field := Default_Width;
39783 Set : in Type_Set := Default_Setting);
39784 procedure Put(Item : in Enum;
39785 Width : in Field := Default_Width;
39786 Set : in Type_Set := Default_Setting);
39787
39788 83
39789 procedure Get(From : in String;
39790 Item : out Enum;
39791 Last : out Positive);
39792 procedure Put(To : out String;
39793 Item : in Enum;
39794 Set : in Type_Set := Default_Setting);
39795 end Enumeration_IO;
39796
39797 84
39798 -- Exceptions
39799
39800 85
39801 Status_Error : exception renames IO_Exceptions.Status_Error;
39802 Mode_Error : exception renames IO_Exceptions.Mode_Error;
39803 Name_Error : exception renames IO_Exceptions.Name_Error;
39804 Use_Error : exception renames IO_Exceptions.Use_Error;
39805 Device_Error : exception renames IO_Exceptions.Device_Error;
39806 End_Error : exception renames IO_Exceptions.End_Error;
39807 Data_Error : exception renames IO_Exceptions.Data_Error;
39808 Layout_Error : exception renames IO_Exceptions.Layout_Error;
39809 private
39810 ... -- not specified by the language
39811 end Ada.Text_IO;
39812
39813 86/2
39814 The type File_Type needs finalization (see *note 7.6::).
39815
39816 \1f
39817 File: arm2012.info, Node: A.10.2, Next: A.10.3, Prev: A.10.1, Up: A.10
39818
39819 A.10.2 Text File Management
39820 ---------------------------
39821
39822 _Static Semantics_
39823
39824 1
39825 The only allowed file modes for text files are the modes In_File,
39826 Out_File, and Append_File. The subprograms given in subclause *note
39827 A.8.2:: for the control of external files, and the function End_Of_File
39828 given in subclause *note A.8.3:: for sequential input-output, are also
39829 available for text files. There is also a version of End_Of_File that
39830 refers to the current default input file. For text files, the
39831 procedures have the following additional effects:
39832
39833 2
39834 * For the procedures Create and Open: After a file with mode Out_File
39835 or Append_File is opened, the page length and line length are
39836 unbounded (both have the conventional value zero). After a file
39837 (of any mode) is opened, the current column, current line, and
39838 current page numbers are set to one. If the mode is Append_File,
39839 it is implementation defined whether a page terminator will
39840 separate preexisting text in the file from the new text to be
39841 written.
39842
39843 3
39844 * For the procedure Close: If the file has the current mode Out_File
39845 or Append_File, has the effect of calling New_Page, unless the
39846 current page is already terminated; then outputs a file terminator.
39847
39848 4
39849 * For the procedure Reset: If the file has the current mode Out_File
39850 or Append_File, has the effect of calling New_Page, unless the
39851 current page is already terminated; then outputs a file terminator.
39852 The current column, line, and page numbers are set to one, and the
39853 line and page lengths to Unbounded. If the new mode is
39854 Append_File, it is implementation defined whether a page terminator
39855 will separate preexisting text in the file from the new text to be
39856 written.
39857
39858 5
39859 The exception Mode_Error is propagated by the procedure Reset upon an
39860 attempt to change the mode of a file that is the current default input
39861 file, the current default output file, or the current default error
39862 file.
39863
39864 NOTES
39865
39866 6
39867 27 An implementation can define the Form parameter of Create and
39868 Open to control effects including the following:
39869
39870 7
39871 * the interpretation of line and column numbers for an
39872 interactive file, and
39873
39874 8
39875 * the interpretation of text formats in a file created by a
39876 foreign program.
39877
39878 \1f
39879 File: arm2012.info, Node: A.10.3, Next: A.10.4, Prev: A.10.2, Up: A.10
39880
39881 A.10.3 Default Input, Output, and Error Files
39882 ---------------------------------------------
39883
39884 _Static Semantics_
39885
39886 1
39887 The following subprograms provide for the control of the particular
39888 default files that are used when a file parameter is omitted from a Get,
39889 Put, or other operation of text input-output described below, or when
39890 application-dependent error-related text is to be output.
39891
39892 2
39893 procedure Set_Input(File : in File_Type);
39894
39895 3
39896 Operates on a file of mode In_File. Sets the current default
39897 input file to File.
39898
39899 4
39900 The exception Status_Error is propagated if the given file is
39901 not open. The exception Mode_Error is propagated if the mode
39902 of the given file is not In_File.
39903
39904 5
39905 procedure Set_Output(File : in File_Type);
39906 procedure Set_Error (File : in File_Type);
39907
39908 6
39909 Each operates on a file of mode Out_File or Append_File.
39910 Set_Output sets the current default output file to File.
39911 Set_Error sets the current default error file to File. The
39912 exception Status_Error is propagated if the given file is not
39913 open. The exception Mode_Error is propagated if the mode of
39914 the given file is not Out_File or Append_File.
39915
39916 7
39917 function Standard_Input return File_Type;
39918 function Standard_Input return File_Access;
39919
39920 8
39921 Returns the standard input file (see *note A.10::), or an
39922 access value designating the standard input file,
39923 respectively.
39924
39925 9
39926 function Standard_Output return File_Type;
39927 function Standard_Output return File_Access;
39928
39929 10
39930 Returns the standard output file (see *note A.10::) or an
39931 access value designating the standard output file,
39932 respectively.
39933
39934 11
39935 function Standard_Error return File_Type;
39936 function Standard_Error return File_Access;
39937
39938 12/1
39939 Returns the standard error file (see *note A.10::), or an
39940 access value designating the standard error file,
39941 respectively.
39942
39943 13
39944 The Form strings implicitly associated with the opening of
39945 Standard_Input, Standard_Output, and Standard_Error at the start of
39946 program execution are implementation defined.
39947
39948 14
39949 function Current_Input return File_Type;
39950 function Current_Input return File_Access;
39951
39952 15
39953 Returns the current default input file, or an access value
39954 designating the current default input file, respectively.
39955
39956 16
39957 function Current_Output return File_Type;
39958 function Current_Output return File_Access;
39959
39960 17
39961 Returns the current default output file, or an access value
39962 designating the current default output file, respectively.
39963
39964 18
39965 function Current_Error return File_Type;
39966 function Current_Error return File_Access;
39967
39968 19
39969 Returns the current default error file, or an access value
39970 designating the current default error file, respectively.
39971
39972 20/1
39973 procedure Flush (File : in File_Type);
39974 procedure Flush;
39975
39976 21
39977 The effect of Flush is the same as the corresponding
39978 subprogram in Streams.Stream_IO (see *note A.12.1::). If File
39979 is not explicitly specified, Current_Output is used.
39980
39981 _Erroneous Execution_
39982
39983 22/1
39984 The execution of a program is erroneous if it invokes an operation on a
39985 current default input, default output, or default error file, and if the
39986 corresponding file object is closed or no longer exists.
39987
39988 23/1
39989 This paragraph was deleted.
39990
39991 NOTES
39992
39993 24
39994 28 The standard input, standard output, and standard error files
39995 cannot be opened, closed, reset, or deleted, because the parameter
39996 File of the corresponding procedures has the mode in out.
39997
39998 25
39999 29 The standard input, standard output, and standard error files
40000 are different file objects, but not necessarily different external
40001 files.
40002
40003 \1f
40004 File: arm2012.info, Node: A.10.4, Next: A.10.5, Prev: A.10.3, Up: A.10
40005
40006 A.10.4 Specification of Line and Page Lengths
40007 ---------------------------------------------
40008
40009 _Static Semantics_
40010
40011 1
40012 The subprograms described in this subclause are concerned with the line
40013 and page structure of a file of mode Out_File or Append_File. They
40014 operate either on the file given as the first parameter, or, in the
40015 absence of such a file parameter, on the current default output file.
40016 They provide for output of text with a specified maximum line length or
40017 page length. In these cases, line and page terminators are output
40018 implicitly and automatically when needed. When line and page lengths
40019 are unbounded (that is, when they have the conventional value zero), as
40020 in the case of a newly opened file, new lines and new pages are only
40021 started when explicitly called for.
40022
40023 2
40024 In all cases, the exception Status_Error is propagated if the file to be
40025 used is not open; the exception Mode_Error is propagated if the mode of
40026 the file is not Out_File or Append_File.
40027
40028 3
40029 procedure Set_Line_Length(File : in File_Type; To : in Count);
40030 procedure Set_Line_Length(To : in Count);
40031
40032 4
40033 Sets the maximum line length of the specified output or append
40034 file to the number of characters specified by To. The value
40035 zero for To specifies an unbounded line length.
40036
40037 5
40038 The exception Use_Error is propagated if the specified line
40039 length is inappropriate for the associated external file.
40040
40041 6
40042 procedure Set_Page_Length(File : in File_Type; To : in Count);
40043 procedure Set_Page_Length(To : in Count);
40044
40045 7
40046 Sets the maximum page length of the specified output or append
40047 file to the number of lines specified by To. The value zero
40048 for To specifies an unbounded page length.
40049
40050 8
40051 The exception Use_Error is propagated if the specified page
40052 length is inappropriate for the associated external file.
40053
40054 9
40055 function Line_Length(File : in File_Type) return Count;
40056 function Line_Length return Count;
40057
40058 10
40059 Returns the maximum line length currently set for the
40060 specified output or append file, or zero if the line length is
40061 unbounded.
40062
40063 11
40064 function Page_Length(File : in File_Type) return Count;
40065 function Page_Length return Count;
40066
40067 12
40068 Returns the maximum page length currently set for the
40069 specified output or append file, or zero if the page length is
40070 unbounded.
40071
40072 \1f
40073 File: arm2012.info, Node: A.10.5, Next: A.10.6, Prev: A.10.4, Up: A.10
40074
40075 A.10.5 Operations on Columns, Lines, and Pages
40076 ----------------------------------------------
40077
40078 _Static Semantics_
40079
40080 1
40081 The subprograms described in this subclause provide for explicit control
40082 of line and page structure; they operate either on the file given as the
40083 first parameter, or, in the absence of such a file parameter, on the
40084 appropriate (input or output) current default file. The exception
40085 Status_Error is propagated by any of these subprograms if the file to be
40086 used is not open.
40087
40088 2
40089 procedure New_Line(File : in File_Type; Spacing : in Positive_Count := 1);
40090 procedure New_Line(Spacing : in Positive_Count := 1);
40091
40092 3
40093 Operates on a file of mode Out_File or Append_File.
40094
40095 4
40096 For a Spacing of one: Outputs a line terminator and sets the
40097 current column number to one. Then increments the current
40098 line number by one, except in the case that the current line
40099 number is already greater than or equal to the maximum page
40100 length, for a bounded page length; in that case a page
40101 terminator is output, the current page number is incremented
40102 by one, and the current line number is set to one.
40103
40104 5
40105 For a Spacing greater than one, the above actions are
40106 performed Spacing times.
40107
40108 6
40109 The exception Mode_Error is propagated if the mode is not
40110 Out_File or Append_File.
40111
40112 7
40113 procedure Skip_Line(File : in File_Type; Spacing : in Positive_Count := 1);
40114 procedure Skip_Line(Spacing : in Positive_Count := 1);
40115
40116 8
40117 Operates on a file of mode In_File.
40118
40119 9
40120 For a Spacing of one: Reads and discards all characters until
40121 a line terminator has been read, and then sets the current
40122 column number to one. If the line terminator is not
40123 immediately followed by a page terminator, the current line
40124 number is incremented by one. Otherwise, if the line
40125 terminator is immediately followed by a page terminator, then
40126 the page terminator is skipped, the current page number is
40127 incremented by one, and the current line number is set to one.
40128
40129 10
40130 For a Spacing greater than one, the above actions are
40131 performed Spacing times.
40132
40133 11
40134 The exception Mode_Error is propagated if the mode is not
40135 In_File. The exception End_Error is propagated if an attempt
40136 is made to read a file terminator.
40137
40138 12
40139 function End_Of_Line(File : in File_Type) return Boolean;
40140 function End_Of_Line return Boolean;
40141
40142 13/3
40143 Operates on a file of mode In_File. Returns True if a line
40144 terminator or a file terminator is next; otherwise, returns
40145 False.
40146
40147 14
40148 The exception Mode_Error is propagated if the mode is not
40149 In_File.
40150
40151 15
40152 procedure New_Page(File : in File_Type);
40153 procedure New_Page;
40154
40155 16
40156 Operates on a file of mode Out_File or Append_File. Outputs a
40157 line terminator if the current line is not terminated, or if
40158 the current page is empty (that is, if the current column and
40159 line numbers are both equal to one). Then outputs a page
40160 terminator, which terminates the current page. Adds one to
40161 the current page number and sets the current column and line
40162 numbers to one.
40163
40164 17
40165 The exception Mode_Error is propagated if the mode is not
40166 Out_File or Append_File.
40167
40168 18
40169 procedure Skip_Page(File : in File_Type);
40170 procedure Skip_Page;
40171
40172 19
40173 Operates on a file of mode In_File. Reads and discards all
40174 characters and line terminators until a page terminator has
40175 been read. Then adds one to the current page number, and sets
40176 the current column and line numbers to one.
40177
40178 20
40179 The exception Mode_Error is propagated if the mode is not
40180 In_File. The exception End_Error is propagated if an attempt
40181 is made to read a file terminator.
40182
40183 21
40184 function End_Of_Page(File : in File_Type) return Boolean;
40185 function End_Of_Page return Boolean;
40186
40187 22/3
40188 Operates on a file of mode In_File. Returns True if the
40189 combination of a line terminator and a page terminator is
40190 next, or if a file terminator is next; otherwise, returns
40191 False.
40192
40193 23
40194 The exception Mode_Error is propagated if the mode is not
40195 In_File.
40196
40197 24
40198 function End_Of_File(File : in File_Type) return Boolean;
40199 function End_Of_File return Boolean;
40200
40201 25/3
40202 Operates on a file of mode In_File. Returns True if a file
40203 terminator is next, or if the combination of a line, a page,
40204 and a file terminator is next; otherwise, returns False.
40205
40206 26
40207 The exception Mode_Error is propagated if the mode is not
40208 In_File.
40209
40210 27
40211 The following subprograms provide for the control of the current
40212 position of reading or writing in a file. In all cases, the default
40213 file is the current output file.
40214
40215 28
40216 procedure Set_Col(File : in File_Type; To : in Positive_Count);
40217 procedure Set_Col(To : in Positive_Count);
40218
40219 29
40220 If the file mode is Out_File or Append_File:
40221
40222 30
40223 * If the value specified by To is greater than the current
40224 column number, outputs spaces, adding one to the current
40225 column number after each space, until the current column
40226 number equals the specified value. If the value
40227 specified by To is equal to the current column number,
40228 there is no effect. If the value specified by To is less
40229 than the current column number, has the effect of calling
40230 New_Line (with a spacing of one), then outputs (To - 1)
40231 spaces, and sets the current column number to the
40232 specified value.
40233
40234 31
40235 * The exception Layout_Error is propagated if the value
40236 specified by To exceeds Line_Length when the line length
40237 is bounded (that is, when it does not have the
40238 conventional value zero).
40239
40240 32
40241 If the file mode is In_File:
40242
40243 33
40244 * Reads (and discards) individual characters, line
40245 terminators, and page terminators, until the next
40246 character to be read has a column number that equals the
40247 value specified by To; there is no effect if the current
40248 column number already equals this value. Each transfer
40249 of a character or terminator maintains the current
40250 column, line, and page numbers in the same way as a Get
40251 procedure (see *note A.10.6::). (Short lines will be
40252 skipped until a line is reached that has a character at
40253 the specified column position.)
40254
40255 34
40256 * The exception End_Error is propagated if an attempt is
40257 made to read a file terminator.
40258
40259 35
40260 procedure Set_Line(File : in File_Type; To : in Positive_Count);
40261 procedure Set_Line(To : in Positive_Count);
40262
40263 36
40264 If the file mode is Out_File or Append_File:
40265
40266 37/3
40267 * If the value specified by To is greater than the current
40268 line number, has the effect of repeatedly calling
40269 New_Line (with a spacing of one), until the current line
40270 number equals the specified value. If the value
40271 specified by To is equal to the current line number,
40272 there is no effect. If the value specified by To is less
40273 than the current line number, has the effect of calling
40274 New_Page followed, if To is greater than 1, by a call of
40275 New_Line with a spacing equal to (To - 1).
40276
40277 38
40278 * The exception Layout_Error is propagated if the value
40279 specified by To exceeds Page_Length when the page length
40280 is bounded (that is, when it does not have the
40281 conventional value zero).
40282
40283 39
40284 If the mode is In_File:
40285
40286 40
40287 * Has the effect of repeatedly calling Skip_Line (with a
40288 spacing of one), until the current line number equals the
40289 value specified by To; there is no effect if the current
40290 line number already equals this value. (Short pages will
40291 be skipped until a page is reached that has a line at the
40292 specified line position.)
40293
40294 41
40295 * The exception End_Error is propagated if an attempt is
40296 made to read a file terminator.
40297
40298 42
40299 function Col(File : in File_Type) return Positive_Count;
40300 function Col return Positive_Count;
40301
40302 43
40303 Returns the current column number.
40304
40305 44
40306 The exception Layout_Error is propagated if this number
40307 exceeds Count'Last.
40308
40309 45
40310 function Line(File : in File_Type) return Positive_Count;
40311 function Line return Positive_Count;
40312
40313 46
40314 Returns the current line number.
40315
40316 47
40317 The exception Layout_Error is propagated if this number
40318 exceeds Count'Last.
40319
40320 48
40321 function Page(File : in File_Type) return Positive_Count;
40322 function Page return Positive_Count;
40323
40324 49
40325 Returns the current page number.
40326
40327 50
40328 The exception Layout_Error is propagated if this number
40329 exceeds Count'Last.
40330
40331 51
40332 The column number, line number, or page number are allowed to exceed
40333 Count'Last (as a consequence of the input or output of sufficiently many
40334 characters, lines, or pages). These events do not cause any exception
40335 to be propagated. However, a call of Col, Line, or Page propagates the
40336 exception Layout_Error if the corresponding number exceeds Count'Last.
40337
40338 NOTES
40339
40340 52
40341 30 A page terminator is always skipped whenever the preceding line
40342 terminator is skipped. An implementation may represent the
40343 combination of these terminators by a single character, provided
40344 that it is properly recognized on input.
40345
40346 \1f
40347 File: arm2012.info, Node: A.10.6, Next: A.10.7, Prev: A.10.5, Up: A.10
40348
40349 A.10.6 Get and Put Procedures
40350 -----------------------------
40351
40352 _Static Semantics_
40353
40354 1
40355 The procedures Get and Put for items of the type Character, String,
40356 numeric types, and enumeration types are described in subsequent
40357 subclauses. Features of these procedures that are common to most of
40358 these types are described in this subclause. The Get and Put procedures
40359 for items of type Character and String deal with individual character
40360 values; the Get and Put procedures for numeric and enumeration types
40361 treat the items as lexical elements.
40362
40363 2
40364 All procedures Get and Put have forms with a file parameter, written
40365 first. Where this parameter is omitted, the appropriate (input or
40366 output) current default file is understood to be specified. Each
40367 procedure Get operates on a file of mode In_File. Each procedure Put
40368 operates on a file of mode Out_File or Append_File.
40369
40370 3
40371 All procedures Get and Put maintain the current column, line, and page
40372 numbers of the specified file: the effect of each of these procedures
40373 upon these numbers is the result of the effects of individual transfers
40374 of characters and of individual output or skipping of terminators. Each
40375 transfer of a character adds one to the current column number. Each
40376 output of a line terminator sets the current column number to one and
40377 adds one to the current line number. Each output of a page terminator
40378 sets the current column and line numbers to one and adds one to the
40379 current page number. For input, each skipping of a line terminator sets
40380 the current column number to one and adds one to the current line
40381 number; each skipping of a page terminator sets the current column and
40382 line numbers to one and adds one to the current page number. Similar
40383 considerations apply to the procedures Get_Line, Put_Line, and Set_Col.
40384
40385 4
40386 Several Get and Put procedures, for numeric and enumeration types, have
40387 format parameters which specify field lengths; these parameters are of
40388 the nonnegative subtype Field of the type Integer.
40389
40390 5/2
40391 Input-output of enumeration values uses the syntax of the corresponding
40392 lexical elements. Any Get procedure for an enumeration type begins by
40393 skipping any leading blanks, or line or page terminators. A blank is
40394 defined as a space or a horizontal tabulation character. Next,
40395 characters are input only so long as the sequence input is an initial
40396 sequence of an identifier or of a character literal (in particular,
40397 input ceases when a line terminator is encountered). The character or
40398 line terminator that causes input to cease remains available for
40399 subsequent input.
40400
40401 6
40402 For a numeric type, the Get procedures have a format parameter called
40403 Width. If the value given for this parameter is zero, the Get procedure
40404 proceeds in the same manner as for enumeration types, but using the
40405 syntax of numeric literals instead of that of enumeration literals. If
40406 a nonzero value is given, then exactly Width characters are input, or
40407 the characters up to a line terminator, whichever comes first; any
40408 skipped leading blanks are included in the count. The syntax used for
40409 numeric literals is an extended syntax that allows a leading sign (but
40410 no intervening blanks, or line or page terminators) and that also allows
40411 (for real types) an integer literal as well as forms that have digits
40412 only before the point or only after the point.
40413
40414 7
40415 Any Put procedure, for an item of a numeric or an enumeration type,
40416 outputs the value of the item as a numeric literal, identifier, or
40417 character literal, as appropriate. This is preceded by leading spaces
40418 if required by the format parameters Width or Fore (as described in
40419 later subclauses), and then a minus sign for a negative value; for an
40420 enumeration type, the spaces follow instead of leading. The format
40421 given for a Put procedure is overridden if it is insufficiently wide, by
40422 using the minimum needed width.
40423
40424 8
40425 Two further cases arise for Put procedures for numeric and enumeration
40426 types, if the line length of the specified output file is bounded (that
40427 is, if it does not have the conventional value zero). If the number of
40428 characters to be output does not exceed the maximum line length, but is
40429 such that they cannot fit on the current line, starting from the current
40430 column, then (in effect) New_Line is called (with a spacing of one)
40431 before output of the item. Otherwise, if the number of characters
40432 exceeds the maximum line length, then the exception Layout_Error is
40433 propagated and nothing is output.
40434
40435 9
40436 The exception Status_Error is propagated by any of the procedures Get,
40437 Get_Line, Put, and Put_Line if the file to be used is not open. The
40438 exception Mode_Error is propagated by the procedures Get and Get_Line if
40439 the mode of the file to be used is not In_File; and by the procedures
40440 Put and Put_Line, if the mode is not Out_File or Append_File.
40441
40442 10
40443 The exception End_Error is propagated by a Get procedure if an attempt
40444 is made to skip a file terminator. The exception Data_Error is
40445 propagated by a Get procedure if the sequence finally input is not a
40446 lexical element corresponding to the type, in particular if no
40447 characters were input; for this test, leading blanks are ignored; for an
40448 item of a numeric type, when a sign is input, this rule applies to the
40449 succeeding numeric literal. The exception Layout_Error is propagated by
40450 a Put procedure that outputs to a parameter of type String, if the
40451 length of the actual string is insufficient for the output of the item.
40452
40453 _Examples_
40454
40455 11
40456 In the examples, here and in subclauses *note A.10.8:: and *note
40457 A.10.9::, the string quotes and the lower case letter b are not
40458 transferred: they are shown only to reveal the layout and spaces.
40459
40460 12
40461 N : Integer;
40462 ...
40463 Get(N);
40464
40465 13
40466 -- Characters at input Sequence input Value of N
40467
40468 -- bb-12535b -12535 -12535
40469 -- bb12_535e1b 12_535e1 125350
40470 -- bb12_535e; 12_535e (none) Data_Error raised
40471
40472 14
40473 Example of overridden width parameter:
40474
40475 15
40476 Put(Item => -23, Width => 2); -- "-23"
40477
40478 \1f
40479 File: arm2012.info, Node: A.10.7, Next: A.10.8, Prev: A.10.6, Up: A.10
40480
40481 A.10.7 Input-Output of Characters and Strings
40482 ---------------------------------------------
40483
40484 _Static Semantics_
40485
40486 1
40487 For an item of type Character the following procedures are provided:
40488
40489 2
40490 procedure Get(File : in File_Type; Item : out Character);
40491 procedure Get(Item : out Character);
40492
40493 3
40494 After skipping any line terminators and any page terminators,
40495 reads the next character from the specified input file and
40496 returns the value of this character in the out parameter Item.
40497
40498 4
40499 The exception End_Error is propagated if an attempt is made to
40500 skip a file terminator.
40501
40502 5
40503 procedure Put(File : in File_Type; Item : in Character);
40504 procedure Put(Item : in Character);
40505
40506 6
40507 If the line length of the specified output file is bounded
40508 (that is, does not have the conventional value zero), and the
40509 current column number exceeds it, has the effect of calling
40510 New_Line with a spacing of one. Then, or otherwise, outputs
40511 the given character to the file.
40512
40513 7
40514 procedure Look_Ahead (File : in File_Type;
40515 Item : out Character;
40516 End_Of_Line : out Boolean);
40517 procedure Look_Ahead (Item : out Character;
40518 End_Of_Line : out Boolean);
40519
40520 8/3
40521 Status_Error is propagated if the file is not open.
40522 Mode_Error is propagated if the mode of the file is not
40523 In_File. Sets End_Of_Line to True if at end of line,
40524 including if at end of page or at end of file; in each of
40525 these cases the value of Item is not specified. Otherwise,
40526 End_Of_Line is set to False and Item is set to the next
40527 character (without consuming it) from the file.
40528
40529 9
40530 procedure Get_Immediate(File : in File_Type;
40531 Item : out Character);
40532 procedure Get_Immediate(Item : out Character);
40533
40534 10/3
40535 Reads the next character, either control or graphic, from the
40536 specified File or the default input file. Status_Error is
40537 propagated if the file is not open. Mode_Error is propagated
40538 if the mode of the file is not In_File. End_Error is
40539 propagated if at the end of the file. The current column,
40540 line and page numbers for the file are not affected.
40541
40542 11
40543 procedure Get_Immediate(File : in File_Type;
40544 Item : out Character;
40545 Available : out Boolean);
40546 procedure Get_Immediate(Item : out Character;
40547 Available : out Boolean);
40548
40549 12/3
40550 If a character, either control or graphic, is available from
40551 the specified File or the default input file, then the
40552 character is read; Available is True and Item contains the
40553 value of this character. If a character is not available,
40554 then Available is False and the value of Item is not
40555 specified. Status_Error is propagated if the file is not
40556 open. Mode_Error is propagated if the mode of the file is not
40557 In_File. End_Error is propagated if at the end of the file.
40558 The current column, line and page numbers for the file are not
40559 affected.
40560
40561 13/2
40562 For an item of type String the following subprograms are provided:
40563
40564 14
40565 procedure Get(File : in File_Type; Item : out String);
40566 procedure Get(Item : out String);
40567
40568 15
40569 Determines the length of the given string and attempts that
40570 number of Get operations for successive characters of the
40571 string (in particular, no operation is performed if the string
40572 is null).
40573
40574 16
40575 procedure Put(File : in File_Type; Item : in String);
40576 procedure Put(Item : in String);
40577
40578 17
40579 Determines the length of the given string and attempts that
40580 number of Put operations for successive characters of the
40581 string (in particular, no operation is performed if the string
40582 is null).
40583
40584 17.1/2
40585 function Get_Line(File : in File_Type) return String;
40586 function Get_Line return String;
40587
40588 17.2/2
40589 Returns a result string constructed by reading successive
40590 characters from the specified input file, and assigning them
40591 to successive characters of the result string. The result
40592 string has a lower bound of 1 and an upper bound of the number
40593 of characters read. Reading stops when the end of the line is
40594 met; Skip_Line is then (in effect) called with a spacing of 1.
40595
40596 17.3/2
40597 Constraint_Error is raised if the length of the line exceeds
40598 Positive'Last; in this case, the line number and page number
40599 are unchanged, and the column number is unspecified but no
40600 less than it was before the call. The exception End_Error is
40601 propagated if an attempt is made to skip a file terminator.
40602
40603 18
40604 procedure Get_Line(File : in File_Type;
40605 Item : out String;
40606 Last : out Natural);
40607 procedure Get_Line(Item : out String;
40608 Last : out Natural);
40609
40610 19
40611 Reads successive characters from the specified input file and
40612 assigns them to successive characters of the specified string.
40613 Reading stops if the end of the string is met. Reading also
40614 stops if the end of the line is met before meeting the end of
40615 the string; in this case Skip_Line is (in effect) called with
40616 a spacing of 1. The values of characters not assigned are not
40617 specified.
40618
40619 20
40620 If characters are read, returns in Last the index value such
40621 that Item(Last) is the last character assigned (the index of
40622 the first character assigned is Item'First). If no characters
40623 are read, returns in Last an index value that is one less than
40624 Item'First. The exception End_Error is propagated if an
40625 attempt is made to skip a file terminator.
40626
40627 21
40628 procedure Put_Line(File : in File_Type; Item : in String);
40629 procedure Put_Line(Item : in String);
40630
40631 22
40632 Calls the procedure Put for the given string, and then the
40633 procedure New_Line with a spacing of one.
40634
40635 _Implementation Advice_
40636
40637 23
40638 The Get_Immediate procedures should be implemented with unbuffered
40639 input. For a device such as a keyboard, input should be "available" if
40640 a key has already been typed, whereas for a disk file, input should
40641 always be available except at end of file. For a file associated with a
40642 keyboard-like device, any line-editing features of the underlying
40643 operating system should be disabled during the execution of
40644 Get_Immediate.
40645
40646 NOTES
40647
40648 24
40649 31 Get_Immediate can be used to read a single key from the
40650 keyboard "immediately"; that is, without waiting for an end of
40651 line. In a call of Get_Immediate without the parameter Available,
40652 the caller will wait until a character is available.
40653
40654 25
40655 32 In a literal string parameter of Put, the enclosing string
40656 bracket characters are not output. Each doubled string bracket
40657 character in the enclosed string is output as a single string
40658 bracket character, as a consequence of the rule for string literals
40659 (see *note 2.6::).
40660
40661 26
40662 33 A string read by Get or written by Put can extend over several
40663 lines. An implementation is allowed to assume that certain
40664 external files do not contain page terminators, in which case
40665 Get_Line and Skip_Line can return as soon as a line terminator is
40666 read.
40667
40668 \1f
40669 File: arm2012.info, Node: A.10.8, Next: A.10.9, Prev: A.10.7, Up: A.10
40670
40671 A.10.8 Input-Output for Integer Types
40672 -------------------------------------
40673
40674 _Static Semantics_
40675
40676 1
40677 The following procedures are defined in the generic packages Integer_IO
40678 and Modular_IO, which have to be instantiated for the appropriate signed
40679 integer or modular type respectively (indicated by Num in the
40680 specifications).
40681
40682 2
40683 Values are output as decimal or based literals, without low line
40684 characters or exponent, and, for Integer_IO, preceded by a minus sign if
40685 negative. The format (which includes any leading spaces and minus sign)
40686 can be specified by an optional field width parameter. Values of widths
40687 of fields in output formats are of the nonnegative integer subtype
40688 Field. Values of bases are of the integer subtype Number_Base.
40689
40690 3
40691 subtype Number_Base is Integer range 2 .. 16;
40692
40693 4
40694 The default field width and base to be used by output procedures are
40695 defined by the following variables that are declared in the generic
40696 packages Integer_IO and Modular_IO:
40697
40698 5
40699 Default_Width : Field := Num'Width;
40700 Default_Base : Number_Base := 10;
40701
40702 6
40703 The following procedures are provided:
40704
40705 7
40706 procedure Get(File : in File_Type; Item : out Num; Width : in Field := 0);
40707 procedure Get(Item : out Num; Width : in Field := 0);
40708
40709 8
40710 If the value of the parameter Width is zero, skips any leading
40711 blanks, line terminators, or page terminators, then reads a
40712 plus sign if present or (for a signed type only) a minus sign
40713 if present, then reads the longest possible sequence of
40714 characters matching the syntax of a numeric literal without a
40715 point. If a nonzero value of Width is supplied, then exactly
40716 Width characters are input, or the characters (possibly none)
40717 up to a line terminator, whichever comes first; any skipped
40718 leading blanks are included in the count.
40719
40720 9
40721 Returns, in the parameter Item, the value of type Num that
40722 corresponds to the sequence input.
40723
40724 10/3
40725 The exception Data_Error is propagated if the sequence of
40726 characters read does not form a legal integer literal or if
40727 the value obtained is not of the subtype Num.
40728
40729 11
40730 procedure Put(File : in File_Type;
40731 Item : in Num;
40732 Width : in Field := Default_Width;
40733 Base : in Number_Base := Default_Base);
40734
40735 procedure Put(Item : in Num;
40736 Width : in Field := Default_Width;
40737 Base : in Number_Base := Default_Base);
40738
40739 12
40740 Outputs the value of the parameter Item as an integer literal,
40741 with no low lines, no exponent, and no leading zeros (but a
40742 single zero for the value zero), and a preceding minus sign
40743 for a negative value.
40744
40745 13
40746 If the resulting sequence of characters to be output has fewer
40747 than Width characters, then leading spaces are first output to
40748 make up the difference.
40749
40750 14
40751 Uses the syntax for decimal literal if the parameter Base has
40752 the value ten (either explicitly or through Default_Base);
40753 otherwise, uses the syntax for based literal, with any letters
40754 in upper case.
40755
40756 15
40757 procedure Get(From : in String; Item : out Num; Last : out Positive);
40758
40759 16
40760 Reads an integer value from the beginning of the given string,
40761 following the same rules as the Get procedure that reads an
40762 integer value from a file, but treating the end of the string
40763 as a file terminator. Returns, in the parameter Item, the
40764 value of type Num that corresponds to the sequence input.
40765 Returns in Last the index value such that From(Last) is the
40766 last character read.
40767
40768 17
40769 The exception Data_Error is propagated if the sequence input
40770 does not have the required syntax or if the value obtained is
40771 not of the subtype Num.
40772
40773 18
40774 procedure Put(To : out String;
40775 Item : in Num;
40776 Base : in Number_Base := Default_Base);
40777
40778 19
40779 Outputs the value of the parameter Item to the given string,
40780 following the same rule as for output to a file, using the
40781 length of the given string as the value for Width.
40782
40783 20
40784 Integer_Text_IO is a library package that is a nongeneric equivalent to
40785 Text_IO.Integer_IO for the predefined type Integer:
40786
40787 21
40788 with Ada.Text_IO;
40789 package Ada.Integer_Text_IO is new Ada.Text_IO.Integer_IO(Integer);
40790
40791 22
40792 For each predefined signed integer type, a nongeneric equivalent to
40793 Text_IO.Integer_IO is provided, with names such as
40794 Ada.Long_Integer_Text_IO.
40795
40796 _Implementation Permissions_
40797
40798 23
40799 The nongeneric equivalent packages may, but need not, be actual
40800 instantiations of the generic package for the appropriate predefined
40801 type.
40802
40803 Paragraphs 24 and 25 were deleted.
40804
40805 _Examples_
40806
40807 26/3
40808 subtype Byte_Int is Integer range -127 .. 127;
40809 package Int_IO is new Integer_IO(Byte_Int); use Int_IO;
40810 -- default format used at instantiation,
40811 -- Default_Width = 4, Default_Base = 10
40812
40813 27
40814 Put(126); -- "b126"
40815 Put(-126, 7); -- "bbb-126"
40816 Put(126, Width => 13, Base => 2); -- "bbb2#1111110#"
40817
40818 \1f
40819 File: arm2012.info, Node: A.10.9, Next: A.10.10, Prev: A.10.8, Up: A.10
40820
40821 A.10.9 Input-Output for Real Types
40822 ----------------------------------
40823
40824 _Static Semantics_
40825
40826 1
40827 The following procedures are defined in the generic packages Float_IO,
40828 Fixed_IO, and Decimal_IO, which have to be instantiated for the
40829 appropriate floating point, ordinary fixed point, or decimal fixed point
40830 type respectively (indicated by Num in the specifications).
40831
40832 2
40833 Values are output as decimal literals without low line characters. The
40834 format of each value output consists of a Fore field, a decimal point,
40835 an Aft field, and (if a nonzero Exp parameter is supplied) the letter E
40836 and an Exp field. The two possible formats thus correspond to:
40837
40838 3
40839 Fore . Aft
40840
40841 4
40842 and to:
40843
40844 5
40845 Fore . Aft E Exp
40846
40847 6
40848 without any spaces between these fields. The Fore field may include
40849 leading spaces, and a minus sign for negative values. The Aft field
40850 includes only decimal digits (possibly with trailing zeros). The Exp
40851 field includes the sign (plus or minus) and the exponent (possibly with
40852 leading zeros).
40853
40854 7
40855 For floating point types, the default lengths of these fields are
40856 defined by the following variables that are declared in the generic
40857 package Float_IO:
40858
40859 8
40860 Default_Fore : Field := 2;
40861 Default_Aft : Field := Num'Digits-1;
40862 Default_Exp : Field := 3;
40863
40864 9
40865 For ordinary or decimal fixed point types, the default lengths of these
40866 fields are defined by the following variables that are declared in the
40867 generic packages Fixed_IO and Decimal_IO, respectively:
40868
40869 10
40870 Default_Fore : Field := Num'Fore;
40871 Default_Aft : Field := Num'Aft;
40872 Default_Exp : Field := 0;
40873
40874 11
40875 The following procedures are provided:
40876
40877 12
40878 procedure Get(File : in File_Type; Item : out Num; Width : in Field := 0);
40879 procedure Get(Item : out Num; Width : in Field := 0);
40880
40881 13
40882 If the value of the parameter Width is zero, skips any leading
40883 blanks, line terminators, or page terminators, then reads the
40884 longest possible sequence of characters matching the syntax of
40885 any of the following (see *note 2.4::):
40886
40887 14
40888 * [+|-]numeric_literal
40889
40890 15
40891 * [+|-]numeral.[exponent]
40892
40893 16
40894 * [+|-].numeral[exponent]
40895
40896 17
40897 * [+|-]base#based_numeral.#[exponent]
40898
40899 18
40900 * [+|-]base#.based_numeral#[exponent]
40901
40902 19
40903 If a nonzero value of Width is supplied, then exactly Width
40904 characters are input, or the characters (possibly none) up to
40905 a line terminator, whichever comes first; any skipped leading
40906 blanks are included in the count.
40907
40908 20
40909 Returns in the parameter Item the value of type Num that
40910 corresponds to the sequence input, preserving the sign
40911 (positive if none has been specified) of a zero value if Num
40912 is a floating point type and Num'Signed_Zeros is True.
40913
40914 21
40915 The exception Data_Error is propagated if the sequence input
40916 does not have the required syntax or if the value obtained is
40917 not of the subtype Num.
40918
40919 22
40920 procedure Put(File : in File_Type;
40921 Item : in Num;
40922 Fore : in Field := Default_Fore;
40923 Aft : in Field := Default_Aft;
40924 Exp : in Field := Default_Exp);
40925
40926 procedure Put(Item : in Num;
40927 Fore : in Field := Default_Fore;
40928 Aft : in Field := Default_Aft;
40929 Exp : in Field := Default_Exp);
40930
40931 23
40932 Outputs the value of the parameter Item as a decimal literal
40933 with the format defined by Fore, Aft and Exp. If the value is
40934 negative, or if Num is a floating point type where
40935 Num'Signed_Zeros is True and the value is a negatively signed
40936 zero, then a minus sign is included in the integer part. If
40937 Exp has the value zero, then the integer part to be output has
40938 as many digits as are needed to represent the integer part of
40939 the value of Item, overriding Fore if necessary, or consists
40940 of the digit zero if the value of Item has no integer part.
40941
40942 24
40943 If Exp has a value greater than zero, then the integer part to
40944 be output has a single digit, which is nonzero except for the
40945 value 0.0 of Item.
40946
40947 25
40948 In both cases, however, if the integer part to be output has
40949 fewer than Fore characters, including any minus sign, then
40950 leading spaces are first output to make up the difference.
40951 The number of digits of the fractional part is given by Aft,
40952 or is one if Aft equals zero. The value is rounded; a value
40953 of exactly one half in the last place is rounded away from
40954 zero.
40955
40956 26
40957 If Exp has the value zero, there is no exponent part. If Exp
40958 has a value greater than zero, then the exponent part to be
40959 output has as many digits as are needed to represent the
40960 exponent part of the value of Item (for which a single digit
40961 integer part is used), and includes an initial sign (plus or
40962 minus). If the exponent part to be output has fewer than Exp
40963 characters, including the sign, then leading zeros precede the
40964 digits, to make up the difference. For the value 0.0 of Item,
40965 the exponent has the value zero.
40966
40967 27
40968 procedure Get(From : in String; Item : out Num; Last : out Positive);
40969
40970 28
40971 Reads a real value from the beginning of the given string,
40972 following the same rule as the Get procedure that reads a real
40973 value from a file, but treating the end of the string as a
40974 file terminator. Returns, in the parameter Item, the value of
40975 type Num that corresponds to the sequence input. Returns in
40976 Last the index value such that From(Last) is the last
40977 character read.
40978
40979 29
40980 The exception Data_Error is propagated if the sequence input
40981 does not have the required syntax, or if the value obtained is
40982 not of the subtype Num.
40983
40984 30
40985 procedure Put(To : out String;
40986 Item : in Num;
40987 Aft : in Field := Default_Aft;
40988 Exp : in Field := Default_Exp);
40989
40990 31
40991 Outputs the value of the parameter Item to the given string,
40992 following the same rule as for output to a file, using a value
40993 for Fore such that the sequence of characters output exactly
40994 fills the string, including any leading spaces.
40995
40996 32
40997 Float_Text_IO is a library package that is a nongeneric equivalent to
40998 Text_IO.Float_IO for the predefined type Float:
40999
41000 33
41001 with Ada.Text_IO;
41002 package Ada.Float_Text_IO is new Ada.Text_IO.Float_IO(Float);
41003
41004 34
41005 For each predefined floating point type, a nongeneric equivalent to
41006 Text_IO.Float_IO is provided, with names such as Ada.Long_Float_Text_IO.
41007
41008 _Implementation Permissions_
41009
41010 35
41011 An implementation may extend Get and Put for floating point types to
41012 support special values such as infinities and NaNs.
41013
41014 36
41015 The implementation of Put need not produce an output value with greater
41016 accuracy than is supported for the base subtype. The additional
41017 accuracy, if any, of the value produced by Put when the number of
41018 requested digits in the integer and fractional parts exceeds the
41019 required accuracy is implementation defined.
41020
41021 37
41022 The nongeneric equivalent packages may, but need not, be actual
41023 instantiations of the generic package for the appropriate predefined
41024 type.
41025
41026 NOTES
41027
41028 38
41029 34 For an item with a positive value, if output to a string
41030 exactly fills the string without leading spaces, then output of the
41031 corresponding negative value will propagate Layout_Error.
41032
41033 39
41034 35 The rules for the Value attribute (see *note 3.5::) and the
41035 rules for Get are based on the same set of formats.
41036
41037 _Examples_
41038
41039 40/1
41040 This paragraph was deleted.
41041
41042 41
41043 package Real_IO is new Float_IO(Real); use Real_IO;
41044 -- default format used at instantiation, Default_Exp = 3
41045
41046 42
41047 X : Real := -123.4567; -- digits 8 (see *note 3.5.7::)
41048
41049 43
41050 Put(X); -- default format "-1.2345670E+02"
41051 Put(X, Fore => 5, Aft => 3, Exp => 2); -- "bbb-1.235E+2"
41052 Put(X, 5, 3, 0); -- "b-123.457"
41053
41054 \1f
41055 File: arm2012.info, Node: A.10.10, Next: A.10.11, Prev: A.10.9, Up: A.10
41056
41057 A.10.10 Input-Output for Enumeration Types
41058 ------------------------------------------
41059
41060 _Static Semantics_
41061
41062 1
41063 The following procedures are defined in the generic package
41064 Enumeration_IO, which has to be instantiated for the appropriate
41065 enumeration type (indicated by Enum in the specification).
41066
41067 2
41068 Values are output using either upper or lower case letters for
41069 identifiers. This is specified by the parameter Set, which is of the
41070 enumeration type Type_Set.
41071
41072 3
41073 type Type_Set is (Lower_Case, Upper_Case);
41074
41075 4
41076 The format (which includes any trailing spaces) can be specified by an
41077 optional field width parameter. The default field width and letter case
41078 are defined by the following variables that are declared in the generic
41079 package Enumeration_IO:
41080
41081 5
41082 Default_Width : Field := 0;
41083 Default_Setting : Type_Set := Upper_Case;
41084
41085 6
41086 The following procedures are provided:
41087
41088 7
41089 procedure Get(File : in File_Type; Item : out Enum);
41090 procedure Get(Item : out Enum);
41091
41092 8
41093 After skipping any leading blanks, line terminators, or page
41094 terminators, reads an identifier according to the syntax of
41095 this lexical element (lower and upper case being considered
41096 equivalent), or a character literal according to the syntax of
41097 this lexical element (including the apostrophes). Returns, in
41098 the parameter Item, the value of type Enum that corresponds to
41099 the sequence input.
41100
41101 9
41102 The exception Data_Error is propagated if the sequence input
41103 does not have the required syntax, or if the identifier or
41104 character literal does not correspond to a value of the
41105 subtype Enum.
41106
41107 10
41108 procedure Put(File : in File_Type;
41109 Item : in Enum;
41110 Width : in Field := Default_Width;
41111 Set : in Type_Set := Default_Setting);
41112
41113 procedure Put(Item : in Enum;
41114 Width : in Field := Default_Width;
41115 Set : in Type_Set := Default_Setting);
41116
41117 11
41118 Outputs the value of the parameter Item as an enumeration
41119 literal (either an identifier or a character literal). The
41120 optional parameter Set indicates whether lower case or upper
41121 case is used for identifiers; it has no effect for character
41122 literals. If the sequence of characters produced has fewer
41123 than Width characters, then trailing spaces are finally output
41124 to make up the difference. If Enum is a character type, the
41125 sequence of characters produced is as for Enum'Image(Item), as
41126 modified by the Width and Set parameters.
41127
41128 12
41129 procedure Get(From : in String; Item : out Enum; Last : out Positive);
41130
41131 13
41132 Reads an enumeration value from the beginning of the given
41133 string, following the same rule as the Get procedure that
41134 reads an enumeration value from a file, but treating the end
41135 of the string as a file terminator. Returns, in the parameter
41136 Item, the value of type Enum that corresponds to the sequence
41137 input. Returns in Last the index value such that From(Last)
41138 is the last character read.
41139
41140 14
41141 The exception Data_Error is propagated if the sequence input
41142 does not have the required syntax, or if the identifier or
41143 character literal does not correspond to a value of the
41144 subtype Enum.
41145
41146 15
41147 procedure Put(To : out String;
41148 Item : in Enum;
41149 Set : in Type_Set := Default_Setting);
41150
41151 16
41152 Outputs the value of the parameter Item to the given string,
41153 following the same rule as for output to a file, using the
41154 length of the given string as the value for Width.
41155
41156 17/1
41157 Although the specification of the generic package Enumeration_IO would
41158 allow instantiation for an integer type, this is not the intended
41159 purpose of this generic package, and the effect of such instantiations
41160 is not defined by the language.
41161
41162 NOTES
41163
41164 18
41165 36 There is a difference between Put defined for characters, and
41166 for enumeration values. Thus
41167
41168 19
41169 Ada.Text_IO.Put('A'); -- outputs the character A
41170
41171 20
41172 package Char_IO is new Ada.Text_IO.Enumeration_IO(Character);
41173 Char_IO.Put('A'); -- outputs the character 'A', between apostrophes
41174
41175 21
41176 37 The type Boolean is an enumeration type, hence Enumeration_IO
41177 can be instantiated for this type.
41178
41179 \1f
41180 File: arm2012.info, Node: A.10.11, Next: A.10.12, Prev: A.10.10, Up: A.10
41181
41182 A.10.11 Input-Output for Bounded Strings
41183 ----------------------------------------
41184
41185 1/2
41186 The package Text_IO.Bounded_IO provides input-output in human-readable
41187 form for Bounded_Strings.
41188
41189 _Static Semantics_
41190
41191 2/2
41192 The generic library package Text_IO.Bounded_IO has the following
41193 declaration:
41194
41195 3/2
41196 with Ada.Strings.Bounded;
41197 generic
41198 with package Bounded is
41199 new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
41200 package Ada.Text_IO.Bounded_IO is
41201
41202 4/2
41203 procedure Put
41204 (File : in File_Type;
41205 Item : in Bounded.Bounded_String);
41206
41207 5/2
41208 procedure Put
41209 (Item : in Bounded.Bounded_String);
41210
41211 6/2
41212 procedure Put_Line
41213 (File : in File_Type;
41214 Item : in Bounded.Bounded_String);
41215
41216 7/2
41217 procedure Put_Line
41218 (Item : in Bounded.Bounded_String);
41219
41220 8/2
41221 function Get_Line
41222 (File : in File_Type)
41223 return Bounded.Bounded_String;
41224
41225 9/2
41226 function Get_Line
41227 return Bounded.Bounded_String;
41228
41229 10/2
41230 procedure Get_Line
41231 (File : in File_Type; Item : out Bounded.Bounded_String);
41232
41233 11/2
41234 procedure Get_Line
41235 (Item : out Bounded.Bounded_String);
41236
41237 12/2
41238 end Ada.Text_IO.Bounded_IO;
41239
41240 13/2
41241 For an item of type Bounded_String, the following subprograms are
41242 provided:
41243
41244 14/2
41245 procedure Put
41246 (File : in File_Type;
41247 Item : in Bounded.Bounded_String);
41248
41249 15/2
41250 Equivalent to Text_IO.Put (File, Bounded.To_String(Item));
41251
41252 16/2
41253 procedure Put
41254 (Item : in Bounded.Bounded_String);
41255
41256 17/2
41257 Equivalent to Text_IO.Put (Bounded.To_String(Item));
41258
41259 18/2
41260 procedure Put_Line
41261 (File : in File_Type;
41262 Item : in Bounded.Bounded_String);
41263
41264 19/2
41265 Equivalent to Text_IO.Put_Line (File,
41266 Bounded.To_String(Item));
41267
41268 20/2
41269 procedure Put_Line
41270 (Item : in Bounded.Bounded_String);
41271
41272 21/2
41273 Equivalent to Text_IO.Put_Line (Bounded.To_String(Item));
41274
41275 22/2
41276 function Get_Line
41277 (File : in File_Type)
41278 return Bounded.Bounded_String;
41279
41280 23/2
41281 Returns Bounded.To_Bounded_String(Text_IO.Get_Line(File));
41282
41283 24/2
41284 function Get_Line
41285 return Bounded.Bounded_String;
41286
41287 25/2
41288 Returns Bounded.To_Bounded_String(Text_IO.Get_Line);
41289
41290 26/2
41291 procedure Get_Line
41292 (File : in File_Type; Item : out Bounded.Bounded_String);
41293
41294 27/2
41295 Equivalent to Item := Get_Line (File);
41296
41297 28/2
41298 procedure Get_Line
41299 (Item : out Bounded.Bounded_String);
41300
41301 29/2
41302 Equivalent to Item := Get_Line;
41303
41304 \1f
41305 File: arm2012.info, Node: A.10.12, Prev: A.10.11, Up: A.10
41306
41307 A.10.12 Input-Output for Unbounded Strings
41308 ------------------------------------------
41309
41310 1/2
41311 The package Text_IO.Unbounded_IO provides input-output in human-readable
41312 form for Unbounded_Strings.
41313
41314 _Static Semantics_
41315
41316 2/2
41317 The library package Text_IO.Unbounded_IO has the following declaration:
41318
41319 3/2
41320 with Ada.Strings.Unbounded;
41321 package Ada.Text_IO.Unbounded_IO is
41322
41323 4/2
41324 procedure Put
41325 (File : in File_Type;
41326 Item : in Strings.Unbounded.Unbounded_String);
41327
41328 5/2
41329 procedure Put
41330 (Item : in Strings.Unbounded.Unbounded_String);
41331
41332 6/2
41333 procedure Put_Line
41334 (File : in File_Type;
41335 Item : in Strings.Unbounded.Unbounded_String);
41336
41337 7/2
41338 procedure Put_Line
41339 (Item : in Strings.Unbounded.Unbounded_String);
41340
41341 8/2
41342 function Get_Line
41343 (File : in File_Type)
41344 return Strings.Unbounded.Unbounded_String;
41345
41346 9/2
41347 function Get_Line
41348 return Strings.Unbounded.Unbounded_String;
41349
41350 10/2
41351 procedure Get_Line
41352 (File : in File_Type; Item : out Strings.Unbounded.Unbounded_String);
41353
41354 11/2
41355 procedure Get_Line
41356 (Item : out Strings.Unbounded.Unbounded_String);
41357
41358 12/2
41359 end Ada.Text_IO.Unbounded_IO;
41360
41361 13/2
41362 For an item of type Unbounded_String, the following subprograms are
41363 provided:
41364
41365 14/2
41366 procedure Put
41367 (File : in File_Type;
41368 Item : in Strings.Unbounded.Unbounded_String);
41369
41370 15/2
41371 Equivalent to Text_IO.Put (File,
41372 Strings.Unbounded.To_String(Item));
41373
41374 16/2
41375 procedure Put
41376 (Item : in Strings.Unbounded.Unbounded_String);
41377
41378 17/2
41379 Equivalent to Text_IO.Put (Strings.Unbounded.To_String(Item));
41380
41381 18/2
41382 procedure Put_Line
41383 (File : in File_Type;
41384 Item : in Strings.Unbounded.Unbounded_String);
41385
41386 19/2
41387 Equivalent to Text_IO.Put_Line (File,
41388 Strings.Unbounded.To_String(Item));
41389
41390 20/2
41391 procedure Put_Line
41392 (Item : in Strings.Unbounded.Unbounded_String);
41393
41394 21/2
41395 Equivalent to Text_IO.Put_Line
41396 (Strings.Unbounded.To_String(Item));
41397
41398 22/2
41399 function Get_Line
41400 (File : in File_Type)
41401 return Strings.Unbounded.Unbounded_String;
41402
41403 23/2
41404 Returns
41405 Strings.Unbounded.To_Unbounded_String(Text_IO.Get_Line(File));
41406
41407 24/2
41408 function Get_Line
41409 return Strings.Unbounded.Unbounded_String;
41410
41411 25/2
41412 Returns
41413 Strings.Unbounded.To_Unbounded_String(Text_IO.Get_Line);
41414
41415 26/2
41416 procedure Get_Line
41417 (File : in File_Type; Item : out Strings.Unbounded.Unbounded_String);
41418
41419 27/2
41420 Equivalent to Item := Get_Line (File);
41421
41422 28/2
41423 procedure Get_Line
41424 (Item : out Strings.Unbounded.Unbounded_String);
41425
41426 29/2
41427 Equivalent to Item := Get_Line;
41428
41429 \1f
41430 File: arm2012.info, Node: A.11, Next: A.12, Prev: A.10, Up: Annex A
41431
41432 A.11 Wide Text Input-Output and Wide Wide Text Input-Output
41433 ===========================================================
41434
41435 1/2
41436 The packages Wide_Text_IO and Wide_Wide_Text_IO provide facilities for
41437 input and output in human-readable form. Each file is read or written
41438 sequentially, as a sequence of wide characters (or wide wide characters)
41439 grouped into lines, and as a sequence of lines grouped into pages.
41440
41441 _Static Semantics_
41442
41443 2/2
41444 The specification of package Wide_Text_IO is the same as that for
41445 Text_IO, except that in each Get, Look_Ahead, Get_Immediate, Get_Line,
41446 Put, and Put_Line subprogram, any occurrence of Character is replaced by
41447 Wide_Character, and any occurrence of String is replaced by Wide_String.
41448 Nongeneric equivalents of Wide_Text_IO.Integer_IO and
41449 Wide_Text_IO.Float_IO are provided (as for Text_IO) for each predefined
41450 numeric type, with names such as Ada.Integer_Wide_Text_IO,
41451 Ada.Long_Integer_Wide_Text_IO, Ada.Float_Wide_Text_IO,
41452 Ada.Long_Float_Wide_Text_IO.
41453
41454 3/2
41455 The specification of package Wide_Wide_Text_IO is the same as that for
41456 Text_IO, except that in each Get, Look_Ahead, Get_Immediate, Get_Line,
41457 Put, and Put_Line subprogram, any occurrence of Character is replaced by
41458 Wide_Wide_Character, and any occurrence of String is replaced by
41459 Wide_Wide_String. Nongeneric equivalents of
41460 Wide_Wide_Text_IO.Integer_IO and Wide_Wide_Text_IO.Float_IO are provided
41461 (as for Text_IO) for each predefined numeric type, with names such as
41462 Ada.Integer_Wide_Wide_Text_IO, Ada.Long_Integer_Wide_Wide_Text_IO,
41463 Ada.Float_Wide_Wide_Text_IO, Ada.Long_Float_Wide_Wide_Text_IO.
41464
41465 4/3
41466 The specification of package Wide_Text_IO.Wide_Bounded_IO is the same as
41467 that for Text_IO.Bounded_IO, except that any occurrence of
41468 Bounded_String is replaced by Bounded_Wide_String, and any occurrence of
41469 package Bounded is replaced by Wide_Bounded. The specification of
41470 package Wide_Wide_Text_IO.Wide_Wide_Bounded_IO is the same as that for
41471 Text_IO.Bounded_IO, except that any occurrence of Bounded_String is
41472 replaced by Bounded_Wide_Wide_String, and any occurrence of package
41473 Bounded is replaced by Wide_Wide_Bounded.
41474
41475 5/3
41476 The specification of package Wide_Text_IO.Wide_Unbounded_IO is the same
41477 as that for Text_IO.Unbounded_IO, except that any occurrence of
41478 Unbounded_String is replaced by Unbounded_Wide_String, and any
41479 occurrence of package Unbounded is replaced by Wide_Unbounded. The
41480 specification of package Wide_Wide_Text_IO.Wide_Wide_Unbounded_IO is the
41481 same as that for Text_IO.Unbounded_IO, except that any occurrence of
41482 Unbounded_String is replaced by Unbounded_Wide_Wide_String, and any
41483 occurrence of package Unbounded is replaced by Wide_Wide_Unbounded.
41484
41485 \1f
41486 File: arm2012.info, Node: A.12, Next: A.13, Prev: A.11, Up: Annex A
41487
41488 A.12 Stream Input-Output
41489 ========================
41490
41491 1/2
41492 The packages Streams.Stream_IO, Text_IO.Text_Streams,
41493 Wide_Text_IO.Text_Streams, and Wide_Wide_Text_IO.Text_Streams provide
41494 stream-oriented operations on files.
41495
41496 * Menu:
41497
41498 * A.12.1 :: The Package Streams.Stream_IO
41499 * A.12.2 :: The Package Text_IO.Text_Streams
41500 * A.12.3 :: The Package Wide_Text_IO.Text_Streams
41501 * A.12.4 :: The Package Wide_Wide_Text_IO.Text_Streams
41502
41503 \1f
41504 File: arm2012.info, Node: A.12.1, Next: A.12.2, Up: A.12
41505
41506 A.12.1 The Package Streams.Stream_IO
41507 ------------------------------------
41508
41509 1
41510 The subprograms in the child package Streams.Stream_IO provide control
41511 over stream files. Access to a stream file is either sequential, via a
41512 call on Read or Write to transfer an array of stream elements, or
41513 positional (if supported by the implementation for the given file), by
41514 specifying a relative index for an element. Since a stream file can be
41515 converted to a Stream_Access value, calling stream-oriented attribute
41516 subprograms of different element types with the same Stream_Access value
41517 provides heterogeneous input-output. See *note 13.13:: for a general
41518 discussion of streams.
41519
41520 _Static Semantics_
41521
41522 1.1/1
41523 The elements of a stream file are stream elements. If positioning is
41524 supported for the specified external file, a current index and current
41525 size are maintained for the file as described in *note A.8::. If
41526 positioning is not supported, a current index is not maintained, and the
41527 current size is implementation defined.
41528
41529 2
41530 The library package Streams.Stream_IO has the following declaration:
41531
41532 3/3
41533 with Ada.IO_Exceptions;
41534 package Ada.Streams.Stream_IO is
41535 pragma Preelaborate(Stream_IO);
41536
41537 4
41538 type Stream_Access is access all Root_Stream_Type'Class;
41539
41540 5
41541 type File_Type is limited private;
41542
41543 6
41544 type File_Mode is (In_File, Out_File, Append_File);
41545
41546 7
41547 type Count is range 0 .. implementation-defined;
41548 subtype Positive_Count is Count range 1 .. Count'Last;
41549 -- Index into file, in stream elements.
41550
41551 8
41552 procedure Create (File : in out File_Type;
41553 Mode : in File_Mode := Out_File;
41554 Name : in String := "";
41555 Form : in String := "");
41556
41557 9
41558 procedure Open (File : in out File_Type;
41559 Mode : in File_Mode;
41560 Name : in String;
41561 Form : in String := "");
41562
41563 10
41564 procedure Close (File : in out File_Type);
41565 procedure Delete (File : in out File_Type);
41566 procedure Reset (File : in out File_Type; Mode : in File_Mode);
41567 procedure Reset (File : in out File_Type);
41568
41569 11
41570 function Mode (File : in File_Type) return File_Mode;
41571 function Name (File : in File_Type) return String;
41572 function Form (File : in File_Type) return String;
41573
41574 12
41575 function Is_Open (File : in File_Type) return Boolean;
41576 function End_Of_File (File : in File_Type) return Boolean;
41577
41578 13
41579 function Stream (File : in File_Type) return Stream_Access;
41580 -- Return stream access for use with T'Input and T'Output
41581
41582 14/1
41583 This paragraph was deleted.
41584
41585 15
41586 -- Read array of stream elements from file
41587 procedure Read (File : in File_Type;
41588 Item : out Stream_Element_Array;
41589 Last : out Stream_Element_Offset;
41590 From : in Positive_Count);
41591
41592 16
41593 procedure Read (File : in File_Type;
41594 Item : out Stream_Element_Array;
41595 Last : out Stream_Element_Offset);
41596
41597 17/1
41598 This paragraph was deleted.
41599
41600 18
41601 -- Write array of stream elements into file
41602 procedure Write (File : in File_Type;
41603 Item : in Stream_Element_Array;
41604 To : in Positive_Count);
41605
41606 19
41607 procedure Write (File : in File_Type;
41608 Item : in Stream_Element_Array);
41609
41610 20/1
41611 This paragraph was deleted.
41612
41613 21
41614 -- Operations on position within file
41615
41616 22
41617 procedure Set_Index(File : in File_Type; To : in Positive_Count);
41618
41619 23
41620 function Index(File : in File_Type) return Positive_Count;
41621 function Size (File : in File_Type) return Count;
41622
41623 24
41624 procedure Set_Mode(File : in out File_Type; Mode : in File_Mode);
41625
41626 25/1
41627 procedure Flush(File : in File_Type);
41628
41629 26
41630 -- exceptions
41631 Status_Error : exception renames IO_Exceptions.Status_Error;
41632 Mode_Error : exception renames IO_Exceptions.Mode_Error;
41633 Name_Error : exception renames IO_Exceptions.Name_Error;
41634 Use_Error : exception renames IO_Exceptions.Use_Error;
41635 Device_Error : exception renames IO_Exceptions.Device_Error;
41636 End_Error : exception renames IO_Exceptions.End_Error;
41637 Data_Error : exception renames IO_Exceptions.Data_Error;
41638
41639 27
41640 private
41641 ... -- not specified by the language
41642 end Ada.Streams.Stream_IO;
41643
41644 27.1/2
41645 The type File_Type needs finalization (see *note 7.6::).
41646
41647 28/2
41648 The subprograms given in subclause *note A.8.2:: for the control of
41649 external files (Create, Open, Close, Delete, Reset, Mode, Name, Form,
41650 and Is_Open) are available for stream files.
41651
41652 28.1/2
41653 The End_Of_File function:
41654
41655 28.2/2
41656 * Propagates Mode_Error if the mode of the file is not In_File;
41657
41658 28.3/3
41659 * If positioning is supported for the given external file, the
41660 function returns True if the current index exceeds the size of the
41661 external file; otherwise, it returns False;
41662
41663 28.4/3
41664 * If positioning is not supported for the given external file, the
41665 function returns True if no more elements can be read from the
41666 given file; otherwise, it returns False.
41667
41668 28.5/2
41669 The Set_Mode procedure sets the mode of the file. If the new mode is
41670 Append_File, the file is positioned to its end; otherwise, the position
41671 in the file is unchanged.
41672
41673 28.6/1
41674 The Flush procedure synchronizes the external file with the internal
41675 file (by flushing any internal buffers) without closing the file or
41676 changing the position. Mode_Error is propagated if the mode of the file
41677 is In_File.
41678
41679 29/1
41680 The Stream function returns a Stream_Access result from a File_Type
41681 object, thus allowing the stream-oriented attributes Read, Write, Input,
41682 and Output to be used on the same file for multiple types. Stream
41683 propagates Status_Error if File is not open.
41684
41685 30/2
41686 The procedures Read and Write are equivalent to the corresponding
41687 operations in the package Streams. Read propagates Mode_Error if the
41688 mode of File is not In_File. Write propagates Mode_Error if the mode of
41689 File is not Out_File or Append_File. The Read procedure with a
41690 Positive_Count parameter starts reading at the specified index. The
41691 Write procedure with a Positive_Count parameter starts writing at the
41692 specified index. For a file that supports positioning, Read without a
41693 Positive_Count parameter starts reading at the current index, and Write
41694 without a Positive_Count parameter starts writing at the current index.
41695
41696 30.1/1
41697 The Size function returns the current size of the file.
41698
41699 31/1
41700 The Index function returns the current index.
41701
41702 32
41703 The Set_Index procedure sets the current index to the specified value.
41704
41705 32.1/1
41706 If positioning is supported for the external file, the current index is
41707 maintained as follows:
41708
41709 32.2/1
41710 * For Open and Create, if the Mode parameter is Append_File, the
41711 current index is set to the current size of the file plus one;
41712 otherwise, the current index is set to one.
41713
41714 32.3/1
41715 * For Reset, if the Mode parameter is Append_File, or no Mode
41716 parameter is given and the current mode is Append_File, the current
41717 index is set to the current size of the file plus one; otherwise,
41718 the current index is set to one.
41719
41720 32.4/1
41721 * For Set_Mode, if the new mode is Append_File, the current index is
41722 set to current size plus one; otherwise, the current index is
41723 unchanged.
41724
41725 32.5/1
41726 * For Read and Write without a Positive_Count parameter, the current
41727 index is incremented by the number of stream elements read or
41728 written.
41729
41730 32.6/1
41731 * For Read and Write with a Positive_Count parameter, the value of
41732 the current index is set to the value of the Positive_Count
41733 parameter plus the number of stream elements read or written.
41734
41735 33
41736 If positioning is not supported for the given file, then a call of Index
41737 or Set_Index propagates Use_Error. Similarly, a call of Read or Write
41738 with a Positive_Count parameter propagates Use_Error.
41739
41740 Paragraphs 34 through 36 were deleted.
41741
41742 _Erroneous Execution_
41743
41744 36.1/1
41745 If the File_Type object passed to the Stream function is later closed or
41746 finalized, and the stream-oriented attributes are subsequently called
41747 (explicitly or implicitly) on the Stream_Access value returned by
41748 Stream, execution is erroneous. This rule applies even if the File_Type
41749 object was opened again after it had been closed.
41750
41751 \1f
41752 File: arm2012.info, Node: A.12.2, Next: A.12.3, Prev: A.12.1, Up: A.12
41753
41754 A.12.2 The Package Text_IO.Text_Streams
41755 ---------------------------------------
41756
41757 1
41758 The package Text_IO.Text_Streams provides a function for treating a text
41759 file as a stream.
41760
41761 _Static Semantics_
41762
41763 2
41764 The library package Text_IO.Text_Streams has the following declaration:
41765
41766 3
41767 with Ada.Streams;
41768 package Ada.Text_IO.Text_Streams is
41769 type Stream_Access is access all Streams.Root_Stream_Type'Class;
41770
41771 4
41772 function Stream (File : in File_Type) return Stream_Access;
41773 end Ada.Text_IO.Text_Streams;
41774
41775 5
41776 The Stream function has the same effect as the corresponding function in
41777 Streams.Stream_IO.
41778
41779 NOTES
41780
41781 6
41782 38 The ability to obtain a stream for a text file allows
41783 Current_Input, Current_Output, and Current_Error to be processed
41784 with the functionality of streams, including the mixing of text and
41785 binary input-output, and the mixing of binary input-output for
41786 different types.
41787
41788 7
41789 39 Performing operations on the stream associated with a text file
41790 does not affect the column, line, or page counts.
41791
41792 \1f
41793 File: arm2012.info, Node: A.12.3, Next: A.12.4, Prev: A.12.2, Up: A.12
41794
41795 A.12.3 The Package Wide_Text_IO.Text_Streams
41796 --------------------------------------------
41797
41798 1
41799 The package Wide_Text_IO.Text_Streams provides a function for treating a
41800 wide text file as a stream.
41801
41802 _Static Semantics_
41803
41804 2
41805 The library package Wide_Text_IO.Text_Streams has the following
41806 declaration:
41807
41808 3
41809 with Ada.Streams;
41810 package Ada.Wide_Text_IO.Text_Streams is
41811 type Stream_Access is access all Streams.Root_Stream_Type'Class;
41812
41813 4
41814 function Stream (File : in File_Type) return Stream_Access;
41815 end Ada.Wide_Text_IO.Text_Streams;
41816
41817 5
41818 The Stream function has the same effect as the corresponding function in
41819 Streams.Stream_IO.
41820
41821 \1f
41822 File: arm2012.info, Node: A.12.4, Prev: A.12.3, Up: A.12
41823
41824 A.12.4 The Package Wide_Wide_Text_IO.Text_Streams
41825 -------------------------------------------------
41826
41827 1/2
41828 The package Wide_Wide_Text_IO.Text_Streams provides a function for
41829 treating a wide wide text file as a stream.
41830
41831 _Static Semantics_
41832
41833 2/2
41834 The library package Wide_Wide_Text_IO.Text_Streams has the following
41835 declaration:
41836
41837 3/2
41838 with Ada.Streams;
41839 package Ada.Wide_Wide_Text_IO.Text_Streams is
41840 type Stream_Access is access all Streams.Root_Stream_Type'Class;
41841
41842 4/2
41843 function Stream (File : in File_Type) return Stream_Access;
41844 end Ada.Wide_Wide_Text_IO.Text_Streams;
41845
41846 5/2
41847 The Stream function has the same effect as the corresponding function in
41848 Streams.Stream_IO.
41849
41850 \1f
41851 File: arm2012.info, Node: A.13, Next: A.14, Prev: A.12, Up: Annex A
41852
41853 A.13 Exceptions in Input-Output
41854 ===============================
41855
41856 1
41857 The package IO_Exceptions defines the exceptions needed by the
41858 predefined input-output packages.
41859
41860 _Static Semantics_
41861
41862 2
41863 The library package IO_Exceptions has the following declaration:
41864
41865 3
41866 package Ada.IO_Exceptions is
41867 pragma Pure(IO_Exceptions);
41868
41869 4
41870 Status_Error : exception;
41871 Mode_Error : exception;
41872 Name_Error : exception;
41873 Use_Error : exception;
41874 Device_Error : exception;
41875 End_Error : exception;
41876 Data_Error : exception;
41877 Layout_Error : exception;
41878
41879 5
41880 end Ada.IO_Exceptions;
41881
41882 6
41883 If more than one error condition exists, the corresponding exception
41884 that appears earliest in the following list is the one that is
41885 propagated.
41886
41887 7
41888 The exception Status_Error is propagated by an attempt to operate upon a
41889 file that is not open, and by an attempt to open a file that is already
41890 open.
41891
41892 8
41893 The exception Mode_Error is propagated by an attempt to read from, or
41894 test for the end of, a file whose current mode is Out_File or
41895 Append_File, and also by an attempt to write to a file whose current
41896 mode is In_File. In the case of Text_IO, the exception Mode_Error is
41897 also propagated by specifying a file whose current mode is Out_File or
41898 Append_File in a call of Set_Input, Skip_Line, End_Of_Line, Skip_Page,
41899 or End_Of_Page; and by specifying a file whose current mode is In_File
41900 in a call of Set_Output, Set_Line_Length, Set_Page_Length, Line_Length,
41901 Page_Length, New_Line, or New_Page.
41902
41903 9
41904 The exception Name_Error is propagated by a call of Create or Open if
41905 the string given for the parameter Name does not allow the
41906 identification of an external file. For example, this exception is
41907 propagated if the string is improper, or, alternatively, if either none
41908 or more than one external file corresponds to the string.
41909
41910 10
41911 The exception Use_Error is propagated if an operation is attempted that
41912 is not possible for reasons that depend on characteristics of the
41913 external file. For example, this exception is propagated by the
41914 procedure Create, among other circumstances, if the given mode is
41915 Out_File but the form specifies an input only device, if the parameter
41916 Form specifies invalid access rights, or if an external file with the
41917 given name already exists and overwriting is not allowed.
41918
41919 11
41920 The exception Device_Error is propagated if an input-output operation
41921 cannot be completed because of a malfunction of the underlying system.
41922
41923 12
41924 The exception End_Error is propagated by an attempt to skip (read past)
41925 the end of a file.
41926
41927 13
41928 The exception Data_Error can be propagated by the procedure Read (or by
41929 the Read attribute) if the element read cannot be interpreted as a value
41930 of the required subtype. This exception is also propagated by a
41931 procedure Get (defined in the package Text_IO) if the input character
41932 sequence fails to satisfy the required syntax, or if the value input
41933 does not belong to the range of the required subtype.
41934
41935 14
41936 The exception Layout_Error is propagated (in text input-output) by Col,
41937 Line, or Page if the value returned exceeds Count'Last. The exception
41938 Layout_Error is also propagated on output by an attempt to set column or
41939 line numbers in excess of specified maximum line or page lengths,
41940 respectively (excluding the unbounded cases). It is also propagated by
41941 an attempt to Put too many characters to a string.
41942
41943 14.1/3
41944 These exceptions are also propagated by various other language-defined
41945 packages and operations, see the definition of those entities for other
41946 reasons that these exceptions are propagated.
41947
41948 _Documentation Requirements_
41949
41950 15
41951 The implementation shall document the conditions under which Name_Error,
41952 Use_Error and Device_Error are propagated.
41953
41954 _Implementation Permissions_
41955
41956 16
41957 If the associated check is too complex, an implementation need not
41958 propagate Data_Error as part of a procedure Read (or the Read attribute)
41959 if the value read cannot be interpreted as a value of the required
41960 subtype.
41961
41962 _Erroneous Execution_
41963
41964 17
41965 If the element read by the procedure Read (or by the Read attribute)
41966 cannot be interpreted as a value of the required subtype, but this is
41967 not detected and Data_Error is not propagated, then the resulting value
41968 can be abnormal, and subsequent references to the value can lead to
41969 erroneous execution, as explained in *note 13.9.1::.
41970
41971 \1f
41972 File: arm2012.info, Node: A.14, Next: A.15, Prev: A.13, Up: Annex A
41973
41974 A.14 File Sharing
41975 =================
41976
41977 _Dynamic Semantics_
41978
41979 1
41980 It is not specified by the language whether the same external file can
41981 be associated with more than one file object. If such sharing is
41982 supported by the implementation, the following effects are defined:
41983
41984 2
41985 * Operations on one text file object do not affect the column, line,
41986 and page numbers of any other file object.
41987
41988 3/1
41989 * This paragraph was deleted.
41990
41991 4
41992 * For direct and stream files, the current index is a property of
41993 each file object; an operation on one file object does not affect
41994 the current index of any other file object.
41995
41996 5
41997 * For direct and stream files, the current size of the file is a
41998 property of the external file.
41999
42000 6
42001 All other effects are identical.
42002
42003 \1f
42004 File: arm2012.info, Node: A.15, Next: A.16, Prev: A.14, Up: Annex A
42005
42006 A.15 The Package Command_Line
42007 =============================
42008
42009 1
42010 The package Command_Line allows a program to obtain the values of its
42011 arguments and to set the exit status code to be returned on normal
42012 termination.
42013
42014 _Static Semantics_
42015
42016 2
42017 The library package Ada.Command_Line has the following declaration:
42018
42019 3
42020 package Ada.Command_Line is
42021 pragma Preelaborate(Command_Line);
42022
42023 4
42024 function Argument_Count return Natural;
42025
42026 5
42027 function Argument (Number : in Positive) return String;
42028
42029 6
42030 function Command_Name return String;
42031
42032 7
42033 type Exit_Status is implementation-defined integer type;
42034
42035 8
42036 Success : constant Exit_Status;
42037 Failure : constant Exit_Status;
42038
42039 9
42040 procedure Set_Exit_Status (Code : in Exit_Status);
42041
42042 10
42043 private
42044 ... -- not specified by the language
42045 end Ada.Command_Line;
42046
42047
42048 11
42049 function Argument_Count return Natural;
42050
42051 12/3
42052 If the external execution environment supports passing
42053 arguments to a program, then Argument_Count returns the number
42054 of arguments passed to the program invoking the function.
42055 Otherwise, it returns 0. The meaning of "number of arguments"
42056 is implementation defined.
42057
42058 13
42059 function Argument (Number : in Positive) return String;
42060
42061 14
42062 If the external execution environment supports passing
42063 arguments to a program, then Argument returns an
42064 implementation-defined value corresponding to the argument at
42065 relative position Number. If Number is outside the range
42066 1..Argument_Count, then Constraint_Error is propagated.
42067
42068 15
42069 function Command_Name return String;
42070
42071 16/3
42072 If the external execution environment supports passing
42073 arguments to a program, then Command_Name returns an
42074 implementation-defined value corresponding to the name of the
42075 command invoking the program; otherwise, Command_Name returns
42076 the null string.
42077
42078 16.1/1
42079 type Exit_Status is implementation-defined integer type;
42080
42081 17
42082 The type Exit_Status represents the range of exit status
42083 values supported by the external execution environment. The
42084 constants Success and Failure correspond to success and
42085 failure, respectively.
42086
42087 18
42088 procedure Set_Exit_Status (Code : in Exit_Status);
42089
42090 19
42091 If the external execution environment supports returning an
42092 exit status from a program, then Set_Exit_Status sets Code as
42093 the status. Normal termination of a program returns as the
42094 exit status the value most recently set by Set_Exit_Status,
42095 or, if no such value has been set, then the value Success. If
42096 a program terminates abnormally, the status set by
42097 Set_Exit_Status is ignored, and an implementation-defined exit
42098 status value is set.
42099
42100 20
42101 If the external execution environment does not support
42102 returning an exit value from a program, then Set_Exit_Status
42103 does nothing.
42104
42105 _Implementation Permissions_
42106
42107 21
42108 An alternative declaration is allowed for package Command_Line if
42109 different functionality is appropriate for the external execution
42110 environment.
42111
42112 NOTES
42113
42114 22
42115 40 Argument_Count, Argument, and Command_Name correspond to the C
42116 language's argc, argv[n] (for n>0) and argv[0], respectively.
42117
42118 \1f
42119 File: arm2012.info, Node: A.16, Next: A.17, Prev: A.15, Up: Annex A
42120
42121 A.16 The Package Directories
42122 ============================
42123
42124 1/2
42125 The package Directories provides operations for manipulating files and
42126 directories, and their names.
42127
42128 _Static Semantics_
42129
42130 2/2
42131 The library package Directories has the following declaration:
42132
42133 3/2
42134 with Ada.IO_Exceptions;
42135 with Ada.Calendar;
42136 package Ada.Directories is
42137
42138 4/2
42139 -- Directory and file operations:
42140
42141 5/2
42142 function Current_Directory return String;
42143
42144 6/2
42145 procedure Set_Directory (Directory : in String);
42146
42147 7/2
42148 procedure Create_Directory (New_Directory : in String;
42149 Form : in String := "");
42150
42151 8/2
42152 procedure Delete_Directory (Directory : in String);
42153
42154 9/2
42155 procedure Create_Path (New_Directory : in String;
42156 Form : in String := "");
42157
42158 10/2
42159 procedure Delete_Tree (Directory : in String);
42160
42161 11/2
42162 procedure Delete_File (Name : in String);
42163
42164 12/2
42165 procedure Rename (Old_Name, New_Name : in String);
42166
42167 13/2
42168 procedure Copy_File (Source_Name,
42169 Target_Name : in String;
42170 Form : in String := "");
42171
42172 14/2
42173 -- File and directory name operations:
42174
42175 15/2
42176 function Full_Name (Name : in String) return String;
42177
42178 16/2
42179 function Simple_Name (Name : in String) return String;
42180
42181 17/2
42182 function Containing_Directory (Name : in String) return String;
42183
42184 18/2
42185 function Extension (Name : in String) return String;
42186
42187 19/2
42188 function Base_Name (Name : in String) return String;
42189
42190 20/2
42191 function Compose (Containing_Directory : in String := "";
42192 Name : in String;
42193 Extension : in String := "") return String;
42194
42195 20.1/3
42196 type Name_Case_Kind is
42197 (Unknown, Case_Sensitive, Case_Insensitive, Case_Preserving);
42198
42199 20.2/3
42200 function Name_Case_Equivalence (Name : in String) return Name_Case_Kind;
42201
42202 21/2
42203 -- File and directory queries:
42204
42205 22/2
42206 type File_Kind is (Directory, Ordinary_File, Special_File);
42207
42208 23/2
42209 type File_Size is range 0 .. implementation-defined;
42210
42211 24/2
42212 function Exists (Name : in String) return Boolean;
42213
42214 25/2
42215 function Kind (Name : in String) return File_Kind;
42216
42217 26/2
42218 function Size (Name : in String) return File_Size;
42219
42220 27/2
42221 function Modification_Time (Name : in String) return Ada.Calendar.Time;
42222
42223 28/2
42224 -- Directory searching:
42225
42226 29/2
42227 type Directory_Entry_Type is limited private;
42228
42229 30/2
42230 type Filter_Type is array (File_Kind) of Boolean;
42231
42232 31/2
42233 type Search_Type is limited private;
42234
42235 32/2
42236 procedure Start_Search (Search : in out Search_Type;
42237 Directory : in String;
42238 Pattern : in String;
42239 Filter : in Filter_Type := (others => True));
42240
42241 33/2
42242 procedure End_Search (Search : in out Search_Type);
42243
42244 34/2
42245 function More_Entries (Search : in Search_Type) return Boolean;
42246
42247 35/2
42248 procedure Get_Next_Entry (Search : in out Search_Type;
42249 Directory_Entry : out Directory_Entry_Type);
42250
42251 36/2
42252 procedure Search (
42253 Directory : in String;
42254 Pattern : in String;
42255 Filter : in Filter_Type := (others => True);
42256 Process : not null access procedure (
42257 Directory_Entry : in Directory_Entry_Type));
42258
42259 37/2
42260 -- Operations on Directory Entries:
42261
42262 38/2
42263 function Simple_Name (Directory_Entry : in Directory_Entry_Type)
42264 return String;
42265
42266 39/2
42267 function Full_Name (Directory_Entry : in Directory_Entry_Type)
42268 return String;
42269
42270 40/2
42271 function Kind (Directory_Entry : in Directory_Entry_Type)
42272 return File_Kind;
42273
42274 41/2
42275 function Size (Directory_Entry : in Directory_Entry_Type)
42276 return File_Size;
42277
42278 42/2
42279 function Modification_Time (Directory_Entry : in Directory_Entry_Type)
42280 return Ada.Calendar.Time;
42281
42282 43/2
42283 Status_Error : exception renames Ada.IO_Exceptions.Status_Error;
42284 Name_Error : exception renames Ada.IO_Exceptions.Name_Error;
42285 Use_Error : exception renames Ada.IO_Exceptions.Use_Error;
42286 Device_Error : exception renames Ada.IO_Exceptions.Device_Error;
42287
42288 44/3
42289 private
42290 ... -- not specified by the language
42291 end Ada.Directories;
42292
42293 45/2
42294 External files may be classified as directories, special files, or
42295 ordinary files. A directory is an external file that is a container for
42296 files on the target system. A special file is an external file that
42297 cannot be created or read by a predefined Ada input-output package.
42298 External files that are not special files or directories are called
42299 ordinary files.
42300
42301 46/2
42302 A file name is a string identifying an external file. Similarly, a
42303 directory name is a string identifying a directory. The interpretation
42304 of file names and directory names is implementation-defined.
42305
42306 47/2
42307 The full name of an external file is a full specification of the name of
42308 the file. If the external environment allows alternative specifications
42309 of the name (for example, abbreviations), the full name should not use
42310 such alternatives. A full name typically will include the names of all
42311 of the directories that contain the item. The simple name of an
42312 external file is the name of the item, not including any containing
42313 directory names. Unless otherwise specified, a file name or directory
42314 name parameter in a call to a predefined Ada input-output subprogram can
42315 be a full name, a simple name, or any other form of name supported by
42316 the implementation.
42317
42318 48/2
42319 The default directory is the directory that is used if a directory or
42320 file name is not a full name (that is, when the name does not fully
42321 identify all of the containing directories).
42322
42323 49/2
42324 A directory entry is a single item in a directory, identifying a single
42325 external file (including directories and special files).
42326
42327 50/2
42328 For each function that returns a string, the lower bound of the returned
42329 value is 1.
42330
42331 51/2
42332 The following file and directory operations are provided:
42333
42334 52/2
42335 function Current_Directory return String;
42336
42337 53/2
42338 Returns the full directory name for the current default
42339 directory. The name returned shall be suitable for a future
42340 call to Set_Directory. The exception Use_Error is propagated
42341 if a default directory is not supported by the external
42342 environment.
42343
42344 54/2
42345 procedure Set_Directory (Directory : in String);
42346
42347 55/2
42348 Sets the current default directory. The exception Name_Error
42349 is propagated if the string given as Directory does not
42350 identify an existing directory. The exception Use_Error is
42351 propagated if the external environment does not support making
42352 Directory (in the absence of Name_Error) a default directory.
42353
42354 56/2
42355 procedure Create_Directory (New_Directory : in String;
42356 Form : in String := "");
42357
42358 57/2
42359 Creates a directory with name New_Directory. The Form
42360 parameter can be used to give system-dependent characteristics
42361 of the directory; the interpretation of the Form parameter is
42362 implementation-defined. A null string for Form specifies the
42363 use of the default options of the implementation of the new
42364 directory. The exception Name_Error is propagated if the
42365 string given as New_Directory does not allow the
42366 identification of a directory. The exception Use_Error is
42367 propagated if the external environment does not support the
42368 creation of a directory with the given name (in the absence of
42369 Name_Error) and form.
42370
42371 58/2
42372 procedure Delete_Directory (Directory : in String);
42373
42374 59/3
42375 Deletes an existing empty directory with name Directory. The
42376 exception Name_Error is propagated if the string given as
42377 Directory does not identify an existing directory. The
42378 exception Use_Error is propagated if the directory is not
42379 empty or the external environment does not support the
42380 deletion of the directory with the given name (in the absence
42381 of Name_Error).
42382
42383 60/2
42384 procedure Create_Path (New_Directory : in String;
42385 Form : in String := "");
42386
42387 61/3
42388 Creates zero or more directories with name New_Directory.
42389 Each nonexistent directory named by New_Directory is created.
42390 For example, on a typical Unix system, Create_Path
42391 ("/usr/me/my"); would create directory "me" in directory
42392 "usr", then create directory "my" in directory "me". The Form
42393 parameter can be used to give system-dependent characteristics
42394 of the directory; the interpretation of the Form parameter is
42395 implementation-defined. A null string for Form specifies the
42396 use of the default options of the implementation of the new
42397 directory. The exception Name_Error is propagated if the
42398 string given as New_Directory does not allow the
42399 identification of any directory. The exception Use_Error is
42400 propagated if the external environment does not support the
42401 creation of any directories with the given name (in the
42402 absence of Name_Error) and form. If Use_Error is propagated,
42403 it is unspecified whether a portion of the directory path is
42404 created.
42405
42406 62/2
42407 procedure Delete_Tree (Directory : in String);
42408
42409 63/2
42410 Deletes an existing directory with name Directory. The
42411 directory and all of its contents (possibly including other
42412 directories) are deleted. The exception Name_Error is
42413 propagated if the string given as Directory does not identify
42414 an existing directory. The exception Use_Error is propagated
42415 if the external environment does not support the deletion of
42416 the directory or some portion of its contents with the given
42417 name (in the absence of Name_Error). If Use_Error is
42418 propagated, it is unspecified whether a portion of the
42419 contents of the directory is deleted.
42420
42421 64/2
42422 procedure Delete_File (Name : in String);
42423
42424 65/2
42425 Deletes an existing ordinary or special file with name Name.
42426 The exception Name_Error is propagated if the string given as
42427 Name does not identify an existing ordinary or special
42428 external file. The exception Use_Error is propagated if the
42429 external environment does not support the deletion of the file
42430 with the given name (in the absence of Name_Error).
42431
42432 66/2
42433 procedure Rename (Old_Name, New_Name : in String);
42434
42435 67/3
42436 Renames an existing external file (including directories) with
42437 name Old_Name to New_Name. The exception Name_Error is
42438 propagated if the string given as Old_Name does not identify
42439 an existing external file or if the string given as New_Name
42440 does not allow the identification of an external file. The
42441 exception Use_Error is propagated if the external environment
42442 does not support the renaming of the file with the given name
42443 (in the absence of Name_Error). In particular, Use_Error is
42444 propagated if a file or directory already exists with name
42445 New_Name.
42446
42447 68/3
42448 procedure Copy_File (Source_Name,
42449 Target_Name : in String;
42450 Form : in String := "");
42451
42452 69/3
42453 Copies the contents of the existing external file with name
42454 Source_Name to an external file with name Target_Name. The
42455 resulting external file is a duplicate of the source external
42456 file. The Form parameter can be used to give system-dependent
42457 characteristics of the resulting external file; the
42458 interpretation of the Form parameter is
42459 implementation-defined. Exception Name_Error is propagated if
42460 the string given as Source_Name does not identify an existing
42461 external ordinary or special file, or if the string given as
42462 Target_Name does not allow the identification of an external
42463 file. The exception Use_Error is propagated if the external
42464 environment does not support creating the file with the name
42465 given by Target_Name and form given by Form, or copying of the
42466 file with the name given by Source_Name (in the absence of
42467 Name_Error). If Use_Error is propagated, it is unspecified
42468 whether a portion of the file is copied.
42469
42470 70/2
42471 The following file and directory name operations are provided:
42472
42473 71/2
42474 function Full_Name (Name : in String) return String;
42475
42476 72/2
42477 Returns the full name corresponding to the file name specified
42478 by Name. The exception Name_Error is propagated if the string
42479 given as Name does not allow the identification of an external
42480 file (including directories and special files).
42481
42482 73/2
42483 function Simple_Name (Name : in String) return String;
42484
42485 74/2
42486 Returns the simple name portion of the file name specified by
42487 Name. The exception Name_Error is propagated if the string
42488 given as Name does not allow the identification of an external
42489 file (including directories and special files).
42490
42491 75/2
42492 function Containing_Directory (Name : in String) return String;
42493
42494 76/2
42495 Returns the name of the containing directory of the external
42496 file (including directories) identified by Name. (If more
42497 than one directory can contain Name, the directory name
42498 returned is implementation-defined.) The exception Name_Error
42499 is propagated if the string given as Name does not allow the
42500 identification of an external file. The exception Use_Error
42501 is propagated if the external file does not have a containing
42502 directory.
42503
42504 77/2
42505 function Extension (Name : in String) return String;
42506
42507 78/2
42508 Returns the extension name corresponding to Name. The
42509 extension name is a portion of a simple name (not including
42510 any separator characters), typically used to identify the file
42511 class. If the external environment does not have extension
42512 names, then the null string is returned. The exception
42513 Name_Error is propagated if the string given as Name does not
42514 allow the identification of an external file.
42515
42516 79/2
42517 function Base_Name (Name : in String) return String;
42518
42519 80/2
42520 Returns the base name corresponding to Name. The base name is
42521 the remainder of a simple name after removing any extension
42522 and extension separators. The exception Name_Error is
42523 propagated if the string given as Name does not allow the
42524 identification of an external file (including directories and
42525 special files).
42526
42527 81/2
42528 function Compose (Containing_Directory : in String := "";
42529 Name : in String;
42530 Extension : in String := "") return String;
42531
42532 82/3
42533 Returns the name of the external file with the specified
42534 Containing_Directory, Name, and Extension. If Extension is
42535 the null string, then Name is interpreted as a simple name;
42536 otherwise, Name is interpreted as a base name. The exception
42537 Name_Error is propagated if the string given as
42538 Containing_Directory is not null and does not allow the
42539 identification of a directory, or if the string given as
42540 Extension is not null and is not a possible extension, or if
42541 the string given as Name is not a possible simple name (if
42542 Extension is null) or base name (if Extension is nonnull).
42543
42544 82.1/3
42545 function Name_Case_Equivalence (Name : in String) return Name_Case_Kind;
42546
42547 82.2/3
42548 Returns the file name equivalence rule for the directory
42549 containing Name. Raises Name_Error if Name is not a full
42550 name. Returns Case_Sensitive if file names that differ only
42551 in the case of letters are considered different names. If
42552 file names that differ only in the case of letters are
42553 considered the same name, then Case_Preserving is returned if
42554 names have the case of the file name used when a file is
42555 created; and Case_Insensitive is returned otherwise. Returns
42556 Unknown if the file name equivalence is not known.
42557
42558 83/2
42559 The following file and directory queries and types are provided:
42560
42561 84/2
42562 type File_Kind is (Directory, Ordinary_File, Special_File);
42563
42564 85/2
42565 The type File_Kind represents the kind of file represented by
42566 an external file or directory.
42567
42568 86/2
42569 type File_Size is range 0 .. implementation-defined;
42570
42571 87/2
42572 The type File_Size represents the size of an external file.
42573
42574 88/2
42575 function Exists (Name : in String) return Boolean;
42576
42577 89/2
42578 Returns True if an external file represented by Name exists,
42579 and False otherwise. The exception Name_Error is propagated
42580 if the string given as Name does not allow the identification
42581 of an external file (including directories and special files).
42582
42583 90/2
42584 function Kind (Name : in String) return File_Kind;
42585
42586 91/2
42587 Returns the kind of external file represented by Name. The
42588 exception Name_Error is propagated if the string given as Name
42589 does not allow the identification of an existing external
42590 file.
42591
42592 92/2
42593 function Size (Name : in String) return File_Size;
42594
42595 93/2
42596 Returns the size of the external file represented by Name.
42597 The size of an external file is the number of stream elements
42598 contained in the file. If the external file is not an
42599 ordinary file, the result is implementation-defined. The
42600 exception Name_Error is propagated if the string given as Name
42601 does not allow the identification of an existing external
42602 file. The exception Constraint_Error is propagated if the
42603 file size is not a value of type File_Size.
42604
42605 94/2
42606 function Modification_Time (Name : in String) return Ada.Calendar.Time;
42607
42608 95/2
42609 Returns the time that the external file represented by Name
42610 was most recently modified. If the external file is not an
42611 ordinary file, the result is implementation-defined. The
42612 exception Name_Error is propagated if the string given as Name
42613 does not allow the identification of an existing external
42614 file. The exception Use_Error is propagated if the external
42615 environment does not support reading the modification time of
42616 the file with the name given by Name (in the absence of
42617 Name_Error).
42618
42619 96/2
42620 The following directory searching operations and types are provided:
42621
42622 97/2
42623 type Directory_Entry_Type is limited private;
42624
42625 98/2
42626 The type Directory_Entry_Type represents a single item in a
42627 directory. These items can only be created by the
42628 Get_Next_Entry procedure in this package. Information about
42629 the item can be obtained from the functions declared in this
42630 package. A default-initialized object of this type is
42631 invalid; objects returned from Get_Next_Entry are valid.
42632
42633 99/2
42634 type Filter_Type is array (File_Kind) of Boolean;
42635
42636 100/2
42637 The type Filter_Type specifies which directory entries are
42638 provided from a search operation. If the Directory component
42639 is True, directory entries representing directories are
42640 provided. If the Ordinary_File component is True, directory
42641 entries representing ordinary files are provided. If the
42642 Special_File component is True, directory entries representing
42643 special files are provided.
42644
42645 101/2
42646 type Search_Type is limited private;
42647
42648 102/2
42649 The type Search_Type contains the state of a directory search.
42650 A default-initialized Search_Type object has no entries
42651 available (function More_Entries returns False). Type
42652 Search_Type needs finalization (see *note 7.6::).
42653
42654 103/2
42655 procedure Start_Search (Search : in out Search_Type;
42656 Directory : in String;
42657 Pattern : in String;
42658 Filter : in Filter_Type := (others => True));
42659
42660 104/3
42661 Starts a search in the directory named by Directory for
42662 entries matching Pattern and Filter. Pattern represents a
42663 pattern for matching file names. If Pattern is the null
42664 string, all items in the directory are matched; otherwise, the
42665 interpretation of Pattern is implementation-defined. Only
42666 items that match Filter will be returned. After a successful
42667 call on Start_Search, the object Search may have entries
42668 available, but it may have no entries available if no files or
42669 directories match Pattern and Filter. The exception
42670 Name_Error is propagated if the string given by Directory does
42671 not identify an existing directory, or if Pattern does not
42672 allow the identification of any possible external file or
42673 directory. The exception Use_Error is propagated if the
42674 external environment does not support the searching of the
42675 directory with the given name (in the absence of Name_Error).
42676 When Start_Search propagates Name_Error or Use_Error, the
42677 object Search will have no entries available.
42678
42679 105/2
42680 procedure End_Search (Search : in out Search_Type);
42681
42682 106/2
42683 Ends the search represented by Search. After a successful
42684 call on End_Search, the object Search will have no entries
42685 available.
42686
42687 107/2
42688 function More_Entries (Search : in Search_Type) return Boolean;
42689
42690 108/2
42691 Returns True if more entries are available to be returned by a
42692 call to Get_Next_Entry for the specified search object, and
42693 False otherwise.
42694
42695 109/2
42696 procedure Get_Next_Entry (Search : in out Search_Type;
42697 Directory_Entry : out Directory_Entry_Type);
42698
42699 110/3
42700 Returns the next Directory_Entry for the search described by
42701 Search that matches the pattern and filter. If no further
42702 matches are available, Status_Error is raised. It is
42703 implementation-defined as to whether the results returned by
42704 this subprogram are altered if the contents of the directory
42705 are altered while the Search object is valid (for example, by
42706 another program). The exception Use_Error is propagated if
42707 the external environment does not support continued searching
42708 of the directory represented by Search.
42709
42710 111/2
42711 procedure Search (
42712 Directory : in String;
42713 Pattern : in String;
42714 Filter : in Filter_Type := (others => True);
42715 Process : not null access procedure (
42716 Directory_Entry : in Directory_Entry_Type));
42717
42718 112/3
42719 Searches in the directory named by Directory for entries
42720 matching Pattern and Filter. The subprogram designated by
42721 Process is called with each matching entry in turn. Pattern
42722 represents a pattern for matching file names. If Pattern is
42723 the null string, all items in the directory are matched;
42724 otherwise, the interpretation of Pattern is
42725 implementation-defined. Only items that match Filter will be
42726 returned. The exception Name_Error is propagated if the
42727 string given by Directory does not identify an existing
42728 directory, or if Pattern does not allow the identification of
42729 any possible external file or directory. The exception
42730 Use_Error is propagated if the external environment does not
42731 support the searching of the directory with the given name (in
42732 the absence of Name_Error).
42733
42734 113/2
42735 function Simple_Name (Directory_Entry : in Directory_Entry_Type)
42736 return String;
42737
42738 114/2
42739 Returns the simple external name of the external file
42740 (including directories) represented by Directory_Entry. The
42741 format of the name returned is implementation-defined. The
42742 exception Status_Error is propagated if Directory_Entry is
42743 invalid.
42744
42745 115/2
42746 function Full_Name (Directory_Entry : in Directory_Entry_Type)
42747 return String;
42748
42749 116/2
42750 Returns the full external name of the external file (including
42751 directories) represented by Directory_Entry. The format of
42752 the name returned is implementation-defined. The exception
42753 Status_Error is propagated if Directory_Entry is invalid.
42754
42755 117/2
42756 function Kind (Directory_Entry : in Directory_Entry_Type)
42757 return File_Kind;
42758
42759 118/2
42760 Returns the kind of external file represented by
42761 Directory_Entry. The exception Status_Error is propagated if
42762 Directory_Entry is invalid.
42763
42764 119/2
42765 function Size (Directory_Entry : in Directory_Entry_Type)
42766 return File_Size;
42767
42768 120/2
42769 Returns the size of the external file represented by
42770 Directory_Entry. The size of an external file is the number
42771 of stream elements contained in the file. If the external
42772 file represented by Directory_Entry is not an ordinary file,
42773 the result is implementation-defined. The exception
42774 Status_Error is propagated if Directory_Entry is invalid. The
42775 exception Constraint_Error is propagated if the file size is
42776 not a value of type File_Size.
42777
42778 121/2
42779 function Modification_Time (Directory_Entry : in Directory_Entry_Type)
42780 return Ada.Calendar.Time;
42781
42782 122/2
42783 Returns the time that the external file represented by
42784 Directory_Entry was most recently modified. If the external
42785 file represented by Directory_Entry is not an ordinary file,
42786 the result is implementation-defined. The exception
42787 Status_Error is propagated if Directory_Entry is invalid. The
42788 exception Use_Error is propagated if the external environment
42789 does not support reading the modification time of the file
42790 represented by Directory_Entry.
42791
42792 _Implementation Requirements_
42793
42794 123/2
42795 For Copy_File, if Source_Name identifies an existing external ordinary
42796 file created by a predefined Ada input-output package, and Target_Name
42797 and Form can be used in the Create operation of that input-output
42798 package with mode Out_File without raising an exception, then Copy_File
42799 shall not propagate Use_Error.
42800
42801 _Implementation Advice_
42802
42803 124/2
42804 If other information about a file (such as the owner or creation date)
42805 is available in a directory entry, the implementation should provide
42806 functions in a child package Directories.Information to retrieve it.
42807
42808 125/3
42809 Start_Search and Search should raise Name_Error if Pattern is malformed,
42810 but not if it could represent a file in the directory but does not
42811 actually do so.
42812
42813 126/2
42814 Rename should be supported at least when both New_Name and Old_Name are
42815 simple names and New_Name does not identify an existing external file.
42816
42817 NOTES
42818
42819 127/2
42820 41 The operations Containing_Directory, Full_Name, Simple_Name,
42821 Base_Name, Extension, and Compose operate on file names, not
42822 external files. The files identified by these operations do not
42823 need to exist. Name_Error is raised only if the file name is
42824 malformed and cannot possibly identify a file. Of these
42825 operations, only the result of Full_Name depends on the current
42826 default directory; the result of the others depends only on their
42827 parameters.
42828
42829 128/2
42830 42 Using access types, values of Search_Type and
42831 Directory_Entry_Type can be saved and queried later. However,
42832 another task or application can modify or delete the file
42833 represented by a Directory_Entry_Type value or the directory
42834 represented by a Search_Type value; such a value can only give the
42835 information valid at the time it is created. Therefore, long-term
42836 storage of these values is not recommended.
42837
42838 129/2
42839 43 If the target system does not support directories inside of
42840 directories, then Kind will never return Directory and
42841 Containing_Directory will always raise Use_Error.
42842
42843 130/2
42844 44 If the target system does not support creation or deletion of
42845 directories, then Create_Directory, Create_Path, Delete_Directory,
42846 and Delete_Tree will always propagate Use_Error.
42847
42848 131/2
42849 45 To move a file or directory to a different location, use
42850 Rename. Most target systems will allow renaming of files from one
42851 directory to another. If the target file or directory might
42852 already exist, it should be deleted first.
42853
42854 * Menu:
42855
42856 * A.16.1 :: The Package Directories.Hierarchical_File_Names
42857
42858 \1f
42859 File: arm2012.info, Node: A.16.1, Up: A.16
42860
42861 A.16.1 The Package Directories.Hierarchical_File_Names
42862 ------------------------------------------------------
42863
42864 1/3
42865 The library package Directories.Hierarchical_File_Names is an optional
42866 package providing operations for file name construction and
42867 decomposition for targets with hierarchical file naming.
42868
42869 _Static Semantics_
42870
42871 2/3
42872 If provided, the library package Directories.Hierarchical_File_Names has
42873 the following declaration:
42874
42875 3/3
42876 package Ada.Directories.Hierarchical_File_Names is
42877
42878 4/3
42879 function Is_Simple_Name (Name : in String) return Boolean;
42880
42881 5/3
42882 function Is_Root_Directory_Name (Name : in String) return Boolean;
42883
42884 6/3
42885 function Is_Parent_Directory_Name (Name : in String) return Boolean;
42886
42887 7/3
42888 function Is_Current_Directory_Name (Name : in String) return Boolean;
42889
42890 8/3
42891 function Is_Full_Name (Name : in String) return Boolean;
42892
42893 9/3
42894 function Is_Relative_Name (Name : in String) return Boolean;
42895
42896 10/3
42897 function Simple_Name (Name : in String) return String
42898 renames Ada.Directories.Simple_Name;
42899
42900 11/3
42901 function Containing_Directory (Name : in String) return String
42902 renames Ada.Directories.Containing_Directory;
42903
42904 12/3
42905 function Initial_Directory (Name : in String) return String;
42906
42907 13/3
42908 function Relative_Name (Name : in String) return String;
42909
42910 14/3
42911 function Compose (Directory : in String := "";
42912 Relative_Name : in String;
42913 Extension : in String := "") return String;
42914
42915 15/3
42916 end Ada.Directories.Hierarchical_File_Names;
42917
42918 16/3
42919 In addition to the operations provided in package
42920 Directories.Hierarchical_File_Names, the operations in package
42921 Directories can be used with hierarchical file names. In particular,
42922 functions Full_Name, Base_Name, and Extension provide additional
42923 capabilities for hierarchical file names.
42924
42925 17/3
42926 function Is_Simple_Name (Name : in String) return Boolean;
42927
42928 18/3
42929 Returns True if Name is a simple name, and returns False
42930 otherwise.
42931
42932 19/3
42933 function Is_Root_Directory_Name (Name : in String) return Boolean;
42934
42935 20/3
42936 Returns True if Name is syntactically a root (a directory that
42937 cannot be decomposed further), and returns False otherwise.
42938
42939 21/3
42940 function Is_Parent_Directory_Name (Name : in String) return Boolean;
42941
42942 22/3
42943 Returns True if Name can be used to indicate symbolically the
42944 parent directory of any directory, and returns False
42945 otherwise.
42946
42947 23/3
42948 function Is_Current_Directory_Name (Name : in String) return Boolean;
42949
42950 24/3
42951 Returns True if Name can be used to indicate symbolically the
42952 directory itself for any directory, and returns False
42953 otherwise.
42954
42955 25/3
42956 function Is_Full_Name (Name : in String) return Boolean;
42957
42958 26/3
42959 Returns True if the leftmost directory part of Name is a root,
42960 and returns False otherwise.
42961
42962 27/3
42963 function Is_Relative_Name (Name : in String) return Boolean;
42964
42965 28/3
42966 Returns True if Name allows the identification of an external
42967 file (including directories and special files) but is not a
42968 full name, and returns False otherwise.
42969
42970 29/3
42971 function Initial_Directory (Name : in String) return String;
42972
42973 30/3
42974 Returns the leftmost directory part in Name. That is, it
42975 returns a root directory name (for a full name), or one of a
42976 parent directory name, a current directory name, or a simple
42977 name (for a relative name). The exception Name_Error is
42978 propagated if the string given as Name does not allow the
42979 identification of an external file (including directories and
42980 special files).
42981
42982 31/3
42983 function Relative_Name (Name : in String) return String;
42984
42985 32/3
42986 Returns the entire file name except the Initial_Directory
42987 portion. The exception Name_Error is propagated if the string
42988 given as Name does not allow the identification of an external
42989 file (including directories and special files), or if Name has
42990 a single part (this includes if any of Is_Simple_Name,
42991 Is_Root_Directory_Name, Is_Parent_Directory_Name, or
42992 Is_Current_Directory_Name are True).
42993
42994 33/3
42995 function Compose (Directory : in String := "";
42996 Relative_Name : in String;
42997 Extension : in String := "") return String;
42998
42999 34/3
43000 Returns the name of the external file with the specified
43001 Directory, Relative_Name, and Extension. The exception
43002 Name_Error is propagated if the string given as Directory is
43003 not the null string and does not allow the identification of a
43004 directory, or if Is_Relative_Name (Relative_Name) is False, or
43005 if the string given as Extension is not the null string and is
43006 not a possible extension, or if Extension is not the null
43007 string and Simple_Name (Relative_Name) is not a base name.
43008
43009 35/3
43010 The result of Compose is a full name if Is_Full_Name
43011 (Directory) is True; result is a relative name otherwise.
43012
43013 _Implementation Advice_
43014
43015 36/3
43016 Directories.Hierarchical_File_Names should be provided for systems with
43017 hierarchical file naming, and should not be provided on other systems.
43018
43019 NOTES
43020
43021 37/3
43022 46 These operations operate on file names, not external files.
43023 The files identified by these operations do not need to exist.
43024 Name_Error is raised only as specified or if the file name is
43025 malformed and cannot possibly identify a file. The result of these
43026 operations depends only on their parameters.
43027
43028 38/3
43029 47 Containing_Directory raises Use_Error if Name does not have a
43030 containing directory, including when any of Is_Simple_Name,
43031 Is_Root_Directory_Name, Is_Parent_Directory_Name, or
43032 Is_Current_Directory_Name are True.
43033
43034 \1f
43035 File: arm2012.info, Node: A.17, Next: A.18, Prev: A.16, Up: Annex A
43036
43037 A.17 The Package Environment_Variables
43038 ======================================
43039
43040 1/2
43041 The package Environment_Variables allows a program to read or modify
43042 environment variables. Environment variables are name-value pairs,
43043 where both the name and value are strings. The definition of what
43044 constitutes an environment variable, and the meaning of the name and
43045 value, are implementation defined.
43046
43047 _Static Semantics_
43048
43049 2/2
43050 The library package Environment_Variables has the following declaration:
43051
43052 3/2
43053 package Ada.Environment_Variables is
43054 pragma Preelaborate(Environment_Variables);
43055
43056 4/2
43057 function Value (Name : in String) return String;
43058
43059 4.1/3
43060 function Value (Name : in String; Default : in String) return String;
43061
43062 5/2
43063 function Exists (Name : in String) return Boolean;
43064
43065 6/2
43066 procedure Set (Name : in String; Value : in String);
43067
43068 7/2
43069 procedure Clear (Name : in String);
43070 procedure Clear;
43071
43072 8/3
43073 procedure Iterate
43074 (Process : not null access procedure (Name, Value : in String));
43075
43076 9/2
43077 end Ada.Environment_Variables;
43078
43079 10/2
43080 function Value (Name : in String) return String;
43081
43082 11/2
43083 If the external execution environment supports environment
43084 variables, then Value returns the value of the environment
43085 variable with the given name. If no environment variable with
43086 the given name exists, then Constraint_Error is propagated.
43087 If the execution environment does not support environment
43088 variables, then Program_Error is propagated.
43089
43090 11.1/3
43091 function Value (Name : in String; Default : in String) return String;
43092
43093 11.2/3
43094 If the external execution environment supports environment
43095 variables and an environment variable with the given name
43096 currently exists, then Value returns its value; otherwise, it
43097 returns Default.
43098
43099 12/2
43100 function Exists (Name : in String) return Boolean;
43101
43102 13/3
43103 If the external execution environment supports environment
43104 variables and an environment variable with the given name
43105 currently exists, then Exists returns True; otherwise, it
43106 returns False.
43107
43108 14/2
43109 procedure Set (Name : in String; Value : in String);
43110
43111 15/3
43112 If the external execution environment supports environment
43113 variables, then Set first clears any existing environment
43114 variable with the given name, and then defines a single new
43115 environment variable with the given name and value.
43116 Otherwise, Program_Error is propagated.
43117
43118 16/2
43119 If implementation-defined circumstances prohibit the
43120 definition of an environment variable with the given name and
43121 value, then Constraint_Error is propagated.
43122
43123 17/2
43124 It is implementation defined whether there exist values for
43125 which the call Set(Name, Value) has the same effect as Clear
43126 (Name).
43127
43128 18/2
43129 procedure Clear (Name : in String);
43130
43131 19/3
43132 If the external execution environment supports environment
43133 variables, then Clear deletes all existing environment
43134 variables with the given name. Otherwise, Program_Error is
43135 propagated.
43136
43137 20/2
43138 procedure Clear;
43139
43140 21/3
43141 If the external execution environment supports environment
43142 variables, then Clear deletes all existing environment
43143 variables. Otherwise, Program_Error is propagated.
43144
43145 22/3
43146 procedure Iterate
43147 (Process : not null access procedure (Name, Value : in String));
43148
43149 23/3
43150 If the external execution environment supports environment
43151 variables, then Iterate calls the subprogram designated by
43152 Process for each existing environment variable, passing the
43153 name and value of that environment variable. Otherwise,
43154 Program_Error is propagated.
43155
43156 24/2
43157 If several environment variables exist that have the same
43158 name, Process is called once for each such variable.
43159
43160 _Bounded (Run-Time) Errors_
43161
43162 25/2
43163 It is a bounded error to call Value if more than one environment
43164 variable exists with the given name; the possible outcomes are that:
43165
43166 26/2
43167 * one of the values is returned, and that same value is returned in
43168 subsequent calls in the absence of changes to the environment; or
43169
43170 27/2
43171 * Program_Error is propagated.
43172
43173 _Erroneous Execution_
43174
43175 28/2
43176 Making calls to the procedures Set or Clear concurrently with calls to
43177 any subprogram of package Environment_Variables, or to any instantiation
43178 of Iterate, results in erroneous execution.
43179
43180 29/2
43181 Making calls to the procedures Set or Clear in the actual subprogram
43182 corresponding to the Process parameter of Iterate results in erroneous
43183 execution.
43184
43185 _Documentation Requirements_
43186
43187 30/2
43188 An implementation shall document how the operations of this package
43189 behave if environment variables are changed by external mechanisms (for
43190 instance, calling operating system services).
43191
43192 _Implementation Permissions_
43193
43194 31/2
43195 An implementation running on a system that does not support environment
43196 variables is permitted to define the operations of package
43197 Environment_Variables with the semantics corresponding to the case where
43198 the external execution environment does support environment variables.
43199 In this case, it shall provide a mechanism to initialize a nonempty set
43200 of environment variables prior to the execution of a partition.
43201
43202 _Implementation Advice_
43203
43204 32/2
43205 If the execution environment supports subprocesses, the currently
43206 defined environment variables should be used to initialize the
43207 environment variables of a subprocess.
43208
43209 33/2
43210 Changes to the environment variables made outside the control of this
43211 package should be reflected immediately in the effect of the operations
43212 of this package. Changes to the environment variables made using this
43213 package should be reflected immediately in the external execution
43214 environment. This package should not perform any buffering of the
43215 environment variables.
43216
43217 \1f
43218 File: arm2012.info, Node: A.18, Next: A.19, Prev: A.17, Up: Annex A
43219
43220 A.18 Containers
43221 ===============
43222
43223 1/2
43224 This clause presents the specifications of the package Containers and
43225 several child packages, which provide facilities for storing collections
43226 of elements.
43227
43228 2/2
43229 A variety of sequence and associative containers are provided. Each
43230 container includes a cursor type. A cursor is a reference to an element
43231 within a container. Many operations on cursors are common to all of the
43232 containers. A cursor referencing an element in a container is
43233 considered to be overlapping with the container object itself.
43234
43235 3/2
43236 Within this clause we provide Implementation Advice for the desired
43237 average or worst case time complexity of certain operations on a
43238 container. This advice is expressed using the Landau symbol O(X).
43239 Presuming f is some function of a length parameter N and t(N) is the
43240 time the operation takes (on average or worst case, as specified) for
43241 the length N, a complexity of O(f(N)) means that there exists a finite A
43242 such that for any N, t(N)/f(N) < A.
43243
43244 4/2
43245 If the advice suggests that the complexity should be less than O(f(N)),
43246 then for any arbitrarily small positive real D, there should exist a
43247 positive integer M such that for all N > M, t(N)/f(N) < D.
43248
43249 5/3
43250 When a formal function is used to provide an ordering for a container,
43251 it is generally required to define a strict weak ordering. A function
43252 "<" defines a strict weak ordering if it is irreflexive, asymmetric,
43253 transitive, and in addition, if x < y for any values x and y, then for
43254 all other values z, (x < z) or (z < y).
43255
43256 * Menu:
43257
43258 * A.18.1 :: The Package Containers
43259 * A.18.2 :: The Generic Package Containers.Vectors
43260 * A.18.3 :: The Generic Package Containers.Doubly_Linked_Lists
43261 * A.18.4 :: Maps
43262 * A.18.5 :: The Generic Package Containers.Hashed_Maps
43263 * A.18.6 :: The Generic Package Containers.Ordered_Maps
43264 * A.18.7 :: Sets
43265 * A.18.8 :: The Generic Package Containers.Hashed_Sets
43266 * A.18.9 :: The Generic Package Containers.Ordered_Sets
43267 * A.18.10 :: The Generic Package Containers.Multiway_Trees
43268 * A.18.11 :: The Generic Package Containers.Indefinite_Vectors
43269 * A.18.12 :: The Generic Package Containers.Indefinite_Doubly_Linked_Lists
43270 * A.18.13 :: The Generic Package Containers.Indefinite_Hashed_Maps
43271 * A.18.14 :: The Generic Package Containers.Indefinite_Ordered_Maps
43272 * A.18.15 :: The Generic Package Containers.Indefinite_Hashed_Sets
43273 * A.18.16 :: The Generic Package Containers.Indefinite_Ordered_Sets
43274 * A.18.17 :: The Generic Package Containers.Indefinite_Multiway_Trees
43275 * A.18.18 :: The Generic Package Containers.Indefinite_Holders
43276 * A.18.19 :: The Generic Package Containers.Bounded_Vectors
43277 * A.18.20 :: The Generic Package Containers.Bounded_Doubly_Linked_Lists
43278 * A.18.21 :: The Generic Package Containers.Bounded_Hashed_Maps
43279 * A.18.22 :: The Generic Package Containers.Bounded_Ordered_Maps
43280 * A.18.23 :: The Generic Package Containers.Bounded_Hashed_Sets
43281 * A.18.24 :: The Generic Package Containers.Bounded_Ordered_Sets
43282 * A.18.25 :: The Generic Package Containers.Bounded_Multiway_Trees
43283 * A.18.26 :: Array Sorting
43284 * A.18.27 :: The Generic Package Containers.Synchronized_Queue_Interfaces
43285 * A.18.28 :: The Generic Package Containers.Unbounded_Synchronized_Queues
43286 * A.18.29 :: The Generic Package Containers.Bounded_Synchronized_Queues
43287 * A.18.30 :: The Generic Package Containers.Unbounded_Priority_Queues
43288 * A.18.31 :: The Generic Package Containers.Bounded_Priority_Queues
43289 * A.18.32 :: Example of Container Use
43290
43291 \1f
43292 File: arm2012.info, Node: A.18.1, Next: A.18.2, Up: A.18
43293
43294 A.18.1 The Package Containers
43295 -----------------------------
43296
43297 1/2
43298 The package Containers is the root of the containers subsystem.
43299
43300 _Static Semantics_
43301
43302 2/2
43303 The library package Containers has the following declaration:
43304
43305 3/2
43306 package Ada.Containers is
43307 pragma Pure(Containers);
43308
43309 4/2
43310 type Hash_Type is mod implementation-defined;
43311
43312 5/2
43313 type Count_Type is range 0 .. implementation-defined;
43314
43315 5.1/3
43316 Capacity_Error : exception;
43317
43318 6/2
43319 end Ada.Containers;
43320
43321 7/2
43322 Hash_Type represents the range of the result of a hash function.
43323 Count_Type represents the (potential or actual) number of elements of a
43324 container.
43325
43326 7.1/3
43327 Capacity_Error is raised when the capacity of a container is exceeded.
43328
43329 _Implementation Advice_
43330
43331 8/2
43332 Hash_Type'Modulus should be at least 2**32. Count_Type'Last should be
43333 at least 2**31-1.
43334
43335 \1f
43336 File: arm2012.info, Node: A.18.2, Next: A.18.3, Prev: A.18.1, Up: A.18
43337
43338 A.18.2 The Generic Package Containers.Vectors
43339 ---------------------------------------------
43340
43341 1/2
43342 The language-defined generic package Containers.Vectors provides private
43343 types Vector and Cursor, and a set of operations for each type. A
43344 vector container allows insertion and deletion at any position, but it
43345 is specifically optimized for insertion and deletion at the high end
43346 (the end with the higher index) of the container. A vector container
43347 also provides random access to its elements.
43348
43349 2/2
43350 A vector container behaves conceptually as an array that expands as
43351 necessary as items are inserted. The length of a vector is the number
43352 of elements that the vector contains. The capacity of a vector is the
43353 maximum number of elements that can be inserted into the vector prior to
43354 it being automatically expanded.
43355
43356 3/2
43357 Elements in a vector container can be referred to by an index value of a
43358 generic formal type. The first element of a vector always has its index
43359 value equal to the lower bound of the formal type.
43360
43361 4/2
43362 A vector container may contain empty elements. Empty elements do not
43363 have a specified value.
43364
43365 _Static Semantics_
43366
43367 5/2
43368 The generic library package Containers.Vectors has the following
43369 declaration:
43370
43371 6/3
43372 with Ada.Iterator_Interfaces;
43373 generic
43374 type Index_Type is range <>;
43375 type Element_Type is private;
43376 with function "=" (Left, Right : Element_Type)
43377 return Boolean is <>;
43378 package Ada.Containers.Vectors is
43379 pragma Preelaborate(Vectors);
43380 pragma Remote_Types(Vectors);
43381
43382 7/2
43383 subtype Extended_Index is
43384 Index_Type'Base range
43385 Index_Type'First-1 ..
43386 Index_Type'Min (Index_Type'Base'Last - 1, Index_Type'Last) + 1;
43387 No_Index : constant Extended_Index := Extended_Index'First;
43388
43389 8/3
43390 type Vector is tagged private
43391 with Constant_Indexing => Constant_Reference,
43392 Variable_Indexing => Reference,
43393 Default_Iterator => Iterate,
43394 Iterator_Element => Element_Type;
43395 pragma Preelaborable_Initialization(Vector);
43396
43397 9/2
43398 type Cursor is private;
43399 pragma Preelaborable_Initialization(Cursor);
43400
43401 10/2
43402 Empty_Vector : constant Vector;
43403
43404 11/2
43405 No_Element : constant Cursor;
43406
43407 11.1/3
43408 function Has_Element (Position : Cursor) return Boolean;
43409
43410 11.2/3
43411 package Vector_Iterator_Interfaces is new
43412 Ada.Iterator_Interfaces (Cursor, Has_Element);
43413
43414 12/2
43415 function "=" (Left, Right : Vector) return Boolean;
43416
43417 13/2
43418 function To_Vector (Length : Count_Type) return Vector;
43419
43420 14/2
43421 function To_Vector
43422 (New_Item : Element_Type;
43423 Length : Count_Type) return Vector;
43424
43425 15/2
43426 function "&" (Left, Right : Vector) return Vector;
43427
43428 16/2
43429 function "&" (Left : Vector;
43430 Right : Element_Type) return Vector;
43431
43432 17/2
43433 function "&" (Left : Element_Type;
43434 Right : Vector) return Vector;
43435
43436 18/2
43437 function "&" (Left, Right : Element_Type) return Vector;
43438
43439 19/2
43440 function Capacity (Container : Vector) return Count_Type;
43441
43442 20/2
43443 procedure Reserve_Capacity (Container : in out Vector;
43444 Capacity : in Count_Type);
43445
43446 21/2
43447 function Length (Container : Vector) return Count_Type;
43448
43449 22/2
43450 procedure Set_Length (Container : in out Vector;
43451 Length : in Count_Type);
43452
43453 23/2
43454 function Is_Empty (Container : Vector) return Boolean;
43455
43456 24/2
43457 procedure Clear (Container : in out Vector);
43458
43459 25/2
43460 function To_Cursor (Container : Vector;
43461 Index : Extended_Index) return Cursor;
43462
43463 26/2
43464 function To_Index (Position : Cursor) return Extended_Index;
43465
43466 27/2
43467 function Element (Container : Vector;
43468 Index : Index_Type)
43469 return Element_Type;
43470
43471 28/2
43472 function Element (Position : Cursor) return Element_Type;
43473
43474 29/2
43475 procedure Replace_Element (Container : in out Vector;
43476 Index : in Index_Type;
43477 New_Item : in Element_Type);
43478
43479 30/2
43480 procedure Replace_Element (Container : in out Vector;
43481 Position : in Cursor;
43482 New_item : in Element_Type);
43483
43484 31/2
43485 procedure Query_Element
43486 (Container : in Vector;
43487 Index : in Index_Type;
43488 Process : not null access procedure (Element : in Element_Type));
43489
43490 32/2
43491 procedure Query_Element
43492 (Position : in Cursor;
43493 Process : not null access procedure (Element : in Element_Type));
43494
43495 33/2
43496 procedure Update_Element
43497 (Container : in out Vector;
43498 Index : in Index_Type;
43499 Process : not null access procedure
43500 (Element : in out Element_Type));
43501
43502 34/2
43503 procedure Update_Element
43504 (Container : in out Vector;
43505 Position : in Cursor;
43506 Process : not null access procedure
43507 (Element : in out Element_Type));
43508
43509 34.1/3
43510 type Constant_Reference_Type
43511 (Element : not null access constant Element_Type) is private
43512 with Implicit_Dereference => Element;
43513
43514 34.2/3
43515 type Reference_Type (Element : not null access Element_Type) is private
43516 with Implicit_Dereference => Element;
43517
43518 34.3/3
43519 function Constant_Reference (Container : aliased in Vector;
43520 Index : in Index_Type)
43521 return Constant_Reference_Type;
43522
43523 34.4/3
43524 function Reference (Container : aliased in out Vector;
43525 Index : in Index_Type)
43526 return Reference_Type;
43527
43528 34.5/3
43529 function Constant_Reference (Container : aliased in Vector;
43530 Position : in Cursor)
43531 return Constant_Reference_Type;
43532
43533 34.6/3
43534 function Reference (Container : aliased in out Vector;
43535 Position : in Cursor)
43536 return Reference_Type;
43537
43538 34.7/3
43539 procedure Assign (Target : in out Vector; Source : in Vector);
43540
43541 34.8/3
43542 function Copy (Source : Vector; Capacity : Count_Type := 0)
43543 return Vector;
43544
43545 35/2
43546 procedure Move (Target : in out Vector;
43547 Source : in out Vector);
43548
43549 36/2
43550 procedure Insert (Container : in out Vector;
43551 Before : in Extended_Index;
43552 New_Item : in Vector);
43553
43554 37/2
43555 procedure Insert (Container : in out Vector;
43556 Before : in Cursor;
43557 New_Item : in Vector);
43558
43559 38/2
43560 procedure Insert (Container : in out Vector;
43561 Before : in Cursor;
43562 New_Item : in Vector;
43563 Position : out Cursor);
43564
43565 39/2
43566 procedure Insert (Container : in out Vector;
43567 Before : in Extended_Index;
43568 New_Item : in Element_Type;
43569 Count : in Count_Type := 1);
43570
43571 40/2
43572 procedure Insert (Container : in out Vector;
43573 Before : in Cursor;
43574 New_Item : in Element_Type;
43575 Count : in Count_Type := 1);
43576
43577 41/2
43578 procedure Insert (Container : in out Vector;
43579 Before : in Cursor;
43580 New_Item : in Element_Type;
43581 Position : out Cursor;
43582 Count : in Count_Type := 1);
43583
43584 42/2
43585 procedure Insert (Container : in out Vector;
43586 Before : in Extended_Index;
43587 Count : in Count_Type := 1);
43588
43589 43/2
43590 procedure Insert (Container : in out Vector;
43591 Before : in Cursor;
43592 Position : out Cursor;
43593 Count : in Count_Type := 1);
43594
43595 44/2
43596 procedure Prepend (Container : in out Vector;
43597 New_Item : in Vector);
43598
43599 45/2
43600 procedure Prepend (Container : in out Vector;
43601 New_Item : in Element_Type;
43602 Count : in Count_Type := 1);
43603
43604 46/2
43605 procedure Append (Container : in out Vector;
43606 New_Item : in Vector);
43607
43608 47/2
43609 procedure Append (Container : in out Vector;
43610 New_Item : in Element_Type;
43611 Count : in Count_Type := 1);
43612
43613 48/2
43614 procedure Insert_Space (Container : in out Vector;
43615 Before : in Extended_Index;
43616 Count : in Count_Type := 1);
43617
43618 49/2
43619 procedure Insert_Space (Container : in out Vector;
43620 Before : in Cursor;
43621 Position : out Cursor;
43622 Count : in Count_Type := 1);
43623
43624 50/2
43625 procedure Delete (Container : in out Vector;
43626 Index : in Extended_Index;
43627 Count : in Count_Type := 1);
43628
43629 51/2
43630 procedure Delete (Container : in out Vector;
43631 Position : in out Cursor;
43632 Count : in Count_Type := 1);
43633
43634 52/2
43635 procedure Delete_First (Container : in out Vector;
43636 Count : in Count_Type := 1);
43637
43638 53/2
43639 procedure Delete_Last (Container : in out Vector;
43640 Count : in Count_Type := 1);
43641
43642 54/2
43643 procedure Reverse_Elements (Container : in out Vector);
43644
43645 55/2
43646 procedure Swap (Container : in out Vector;
43647 I, J : in Index_Type);
43648
43649 56/2
43650 procedure Swap (Container : in out Vector;
43651 I, J : in Cursor);
43652
43653 57/2
43654 function First_Index (Container : Vector) return Index_Type;
43655
43656 58/2
43657 function First (Container : Vector) return Cursor;
43658
43659 59/2
43660 function First_Element (Container : Vector)
43661 return Element_Type;
43662
43663 60/2
43664 function Last_Index (Container : Vector) return Extended_Index;
43665
43666 61/2
43667 function Last (Container : Vector) return Cursor;
43668
43669 62/2
43670 function Last_Element (Container : Vector)
43671 return Element_Type;
43672
43673 63/2
43674 function Next (Position : Cursor) return Cursor;
43675
43676 64/2
43677 procedure Next (Position : in out Cursor);
43678
43679 65/2
43680 function Previous (Position : Cursor) return Cursor;
43681
43682 66/2
43683 procedure Previous (Position : in out Cursor);
43684
43685 67/2
43686 function Find_Index (Container : Vector;
43687 Item : Element_Type;
43688 Index : Index_Type := Index_Type'First)
43689 return Extended_Index;
43690
43691 68/2
43692 function Find (Container : Vector;
43693 Item : Element_Type;
43694 Position : Cursor := No_Element)
43695 return Cursor;
43696
43697 69/2
43698 function Reverse_Find_Index (Container : Vector;
43699 Item : Element_Type;
43700 Index : Index_Type := Index_Type'Last)
43701 return Extended_Index;
43702
43703 70/2
43704 function Reverse_Find (Container : Vector;
43705 Item : Element_Type;
43706 Position : Cursor := No_Element)
43707 return Cursor;
43708
43709 71/2
43710 function Contains (Container : Vector;
43711 Item : Element_Type) return Boolean;
43712
43713 72/3
43714 This paragraph was deleted.
43715
43716 73/2
43717 procedure Iterate
43718 (Container : in Vector;
43719 Process : not null access procedure (Position : in Cursor));
43720
43721 74/2
43722 procedure Reverse_Iterate
43723 (Container : in Vector;
43724 Process : not null access procedure (Position : in Cursor));
43725
43726 74.1/3
43727 function Iterate (Container : in Vector)
43728 return Vector_Iterator_Interfaces.Reversible_Iterator'Class;
43729
43730 74.2/3
43731 function Iterate (Container : in Vector; Start : in Cursor)
43732 return Vector_Iterator_Interfaces.Reversible_Iterator'Class;
43733
43734 75/2
43735 generic
43736 with function "<" (Left, Right : Element_Type)
43737 return Boolean is <>;
43738 package Generic_Sorting is
43739
43740 76/2
43741 function Is_Sorted (Container : Vector) return Boolean;
43742
43743 77/2
43744 procedure Sort (Container : in out Vector);
43745
43746 78/2
43747 procedure Merge (Target : in out Vector;
43748 Source : in out Vector);
43749
43750 79/2
43751 end Generic_Sorting;
43752
43753 80/2
43754 private
43755
43756 81/2
43757 ... -- not specified by the language
43758
43759 82/2
43760 end Ada.Containers.Vectors;
43761
43762 83/2
43763 The actual function for the generic formal function "=" on Element_Type
43764 values is expected to define a reflexive and symmetric relationship and
43765 return the same result value each time it is called with a particular
43766 pair of values. If it behaves in some other manner, the functions
43767 defined to use it return an unspecified value. The exact arguments and
43768 number of calls of this generic formal function by the functions defined
43769 to use it are unspecified.
43770
43771 84/2
43772 The type Vector is used to represent vectors. The type Vector needs
43773 finalization (see *note 7.6::).
43774
43775 85/2
43776 Empty_Vector represents the empty vector object. It has a length of 0.
43777 If an object of type Vector is not otherwise initialized, it is
43778 initialized to the same value as Empty_Vector.
43779
43780 86/2
43781 No_Element represents a cursor that designates no element. If an object
43782 of type Cursor is not otherwise initialized, it is initialized to the
43783 same value as No_Element.
43784
43785 87/2
43786 The predefined "=" operator for type Cursor returns True if both cursors
43787 are No_Element, or designate the same element in the same container.
43788
43789 88/2
43790 Execution of the default implementation of the Input, Output, Read, or
43791 Write attribute of type Cursor raises Program_Error.
43792
43793 88.1/3
43794 Vector'Write for a Vector object V writes Length(V) elements of the
43795 vector to the stream. It also may write additional information about
43796 the vector.
43797
43798 88.2/3
43799 Vector'Read reads the representation of a vector from the stream, and
43800 assigns to Item a vector with the same length and elements as was
43801 written by Vector'Write.
43802
43803 89/2
43804 No_Index represents a position that does not correspond to any element.
43805 The subtype Extended_Index includes the indices covered by Index_Type
43806 plus the value No_Index and, if it exists, the successor to the
43807 Index_Type'Last.
43808
43809 89.1/3
43810 If an operation attempts to modify the vector such that the position of
43811 the last element would be greater than Index_Type'Last, then the
43812 operation propagates Constraint_Error.
43813
43814 90/2
43815 Some operations of this generic package have access-to-subprogram
43816 parameters. To ensure such operations are well-defined, they guard
43817 against certain actions by the designated subprogram. In particular,
43818 some operations check for "tampering with cursors" of a container
43819 because they depend on the set of elements of the container remaining
43820 constant, and others check for "tampering with elements" of a container
43821 because they depend on elements of the container not being replaced.
43822
43823 91/2
43824 A subprogram is said to tamper with cursors of a vector object V if:
43825
43826 92/2
43827 * it inserts or deletes elements of V, that is, it calls the Insert,
43828 Insert_Space, Clear, Delete, or Set_Length procedures with V as a
43829 parameter; or
43830
43831 93/2
43832 * it finalizes V; or
43833
43834 93.1/3
43835 * it calls the Assign procedure with V as the Target parameter; or
43836
43837 94/2
43838 * it calls the Move procedure with V as a parameter.
43839
43840 95/2
43841 A subprogram is said to tamper with elements of a vector object V if:
43842
43843 96/2
43844 * it tampers with cursors of V; or
43845
43846 97/2
43847 * it replaces one or more elements of V, that is, it calls the
43848 Replace_Element, Reverse_Elements, or Swap procedures or the Sort
43849 or Merge procedures of an instance of Generic_Sorting with V as a
43850 parameter.
43851
43852 97.1/3
43853 When tampering with cursors is prohibited for a particular vector object
43854 V, Program_Error is propagated by a call of any language-defined
43855 subprogram that is defined to tamper with the cursors of V, leaving V
43856 unmodified. Similarly, when tampering with elements is prohibited for a
43857 particular vector object V, Program_Error is propagated by a call of any
43858 language-defined subprogram that is defined to tamper with the elements
43859 of V (or tamper with the cursors of V), leaving V unmodified.
43860
43861 97.2/3
43862 function Has_Element (Position : Cursor) return Boolean;
43863
43864 97.3/3
43865 Returns True if Position designates an element, and returns
43866 False otherwise.
43867
43868 98/2
43869 function "=" (Left, Right : Vector) return Boolean;
43870
43871 99/3
43872 If Left and Right denote the same vector object, then the
43873 function returns True. If Left and Right have different
43874 lengths, then the function returns False. Otherwise, it
43875 compares each element in Left to the corresponding element in
43876 Right using the generic formal equality operator. If any such
43877 comparison returns False, the function returns False;
43878 otherwise, it returns True. Any exception raised during
43879 evaluation of element equality is propagated.
43880
43881 100/2
43882 function To_Vector (Length : Count_Type) return Vector;
43883
43884 101/2
43885 Returns a vector with a length of Length, filled with empty
43886 elements.
43887
43888 102/2
43889 function To_Vector
43890 (New_Item : Element_Type;
43891 Length : Count_Type) return Vector;
43892
43893 103/2
43894 Returns a vector with a length of Length, filled with elements
43895 initialized to the value New_Item.
43896
43897 104/2
43898 function "&" (Left, Right : Vector) return Vector;
43899
43900 105/2
43901 Returns a vector comprising the elements of Left followed by
43902 the elements of Right.
43903
43904 106/2
43905 function "&" (Left : Vector;
43906 Right : Element_Type) return Vector;
43907
43908 107/2
43909 Returns a vector comprising the elements of Left followed by
43910 the element Right.
43911
43912 108/2
43913 function "&" (Left : Element_Type;
43914 Right : Vector) return Vector;
43915
43916 109/2
43917 Returns a vector comprising the element Left followed by the
43918 elements of Right.
43919
43920 110/2
43921 function "&" (Left, Right : Element_Type) return Vector;
43922
43923 111/2
43924 Returns a vector comprising the element Left followed by the
43925 element Right.
43926
43927 112/2
43928 function Capacity (Container : Vector) return Count_Type;
43929
43930 113/2
43931 Returns the capacity of Container.
43932
43933 114/2
43934 procedure Reserve_Capacity (Container : in out Vector;
43935 Capacity : in Count_Type);
43936
43937 115/3
43938 If the capacity of Container is already greater than or equal
43939 to Capacity, then Reserve_Capacity has no effect. Otherwise,
43940 Reserve_Capacity allocates additional storage as necessary to
43941 ensure that the length of the resulting vector can become at
43942 least the value Capacity without requiring an additional call
43943 to Reserve_Capacity, and is large enough to hold the current
43944 length of Container. Reserve_Capacity then, as necessary,
43945 moves elements into the new storage and deallocates any
43946 storage no longer needed. Any exception raised during
43947 allocation is propagated and Container is not modified.
43948
43949 116/2
43950 function Length (Container : Vector) return Count_Type;
43951
43952 117/2
43953 Returns the number of elements in Container.
43954
43955 118/2
43956 procedure Set_Length (Container : in out Vector;
43957 Length : in Count_Type);
43958
43959 119/3
43960 If Length is larger than the capacity of Container, Set_Length
43961 calls Reserve_Capacity (Container, Length), then sets the
43962 length of the Container to Length. If Length is greater than
43963 the original length of Container, empty elements are added to
43964 Container; otherwise, elements are removed from Container.
43965
43966 120/2
43967 function Is_Empty (Container : Vector) return Boolean;
43968
43969 121/2
43970 Equivalent to Length (Container) = 0.
43971
43972 122/2
43973 procedure Clear (Container : in out Vector);
43974
43975 123/2
43976 Removes all the elements from Container. The capacity of
43977 Container does not change.
43978
43979 124/2
43980 function To_Cursor (Container : Vector;
43981 Index : Extended_Index) return Cursor;
43982
43983 125/2
43984 If Index is not in the range First_Index (Container) ..
43985 Last_Index (Container), then No_Element is returned.
43986 Otherwise, a cursor designating the element at position Index
43987 in Container is returned.
43988
43989 126/2
43990 function To_Index (Position : Cursor) return Extended_Index;
43991
43992 127/2
43993 If Position is No_Element, No_Index is returned. Otherwise,
43994 the index (within its containing vector) of the element
43995 designated by Position is returned.
43996
43997 128/2
43998 function Element (Container : Vector;
43999 Index : Index_Type)
44000 return Element_Type;
44001
44002 129/2
44003 If Index is not in the range First_Index (Container) ..
44004 Last_Index (Container), then Constraint_Error is propagated.
44005 Otherwise, Element returns the element at position Index.
44006
44007 130/2
44008 function Element (Position : Cursor) return Element_Type;
44009
44010 131/2
44011 If Position equals No_Element, then Constraint_Error is
44012 propagated. Otherwise, Element returns the element designated
44013 by Position.
44014
44015 132/2
44016 procedure Replace_Element (Container : in out Vector;
44017 Index : in Index_Type;
44018 New_Item : in Element_Type);
44019
44020 133/3
44021 If Index is not in the range First_Index (Container) ..
44022 Last_Index (Container), then Constraint_Error is propagated.
44023 Otherwise, Replace_Element assigns the value New_Item to the
44024 element at position Index. Any exception raised during the
44025 assignment is propagated. The element at position Index is
44026 not an empty element after successful call to Replace_Element.
44027
44028 134/2
44029 procedure Replace_Element (Container : in out Vector;
44030 Position : in Cursor;
44031 New_Item : in Element_Type);
44032
44033 135/3
44034 If Position equals No_Element, then Constraint_Error is
44035 propagated; if Position does not designate an element in
44036 Container, then Program_Error is propagated. Otherwise,
44037 Replace_Element assigns New_Item to the element designated by
44038 Position. Any exception raised during the assignment is
44039 propagated. The element at Position is not an empty element
44040 after successful call to Replace_Element.
44041
44042 136/2
44043 procedure Query_Element
44044 (Container : in Vector;
44045 Index : in Index_Type;
44046 Process : not null access procedure (Element : in Element_Type));
44047
44048 137/3
44049 If Index is not in the range First_Index (Container) ..
44050 Last_Index (Container), then Constraint_Error is propagated.
44051 Otherwise, Query_Element calls Process.all with the element at
44052 position Index as the argument. Tampering with the elements
44053 of Container is prohibited during the execution of the call on
44054 Process.all. Any exception raised by Process.all is
44055 propagated.
44056
44057 138/2
44058 procedure Query_Element
44059 (Position : in Cursor;
44060 Process : not null access procedure (Element : in Element_Type));
44061
44062 139/3
44063 If Position equals No_Element, then Constraint_Error is
44064 propagated. Otherwise, Query_Element calls Process.all with
44065 the element designated by Position as the argument. Tampering
44066 with the elements of the vector that contains the element
44067 designated by Position is prohibited during the execution of
44068 the call on Process.all. Any exception raised by Process.all
44069 is propagated.
44070
44071 140/2
44072 procedure Update_Element
44073 (Container : in out Vector;
44074 Index : in Index_Type;
44075 Process : not null access procedure (Element : in out Element_Type));
44076
44077 141/3
44078 If Index is not in the range First_Index (Container) ..
44079 Last_Index (Container), then Constraint_Error is propagated.
44080 Otherwise, Update_Element calls Process.all with the element
44081 at position Index as the argument. Tampering with the
44082 elements of Container is prohibited during the execution of
44083 the call on Process.all. Any exception raised by Process.all
44084 is propagated.
44085
44086 142/2
44087 If Element_Type is unconstrained and definite, then the actual
44088 Element parameter of Process.all shall be unconstrained.
44089
44090 143/2
44091 The element at position Index is not an empty element after
44092 successful completion of this operation.
44093
44094 144/2
44095 procedure Update_Element
44096 (Container : in out Vector;
44097 Position : in Cursor;
44098 Process : not null access procedure (Element : in out Element_Type));
44099
44100 145/3
44101 If Position equals No_Element, then Constraint_Error is
44102 propagated; if Position does not designate an element in
44103 Container, then Program_Error is propagated. Otherwise,
44104 Update_Element calls Process.all with the element designated
44105 by Position as the argument. Tampering with the elements of
44106 Container is prohibited during the execution of the call on
44107 Process.all. Any exception raised by Process.all is
44108 propagated.
44109
44110 146/2
44111 If Element_Type is unconstrained and definite, then the actual
44112 Element parameter of Process.all shall be unconstrained.
44113
44114 147/2
44115 The element designated by Position is not an empty element
44116 after successful completion of this operation.
44117
44118 147.1/3
44119 type Constant_Reference_Type
44120 (Element : not null access constant Element_Type) is private
44121 with Implicit_Dereference => Element;
44122
44123 147.2/3
44124 type Reference_Type (Element : not null access Element_Type) is private
44125 with Implicit_Dereference => Element;
44126
44127 147.3/3
44128 The types Constant_Reference_Type and Reference_Type need
44129 finalization.
44130
44131 147.4/3
44132 The default initialization of an object of type
44133 Constant_Reference_Type or Reference_Type propagates
44134 Program_Error.
44135
44136 147.5/3
44137 function Constant_Reference (Container : aliased in Vector;
44138 Index : in Index_Type)
44139 return Constant_Reference_Type;
44140
44141 147.6/3
44142 This function (combined with the Constant_Indexing and
44143 Implicit_Dereference aspects) provides a convenient way to
44144 gain read access to an individual element of a vector given an
44145 index value.
44146
44147 147.7/3
44148 If Index is not in the range First_Index (Container) ..
44149 Last_Index (Container), then Constraint_Error is propagated.
44150 Otherwise, Constant_Reference returns an object whose
44151 discriminant is an access value that designates the element at
44152 position Index. Tampering with the elements of Container is
44153 prohibited while the object returned by Constant_Reference
44154 exists and has not been finalized.
44155
44156 147.8/3
44157 function Reference (Container : aliased in out Vector;
44158 Index : in Index_Type)
44159 return Reference_Type;
44160
44161 147.9/3
44162 This function (combined with the Variable_Indexing and
44163 Implicit_Dereference aspects) provides a convenient way to
44164 gain read and write access to an individual element of a
44165 vector given an index value.
44166
44167 147.10/3
44168 If Index is not in the range First_Index (Container) ..
44169 Last_Index (Container), then Constraint_Error is propagated.
44170 Otherwise, Reference returns an object whose discriminant is
44171 an access value that designates the element at position Index.
44172 Tampering with the elements of Container is prohibited while
44173 the object returned by Reference exists and has not been
44174 finalized.
44175
44176 147.11/3
44177 The element at position Index is not an empty element after
44178 successful completion of this operation.
44179
44180 147.12/3
44181 function Constant_Reference (Container : aliased in Vector;
44182 Position : in Cursor)
44183 return Constant_Reference_Type;
44184
44185 147.13/3
44186 This function (combined with the Constant_Indexing and
44187 Implicit_Dereference aspects) provides a convenient way to
44188 gain read access to an individual element of a vector given a
44189 cursor.
44190
44191 147.14/3
44192 If Position equals No_Element, then Constraint_Error is
44193 propagated; if Position does not designate an element in
44194 Container, then Program_Error is propagated. Otherwise,
44195 Constant_Reference returns an object whose discriminant is an
44196 access value that designates the element designated by
44197 Position. Tampering with the elements of Container is
44198 prohibited while the object returned by Constant_Reference
44199 exists and has not been finalized.
44200
44201 147.15/3
44202 function Reference (Container : aliased in out Vector;
44203 Position : in Cursor)
44204 return Reference_Type;
44205
44206 147.16/3
44207 This function (combined with the Variable_Indexing and
44208 Implicit_Dereference aspects) provides a convenient way to
44209 gain read and write access to an individual element of a
44210 vector given a cursor.
44211
44212 147.17/3
44213 If Position equals No_Element, then Constraint_Error is
44214 propagated; if Position does not designate an element in
44215 Container, then Program_Error is propagated. Otherwise,
44216 Reference returns an object whose discriminant is an access
44217 value that designates the element designated by Position.
44218 Tampering with the elements of Container is prohibited while
44219 the object returned by Reference exists and has not been
44220 finalized.
44221
44222 147.18/3
44223 The element designated by Position is not an empty element
44224 after successful completion of this operation.
44225
44226 147.19/3
44227 procedure Assign (Target : in out Vector; Source : in Vector);
44228
44229 147.20/3
44230 If Target denotes the same object as Source, the operation has
44231 no effect. If the length of Source is greater than the
44232 capacity of Target, Reserve_Capacity (Target, Length (Source))
44233 is called. The elements of Source are then copied to Target
44234 as for an assignment_statement assigning Source to Target
44235 (this includes setting the length of Target to be that of
44236 Source).
44237
44238 147.21/3
44239 function Copy (Source : Vector; Capacity : Count_Type := 0)
44240 return Vector;
44241
44242 147.22/3
44243 Returns a vector whose elements are initialized from the
44244 corresponding elements of Source. If Capacity is 0, then the
44245 vector capacity is the length of Source; if Capacity is equal
44246 to or greater than the length of Source, the vector capacity
44247 is at least the specified value. Otherwise, the operation
44248 propagates Capacity_Error.
44249
44250 148/2
44251 procedure Move (Target : in out Vector;
44252 Source : in out Vector);
44253
44254 149/3
44255 If Target denotes the same object as Source, then the
44256 operation has no effect. Otherwise, Move first calls
44257 Reserve_Capacity (Target, Length (Source)) and then Clear
44258 (Target); then, each element from Source is removed from
44259 Source and inserted into Target in the original order. The
44260 length of Source is 0 after a successful call to Move.
44261
44262 150/2
44263 procedure Insert (Container : in out Vector;
44264 Before : in Extended_Index;
44265 New_Item : in Vector);
44266
44267 151/3
44268 If Before is not in the range First_Index (Container) ..
44269 Last_Index (Container) + 1, then Constraint_Error is
44270 propagated. If Length(New_Item) is 0, then Insert does
44271 nothing. Otherwise, it computes the new length NL as the sum
44272 of the current length and Length (New_Item); if the value of
44273 Last appropriate for length NL would be greater than
44274 Index_Type'Last, then Constraint_Error is propagated.
44275
44276 152/2
44277 If the current vector capacity is less than NL,
44278 Reserve_Capacity (Container, NL) is called to increase the
44279 vector capacity. Then Insert slides the elements in the range
44280 Before .. Last_Index (Container) up by Length(New_Item)
44281 positions, and then copies the elements of New_Item to the
44282 positions starting at Before. Any exception raised during the
44283 copying is propagated.
44284
44285 153/2
44286 procedure Insert (Container : in out Vector;
44287 Before : in Cursor;
44288 New_Item : in Vector);
44289
44290 154/3
44291 If Before is not No_Element, and does not designate an element
44292 in Container, then Program_Error is propagated. Otherwise, if
44293 Length(New_Item) is 0, then Insert does nothing. If Before is
44294 No_Element, then the call is equivalent to Insert (Container,
44295 Last_Index (Container) + 1, New_Item); otherwise, the call is
44296 equivalent to Insert (Container, To_Index (Before), New_Item);
44297
44298 155/2
44299 procedure Insert (Container : in out Vector;
44300 Before : in Cursor;
44301 New_Item : in Vector;
44302 Position : out Cursor);
44303
44304 156/2
44305 If Before is not No_Element, and does not designate an element
44306 in Container, then Program_Error is propagated. If Before
44307 equals No_Element, then let T be Last_Index (Container) + 1;
44308 otherwise, let T be To_Index (Before). Insert (Container, T,
44309 New_Item) is called, and then Position is set to To_Cursor
44310 (Container, T).
44311
44312 157/2
44313 procedure Insert (Container : in out Vector;
44314 Before : in Extended_Index;
44315 New_Item : in Element_Type;
44316 Count : in Count_Type := 1);
44317
44318 158/2
44319 Equivalent to Insert (Container, Before, To_Vector (New_Item,
44320 Count));
44321
44322 159/2
44323 procedure Insert (Container : in out Vector;
44324 Before : in Cursor;
44325 New_Item : in Element_Type;
44326 Count : in Count_Type := 1);
44327
44328 160/2
44329 Equivalent to Insert (Container, Before, To_Vector (New_Item,
44330 Count));
44331
44332 161/2
44333 procedure Insert (Container : in out Vector;
44334 Before : in Cursor;
44335 New_Item : in Element_Type;
44336 Position : out Cursor;
44337 Count : in Count_Type := 1);
44338
44339 162/2
44340 Equivalent to Insert (Container, Before, To_Vector (New_Item,
44341 Count), Position);
44342
44343 163/2
44344 procedure Insert (Container : in out Vector;
44345 Before : in Extended_Index;
44346 Count : in Count_Type := 1);
44347
44348 164/3
44349 If Before is not in the range First_Index (Container) ..
44350 Last_Index (Container) + 1, then Constraint_Error is
44351 propagated. If Count is 0, then Insert does nothing.
44352 Otherwise, it computes the new length NL as the sum of the
44353 current length and Count; if the value of Last appropriate for
44354 length NL would be greater than Index_Type'Last, then
44355 Constraint_Error is propagated.
44356
44357 165/2
44358 If the current vector capacity is less than NL,
44359 Reserve_Capacity (Container, NL) is called to increase the
44360 vector capacity. Then Insert slides the elements in the range
44361 Before .. Last_Index (Container) up by Count positions, and
44362 then inserts elements that are initialized by default (see
44363 *note 3.3.1::) in the positions starting at Before.
44364
44365 166/2
44366 procedure Insert (Container : in out Vector;
44367 Before : in Cursor;
44368 Position : out Cursor;
44369 Count : in Count_Type := 1);
44370
44371 167/2
44372 If Before is not No_Element, and does not designate an element
44373 in Container, then Program_Error is propagated. If Before
44374 equals No_Element, then let T be Last_Index (Container) + 1;
44375 otherwise, let T be To_Index (Before). Insert (Container, T,
44376 Count) is called, and then Position is set to To_Cursor
44377 (Container, T).
44378
44379 168/2
44380 procedure Prepend (Container : in out Vector;
44381 New_Item : in Vector;
44382 Count : in Count_Type := 1);
44383
44384 169/2
44385 Equivalent to Insert (Container, First_Index (Container),
44386 New_Item).
44387
44388 170/2
44389 procedure Prepend (Container : in out Vector;
44390 New_Item : in Element_Type;
44391 Count : in Count_Type := 1);
44392
44393 171/2
44394 Equivalent to Insert (Container, First_Index (Container),
44395 New_Item, Count).
44396
44397 172/2
44398 procedure Append (Container : in out Vector;
44399 New_Item : in Vector);
44400
44401 173/2
44402 Equivalent to Insert (Container, Last_Index (Container) + 1,
44403 New_Item).
44404
44405 174/2
44406 procedure Append (Container : in out Vector;
44407 New_Item : in Element_Type;
44408 Count : in Count_Type := 1);
44409
44410 175/2
44411 Equivalent to Insert (Container, Last_Index (Container) + 1,
44412 New_Item, Count).
44413
44414 176/2
44415 procedure Insert_Space (Container : in out Vector;
44416 Before : in Extended_Index;
44417 Count : in Count_Type := 1);
44418
44419 177/3
44420 If Before is not in the range First_Index (Container) ..
44421 Last_Index (Container) + 1, then Constraint_Error is
44422 propagated. If Count is 0, then Insert_Space does nothing.
44423 Otherwise, it computes the new length NL as the sum of the
44424 current length and Count; if the value of Last appropriate for
44425 length NL would be greater than Index_Type'Last, then
44426 Constraint_Error is propagated.
44427
44428 178/2
44429 If the current vector capacity is less than NL,
44430 Reserve_Capacity (Container, NL) is called to increase the
44431 vector capacity. Then Insert_Space slides the elements in the
44432 range Before .. Last_Index (Container) up by Count positions,
44433 and then inserts empty elements in the positions starting at
44434 Before.
44435
44436 179/2
44437 procedure Insert_Space (Container : in out Vector;
44438 Before : in Cursor;
44439 Position : out Cursor;
44440 Count : in Count_Type := 1);
44441
44442 180/2
44443 If Before is not No_Element, and does not designate an element
44444 in Container, then Program_Error is propagated. If Before
44445 equals No_Element, then let T be Last_Index (Container) + 1;
44446 otherwise, let T be To_Index (Before). Insert_Space
44447 (Container, T, Count) is called, and then Position is set to
44448 To_Cursor (Container, T).
44449
44450 181/2
44451 procedure Delete (Container : in out Vector;
44452 Index : in Extended_Index;
44453 Count : in Count_Type := 1);
44454
44455 182/3
44456 If Index is not in the range First_Index (Container) ..
44457 Last_Index (Container) + 1, then Constraint_Error is
44458 propagated. If Count is 0, Delete has no effect. Otherwise,
44459 Delete slides the elements (if any) starting at position Index
44460 + Count down to Index. Any exception raised during element
44461 assignment is propagated.
44462
44463 183/2
44464 procedure Delete (Container : in out Vector;
44465 Position : in out Cursor;
44466 Count : in Count_Type := 1);
44467
44468 184/2
44469 If Position equals No_Element, then Constraint_Error is
44470 propagated. If Position does not designate an element in
44471 Container, then Program_Error is propagated. Otherwise,
44472 Delete (Container, To_Index (Position), Count) is called, and
44473 then Position is set to No_Element.
44474
44475 185/2
44476 procedure Delete_First (Container : in out Vector;
44477 Count : in Count_Type := 1);
44478
44479 186/2
44480 Equivalent to Delete (Container, First_Index (Container),
44481 Count).
44482
44483 187/2
44484 procedure Delete_Last (Container : in out Vector;
44485 Count : in Count_Type := 1);
44486
44487 188/3
44488 If Length (Container) <= Count, then Delete_Last is equivalent
44489 to Clear (Container). Otherwise, it is equivalent to Delete
44490 (Container, Index_Type'Val(Index_Type'Pos(Last_Index
44491 (Container)) - Count + 1), Count).
44492
44493 189/2
44494 procedure Reverse_Elements (Container : in out Vector);
44495
44496 190/2
44497 Reorders the elements of Container in reverse order.
44498
44499 191/2
44500 procedure Swap (Container : in out Vector;
44501 I, J : in Index_Type);
44502
44503 192/2
44504 If either I or J is not in the range First_Index (Container)
44505 .. Last_Index (Container), then Constraint_Error is
44506 propagated. Otherwise, Swap exchanges the values of the
44507 elements at positions I and J.
44508
44509 193/2
44510 procedure Swap (Container : in out Vector;
44511 I, J : in Cursor);
44512
44513 194/2
44514 If either I or J is No_Element, then Constraint_Error is
44515 propagated. If either I or J do not designate an element in
44516 Container, then Program_Error is propagated. Otherwise, Swap
44517 exchanges the values of the elements designated by I and J.
44518
44519 195/2
44520 function First_Index (Container : Vector) return Index_Type;
44521
44522 196/2
44523 Returns the value Index_Type'First.
44524
44525 197/2
44526 function First (Container : Vector) return Cursor;
44527
44528 198/2
44529 If Container is empty, First returns No_Element. Otherwise,
44530 it returns a cursor that designates the first element in
44531 Container.
44532
44533 199/2
44534 function First_Element (Container : Vector) return Element_Type;
44535
44536 200/2
44537 Equivalent to Element (Container, First_Index (Container)).
44538
44539 201/2
44540 function Last_Index (Container : Vector) return Extended_Index;
44541
44542 202/2
44543 If Container is empty, Last_Index returns No_Index.
44544 Otherwise, it returns the position of the last element in
44545 Container.
44546
44547 203/2
44548 function Last (Container : Vector) return Cursor;
44549
44550 204/2
44551 If Container is empty, Last returns No_Element. Otherwise, it
44552 returns a cursor that designates the last element in
44553 Container.
44554
44555 205/2
44556 function Last_Element (Container : Vector) return Element_Type;
44557
44558 206/2
44559 Equivalent to Element (Container, Last_Index (Container)).
44560
44561 207/2
44562 function Next (Position : Cursor) return Cursor;
44563
44564 208/2
44565 If Position equals No_Element or designates the last element
44566 of the container, then Next returns the value No_Element.
44567 Otherwise, it returns a cursor that designates the element
44568 with index To_Index (Position) + 1 in the same vector as
44569 Position.
44570
44571 209/2
44572 procedure Next (Position : in out Cursor);
44573
44574 210/2
44575 Equivalent to Position := Next (Position).
44576
44577 211/2
44578 function Previous (Position : Cursor) return Cursor;
44579
44580 212/2
44581 If Position equals No_Element or designates the first element
44582 of the container, then Previous returns the value No_Element.
44583 Otherwise, it returns a cursor that designates the element
44584 with index To_Index (Position) - 1 in the same vector as
44585 Position.
44586
44587 213/2
44588 procedure Previous (Position : in out Cursor);
44589
44590 214/2
44591 Equivalent to Position := Previous (Position).
44592
44593 215/2
44594 function Find_Index (Container : Vector;
44595 Item : Element_Type;
44596 Index : Index_Type := Index_Type'First)
44597 return Extended_Index;
44598
44599 216/2
44600 Searches the elements of Container for an element equal to
44601 Item (using the generic formal equality operator). The search
44602 starts at position Index and proceeds towards Last_Index
44603 (Container). If no equal element is found, then Find_Index
44604 returns No_Index. Otherwise, it returns the index of the
44605 first equal element encountered.
44606
44607 217/2
44608 function Find (Container : Vector;
44609 Item : Element_Type;
44610 Position : Cursor := No_Element)
44611 return Cursor;
44612
44613 218/3
44614 If Position is not No_Element, and does not designate an
44615 element in Container, then Program_Error is propagated.
44616 Otherwise, Find searches the elements of Container for an
44617 element equal to Item (using the generic formal equality
44618 operator). The search starts at the first element if Position
44619 equals No_Element, and at the element designated by Position
44620 otherwise. It proceeds towards the last element of Container.
44621 If no equal element is found, then Find returns No_Element.
44622 Otherwise, it returns a cursor designating the first equal
44623 element encountered.
44624
44625 219/2
44626 function Reverse_Find_Index (Container : Vector;
44627 Item : Element_Type;
44628 Index : Index_Type := Index_Type'Last)
44629 return Extended_Index;
44630
44631 220/2
44632 Searches the elements of Container for an element equal to
44633 Item (using the generic formal equality operator). The search
44634 starts at position Index or, if Index is greater than
44635 Last_Index (Container), at position Last_Index (Container).
44636 It proceeds towards First_Index (Container). If no equal
44637 element is found, then Reverse_Find_Index returns No_Index.
44638 Otherwise, it returns the index of the first equal element
44639 encountered.
44640
44641 221/2
44642 function Reverse_Find (Container : Vector;
44643 Item : Element_Type;
44644 Position : Cursor := No_Element)
44645 return Cursor;
44646
44647 222/3
44648 If Position is not No_Element, and does not designate an
44649 element in Container, then Program_Error is propagated.
44650 Otherwise, Reverse_Find searches the elements of Container for
44651 an element equal to Item (using the generic formal equality
44652 operator). The search starts at the last element if Position
44653 equals No_Element, and at the element designated by Position
44654 otherwise. It proceeds towards the first element of
44655 Container. If no equal element is found, then Reverse_Find
44656 returns No_Element. Otherwise, it returns a cursor
44657 designating the first equal element encountered.
44658
44659 223/2
44660 function Contains (Container : Vector;
44661 Item : Element_Type) return Boolean;
44662
44663 224/2
44664 Equivalent to Has_Element (Find (Container, Item)).
44665
44666 Paragraphs 225 and 226 were moved above.
44667
44668 227/2
44669 procedure Iterate
44670 (Container : in Vector;
44671 Process : not null access procedure (Position : in Cursor));
44672
44673 228/3
44674 Invokes Process.all with a cursor that designates each element
44675 in Container, in index order. Tampering with the cursors of
44676 Container is prohibited during the execution of a call on
44677 Process.all. Any exception raised by Process.all is
44678 propagated.
44679
44680 229/2
44681 procedure Reverse_Iterate
44682 (Container : in Vector;
44683 Process : not null access procedure (Position : in Cursor));
44684
44685 230/3
44686 Iterates over the elements in Container as per procedure
44687 Iterate, except that elements are traversed in reverse index
44688 order.
44689
44690 230.1/3
44691 function Iterate (Container : in Vector)
44692 return Vector_Iterator_Interfaces.Reversible_Iterator'Class;
44693
44694 230.2/3
44695 Iterate returns a reversible iterator object (see *note
44696 5.5.1::) that will generate a value for a loop parameter (see
44697 *note 5.5.2::) designating each node in Container, starting
44698 with the first node and moving the cursor as per the Next
44699 function when used as a forward iterator, and starting with
44700 the last node and moving the cursor as per the Previous
44701 function when used as a reverse iterator. Tampering with the
44702 cursors of Container is prohibited while the iterator object
44703 exists (in particular, in the sequence_of_statements of the
44704 loop_statement whose iterator_specification denotes this
44705 object). The iterator object needs finalization.
44706
44707 230.3/3
44708 function Iterate (Container : in Vector; Start : in Cursor)
44709 return Vector_Iterator_Interfaces.Reversible_Iterator'Class;
44710
44711 230.4/3
44712 If Start is not No_Element and does not designate an item in
44713 Container, then Program_Error is propagated. If Start is
44714 No_Element, then Constraint_Error is propagated. Otherwise,
44715 Iterate returns a reversible iterator object (see *note
44716 5.5.1::) that will generate a value for a loop parameter (see
44717 *note 5.5.2::) designating each node in Container, starting
44718 with the node designated by Start and moving the cursor as per
44719 the Next function when used as a forward iterator, or moving
44720 the cursor as per the Previous function when used as a reverse
44721 iterator. Tampering with the cursors of Container is
44722 prohibited while the iterator object exists (in particular, in
44723 the sequence_of_statements of the loop_statement whose
44724 iterator_specification denotes this object). The iterator
44725 object needs finalization.
44726
44727 231/3
44728 The actual function for the generic formal function "<" of
44729 Generic_Sorting is expected to return the same value each time it is
44730 called with a particular pair of element values. It should define a
44731 strict weak ordering relationship (see *note A.18::); it should not
44732 modify Container. If the actual for "<" behaves in some other manner,
44733 the behavior of the subprograms of Generic_Sorting are unspecified. The
44734 number of times the subprograms of Generic_Sorting call "<" is
44735 unspecified.
44736
44737 232/2
44738 function Is_Sorted (Container : Vector) return Boolean;
44739
44740 233/2
44741 Returns True if the elements are sorted smallest first as
44742 determined by the generic formal "<" operator; otherwise,
44743 Is_Sorted returns False. Any exception raised during
44744 evaluation of "<" is propagated.
44745
44746 234/2
44747 procedure Sort (Container : in out Vector);
44748
44749 235/2
44750 Reorders the elements of Container such that the elements are
44751 sorted smallest first as determined by the generic formal "<"
44752 operator provided. Any exception raised during evaluation of
44753 "<" is propagated.
44754
44755 236/2
44756 procedure Merge (Target : in out Vector;
44757 Source : in out Vector);
44758
44759 237/3
44760 If Source is empty, then Merge does nothing. If Source and
44761 Target are the same nonempty container object, then
44762 Program_Error is propagated. Otherwise, Merge removes
44763 elements from Source and inserts them into Target; afterwards,
44764 Target contains the union of the elements that were initially
44765 in Source and Target; Source is left empty. If Target and
44766 Source are initially sorted smallest first, then Target is
44767 ordered smallest first as determined by the generic formal "<"
44768 operator; otherwise, the order of elements in Target is
44769 unspecified. Any exception raised during evaluation of "<" is
44770 propagated.
44771
44772 _Bounded (Run-Time) Errors_
44773
44774 238/3
44775 Reading the value of an empty element by calling Element, Query_Element,
44776 Update_Element, Constant_Reference, Reference, Swap, Is_Sorted, Sort,
44777 Merge, "=", Find, or Reverse_Find is a bounded error. The
44778 implementation may treat the element as having any normal value (see
44779 *note 13.9.1::) of the element type, or raise Constraint_Error or
44780 Program_Error before modifying the vector.
44781
44782 239/2
44783 Calling Merge in an instance of Generic_Sorting with either Source or
44784 Target not ordered smallest first using the provided generic formal "<"
44785 operator is a bounded error. Either Program_Error is raised after
44786 Target is updated as described for Merge, or the operation works as
44787 defined.
44788
44789 239.1/3
44790 It is a bounded error for the actual function associated with a generic
44791 formal subprogram, when called as part of an operation of this package,
44792 to tamper with elements of any Vector parameter of the operation.
44793 Either Program_Error is raised, or the operation works as defined on the
44794 value of the Vector either prior to, or subsequent to, some or all of
44795 the modifications to the Vector.
44796
44797 239.2/3
44798 It is a bounded error to call any subprogram declared in the visible
44799 part of Containers.Vectors when the associated container has been
44800 finalized. If the operation takes Container as an in out parameter,
44801 then it raises Constraint_Error or Program_Error. Otherwise, the
44802 operation either proceeds as it would for an empty container, or it
44803 raises Constraint_Error or Program_Error.
44804
44805 240/2
44806 A Cursor value is ambiguous if any of the following have occurred since
44807 it was created:
44808
44809 241/2
44810 * Insert, Insert_Space, or Delete has been called on the vector that
44811 contains the element the cursor designates with an index value (or
44812 a cursor designating an element at such an index value) less than
44813 or equal to the index value of the element designated by the
44814 cursor; or
44815
44816 242/2
44817 * The vector that contains the element it designates has been passed
44818 to the Sort or Merge procedures of an instance of Generic_Sorting,
44819 or to the Reverse_Elements procedure.
44820
44821 243/2
44822 It is a bounded error to call any subprogram other than "=" or
44823 Has_Element declared in Containers.Vectors with an ambiguous (but not
44824 invalid, see below) cursor parameter. Possible results are:
44825
44826 244/2
44827 * The cursor may be treated as if it were No_Element;
44828
44829 245/2
44830 * The cursor may designate some element in the vector (but not
44831 necessarily the element that it originally designated);
44832
44833 246/2
44834 * Constraint_Error may be raised; or
44835
44836 247/2
44837 * Program_Error may be raised.
44838
44839 _Erroneous Execution_
44840
44841 248/2
44842 A Cursor value is invalid if any of the following have occurred since it
44843 was created:
44844
44845 249/2
44846 * The vector that contains the element it designates has been
44847 finalized;
44848
44849 249.1/3
44850 * The vector that contains the element it designates has been used as
44851 the Target of a call to Assign, or as the target of an
44852 assignment_statement;
44853
44854 250/2
44855 * The vector that contains the element it designates has been used as
44856 the Source or Target of a call to Move; or
44857
44858 251/3
44859 * The element it designates has been deleted or removed from the
44860 vector that previously contained the element.
44861
44862 252/2
44863 The result of "=" or Has_Element is unspecified if it is called with an
44864 invalid cursor parameter. Execution is erroneous if any other
44865 subprogram declared in Containers.Vectors is called with an invalid
44866 cursor parameter.
44867
44868 252.1/3
44869 Execution is erroneous if the vector associated with the result of a
44870 call to Reference or Constant_Reference is finalized before the result
44871 object returned by the call to Reference or Constant_Reference is
44872 finalized.
44873
44874 _Implementation Requirements_
44875
44876 253/2
44877 No storage associated with a vector object shall be lost upon assignment
44878 or scope exit.
44879
44880 254/3
44881 The execution of an assignment_statement for a vector shall have the
44882 effect of copying the elements from the source vector object to the
44883 target vector object and changing the length of the target object to
44884 that of the source object.
44885
44886 _Implementation Advice_
44887
44888 255/2
44889 Containers.Vectors should be implemented similarly to an array. In
44890 particular, if the length of a vector is N, then
44891
44892 256/2
44893 * the worst-case time complexity of Element should be O(log N);
44894
44895 257/2
44896 * the worst-case time complexity of Append with Count=1 when N is
44897 less than the capacity of the vector should be O(log N); and
44898
44899 258/2
44900 * the worst-case time complexity of Prepend with Count=1 and
44901 Delete_First with Count=1 should be O(N log N).
44902
44903 259/2
44904 The worst-case time complexity of a call on procedure Sort of an
44905 instance of Containers.Vectors.Generic_Sorting should be O(N**2), and
44906 the average time complexity should be better than O(N**2).
44907
44908 260/2
44909 Containers.Vectors.Generic_Sorting.Sort and
44910 Containers.Vectors.Generic_Sorting.Merge should minimize copying of
44911 elements.
44912
44913 261/2
44914 Move should not copy elements, and should minimize copying of internal
44915 data structures.
44916
44917 262/2
44918 If an exception is propagated from a vector operation, no storage should
44919 be lost, nor any elements removed from a vector unless specified by the
44920 operation.
44921
44922 NOTES
44923
44924 263/2
44925 48 All elements of a vector occupy locations in the internal
44926 array. If a sparse container is required, a Hashed_Map should be
44927 used rather than a vector.
44928
44929 264/2
44930 49 If Index_Type'Base'First = Index_Type'First an instance of
44931 Ada.Containers.Vectors will raise Constraint_Error. A value below
44932 Index_Type'First is required so that an empty vector has a
44933 meaningful value of Last_Index.
44934
44935 \1f
44936 File: arm2012.info, Node: A.18.3, Next: A.18.4, Prev: A.18.2, Up: A.18
44937
44938 A.18.3 The Generic Package Containers.Doubly_Linked_Lists
44939 ---------------------------------------------------------
44940
44941 1/2
44942 The language-defined generic package Containers.Doubly_Linked_Lists
44943 provides private types List and Cursor, and a set of operations for each
44944 type. A list container is optimized for insertion and deletion at any
44945 position.
44946
44947 2/2
44948 A doubly-linked list container object manages a linked list of internal
44949 nodes, each of which contains an element and pointers to the next
44950 (successor) and previous (predecessor) internal nodes. A cursor
44951 designates a particular node within a list (and by extension the element
44952 contained in that node). A cursor keeps designating the same node (and
44953 element) as long as the node is part of the container, even if the node
44954 is moved in the container.
44955
44956 3/2
44957 The length of a list is the number of elements it contains.
44958
44959 _Static Semantics_
44960
44961 4/2
44962 The generic library package Containers.Doubly_Linked_Lists has the
44963 following declaration:
44964
44965 5/3
44966 with Ada.Iterator_Interfaces;
44967 generic
44968 type Element_Type is private;
44969 with function "=" (Left, Right : Element_Type)
44970 return Boolean is <>;
44971 package Ada.Containers.Doubly_Linked_Lists is
44972 pragma Preelaborate(Doubly_Linked_Lists);
44973 pragma Remote_Types(Doubly_Linked_Lists);
44974
44975 6/3
44976 type List is tagged private
44977 with Constant_Indexing => Constant_Reference,
44978 Variable_Indexing => Reference,
44979 Default_Iterator => Iterate,
44980 Iterator_Element => Element_Type;
44981 pragma Preelaborable_Initialization(List);
44982
44983 7/2
44984 type Cursor is private;
44985 pragma Preelaborable_Initialization(Cursor);
44986
44987 8/2
44988 Empty_List : constant List;
44989
44990 9/2
44991 No_Element : constant Cursor;
44992
44993 9.1/3
44994 function Has_Element (Position : Cursor) return Boolean;
44995
44996 9.2/3
44997 package List_Iterator_Interfaces is new
44998 Ada.Iterator_Interfaces (Cursor, Has_Element);
44999
45000 10/2
45001 function "=" (Left, Right : List) return Boolean;
45002
45003 11/2
45004 function Length (Container : List) return Count_Type;
45005
45006 12/2
45007 function Is_Empty (Container : List) return Boolean;
45008
45009 13/2
45010 procedure Clear (Container : in out List);
45011
45012 14/2
45013 function Element (Position : Cursor)
45014 return Element_Type;
45015
45016 15/2
45017 procedure Replace_Element (Container : in out List;
45018 Position : in Cursor;
45019 New_Item : in Element_Type);
45020
45021 16/2
45022 procedure Query_Element
45023 (Position : in Cursor;
45024 Process : not null access procedure (Element : in Element_Type));
45025
45026 17/2
45027 procedure Update_Element
45028 (Container : in out List;
45029 Position : in Cursor;
45030 Process : not null access procedure
45031 (Element : in out Element_Type));
45032
45033 17.1/3
45034 type Constant_Reference_Type
45035 (Element : not null access constant Element_Type) is private
45036 with Implicit_Dereference => Element;
45037
45038 17.2/3
45039 type Reference_Type (Element : not null access Element_Type) is private
45040 with Implicit_Dereference => Element;
45041
45042 17.3/3
45043 function Constant_Reference (Container : aliased in List;
45044 Position : in Cursor)
45045 return Constant_Reference_Type;
45046
45047 17.4/3
45048 function Reference (Container : aliased in out List;
45049 Position : in Cursor)
45050 return Reference_Type;
45051
45052 17.5/3
45053 procedure Assign (Target : in out List; Source : in List);
45054
45055 17.6/3
45056 function Copy (Source : List) return List;
45057
45058 18/2
45059 procedure Move (Target : in out List;
45060 Source : in out List);
45061
45062 19/2
45063 procedure Insert (Container : in out List;
45064 Before : in Cursor;
45065 New_Item : in Element_Type;
45066 Count : in Count_Type := 1);
45067
45068 20/2
45069 procedure Insert (Container : in out List;
45070 Before : in Cursor;
45071 New_Item : in Element_Type;
45072 Position : out Cursor;
45073 Count : in Count_Type := 1);
45074
45075 21/2
45076 procedure Insert (Container : in out List;
45077 Before : in Cursor;
45078 Position : out Cursor;
45079 Count : in Count_Type := 1);
45080
45081 22/2
45082 procedure Prepend (Container : in out List;
45083 New_Item : in Element_Type;
45084 Count : in Count_Type := 1);
45085
45086 23/2
45087 procedure Append (Container : in out List;
45088 New_Item : in Element_Type;
45089 Count : in Count_Type := 1);
45090
45091 24/2
45092 procedure Delete (Container : in out List;
45093 Position : in out Cursor;
45094 Count : in Count_Type := 1);
45095
45096 25/2
45097 procedure Delete_First (Container : in out List;
45098 Count : in Count_Type := 1);
45099
45100 26/2
45101 procedure Delete_Last (Container : in out List;
45102 Count : in Count_Type := 1);
45103
45104 27/2
45105 procedure Reverse_Elements (Container : in out List);
45106
45107 28/2
45108 procedure Swap (Container : in out List;
45109 I, J : in Cursor);
45110
45111 29/2
45112 procedure Swap_Links (Container : in out List;
45113 I, J : in Cursor);
45114
45115 30/2
45116 procedure Splice (Target : in out List;
45117 Before : in Cursor;
45118 Source : in out List);
45119
45120 31/2
45121 procedure Splice (Target : in out List;
45122 Before : in Cursor;
45123 Source : in out List;
45124 Position : in out Cursor);
45125
45126 32/2
45127 procedure Splice (Container: in out List;
45128 Before : in Cursor;
45129 Position : in Cursor);
45130
45131 33/2
45132 function First (Container : List) return Cursor;
45133
45134 34/2
45135 function First_Element (Container : List)
45136 return Element_Type;
45137
45138 35/2
45139 function Last (Container : List) return Cursor;
45140
45141 36/2
45142 function Last_Element (Container : List)
45143 return Element_Type;
45144
45145 37/2
45146 function Next (Position : Cursor) return Cursor;
45147
45148 38/2
45149 function Previous (Position : Cursor) return Cursor;
45150
45151 39/2
45152 procedure Next (Position : in out Cursor);
45153
45154 40/2
45155 procedure Previous (Position : in out Cursor);
45156
45157 41/2
45158 function Find (Container : List;
45159 Item : Element_Type;
45160 Position : Cursor := No_Element)
45161 return Cursor;
45162
45163 42/2
45164 function Reverse_Find (Container : List;
45165 Item : Element_Type;
45166 Position : Cursor := No_Element)
45167 return Cursor;
45168
45169 43/2
45170 function Contains (Container : List;
45171 Item : Element_Type) return Boolean;
45172
45173 44/3
45174 This paragraph was deleted.
45175
45176 45/2
45177 procedure Iterate
45178 (Container : in List;
45179 Process : not null access procedure (Position : in Cursor));
45180
45181 46/2
45182 procedure Reverse_Iterate
45183 (Container : in List;
45184 Process : not null access procedure (Position : in Cursor));
45185
45186 46.1/3
45187 function Iterate (Container : in List)
45188 return List_Iterator_Interfaces.Reversible_Iterator'Class;
45189
45190 46.2/3
45191 function Iterate (Container : in List; Start : in Cursor)
45192 return List_Iterator_Interfaces.Reversible_Iterator'Class;
45193
45194 47/2
45195 generic
45196 with function "<" (Left, Right : Element_Type)
45197 return Boolean is <>;
45198 package Generic_Sorting is
45199
45200 48/2
45201 function Is_Sorted (Container : List) return Boolean;
45202
45203 49/2
45204 procedure Sort (Container : in out List);
45205
45206 50/2
45207 procedure Merge (Target : in out List;
45208 Source : in out List);
45209
45210 51/2
45211 end Generic_Sorting;
45212
45213 52/2
45214 private
45215
45216 53/2
45217 ... -- not specified by the language
45218
45219 54/2
45220 end Ada.Containers.Doubly_Linked_Lists;
45221
45222 55/2
45223 The actual function for the generic formal function "=" on Element_Type
45224 values is expected to define a reflexive and symmetric relationship and
45225 return the same result value each time it is called with a particular
45226 pair of values. If it behaves in some other manner, the functions Find,
45227 Reverse_Find, and "=" on list values return an unspecified value. The
45228 exact arguments and number of calls of this generic formal function by
45229 the functions Find, Reverse_Find, and "=" on list values are
45230 unspecified.
45231
45232 56/2
45233 The type List is used to represent lists. The type List needs
45234 finalization (see *note 7.6::).
45235
45236 57/2
45237 Empty_List represents the empty List object. It has a length of 0. If
45238 an object of type List is not otherwise initialized, it is initialized
45239 to the same value as Empty_List.
45240
45241 58/2
45242 No_Element represents a cursor that designates no element. If an object
45243 of type Cursor is not otherwise initialized, it is initialized to the
45244 same value as No_Element.
45245
45246 59/2
45247 The predefined "=" operator for type Cursor returns True if both cursors
45248 are No_Element, or designate the same element in the same container.
45249
45250 60/2
45251 Execution of the default implementation of the Input, Output, Read, or
45252 Write attribute of type Cursor raises Program_Error.
45253
45254 60.1/3
45255 List'Write for a List object L writes Length(L) elements of the list to
45256 the stream. It also may write additional information about the list.
45257
45258 60.2/3
45259 List'Read reads the representation of a list from the stream, and
45260 assigns to Item a list with the same length and elements as was written
45261 by List'Write.
45262
45263 61/2
45264 Some operations of this generic package have access-to-subprogram
45265 parameters. To ensure such operations are well-defined, they guard
45266 against certain actions by the designated subprogram. In particular,
45267 some operations check for "tampering with cursors" of a container
45268 because they depend on the set of elements of the container remaining
45269 constant, and others check for "tampering with elements" of a container
45270 because they depend on elements of the container not being replaced.
45271
45272 62/2
45273 A subprogram is said to tamper with cursors of a list object L if:
45274
45275 63/2
45276 * it inserts or deletes elements of L, that is, it calls the Insert,
45277 Clear, Delete, or Delete_Last procedures with L as a parameter; or
45278
45279 64/2
45280 * it reorders the elements of L, that is, it calls the Splice,
45281 Swap_Links, or Reverse_Elements procedures or the Sort or Merge
45282 procedures of an instance of Generic_Sorting with L as a parameter;
45283 or
45284
45285 65/2
45286 * it finalizes L; or
45287
45288 65.1/3
45289 * it calls the Assign procedure with L as the Target parameter; or
45290
45291 66/2
45292 * it calls the Move procedure with L as a parameter.
45293
45294 67/2
45295 A subprogram is said to tamper with elements of a list object L if:
45296
45297 68/2
45298 * it tampers with cursors of L; or
45299
45300 69/2
45301 * it replaces one or more elements of L, that is, it calls the
45302 Replace_Element or Swap procedures with L as a parameter.
45303
45304 69.1/3
45305 When tampering with cursors is prohibited for a particular list object
45306 L, Program_Error is propagated by a call of any language-defined
45307 subprogram that is defined to tamper with the cursors of L, leaving L
45308 unmodified. Similarly, when tampering with elements is prohibited for a
45309 particular list object L, Program_Error is propagated by a call of any
45310 language-defined subprogram that is defined to tamper with the elements
45311 of L (or tamper with the cursors of L), leaving L unmodified.
45312
45313 69.2/3
45314 function Has_Element (Position : Cursor) return Boolean;
45315
45316 69.3/3
45317 Returns True if Position designates an element, and returns
45318 False otherwise.
45319
45320 70/2
45321 function "=" (Left, Right : List) return Boolean;
45322
45323 71/3
45324 If Left and Right denote the same list object, then the
45325 function returns True. If Left and Right have different
45326 lengths, then the function returns False. Otherwise, it
45327 compares each element in Left to the corresponding element in
45328 Right using the generic formal equality operator. If any such
45329 comparison returns False, the function returns False;
45330 otherwise, it returns True. Any exception raised during
45331 evaluation of element equality is propagated.
45332
45333 72/2
45334 function Length (Container : List) return Count_Type;
45335
45336 73/2
45337 Returns the number of elements in Container.
45338
45339 74/2
45340 function Is_Empty (Container : List) return Boolean;
45341
45342 75/2
45343 Equivalent to Length (Container) = 0.
45344
45345 76/2
45346 procedure Clear (Container : in out List);
45347
45348 77/2
45349 Removes all the elements from Container.
45350
45351 78/2
45352 function Element (Position : Cursor) return Element_Type;
45353
45354 79/2
45355 If Position equals No_Element, then Constraint_Error is
45356 propagated. Otherwise, Element returns the element designated
45357 by Position.
45358
45359 80/2
45360 procedure Replace_Element (Container : in out List;
45361 Position : in Cursor;
45362 New_Item : in Element_Type);
45363
45364 81/3
45365 If Position equals No_Element, then Constraint_Error is
45366 propagated; if Position does not designate an element in
45367 Container, then Program_Error is propagated. Otherwise,
45368 Replace_Element assigns the value New_Item to the element
45369 designated by Position.
45370
45371 82/2
45372 procedure Query_Element
45373 (Position : in Cursor;
45374 Process : not null access procedure (Element : in Element_Type));
45375
45376 83/3
45377 If Position equals No_Element, then Constraint_Error is
45378 propagated. Otherwise, Query_Element calls Process.all with
45379 the element designated by Position as the argument. Tampering
45380 with the elements of the list that contains the element
45381 designated by Position is prohibited during the execution of
45382 the call on Process.all. Any exception raised by Process.all
45383 is propagated.
45384
45385 84/2
45386 procedure Update_Element
45387 (Container : in out List;
45388 Position : in Cursor;
45389 Process : not null access procedure (Element : in out Element_Type));
45390
45391 85/3
45392 If Position equals No_Element, then Constraint_Error is
45393 propagated; if Position does not designate an element in
45394 Container, then Program_Error is propagated. Otherwise,
45395 Update_Element calls Process.all with the element designated
45396 by Position as the argument. Tampering with the elements of
45397 Container is prohibited during the execution of the call on
45398 Process.all. Any exception raised by Process.all is
45399 propagated.
45400
45401 86/2
45402 If Element_Type is unconstrained and definite, then the actual
45403 Element parameter of Process.all shall be unconstrained.
45404
45405 86.1/3
45406 type Constant_Reference_Type
45407 (Element : not null access constant Element_Type) is private
45408 with Implicit_Dereference => Element;
45409
45410 86.2/3
45411 type Reference_Type (Element : not null access Element_Type) is private
45412 with Implicit_Dereference => Element;
45413
45414 86.3/3
45415 The types Constant_Reference_Type and Reference_Type need
45416 finalization.
45417
45418 86.4/3
45419 The default initialization of an object of type
45420 Constant_Reference_Type or Reference_Type propagates
45421 Program_Error.
45422
45423 86.5/3
45424 function Constant_Reference (Container : aliased in List;
45425 Position : in Cursor)
45426 return Constant_Reference_Type;
45427
45428 86.6/3
45429 This function (combined with the Constant_Indexing and
45430 Implicit_Dereference aspects) provides a convenient way to
45431 gain read access to an individual element of a list given a
45432 cursor.
45433
45434 86.7/3
45435 If Position equals No_Element, then Constraint_Error is
45436 propagated; if Position does not designate an element in
45437 Container, then Program_Error is propagated. Otherwise,
45438 Constant_Reference returns an object whose discriminant is an
45439 access value that designates the element designated by
45440 Position. Tampering with the elements of Container is
45441 prohibited while the object returned by Constant_Reference
45442 exists and has not been finalized.
45443
45444 86.8/3
45445 function Reference (Container : aliased in out List;
45446 Position : in Cursor)
45447 return Reference_Type;
45448
45449 86.9/3
45450 This function (combined with the Variable_Indexing and
45451 Implicit_Dereference aspects) provides a convenient way to
45452 gain read and write access to an individual element of a list
45453 given a cursor.
45454
45455 86.10/3
45456 If Position equals No_Element, then Constraint_Error is
45457 propagated; if Position does not designate an element in
45458 Container, then Program_Error is propagated. Otherwise,
45459 Reference returns an object whose discriminant is an access
45460 value that designates the element designated by Position.
45461 Tampering with the elements of Container is prohibited while
45462 the object returned by Reference exists and has not been
45463 finalized.
45464
45465 86.11/3
45466 procedure Assign (Target : in out List; Source : in List);
45467
45468 86.12/3
45469 If Target denotes the same object as Source, the operation has
45470 no effect. Otherwise, the elements of Source are copied to
45471 Target as for an assignment_statement assigning Source to
45472 Target.
45473
45474 86.13/3
45475 function Copy (Source : List) return List;
45476
45477 86.14/3
45478 Returns a list whose elements match the elements of Source.
45479
45480 87/2
45481 procedure Move (Target : in out List;
45482 Source : in out List);
45483
45484 88/3
45485 If Target denotes the same object as Source, then the
45486 operation has no effect. Otherwise, the operation is
45487 equivalent to Assign (Target, Source) followed by Clear
45488 (Source).
45489
45490 89/2
45491 procedure Insert (Container : in out List;
45492 Before : in Cursor;
45493 New_Item : in Element_Type;
45494 Count : in Count_Type := 1);
45495
45496 90/2
45497 If Before is not No_Element, and does not designate an element
45498 in Container, then Program_Error is propagated. Otherwise,
45499 Insert inserts Count copies of New_Item prior to the element
45500 designated by Before. If Before equals No_Element, the new
45501 elements are inserted after the last node (if any). Any
45502 exception raised during allocation of internal storage is
45503 propagated, and Container is not modified.
45504
45505 91/2
45506 procedure Insert (Container : in out List;
45507 Before : in Cursor;
45508 New_Item : in Element_Type;
45509 Position : out Cursor;
45510 Count : in Count_Type := 1);
45511
45512 92/3
45513 If Before is not No_Element, and does not designate an element
45514 in Container, then Program_Error is propagated. Otherwise,
45515 Insert allocates Count copies of New_Item, and inserts them
45516 prior to the element designated by Before. If Before equals
45517 No_Element, the new elements are inserted after the last
45518 element (if any). Position designates the first
45519 newly-inserted element, or if Count equals 0, then Position is
45520 assigned the value of Before. Any exception raised during
45521 allocation of internal storage is propagated, and Container is
45522 not modified.
45523
45524 93/2
45525 procedure Insert (Container : in out List;
45526 Before : in Cursor;
45527 Position : out Cursor;
45528 Count : in Count_Type := 1);
45529
45530 94/3
45531 If Before is not No_Element, and does not designate an element
45532 in Container, then Program_Error is propagated. Otherwise,
45533 Insert inserts Count new elements prior to the element
45534 designated by Before. If Before equals No_Element, the new
45535 elements are inserted after the last node (if any). The new
45536 elements are initialized by default (see *note 3.3.1::).
45537 Position designates the first newly-inserted element, or if
45538 Count equals 0, then Position is assigned the value of Before.
45539 Any exception raised during allocation of internal storage is
45540 propagated, and Container is not modified.
45541
45542 95/2
45543 procedure Prepend (Container : in out List;
45544 New_Item : in Element_Type;
45545 Count : in Count_Type := 1);
45546
45547 96/2
45548 Equivalent to Insert (Container, First (Container), New_Item,
45549 Count).
45550
45551 97/2
45552 procedure Append (Container : in out List;
45553 New_Item : in Element_Type;
45554 Count : in Count_Type := 1);
45555
45556 98/2
45557 Equivalent to Insert (Container, No_Element, New_Item, Count).
45558
45559 99/2
45560 procedure Delete (Container : in out List;
45561 Position : in out Cursor;
45562 Count : in Count_Type := 1);
45563
45564 100/3
45565 If Position equals No_Element, then Constraint_Error is
45566 propagated. If Position does not designate an element in
45567 Container, then Program_Error is propagated. Otherwise,
45568 Delete removes (from Container) Count elements starting at the
45569 element designated by Position (or all of the elements
45570 starting at Position if there are fewer than Count elements
45571 starting at Position). Finally, Position is set to
45572 No_Element.
45573
45574 101/2
45575 procedure Delete_First (Container : in out List;
45576 Count : in Count_Type := 1);
45577
45578 102/3
45579 If Length (Container) <= Count, then Delete_First is
45580 equivalent to Clear (Container). Otherwise, it removes the
45581 first Count nodes from Container.
45582
45583 103/2
45584 procedure Delete_Last (Container : in out List;
45585 Count : in Count_Type := 1);
45586
45587 104/3
45588 If Length (Container) <= Count, then Delete_Last is equivalent
45589 to Clear (Container). Otherwise, it removes the last Count
45590 nodes from Container.
45591
45592 105/2
45593 procedure Reverse_Elements (Container : in out List);
45594
45595 106/2
45596 Reorders the elements of Container in reverse order.
45597
45598 107/2
45599 procedure Swap (Container : in out List;
45600 I, J : in Cursor);
45601
45602 108/2
45603 If either I or J is No_Element, then Constraint_Error is
45604 propagated. If either I or J do not designate an element in
45605 Container, then Program_Error is propagated. Otherwise, Swap
45606 exchanges the values of the elements designated by I and J.
45607
45608 109/2
45609 procedure Swap_Links (Container : in out List;
45610 I, J : in Cursor);
45611
45612 110/2
45613 If either I or J is No_Element, then Constraint_Error is
45614 propagated. If either I or J do not designate an element in
45615 Container, then Program_Error is propagated. Otherwise,
45616 Swap_Links exchanges the nodes designated by I and J.
45617
45618 111/2
45619 procedure Splice (Target : in out List;
45620 Before : in Cursor;
45621 Source : in out List);
45622
45623 112/2
45624 If Before is not No_Element, and does not designate an element
45625 in Target, then Program_Error is propagated. Otherwise, if
45626 Source denotes the same object as Target, the operation has no
45627 effect. Otherwise, Splice reorders elements such that they
45628 are removed from Source and moved to Target, immediately prior
45629 to Before. If Before equals No_Element, the nodes of Source
45630 are spliced after the last node of Target. The length of
45631 Target is incremented by the number of nodes in Source, and
45632 the length of Source is set to 0.
45633
45634 113/2
45635 procedure Splice (Target : in out List;
45636 Before : in Cursor;
45637 Source : in out List;
45638 Position : in out Cursor);
45639
45640 114/3
45641 If Position is No_Element, then Constraint_Error is
45642 propagated. If Before does not equal No_Element, and does not
45643 designate an element in Target, then Program_Error is
45644 propagated. If Position does not equal No_Element, and does
45645 not designate a node in Source, then Program_Error is
45646 propagated. If Source denotes the same object as Target, then
45647 there is no effect if Position equals Before, else the element
45648 designated by Position is moved immediately prior to Before,
45649 or, if Before equals No_Element, after the last element. In
45650 both cases, Position and the length of Target are unchanged.
45651 Otherwise, the element designated by Position is removed from
45652 Source and moved to Target, immediately prior to Before, or,
45653 if Before equals No_Element, after the last element of Target.
45654 The length of Target is incremented, the length of Source is
45655 decremented, and Position is updated to represent an element
45656 in Target.
45657
45658 115/2
45659 procedure Splice (Container: in out List;
45660 Before : in Cursor;
45661 Position : in Cursor);
45662
45663 116/3
45664 If Position is No_Element, then Constraint_Error is
45665 propagated. If Before does not equal No_Element, and does not
45666 designate an element in Container, then Program_Error is
45667 propagated. If Position does not equal No_Element, and does
45668 not designate a node in Container, then Program_Error is
45669 propagated. If Position equals Before there is no effect.
45670 Otherwise, the element designated by Position is moved
45671 immediately prior to Before, or, if Before equals No_Element,
45672 after the last element. The length of Container is unchanged.
45673
45674 117/2
45675 function First (Container : List) return Cursor;
45676
45677 118/3
45678 If Container is empty, First returns the value No_Element.
45679 Otherwise, it returns a cursor that designates the first node
45680 in Container.
45681
45682 119/2
45683 function First_Element (Container : List) return Element_Type;
45684
45685 120/2
45686 Equivalent to Element (First (Container)).
45687
45688 121/2
45689 function Last (Container : List) return Cursor;
45690
45691 122/3
45692 If Container is empty, Last returns the value No_Element.
45693 Otherwise, it returns a cursor that designates the last node
45694 in Container.
45695
45696 123/2
45697 function Last_Element (Container : List) return Element_Type;
45698
45699 124/2
45700 Equivalent to Element (Last (Container)).
45701
45702 125/2
45703 function Next (Position : Cursor) return Cursor;
45704
45705 126/2
45706 If Position equals No_Element or designates the last element
45707 of the container, then Next returns the value No_Element.
45708 Otherwise, it returns a cursor that designates the successor
45709 of the element designated by Position.
45710
45711 127/2
45712 function Previous (Position : Cursor) return Cursor;
45713
45714 128/2
45715 If Position equals No_Element or designates the first element
45716 of the container, then Previous returns the value No_Element.
45717 Otherwise, it returns a cursor that designates the predecessor
45718 of the element designated by Position.
45719
45720 129/2
45721 procedure Next (Position : in out Cursor);
45722
45723 130/2
45724 Equivalent to Position := Next (Position).
45725
45726 131/2
45727 procedure Previous (Position : in out Cursor);
45728
45729 132/2
45730 Equivalent to Position := Previous (Position).
45731
45732 133/2
45733 function Find (Container : List;
45734 Item : Element_Type;
45735 Position : Cursor := No_Element)
45736 return Cursor;
45737
45738 134/2
45739 If Position is not No_Element, and does not designate an
45740 element in Container, then Program_Error is propagated. Find
45741 searches the elements of Container for an element equal to
45742 Item (using the generic formal equality operator). The search
45743 starts at the element designated by Position, or at the first
45744 element if Position equals No_Element. It proceeds towards
45745 Last (Container). If no equal element is found, then Find
45746 returns No_Element. Otherwise, it returns a cursor
45747 designating the first equal element encountered.
45748
45749 135/2
45750 function Reverse_Find (Container : List;
45751 Item : Element_Type;
45752 Position : Cursor := No_Element)
45753 return Cursor;
45754
45755 136/2
45756 If Position is not No_Element, and does not designate an
45757 element in Container, then Program_Error is propagated. Find
45758 searches the elements of Container for an element equal to
45759 Item (using the generic formal equality operator). The search
45760 starts at the element designated by Position, or at the last
45761 element if Position equals No_Element. It proceeds towards
45762 First (Container). If no equal element is found, then
45763 Reverse_Find returns No_Element. Otherwise, it returns a
45764 cursor designating the first equal element encountered.
45765
45766 137/2
45767 function Contains (Container : List;
45768 Item : Element_Type) return Boolean;
45769
45770 138/2
45771 Equivalent to Find (Container, Item) /= No_Element.
45772
45773 Paragraphs 139 and 140 were moved above.
45774
45775 141/2
45776 procedure Iterate
45777 (Container : in List;
45778 Process : not null access procedure (Position : in Cursor));
45779
45780 142/3
45781 Iterate calls Process.all with a cursor that designates each
45782 node in Container, starting with the first node and moving the
45783 cursor as per the Next function. Tampering with the cursors
45784 of Container is prohibited during the execution of a call on
45785 Process.all. Any exception raised by Process.all is
45786 propagated.
45787
45788 143/2
45789 procedure Reverse_Iterate
45790 (Container : in List;
45791 Process : not null access procedure (Position : in Cursor));
45792
45793 144/3
45794 Iterates over the nodes in Container as per procedure Iterate,
45795 except that elements are traversed in reverse order, starting
45796 with the last node and moving the cursor as per the Previous
45797 function.
45798
45799 144.1/3
45800 function Iterate (Container : in List)
45801 return List_Iterator_Interfaces.Reversible_Iterator'Class;
45802
45803 144.2/3
45804 Iterate returns a reversible iterator object (see *note
45805 5.5.1::) that will generate a value for a loop parameter (see
45806 *note 5.5.2::) designating each node in Container, starting
45807 with the first node and moving the cursor as per the Next
45808 function when used as a forward iterator, and starting with
45809 the last node and moving the cursor as per the Previous
45810 function when used as a reverse iterator. Tampering with the
45811 cursors of Container is prohibited while the iterator object
45812 exists (in particular, in the sequence_of_statements of the
45813 loop_statement whose iterator_specification denotes this
45814 object). The iterator object needs finalization.
45815
45816 144.3/3
45817 function Iterate (Container : in List; Start : in Cursor)
45818 return List_Iterator_Interfaces.Reversible_Iterator'Class;
45819
45820 144.4/3
45821 If Start is not No_Element and does not designate an item in
45822 Container, then Program_Error is propagated. If Start is
45823 No_Element, then Constraint_Error is propagated. Otherwise,
45824 Iterate returns a reversible iterator object (see *note
45825 5.5.1::) that will generate a value for a loop parameter (see
45826 *note 5.5.2::) designating each node in Container, starting
45827 with the node designated by Start and moving the cursor as per
45828 the Next function when used as a forward iterator, or moving
45829 the cursor as per the Previous function when used as a reverse
45830 iterator. Tampering with the cursors of Container is
45831 prohibited while the iterator object exists (in particular, in
45832 the sequence_of_statements of the loop_statement whose
45833 iterator_specification denotes this object). The iterator
45834 object needs finalization.
45835
45836 145/3
45837 The actual function for the generic formal function "<" of
45838 Generic_Sorting is expected to return the same value each time it is
45839 called with a particular pair of element values. It should define a
45840 strict weak ordering relationship (see *note A.18::); it should not
45841 modify Container. If the actual for "<" behaves in some other manner,
45842 the behavior of the subprograms of Generic_Sorting are unspecified. The
45843 number of times the subprograms of Generic_Sorting call "<" is
45844 unspecified.
45845
45846 146/2
45847 function Is_Sorted (Container : List) return Boolean;
45848
45849 147/2
45850 Returns True if the elements are sorted smallest first as
45851 determined by the generic formal "<" operator; otherwise,
45852 Is_Sorted returns False. Any exception raised during
45853 evaluation of "<" is propagated.
45854
45855 148/2
45856 procedure Sort (Container : in out List);
45857
45858 149/2
45859 Reorders the nodes of Container such that the elements are
45860 sorted smallest first as determined by the generic formal "<"
45861 operator provided. The sort is stable. Any exception raised
45862 during evaluation of "<" is propagated.
45863
45864 150/2
45865 procedure Merge (Target : in out List;
45866 Source : in out List);
45867
45868 151/3
45869 If Source is empty, then Merge does nothing. If Source and
45870 Target are the same nonempty container object, then
45871 Program_Error is propagated. Otherwise, Merge removes
45872 elements from Source and inserts them into Target; afterwards,
45873 Target contains the union of the elements that were initially
45874 in Source and Target; Source is left empty. If Target and
45875 Source are initially sorted smallest first, then Target is
45876 ordered smallest first as determined by the generic formal "<"
45877 operator; otherwise, the order of elements in Target is
45878 unspecified. Any exception raised during evaluation of "<" is
45879 propagated.
45880
45881 _Bounded (Run-Time) Errors_
45882
45883 152/2
45884 Calling Merge in an instance of Generic_Sorting with either Source or
45885 Target not ordered smallest first using the provided generic formal "<"
45886 operator is a bounded error. Either Program_Error is raised after
45887 Target is updated as described for Merge, or the operation works as
45888 defined.
45889
45890 152.1/3
45891 It is a bounded error for the actual function associated with a generic
45892 formal subprogram, when called as part of an operation of this package,
45893 to tamper with elements of any List parameter of the operation. Either
45894 Program_Error is raised, or the operation works as defined on the value
45895 of the List either prior to, or subsequent to, some or all of the
45896 modifications to the List.
45897
45898 152.2/3
45899 It is a bounded error to call any subprogram declared in the visible
45900 part of Containers.Doubly_Linked_Lists when the associated container has
45901 been finalized. If the operation takes Container as an in out
45902 parameter, then it raises Constraint_Error or Program_Error. Otherwise,
45903 the operation either proceeds as it would for an empty container, or it
45904 raises Constraint_Error or Program_Error.
45905
45906 _Erroneous Execution_
45907
45908 153/2
45909 A Cursor value is invalid if any of the following have occurred since it
45910 was created:
45911
45912 154/2
45913 * The list that contains the element it designates has been
45914 finalized;
45915
45916 154.1/3
45917 * The list that contains the element it designates has been used as
45918 the Target of a call to Assign, or as the target of an
45919 assignment_statement;
45920
45921 155/2
45922 * The list that contains the element it designates has been used as
45923 the Source or Target of a call to Move; or
45924
45925 156/3
45926 * The element it designates has been removed from the list that
45927 previously contained the element.
45928
45929 157/2
45930 The result of "=" or Has_Element is unspecified if it is called with an
45931 invalid cursor parameter. Execution is erroneous if any other
45932 subprogram declared in Containers.Doubly_Linked_Lists is called with an
45933 invalid cursor parameter.
45934
45935 157.1/3
45936 Execution is erroneous if the list associated with the result of a call
45937 to Reference or Constant_Reference is finalized before the result object
45938 returned by the call to Reference or Constant_Reference is finalized.
45939
45940 _Implementation Requirements_
45941
45942 158/2
45943 No storage associated with a doubly-linked List object shall be lost
45944 upon assignment or scope exit.
45945
45946 159/3
45947 The execution of an assignment_statement for a list shall have the
45948 effect of copying the elements from the source list object to the target
45949 list object and changing the length of the target object to that of the
45950 source object.
45951
45952 _Implementation Advice_
45953
45954 160/2
45955 Containers.Doubly_Linked_Lists should be implemented similarly to a
45956 linked list. In particular, if N is the length of a list, then the
45957 worst-case time complexity of Element, Insert with Count=1, and Delete
45958 with Count=1 should be O(log N).
45959
45960 161/2
45961 The worst-case time complexity of a call on procedure Sort of an
45962 instance of Containers.Doubly_Linked_Lists.Generic_Sorting should be
45963 O(N**2), and the average time complexity should be better than O(N**2).
45964
45965 162/2
45966 Move should not copy elements, and should minimize copying of internal
45967 data structures.
45968
45969 163/2
45970 If an exception is propagated from a list operation, no storage should
45971 be lost, nor any elements removed from a list unless specified by the
45972 operation.
45973
45974 NOTES
45975
45976 164/2
45977 50 Sorting a list never copies elements, and is a stable sort
45978 (equal elements remain in the original order). This is different
45979 than sorting an array or vector, which may need to copy elements,
45980 and is probably not a stable sort.
45981
45982 \1f
45983 File: arm2012.info, Node: A.18.4, Next: A.18.5, Prev: A.18.3, Up: A.18
45984
45985 A.18.4 Maps
45986 -----------
45987
45988 1/2
45989 The language-defined generic packages Containers.Hashed_Maps and
45990 Containers.Ordered_Maps provide private types Map and Cursor, and a set
45991 of operations for each type. A map container allows an arbitrary type
45992 to be used as a key to find the element associated with that key. A
45993 hashed map uses a hash function to organize the keys, while an ordered
45994 map orders the keys per a specified relation.
45995
45996 2/3
45997 This subclause describes the declarations that are common to both kinds
45998 of maps. See *note A.18.5:: for a description of the semantics specific
45999 to Containers.Hashed_Maps and *note A.18.6:: for a description of the
46000 semantics specific to Containers.Ordered_Maps.
46001
46002 _Static Semantics_
46003
46004 3/2
46005 The actual function for the generic formal function "=" on Element_Type
46006 values is expected to define a reflexive and symmetric relationship and
46007 return the same result value each time it is called with a particular
46008 pair of values. If it behaves in some other manner, the function "=" on
46009 map values returns an unspecified value. The exact arguments and number
46010 of calls of this generic formal function by the function "=" on map
46011 values are unspecified.
46012
46013 4/2
46014 The type Map is used to represent maps. The type Map needs finalization
46015 (see *note 7.6::).
46016
46017 5/2
46018 A map contains pairs of keys and elements, called nodes. Map cursors
46019 designate nodes, but also can be thought of as designating an element
46020 (the element contained in the node) for consistency with the other
46021 containers. There exists an equivalence relation on keys, whose
46022 definition is different for hashed maps and ordered maps. A map never
46023 contains two or more nodes with equivalent keys. The length of a map is
46024 the number of nodes it contains.
46025
46026 6/2
46027 Each nonempty map has two particular nodes called the first node and the
46028 last node (which may be the same). Each node except for the last node
46029 has a successor node. If there are no other intervening operations,
46030 starting with the first node and repeatedly going to the successor node
46031 will visit each node in the map exactly once until the last node is
46032 reached. The exact definition of these terms is different for hashed
46033 maps and ordered maps.
46034
46035 7/2
46036 Some operations of these generic packages have access-to-subprogram
46037 parameters. To ensure such operations are well-defined, they guard
46038 against certain actions by the designated subprogram. In particular,
46039 some operations check for "tampering with cursors" of a container
46040 because they depend on the set of elements of the container remaining
46041 constant, and others check for "tampering with elements" of a container
46042 because they depend on elements of the container not being replaced.
46043
46044 8/2
46045 A subprogram is said to tamper with cursors of a map object M if:
46046
46047 9/2
46048 * it inserts or deletes elements of M, that is, it calls the Insert,
46049 Include, Clear, Delete, or Exclude procedures with M as a
46050 parameter; or
46051
46052 10/2
46053 * it finalizes M; or
46054
46055 10.1/3
46056 * it calls the Assign procedure with M as the Target parameter; or
46057
46058 11/2
46059 * it calls the Move procedure with M as a parameter; or
46060
46061 12/2
46062 * it calls one of the operations defined to tamper with the cursors
46063 of M.
46064
46065 13/2
46066 A subprogram is said to tamper with elements of a map object M if:
46067
46068 14/2
46069 * it tampers with cursors of M; or
46070
46071 15/2
46072 * it replaces one or more elements of M, that is, it calls the
46073 Replace or Replace_Element procedures with M as a parameter.
46074
46075 15.1/3
46076 When tampering with cursors is prohibited for a particular map object M,
46077 Program_Error is propagated by a call of any language-defined subprogram
46078 that is defined to tamper with the cursors of M, leaving M unmodified.
46079 Similarly, when tampering with elements is prohibited for a particular
46080 map object M, Program_Error is propagated by a call of any
46081 language-defined subprogram that is defined to tamper with the elements
46082 of M (or tamper with the cursors of M), leaving M unmodified.
46083
46084 16/2
46085 Empty_Map represents the empty Map object. It has a length of 0. If an
46086 object of type Map is not otherwise initialized, it is initialized to
46087 the same value as Empty_Map.
46088
46089 17/2
46090 No_Element represents a cursor that designates no node. If an object of
46091 type Cursor is not otherwise initialized, it is initialized to the same
46092 value as No_Element.
46093
46094 18/2
46095 The predefined "=" operator for type Cursor returns True if both cursors
46096 are No_Element, or designate the same element in the same container.
46097
46098 19/2
46099 Execution of the default implementation of the Input, Output, Read, or
46100 Write attribute of type Cursor raises Program_Error.
46101
46102 19.1/3
46103 Map'Write for a Map object M writes Length(M) elements of the map to the
46104 stream. It also may write additional information about the map.
46105
46106 19.2/3
46107 Map'Read reads the representation of a map from the stream, and assigns
46108 to Item a map with the same length and elements as was written by
46109 Map'Write.
46110
46111 19.3/3
46112 function Has_Element (Position : Cursor) return Boolean;
46113
46114 19.4/3
46115 Returns True if Position designates an element, and returns
46116 False otherwise.
46117
46118 20/2
46119 function "=" (Left, Right : Map) return Boolean;
46120
46121 21/2
46122 If Left and Right denote the same map object, then the
46123 function returns True. If Left and Right have different
46124 lengths, then the function returns False. Otherwise, for each
46125 key K in Left, the function returns False if:
46126
46127 22/2
46128 * a key equivalent to K is not present in Right; or
46129
46130 23/2
46131 * the element associated with K in Left is not equal to the
46132 element associated with K in Right (using the generic
46133 formal equality operator for elements).
46134
46135 24/2
46136 If the function has not returned a result after checking all
46137 of the keys, it returns True. Any exception raised during
46138 evaluation of key equivalence or element equality is
46139 propagated.
46140
46141 25/2
46142 function Length (Container : Map) return Count_Type;
46143
46144 26/2
46145 Returns the number of nodes in Container.
46146
46147 27/2
46148 function Is_Empty (Container : Map) return Boolean;
46149
46150 28/2
46151 Equivalent to Length (Container) = 0.
46152
46153 29/2
46154 procedure Clear (Container : in out Map);
46155
46156 30/2
46157 Removes all the nodes from Container.
46158
46159 31/2
46160 function Key (Position : Cursor) return Key_Type;
46161
46162 32/2
46163 If Position equals No_Element, then Constraint_Error is
46164 propagated. Otherwise, Key returns the key component of the
46165 node designated by Position.
46166
46167 33/2
46168 function Element (Position : Cursor) return Element_Type;
46169
46170 34/2
46171 If Position equals No_Element, then Constraint_Error is
46172 propagated. Otherwise, Element returns the element component
46173 of the node designated by Position.
46174
46175 35/2
46176 procedure Replace_Element (Container : in out Map;
46177 Position : in Cursor;
46178 New_Item : in Element_Type);
46179
46180 36/3
46181 If Position equals No_Element, then Constraint_Error is
46182 propagated; if Position does not designate an element in
46183 Container, then Program_Error is propagated. Otherwise,
46184 Replace_Element assigns New_Item to the element of the node
46185 designated by Position.
46186
46187 37/2
46188 procedure Query_Element
46189 (Position : in Cursor;
46190 Process : not null access procedure (Key : in Key_Type;
46191 Element : in Element_Type));
46192
46193 38/3
46194 If Position equals No_Element, then Constraint_Error is
46195 propagated. Otherwise, Query_Element calls Process.all with
46196 the key and element from the node designated by Position as
46197 the arguments. Tampering with the elements of the map that
46198 contains the element designated by Position is prohibited
46199 during the execution of the call on Process.all. Any
46200 exception raised by Process.all is propagated.
46201
46202 39/2
46203 procedure Update_Element
46204 (Container : in out Map;
46205 Position : in Cursor;
46206 Process : not null access procedure (Key : in Key_Type;
46207 Element : in out Element_Type));
46208
46209 40/3
46210 If Position equals No_Element, then Constraint_Error is
46211 propagated; if Position does not designate an element in
46212 Container, then Program_Error is propagated. Otherwise,
46213 Update_Element calls Process.all with the key and element from
46214 the node designated by Position as the arguments. Tampering
46215 with the elements of Container is prohibited during the
46216 execution of the call on Process.all. Any exception raised by
46217 Process.all is propagated.
46218
46219 41/2
46220 If Element_Type is unconstrained and definite, then the actual
46221 Element parameter of Process.all shall be unconstrained.
46222
46223 41.1/3
46224 type Constant_Reference_Type
46225 (Element : not null access constant Element_Type) is private
46226 with Implicit_Dereference => Element;
46227
46228 41.2/3
46229 type Reference_Type (Element : not null access Element_Type) is private
46230 with Implicit_Dereference => Element;
46231
46232 41.3/3
46233 The types Constant_Reference_Type and Reference_Type need
46234 finalization.
46235
46236 41.4/3
46237 The default initialization of an object of type
46238 Constant_Reference_Type or Reference_Type propagates
46239 Program_Error.
46240
46241 41.5/3
46242 function Constant_Reference (Container : aliased in Map;
46243 Position : in Cursor)
46244 return Constant_Reference_Type;
46245
46246 41.6/3
46247 This function (combined with the Constant_Indexing and
46248 Implicit_Dereference aspects) provides a convenient way to
46249 gain read access to an individual element of a map given a
46250 cursor.
46251
46252 41.7/3
46253 If Position equals No_Element, then Constraint_Error is
46254 propagated; if Position does not designate an element in
46255 Container, then Program_Error is propagated. Otherwise,
46256 Constant_Reference returns an object whose discriminant is an
46257 access value that designates the element designated by
46258 Position. Tampering with the elements of Container is
46259 prohibited while the object returned by Constant_Reference
46260 exists and has not been finalized.
46261
46262 41.8/3
46263 function Reference (Container : aliased in out Map;
46264 Position : in Cursor)
46265 return Reference_Type;
46266
46267 41.9/3
46268 This function (combined with the Variable_Indexing and
46269 Implicit_Dereference aspects) provides a convenient way to
46270 gain read and write access to an individual element of a map
46271 given a cursor.
46272
46273 41.10/3
46274 If Position equals No_Element, then Constraint_Error is
46275 propagated; if Position does not designate an element in
46276 Container, then Program_Error is propagated. Otherwise,
46277 Reference returns an object whose discriminant is an access
46278 value that designates the element designated by Position.
46279 Tampering with the elements of Container is prohibited while
46280 the object returned by Reference exists and has not been
46281 finalized.
46282
46283 41.11/3
46284 function Constant_Reference (Container : aliased in Map;
46285 Key : in Key_Type)
46286 return Constant_Reference_Type;
46287
46288 41.12/3
46289 This function (combined with the Constant_Indexing and
46290 Implicit_Dereference aspects) provides a convenient way to
46291 gain read access to an individual element of a map given a key
46292 value.
46293
46294 41.13/3
46295 Equivalent to Constant_Reference (Container, Find (Container,
46296 Key)).
46297
46298 41.14/3
46299 function Reference (Container : aliased in out Map;
46300 Key : in Key_Type)
46301 return Reference_Type;
46302
46303 41.15/3
46304 This function (combined with the Variable_Indexing and
46305 Implicit_Dereference aspects) provides a convenient way to
46306 gain read and write access to an individual element of a map
46307 given a key value.
46308
46309 41.16/3
46310 Equivalent to Reference (Container, Find (Container, Key)).
46311
46312 41.17/3
46313 procedure Assign (Target : in out Map; Source : in Map);
46314
46315 41.18/3
46316 If Target denotes the same object as Source, the operation has
46317 no effect. Otherwise, the key/element pairs of Source are
46318 copied to Target as for an assignment_statement assigning
46319 Source to Target.
46320
46321 42/2
46322 procedure Move (Target : in out Map;
46323 Source : in out Map);
46324
46325 43/3
46326 If Target denotes the same object as Source, then the
46327 operation has no effect. Otherwise, the operation is
46328 equivalent to Assign (Target, Source) followed by Clear
46329 (Source).
46330
46331 44/2
46332 procedure Insert (Container : in out Map;
46333 Key : in Key_Type;
46334 New_Item : in Element_Type;
46335 Position : out Cursor;
46336 Inserted : out Boolean);
46337
46338 45/2
46339 Insert checks if a node with a key equivalent to Key is
46340 already present in Container. If a match is found, Inserted
46341 is set to False and Position designates the element with the
46342 matching key. Otherwise, Insert allocates a new node,
46343 initializes it to Key and New_Item, and adds it to Container;
46344 Inserted is set to True and Position designates the
46345 newly-inserted node. Any exception raised during allocation
46346 is propagated and Container is not modified.
46347
46348 46/2
46349 procedure Insert (Container : in out Map;
46350 Key : in Key_Type;
46351 Position : out Cursor;
46352 Inserted : out Boolean);
46353
46354 47/2
46355 Insert inserts Key into Container as per the five-parameter
46356 Insert, with the difference that an element initialized by
46357 default (see *note 3.3.1::) is inserted.
46358
46359 48/2
46360 procedure Insert (Container : in out Map;
46361 Key : in Key_Type;
46362 New_Item : in Element_Type);
46363
46364 49/2
46365 Insert inserts Key and New_Item into Container as per the
46366 five-parameter Insert, with the difference that if a node with
46367 a key equivalent to Key is already in the map, then
46368 Constraint_Error is propagated.
46369
46370 50/2
46371 procedure Include (Container : in out Map;
46372 Key : in Key_Type;
46373 New_Item : in Element_Type);
46374
46375 51/2
46376 Include inserts Key and New_Item into Container as per the
46377 five-parameter Insert, with the difference that if a node with
46378 a key equivalent to Key is already in the map, then this
46379 operation assigns Key and New_Item to the matching node. Any
46380 exception raised during assignment is propagated.
46381
46382 52/2
46383 procedure Replace (Container : in out Map;
46384 Key : in Key_Type;
46385 New_Item : in Element_Type);
46386
46387 53/2
46388 Replace checks if a node with a key equivalent to Key is
46389 present in Container. If a match is found, Replace assigns
46390 Key and New_Item to the matching node; otherwise,
46391 Constraint_Error is propagated.
46392
46393 54/2
46394 procedure Exclude (Container : in out Map;
46395 Key : in Key_Type);
46396
46397 55/2
46398 Exclude checks if a node with a key equivalent to Key is
46399 present in Container. If a match is found, Exclude removes
46400 the node from the map.
46401
46402 56/2
46403 procedure Delete (Container : in out Map;
46404 Key : in Key_Type);
46405
46406 57/2
46407 Delete checks if a node with a key equivalent to Key is
46408 present in Container. If a match is found, Delete removes the
46409 node from the map; otherwise, Constraint_Error is propagated.
46410
46411 58/2
46412 procedure Delete (Container : in out Map;
46413 Position : in out Cursor);
46414
46415 59/2
46416 If Position equals No_Element, then Constraint_Error is
46417 propagated. If Position does not designate an element in
46418 Container, then Program_Error is propagated. Otherwise,
46419 Delete removes the node designated by Position from the map.
46420 Position is set to No_Element on return.
46421
46422 60/2
46423 function First (Container : Map) return Cursor;
46424
46425 61/2
46426 If Length (Container) = 0, then First returns No_Element.
46427 Otherwise, First returns a cursor that designates the first
46428 node in Container.
46429
46430 62/2
46431 function Next (Position : Cursor) return Cursor;
46432
46433 63/2
46434 Returns a cursor that designates the successor of the node
46435 designated by Position. If Position designates the last node,
46436 then No_Element is returned. If Position equals No_Element,
46437 then No_Element is returned.
46438
46439 64/2
46440 procedure Next (Position : in out Cursor);
46441
46442 65/2
46443 Equivalent to Position := Next (Position).
46444
46445 66/2
46446 function Find (Container : Map;
46447 Key : Key_Type) return Cursor;
46448
46449 67/2
46450 If Length (Container) equals 0, then Find returns No_Element.
46451 Otherwise, Find checks if a node with a key equivalent to Key
46452 is present in Container. If a match is found, a cursor
46453 designating the matching node is returned; otherwise,
46454 No_Element is returned.
46455
46456 68/2
46457 function Element (Container : Map;
46458 Key : Key_Type) return Element_Type;
46459
46460 69/2
46461 Equivalent to Element (Find (Container, Key)).
46462
46463 70/2
46464 function Contains (Container : Map;
46465 Key : Key_Type) return Boolean;
46466
46467 71/2
46468 Equivalent to Find (Container, Key) /= No_Element.
46469
46470 Paragraphs 72 and 73 were moved above.
46471
46472 74/2
46473 procedure Iterate
46474 (Container : in Map;
46475 Process : not null access procedure (Position : in Cursor));
46476
46477 75/3
46478 Iterate calls Process.all with a cursor that designates each
46479 node in Container, starting with the first node and moving the
46480 cursor according to the successor relation. Tampering with
46481 the cursors of Container is prohibited during the execution of
46482 a call on Process.all. Any exception raised by Process.all is
46483 propagated.
46484
46485 _Bounded (Run-Time) Errors_
46486
46487 75.1/3
46488 It is a bounded error for the actual function associated with a generic
46489 formal subprogram, when called as part of an operation of a map package,
46490 to tamper with elements of any map parameter of the operation. Either
46491 Program_Error is raised, or the operation works as defined on the value
46492 of the map either prior to, or subsequent to, some or all of the
46493 modifications to the map.
46494
46495 75.2/3
46496 It is a bounded error to call any subprogram declared in the visible
46497 part of a map package when the associated container has been finalized.
46498 If the operation takes Container as an in out parameter, then it raises
46499 Constraint_Error or Program_Error. Otherwise, the operation either
46500 proceeds as it would for an empty container, or it raises
46501 Constraint_Error or Program_Error.
46502
46503 _Erroneous Execution_
46504
46505 76/2
46506 A Cursor value is invalid if any of the following have occurred since it
46507 was created:
46508
46509 77/2
46510 * The map that contains the node it designates has been finalized;
46511
46512 77.1/3
46513 * The map that contains the node it designates has been used as the
46514 Target of a call to Assign, or as the target of an
46515 assignment_statement;
46516
46517 78/2
46518 * The map that contains the node it designates has been used as the
46519 Source or Target of a call to Move; or
46520
46521 79/3
46522 * The node it designates has been removed from the map that
46523 previously contained the node.
46524
46525 80/2
46526 The result of "=" or Has_Element is unspecified if these functions are
46527 called with an invalid cursor parameter. Execution is erroneous if any
46528 other subprogram declared in Containers.Hashed_Maps or
46529 Containers.Ordered_Maps is called with an invalid cursor parameter.
46530
46531 80.1/3
46532 Execution is erroneous if the map associated with the result of a call
46533 to Reference or Constant_Reference is finalized before the result object
46534 returned by the call to Reference or Constant_Reference is finalized.
46535
46536 _Implementation Requirements_
46537
46538 81/2
46539 No storage associated with a Map object shall be lost upon assignment or
46540 scope exit.
46541
46542 82/3
46543 The execution of an assignment_statement for a map shall have the effect
46544 of copying the elements from the source map object to the target map
46545 object and changing the length of the target object to that of the
46546 source object.
46547
46548 _Implementation Advice_
46549
46550 83/2
46551 Move should not copy elements, and should minimize copying of internal
46552 data structures.
46553
46554 84/2
46555 If an exception is propagated from a map operation, no storage should be
46556 lost, nor any elements removed from a map unless specified by the
46557 operation.
46558
46559 \1f
46560 File: arm2012.info, Node: A.18.5, Next: A.18.6, Prev: A.18.4, Up: A.18
46561
46562 A.18.5 The Generic Package Containers.Hashed_Maps
46563 -------------------------------------------------
46564
46565 _Static Semantics_
46566
46567 1/2
46568 The generic library package Containers.Hashed_Maps has the following
46569 declaration:
46570
46571 2/3
46572 with Ada.Iterator_Interfaces;
46573 generic
46574 type Key_Type is private;
46575 type Element_Type is private;
46576 with function Hash (Key : Key_Type) return Hash_Type;
46577 with function Equivalent_Keys (Left, Right : Key_Type)
46578 return Boolean;
46579 with function "=" (Left, Right : Element_Type)
46580 return Boolean is <>;
46581 package Ada.Containers.Hashed_Maps is
46582 pragma Preelaborate(Hashed_Maps);
46583 pragma Remote_Types(Hashed_Maps);
46584
46585 3/3
46586 type Map is tagged private
46587 with Constant_Indexing => Constant_Reference,
46588 Variable_Indexing => Reference,
46589 Default_Iterator => Iterate,
46590 Iterator_Element => Element_Type;
46591 pragma Preelaborable_Initialization(Map);
46592
46593 4/2
46594 type Cursor is private;
46595 pragma Preelaborable_Initialization(Cursor);
46596
46597 5/2
46598 Empty_Map : constant Map;
46599
46600 6/2
46601 No_Element : constant Cursor;
46602
46603 6.1/3
46604 function Has_Element (Position : Cursor) return Boolean;
46605
46606 6.2/3
46607 package Map_Iterator_Interfaces is new
46608 Ada.Iterator_Interfaces (Cursor, Has_Element);
46609
46610 7/2
46611 function "=" (Left, Right : Map) return Boolean;
46612
46613 8/2
46614 function Capacity (Container : Map) return Count_Type;
46615
46616 9/2
46617 procedure Reserve_Capacity (Container : in out Map;
46618 Capacity : in Count_Type);
46619
46620 10/2
46621 function Length (Container : Map) return Count_Type;
46622
46623 11/2
46624 function Is_Empty (Container : Map) return Boolean;
46625
46626 12/2
46627 procedure Clear (Container : in out Map);
46628
46629 13/2
46630 function Key (Position : Cursor) return Key_Type;
46631
46632 14/2
46633 function Element (Position : Cursor) return Element_Type;
46634
46635 15/2
46636 procedure Replace_Element (Container : in out Map;
46637 Position : in Cursor;
46638 New_Item : in Element_Type);
46639
46640 16/2
46641 procedure Query_Element
46642 (Position : in Cursor;
46643 Process : not null access procedure (Key : in Key_Type;
46644 Element : in Element_Type));
46645
46646 17/2
46647 procedure Update_Element
46648 (Container : in out Map;
46649 Position : in Cursor;
46650 Process : not null access procedure
46651 (Key : in Key_Type;
46652 Element : in out Element_Type));
46653
46654 17.1/3
46655 type Constant_Reference_Type
46656 (Element : not null access constant Element_Type) is private
46657 with Implicit_Dereference => Element;
46658
46659 17.2/3
46660 type Reference_Type (Element : not null access Element_Type) is private
46661 with Implicit_Dereference => Element;
46662
46663 17.3/3
46664 function Constant_Reference (Container : aliased in Map;
46665 Position : in Cursor)
46666 return Constant_Reference_Type;
46667
46668 17.4/3
46669 function Reference (Container : aliased in out Map;
46670 Position : in Cursor)
46671 return Reference_Type;
46672
46673 17.5/3
46674 function Constant_Reference (Container : aliased in Map;
46675 Key : in Key_Type)
46676 return Constant_Reference_Type;
46677
46678 17.6/3
46679 function Reference (Container : aliased in out Map;
46680 Key : in Key_Type)
46681 return Reference_Type;
46682
46683 17.7/3
46684 procedure Assign (Target : in out Map; Source : in Map);
46685
46686 17.8/3
46687 function Copy (Source : Map; Capacity : Count_Type := 0) return Map;
46688
46689 18/2
46690 procedure Move (Target : in out Map;
46691 Source : in out Map);
46692
46693 19/2
46694 procedure Insert (Container : in out Map;
46695 Key : in Key_Type;
46696 New_Item : in Element_Type;
46697 Position : out Cursor;
46698 Inserted : out Boolean);
46699
46700 20/2
46701 procedure Insert (Container : in out Map;
46702 Key : in Key_Type;
46703 Position : out Cursor;
46704 Inserted : out Boolean);
46705
46706 21/2
46707 procedure Insert (Container : in out Map;
46708 Key : in Key_Type;
46709 New_Item : in Element_Type);
46710
46711 22/2
46712 procedure Include (Container : in out Map;
46713 Key : in Key_Type;
46714 New_Item : in Element_Type);
46715
46716 23/2
46717 procedure Replace (Container : in out Map;
46718 Key : in Key_Type;
46719 New_Item : in Element_Type);
46720
46721 24/2
46722 procedure Exclude (Container : in out Map;
46723 Key : in Key_Type);
46724
46725 25/2
46726 procedure Delete (Container : in out Map;
46727 Key : in Key_Type);
46728
46729 26/2
46730 procedure Delete (Container : in out Map;
46731 Position : in out Cursor);
46732
46733 27/2
46734 function First (Container : Map)
46735 return Cursor;
46736
46737 28/2
46738 function Next (Position : Cursor) return Cursor;
46739
46740 29/2
46741 procedure Next (Position : in out Cursor);
46742
46743 30/2
46744 function Find (Container : Map;
46745 Key : Key_Type)
46746 return Cursor;
46747
46748 31/2
46749 function Element (Container : Map;
46750 Key : Key_Type)
46751 return Element_Type;
46752
46753 32/2
46754 function Contains (Container : Map;
46755 Key : Key_Type) return Boolean;
46756
46757 33/3
46758 This paragraph was deleted.
46759
46760 34/2
46761 function Equivalent_Keys (Left, Right : Cursor)
46762 return Boolean;
46763
46764 35/2
46765 function Equivalent_Keys (Left : Cursor;
46766 Right : Key_Type)
46767 return Boolean;
46768
46769 36/2
46770 function Equivalent_Keys (Left : Key_Type;
46771 Right : Cursor)
46772 return Boolean;
46773
46774 37/2
46775 procedure Iterate
46776 (Container : in Map;
46777 Process : not null access procedure (Position : in Cursor));
46778
46779 37.1/3
46780 function Iterate (Container : in Map)
46781 return Map_Iterator_Interfaces.Forward_Iterator'Class;
46782
46783 38/2
46784 private
46785
46786 39/2
46787 ... -- not specified by the language
46788
46789 40/2
46790 end Ada.Containers.Hashed_Maps;
46791
46792 41/2
46793 An object of type Map contains an expandable hash table, which is used
46794 to provide direct access to nodes. The capacity of an object of type
46795 Map is the maximum number of nodes that can be inserted into the hash
46796 table prior to it being automatically expanded.
46797
46798 42/2
46799 Two keys K1 and K2 are defined to be equivalent if Equivalent_Keys (K1,
46800 K2) returns True.
46801
46802 43/2
46803 The actual function for the generic formal function Hash is expected to
46804 return the same value each time it is called with a particular key
46805 value. For any two equivalent key values, the actual for Hash is
46806 expected to return the same value. If the actual for Hash behaves in
46807 some other manner, the behavior of this package is unspecified. Which
46808 subprograms of this package call Hash, and how many times they call it,
46809 is unspecified.
46810
46811 44/2
46812 The actual function for the generic formal function Equivalent_Keys on
46813 Key_Type values is expected to return the same value each time it is
46814 called with a particular pair of key values. It should define an
46815 equivalence relationship, that is, be reflexive, symmetric, and
46816 transitive. If the actual for Equivalent_Keys behaves in some other
46817 manner, the behavior of this package is unspecified. Which subprograms
46818 of this package call Equivalent_Keys, and how many times they call it,
46819 is unspecified.
46820
46821 45/2
46822 If the value of a key stored in a node of a map is changed other than by
46823 an operation in this package such that at least one of Hash or
46824 Equivalent_Keys give different results, the behavior of this package is
46825 unspecified.
46826
46827 46/2
46828 Which nodes are the first node and the last node of a map, and which
46829 node is the successor of a given node, are unspecified, other than the
46830 general semantics described in *note A.18.4::.
46831
46832 47/2
46833 function Capacity (Container : Map) return Count_Type;
46834
46835 48/2
46836 Returns the capacity of Container.
46837
46838 49/2
46839 procedure Reserve_Capacity (Container : in out Map;
46840 Capacity : in Count_Type);
46841
46842 50/2
46843 Reserve_Capacity allocates a new hash table such that the
46844 length of the resulting map can become at least the value
46845 Capacity without requiring an additional call to
46846 Reserve_Capacity, and is large enough to hold the current
46847 length of Container. Reserve_Capacity then rehashes the nodes
46848 in Container onto the new hash table. It replaces the old
46849 hash table with the new hash table, and then deallocates the
46850 old hash table. Any exception raised during allocation is
46851 propagated and Container is not modified.
46852
46853 51/2
46854 Reserve_Capacity tampers with the cursors of Container.
46855
46856 52/2
46857 procedure Clear (Container : in out Map);
46858
46859 53/2
46860 In addition to the semantics described in *note A.18.4::,
46861 Clear does not affect the capacity of Container.
46862
46863 53.1/3
46864 procedure Assign (Target : in out Map; Source : in Map);
46865
46866 53.2/3
46867 In addition to the semantics described in *note A.18.4::, if
46868 the length of Source is greater than the capacity of Target,
46869 Reserve_Capacity (Target, Length (Source)) is called before
46870 assigning any elements.
46871
46872 53.3/3
46873 function Copy (Source : Map; Capacity : Count_Type := 0) return Map;
46874
46875 53.4/3
46876 Returns a map whose keys and elements are initialized from the
46877 keys and elements of Source. If Capacity is 0, then the map
46878 capacity is the length of Source; if Capacity is equal to or
46879 greater than the length of Source, the map capacity is at
46880 least the specified value. Otherwise, the operation
46881 propagates Capacity_Error.
46882
46883 54/2
46884 procedure Insert (Container : in out Map;
46885 Key : in Key_Type;
46886 New_Item : in Element_Type;
46887 Position : out Cursor;
46888 Inserted : out Boolean);
46889
46890 55/2
46891 In addition to the semantics described in *note A.18.4::, if
46892 Length (Container) equals Capacity (Container), then Insert
46893 first calls Reserve_Capacity to increase the capacity of
46894 Container to some larger value.
46895
46896 56/2
46897 function Equivalent_Keys (Left, Right : Cursor)
46898 return Boolean;
46899
46900 57/2
46901 Equivalent to Equivalent_Keys (Key (Left), Key (Right)).
46902
46903 58/2
46904 function Equivalent_Keys (Left : Cursor;
46905 Right : Key_Type) return Boolean;
46906
46907 59/2
46908 Equivalent to Equivalent_Keys (Key (Left), Right).
46909
46910 60/2
46911 function Equivalent_Keys (Left : Key_Type;
46912 Right : Cursor) return Boolean;
46913
46914 61/2
46915 Equivalent to Equivalent_Keys (Left, Key (Right)).
46916
46917 61.1/3
46918 function Iterate (Container : in Map)
46919 return Map_Iterator_Interfaces.Forward_Iterator'Class;
46920
46921 61.2/3
46922 Iterate returns an iterator object (see *note 5.5.1::) that
46923 will generate a value for a loop parameter (see *note 5.5.2::)
46924 designating each node in Container, starting with the first
46925 node and moving the cursor according to the successor
46926 relation. Tampering with the cursors of Container is
46927 prohibited while the iterator object exists (in particular, in
46928 the sequence_of_statements of the loop_statement whose
46929 iterator_specification denotes this object). The iterator
46930 object needs finalization.
46931
46932 _Implementation Advice_
46933
46934 62/2
46935 If N is the length of a map, the average time complexity of the
46936 subprograms Element, Insert, Include, Replace, Delete, Exclude and Find
46937 that take a key parameter should be O(log N). The average time
46938 complexity of the subprograms that take a cursor parameter should be
46939 O(1). The average time complexity of Reserve_Capacity should be O(N).
46940
46941 \1f
46942 File: arm2012.info, Node: A.18.6, Next: A.18.7, Prev: A.18.5, Up: A.18
46943
46944 A.18.6 The Generic Package Containers.Ordered_Maps
46945 --------------------------------------------------
46946
46947 _Static Semantics_
46948
46949 1/2
46950 The generic library package Containers.Ordered_Maps has the following
46951 declaration:
46952
46953 2/3
46954 with Ada.Iterator_Interfaces;
46955 generic
46956 type Key_Type is private;
46957 type Element_Type is private;
46958 with function "<" (Left, Right : Key_Type) return Boolean is <>;
46959 with function "=" (Left, Right : Element_Type) return Boolean is <>;
46960 package Ada.Containers.Ordered_Maps is
46961 pragma Preelaborate(Ordered_Maps);
46962 pragma Remote_Types(Ordered_Maps);
46963
46964 3/2
46965 function Equivalent_Keys (Left, Right : Key_Type) return Boolean;
46966
46967 4/3
46968 type Map is tagged private
46969 with Constant_Indexing => Constant_Reference,
46970 Variable_Indexing => Reference,
46971 Default_Iterator => Iterate,
46972 Iterator_Element => Element_Type;
46973 pragma Preelaborable_Initialization(Map);
46974
46975 5/2
46976 type Cursor is private;
46977 pragma Preelaborable_Initialization(Cursor);
46978
46979 6/2
46980 Empty_Map : constant Map;
46981
46982 7/2
46983 No_Element : constant Cursor;
46984
46985 7.1/3
46986 function Has_Element (Position : Cursor) return Boolean;
46987
46988 7.2/3
46989 package Map_Iterator_Interfaces is new
46990 Ada.Iterator_Interfaces (Cursor, Has_Element);
46991
46992 8/2
46993 function "=" (Left, Right : Map) return Boolean;
46994
46995 9/2
46996 function Length (Container : Map) return Count_Type;
46997
46998 10/2
46999 function Is_Empty (Container : Map) return Boolean;
47000
47001 11/2
47002 procedure Clear (Container : in out Map);
47003
47004 12/2
47005 function Key (Position : Cursor) return Key_Type;
47006
47007 13/2
47008 function Element (Position : Cursor) return Element_Type;
47009
47010 14/2
47011 procedure Replace_Element (Container : in out Map;
47012 Position : in Cursor;
47013 New_Item : in Element_Type);
47014
47015 15/2
47016 procedure Query_Element
47017 (Position : in Cursor;
47018 Process : not null access procedure (Key : in Key_Type;
47019 Element : in Element_Type));
47020
47021 16/2
47022 procedure Update_Element
47023 (Container : in out Map;
47024 Position : in Cursor;
47025 Process : not null access procedure
47026 (Key : in Key_Type;
47027 Element : in out Element_Type));
47028
47029 16.1/3
47030 type Constant_Reference_Type
47031 (Element : not null access constant Element_Type) is private
47032 with Implicit_Dereference => Element;
47033
47034 16.2/3
47035 type Reference_Type (Element : not null access Element_Type) is private
47036 with Implicit_Dereference => Element;
47037
47038 16.3/3
47039 function Constant_Reference (Container : aliased in Map;
47040 Position : in Cursor)
47041 return Constant_Reference_Type;
47042
47043 16.4/3
47044 function Reference (Container : aliased in out Map;
47045 Position : in Cursor)
47046 return Reference_Type;
47047
47048 16.5/3
47049 function Constant_Reference (Container : aliased in Map;
47050 Key : in Key_Type)
47051 return Constant_Reference_Type;
47052
47053 16.6/3
47054 function Reference (Container : aliased in out Map;
47055 Key : in Key_Type)
47056 return Reference_Type;
47057
47058 16.7/3
47059 procedure Assign (Target : in out Map; Source : in Map);
47060
47061 16.8/3
47062 function Copy (Source : Map) return Map;
47063
47064 17/2
47065 procedure Move (Target : in out Map;
47066 Source : in out Map);
47067
47068 18/2
47069 procedure Insert (Container : in out Map;
47070 Key : in Key_Type;
47071 New_Item : in Element_Type;
47072 Position : out Cursor;
47073 Inserted : out Boolean);
47074
47075 19/2
47076 procedure Insert (Container : in out Map;
47077 Key : in Key_Type;
47078 Position : out Cursor;
47079 Inserted : out Boolean);
47080
47081 20/2
47082 procedure Insert (Container : in out Map;
47083 Key : in Key_Type;
47084 New_Item : in Element_Type);
47085
47086 21/2
47087 procedure Include (Container : in out Map;
47088 Key : in Key_Type;
47089 New_Item : in Element_Type);
47090
47091 22/2
47092 procedure Replace (Container : in out Map;
47093 Key : in Key_Type;
47094 New_Item : in Element_Type);
47095
47096 23/2
47097 procedure Exclude (Container : in out Map;
47098 Key : in Key_Type);
47099
47100 24/2
47101 procedure Delete (Container : in out Map;
47102 Key : in Key_Type);
47103
47104 25/2
47105 procedure Delete (Container : in out Map;
47106 Position : in out Cursor);
47107
47108 26/2
47109 procedure Delete_First (Container : in out Map);
47110
47111 27/2
47112 procedure Delete_Last (Container : in out Map);
47113
47114 28/2
47115 function First (Container : Map) return Cursor;
47116
47117 29/2
47118 function First_Element (Container : Map) return Element_Type;
47119
47120 30/2
47121 function First_Key (Container : Map) return Key_Type;
47122
47123 31/2
47124 function Last (Container : Map) return Cursor;
47125
47126 32/2
47127 function Last_Element (Container : Map) return Element_Type;
47128
47129 33/2
47130 function Last_Key (Container : Map) return Key_Type;
47131
47132 34/2
47133 function Next (Position : Cursor) return Cursor;
47134
47135 35/2
47136 procedure Next (Position : in out Cursor);
47137
47138 36/2
47139 function Previous (Position : Cursor) return Cursor;
47140
47141 37/2
47142 procedure Previous (Position : in out Cursor);
47143
47144 38/2
47145 function Find (Container : Map;
47146 Key : Key_Type) return Cursor;
47147
47148 39/2
47149 function Element (Container : Map;
47150 Key : Key_Type) return Element_Type;
47151
47152 40/2
47153 function Floor (Container : Map;
47154 Key : Key_Type) return Cursor;
47155
47156 41/2
47157 function Ceiling (Container : Map;
47158 Key : Key_Type) return Cursor;
47159
47160 42/2
47161 function Contains (Container : Map;
47162 Key : Key_Type) return Boolean;
47163
47164 43/3
47165 This paragraph was deleted.
47166
47167 44/2
47168 function "<" (Left, Right : Cursor) return Boolean;
47169
47170 45/2
47171 function ">" (Left, Right : Cursor) return Boolean;
47172
47173 46/2
47174 function "<" (Left : Cursor; Right : Key_Type) return Boolean;
47175
47176 47/2
47177 function ">" (Left : Cursor; Right : Key_Type) return Boolean;
47178
47179 48/2
47180 function "<" (Left : Key_Type; Right : Cursor) return Boolean;
47181
47182 49/2
47183 function ">" (Left : Key_Type; Right : Cursor) return Boolean;
47184
47185 50/2
47186 procedure Iterate
47187 (Container : in Map;
47188 Process : not null access procedure (Position : in Cursor));
47189
47190 51/2
47191 procedure Reverse_Iterate
47192 (Container : in Map;
47193 Process : not null access procedure (Position : in Cursor));
47194
47195 51.1/3
47196 function Iterate (Container : in Map)
47197 return Map_Iterator_Interfaces.Reversible_Iterator'Class;
47198
47199 51.2/3
47200 function Iterate (Container : in Map; Start : in Cursor)
47201 return Map_Iterator_Interfaces.Reversible_Iterator'Class;
47202
47203 52/2
47204 private
47205
47206 53/2
47207 ... -- not specified by the language
47208
47209 54/2
47210 end Ada.Containers.Ordered_Maps;
47211
47212 55/2
47213 Two keys K1 and K2 are equivalent if both K1 < K2 and K2 < K1 return
47214 False, using the generic formal "<" operator for keys. Function
47215 Equivalent_Keys returns True if Left and Right are equivalent, and False
47216 otherwise.
47217
47218 56/3
47219 The actual function for the generic formal function "<" on Key_Type
47220 values is expected to return the same value each time it is called with
47221 a particular pair of key values. It should define a strict weak
47222 ordering relationship (see *note A.18::). If the actual for "<" behaves
47223 in some other manner, the behavior of this package is unspecified.
47224 Which subprograms of this package call "<" and how many times they call
47225 it, is unspecified.
47226
47227 57/2
47228 If the value of a key stored in a map is changed other than by an
47229 operation in this package such that at least one of "<" or "=" give
47230 different results, the behavior of this package is unspecified.
47231
47232 58/3
47233 The first node of a nonempty map is the one whose key is less than the
47234 key of all the other nodes in the map. The last node of a nonempty map
47235 is the one whose key is greater than the key of all the other elements
47236 in the map. The successor of a node is the node with the smallest key
47237 that is larger than the key of the given node. The predecessor of a
47238 node is the node with the largest key that is smaller than the key of
47239 the given node. All comparisons are done using the generic formal "<"
47240 operator for keys.
47241
47242 58.1/3
47243 function Copy (Source : Map) return Map;
47244
47245 58.2/3
47246 Returns a map whose keys and elements are initialized from the
47247 corresponding keys and elements of Source.
47248
47249 59/2
47250 procedure Delete_First (Container : in out Map);
47251
47252 60/3
47253 If Container is empty, Delete_First has no effect. Otherwise,
47254 the node designated by First (Container) is removed from
47255 Container. Delete_First tampers with the cursors of
47256 Container.
47257
47258 61/2
47259 procedure Delete_Last (Container : in out Map);
47260
47261 62/3
47262 If Container is empty, Delete_Last has no effect. Otherwise,
47263 the node designated by Last (Container) is removed from
47264 Container. Delete_Last tampers with the cursors of Container.
47265
47266 63/2
47267 function First_Element (Container : Map) return Element_Type;
47268
47269 64/2
47270 Equivalent to Element (First (Container)).
47271
47272 65/2
47273 function First_Key (Container : Map) return Key_Type;
47274
47275 66/2
47276 Equivalent to Key (First (Container)).
47277
47278 67/2
47279 function Last (Container : Map) return Cursor;
47280
47281 68/2
47282 Returns a cursor that designates the last node in Container.
47283 If Container is empty, returns No_Element.
47284
47285 69/2
47286 function Last_Element (Container : Map) return Element_Type;
47287
47288 70/2
47289 Equivalent to Element (Last (Container)).
47290
47291 71/2
47292 function Last_Key (Container : Map) return Key_Type;
47293
47294 72/2
47295 Equivalent to Key (Last (Container)).
47296
47297 73/2
47298 function Previous (Position : Cursor) return Cursor;
47299
47300 74/3
47301 If Position equals No_Element, then Previous returns
47302 No_Element. Otherwise, Previous returns a cursor designating
47303 the predecessor node of the one designated by Position. If
47304 Position designates the first element, then Previous returns
47305 No_Element.
47306
47307 75/2
47308 procedure Previous (Position : in out Cursor);
47309
47310 76/2
47311 Equivalent to Position := Previous (Position).
47312
47313 77/2
47314 function Floor (Container : Map;
47315 Key : Key_Type) return Cursor;
47316
47317 78/3
47318 Floor searches for the last node whose key is not greater than
47319 Key, using the generic formal "<" operator for keys. If such
47320 a node is found, a cursor that designates it is returned.
47321 Otherwise, No_Element is returned.
47322
47323 79/2
47324 function Ceiling (Container : Map;
47325 Key : Key_Type) return Cursor;
47326
47327 80/3
47328 Ceiling searches for the first node whose key is not less than
47329 Key, using the generic formal "<" operator for keys. If such
47330 a node is found, a cursor that designates it is returned.
47331 Otherwise, No_Element is returned.
47332
47333 81/2
47334 function "<" (Left, Right : Cursor) return Boolean;
47335
47336 82/2
47337 Equivalent to Key (Left) < Key (Right).
47338
47339 83/2
47340 function ">" (Left, Right : Cursor) return Boolean;
47341
47342 84/2
47343 Equivalent to Key (Right) < Key (Left).
47344
47345 85/2
47346 function "<" (Left : Cursor; Right : Key_Type) return Boolean;
47347
47348 86/2
47349 Equivalent to Key (Left) < Right.
47350
47351 87/2
47352 function ">" (Left : Cursor; Right : Key_Type) return Boolean;
47353
47354 88/2
47355 Equivalent to Right < Key (Left).
47356
47357 89/2
47358 function "<" (Left : Key_Type; Right : Cursor) return Boolean;
47359
47360 90/2
47361 Equivalent to Left < Key (Right).
47362
47363 91/2
47364 function ">" (Left : Key_Type; Right : Cursor) return Boolean;
47365
47366 92/2
47367 Equivalent to Key (Right) < Left.
47368
47369 93/2
47370 procedure Reverse_Iterate
47371 (Container : in Map;
47372 Process : not null access procedure (Position : in Cursor));
47373
47374 94/3
47375 Iterates over the nodes in Container as per procedure Iterate,
47376 with the difference that the nodes are traversed in
47377 predecessor order, starting with the last node.
47378
47379 94.1/3
47380 function Iterate (Container : in Map)
47381 return Map_Iterator_Interfaces.Reversible_Iterator'Class;
47382
47383 94.2/3
47384 Iterate returns a reversible iterator object (see *note
47385 5.5.1::) that will generate a value for a loop parameter (see
47386 *note 5.5.2::) designating each node in Container, starting
47387 with the first node and moving the cursor according to the
47388 successor relation when used as a forward iterator, and
47389 starting with the last node and moving the cursor according to
47390 the predecessor relation when used as a reverse iterator.
47391 Tampering with the cursors of Container is prohibited while
47392 the iterator object exists (in particular, in the
47393 sequence_of_statements of the loop_statement whose
47394 iterator_specification denotes this object). The iterator
47395 object needs finalization.
47396
47397 94.3/3
47398 function Iterate (Container : in Map; Start : in Cursor)
47399 return Map_Iterator_Interfaces.Reversible_Iterator'Class;
47400
47401 94.4/3
47402 If Start is not No_Element and does not designate an item in
47403 Container, then Program_Error is propagated. If Start is
47404 No_Element, then Constraint_Error is propagated. Otherwise,
47405 Iterate returns a reversible iterator object (see *note
47406 5.5.1::) that will generate a value for a loop parameter (see
47407 *note 5.5.2::) designating each node in Container, starting
47408 with the node designated by Start and moving the cursor
47409 according to the successor relation when used as a forward
47410 iterator, or moving the cursor according to the predecessor
47411 relation when used as a reverse iterator. Tampering with the
47412 cursors of Container is prohibited while the iterator object
47413 exists (in particular, in the sequence_of_statements of the
47414 loop_statement whose iterator_specification denotes this
47415 object). The iterator object needs finalization.
47416
47417 _Implementation Advice_
47418
47419 95/2
47420 If N is the length of a map, then the worst-case time complexity of the
47421 Element, Insert, Include, Replace, Delete, Exclude and Find operations
47422 that take a key parameter should be O((log N)**2) or better. The
47423 worst-case time complexity of the subprograms that take a cursor
47424 parameter should be O(1).
47425
47426 \1f
47427 File: arm2012.info, Node: A.18.7, Next: A.18.8, Prev: A.18.6, Up: A.18
47428
47429 A.18.7 Sets
47430 -----------
47431
47432 1/2
47433 The language-defined generic packages Containers.Hashed_Sets and
47434 Containers.Ordered_Sets provide private types Set and Cursor, and a set
47435 of operations for each type. A set container allows elements of an
47436 arbitrary type to be stored without duplication. A hashed set uses a
47437 hash function to organize elements, while an ordered set orders its
47438 element per a specified relation.
47439
47440 2/3
47441 This subclause describes the declarations that are common to both kinds
47442 of sets. See *note A.18.8:: for a description of the semantics specific
47443 to Containers.Hashed_Sets and *note A.18.9:: for a description of the
47444 semantics specific to Containers.Ordered_Sets.
47445
47446 _Static Semantics_
47447
47448 3/2
47449 The actual function for the generic formal function "=" on Element_Type
47450 values is expected to define a reflexive and symmetric relationship and
47451 return the same result value each time it is called with a particular
47452 pair of values. If it behaves in some other manner, the function "=" on
47453 set values returns an unspecified value. The exact arguments and number
47454 of calls of this generic formal function by the function "=" on set
47455 values are unspecified.
47456
47457 4/2
47458 The type Set is used to represent sets. The type Set needs finalization
47459 (see *note 7.6::).
47460
47461 5/2
47462 A set contains elements. Set cursors designate elements. There exists
47463 an equivalence relation on elements, whose definition is different for
47464 hashed sets and ordered sets. A set never contains two or more
47465 equivalent elements. The length of a set is the number of elements it
47466 contains.
47467
47468 6/2
47469 Each nonempty set has two particular elements called the first element
47470 and the last element (which may be the same). Each element except for
47471 the last element has a successor element. If there are no other
47472 intervening operations, starting with the first element and repeatedly
47473 going to the successor element will visit each element in the set
47474 exactly once until the last element is reached. The exact definition of
47475 these terms is different for hashed sets and ordered sets.
47476
47477 7/2
47478 Some operations of these generic packages have access-to-subprogram
47479 parameters. To ensure such operations are well-defined, they guard
47480 against certain actions by the designated subprogram. In particular,
47481 some operations check for "tampering with cursors" of a container
47482 because they depend on the set of elements of the container remaining
47483 constant, and others check for "tampering with elements" of a container
47484 because they depend on elements of the container not being replaced.
47485
47486 8/2
47487 A subprogram is said to tamper with cursors of a set object S if:
47488
47489 9/2
47490 * it inserts or deletes elements of S, that is, it calls the Insert,
47491 Include, Clear, Delete, Exclude, or Replace_Element procedures with
47492 S as a parameter; or
47493
47494 10/2
47495 * it finalizes S; or
47496
47497 10.1/3
47498 * it calls the Assign procedure with S as the Target parameter; or
47499
47500 11/2
47501 * it calls the Move procedure with S as a parameter; or
47502
47503 12/2
47504 * it calls one of the operations defined to tamper with cursors of S.
47505
47506 13/2
47507 A subprogram is said to tamper with elements of a set object S if:
47508
47509 14/2
47510 * it tampers with cursors of S.
47511
47512 14.1/3
47513 When tampering with cursors is prohibited for a particular set object S,
47514 Program_Error is propagated by a call of any language-defined subprogram
47515 that is defined to tamper with the cursors of S, leaving S unmodified.
47516 Similarly, when tampering with elements is prohibited for a particular
47517 set object S, Program_Error is propagated by a call of any
47518 language-defined subprogram that is defined to tamper with the elements
47519 of S (or tamper with the cursors of S), leaving S unmodified.
47520
47521 15/2
47522 Empty_Set represents the empty Set object. It has a length of 0. If an
47523 object of type Set is not otherwise initialized, it is initialized to
47524 the same value as Empty_Set.
47525
47526 16/2
47527 No_Element represents a cursor that designates no element. If an object
47528 of type Cursor is not otherwise initialized, it is initialized to the
47529 same value as No_Element.
47530
47531 17/2
47532 The predefined "=" operator for type Cursor returns True if both cursors
47533 are No_Element, or designate the same element in the same container.
47534
47535 18/2
47536 Execution of the default implementation of the Input, Output, Read, or
47537 Write attribute of type Cursor raises Program_Error.
47538
47539 18.1/3
47540 Set'Write for a Set object S writes Length(S) elements of the set to the
47541 stream. It also may write additional information about the set.
47542
47543 18.2/3
47544 Set'Read reads the representation of a set from the stream, and assigns
47545 to Item a set with the same length and elements as was written by
47546 Set'Write.
47547
47548 18.3/3
47549 function Has_Element (Position : Cursor) return Boolean;
47550
47551 18.4/3
47552 Returns True if Position designates an element, and returns
47553 False otherwise.
47554
47555 19/2
47556 function "=" (Left, Right : Set) return Boolean;
47557
47558 20/2
47559 If Left and Right denote the same set object, then the
47560 function returns True. If Left and Right have different
47561 lengths, then the function returns False. Otherwise, for each
47562 element E in Left, the function returns False if an element
47563 equal to E (using the generic formal equality operator) is not
47564 present in Right. If the function has not returned a result
47565 after checking all of the elements, it returns True. Any
47566 exception raised during evaluation of element equality is
47567 propagated.
47568
47569 21/2
47570 function Equivalent_Sets (Left, Right : Set) return Boolean;
47571
47572 22/2
47573 If Left and Right denote the same set object, then the
47574 function returns True. If Left and Right have different
47575 lengths, then the function returns False. Otherwise, for each
47576 element E in Left, the function returns False if an element
47577 equivalent to E is not present in Right. If the function has
47578 not returned a result after checking all of the elements, it
47579 returns True. Any exception raised during evaluation of
47580 element equivalence is propagated.
47581
47582 23/2
47583 function To_Set (New_Item : Element_Type) return Set;
47584
47585 24/2
47586 Returns a set containing the single element New_Item.
47587
47588 25/2
47589 function Length (Container : Set) return Count_Type;
47590
47591 26/2
47592 Returns the number of elements in Container.
47593
47594 27/2
47595 function Is_Empty (Container : Set) return Boolean;
47596
47597 28/2
47598 Equivalent to Length (Container) = 0.
47599
47600 29/2
47601 procedure Clear (Container : in out Set);
47602
47603 30/2
47604 Removes all the elements from Container.
47605
47606 31/2
47607 function Element (Position : Cursor) return Element_Type;
47608
47609 32/2
47610 If Position equals No_Element, then Constraint_Error is
47611 propagated. Otherwise, Element returns the element designated
47612 by Position.
47613
47614 33/2
47615 procedure Replace_Element (Container : in out Set;
47616 Position : in Cursor;
47617 New_Item : in Element_Type);
47618
47619 34/2
47620 If Position equals No_Element, then Constraint_Error is
47621 propagated; if Position does not designate an element in
47622 Container, then Program_Error is propagated. If an element
47623 equivalent to New_Item is already present in Container at a
47624 position other than Position, Program_Error is propagated.
47625 Otherwise, Replace_Element assigns New_Item to the element
47626 designated by Position. Any exception raised by the
47627 assignment is propagated.
47628
47629 35/2
47630 procedure Query_Element
47631 (Position : in Cursor;
47632 Process : not null access procedure (Element : in Element_Type));
47633
47634 36/3
47635 If Position equals No_Element, then Constraint_Error is
47636 propagated. Otherwise, Query_Element calls Process.all with
47637 the element designated by Position as the argument. Tampering
47638 with the elements of the set that contains the element
47639 designated by Position is prohibited during the execution of
47640 the call on Process.all. Any exception raised by Process.all
47641 is propagated.
47642
47643 36.1/3
47644 type Constant_Reference_Type
47645 (Element : not null access constant Element_Type) is private
47646 with Implicit_Dereference => Element;
47647
47648 36.2/3
47649 The type Constant_Reference_Type needs finalization.
47650
47651 36.3/3
47652 The default initialization of an object of type
47653 Constant_Reference_Type propagates Program_Error.
47654
47655 36.4/3
47656 function Constant_Reference (Container : aliased in Set;
47657 Position : in Cursor)
47658 return Constant_Reference_Type;
47659
47660 36.5/3
47661 This function (combined with the Constant_Indexing and
47662 Implicit_Dereference aspects) provides a convenient way to
47663 gain read access to an individual element of a set given a
47664 cursor.
47665
47666 36.6/3
47667 If Position equals No_Element, then Constraint_Error is
47668 propagated; if Position does not designate an element in
47669 Container, then Program_Error is propagated. Otherwise,
47670 Constant_Reference returns an object whose discriminant is an
47671 access value that designates the element designated by
47672 Position. Tampering with the elements of Container is
47673 prohibited while the object returned by Constant_Reference
47674 exists and has not been finalized.
47675
47676 36.7/3
47677 procedure Assign (Target : in out Set; Source : in Set);
47678
47679 36.8/3
47680 If Target denotes the same object as Source, the operation has
47681 no effect. Otherwise, the elements of Source are copied to
47682 Target as for an assignment_statement assigning Source to
47683 Target.
47684
47685 37/2
47686 procedure Move (Target : in out Set;
47687 Source : in out Set);
47688
47689 38/3
47690 If Target denotes the same object as Source, then the
47691 operation has no effect. Otherwise, the operation is
47692 equivalent to Assign (Target, Source) followed by Clear
47693 (Source).
47694
47695 39/2
47696 procedure Insert (Container : in out Set;
47697 New_Item : in Element_Type;
47698 Position : out Cursor;
47699 Inserted : out Boolean);
47700
47701 40/2
47702 Insert checks if an element equivalent to New_Item is already
47703 present in Container. If a match is found, Inserted is set to
47704 False and Position designates the matching element.
47705 Otherwise, Insert adds New_Item to Container; Inserted is set
47706 to True and Position designates the newly-inserted element.
47707 Any exception raised during allocation is propagated and
47708 Container is not modified.
47709
47710 41/2
47711 procedure Insert (Container : in out Set;
47712 New_Item : in Element_Type);
47713
47714 42/2
47715 Insert inserts New_Item into Container as per the
47716 four-parameter Insert, with the difference that if an element
47717 equivalent to New_Item is already in the set, then
47718 Constraint_Error is propagated.
47719
47720 43/2
47721 procedure Include (Container : in out Set;
47722 New_Item : in Element_Type);
47723
47724 44/2
47725 Include inserts New_Item into Container as per the
47726 four-parameter Insert, with the difference that if an element
47727 equivalent to New_Item is already in the set, then it is
47728 replaced. Any exception raised during assignment is
47729 propagated.
47730
47731 45/2
47732 procedure Replace (Container : in out Set;
47733 New_Item : in Element_Type);
47734
47735 46/2
47736 Replace checks if an element equivalent to New_Item is already
47737 in the set. If a match is found, that element is replaced
47738 with New_Item; otherwise, Constraint_Error is propagated.
47739
47740 47/2
47741 procedure Exclude (Container : in out Set;
47742 Item : in Element_Type);
47743
47744 48/2
47745 Exclude checks if an element equivalent to Item is present in
47746 Container. If a match is found, Exclude removes the element
47747 from the set.
47748
47749 49/2
47750 procedure Delete (Container : in out Set;
47751 Item : in Element_Type);
47752
47753 50/2
47754 Delete checks if an element equivalent to Item is present in
47755 Container. If a match is found, Delete removes the element
47756 from the set; otherwise, Constraint_Error is propagated.
47757
47758 51/2
47759 procedure Delete (Container : in out Set;
47760 Position : in out Cursor);
47761
47762 52/2
47763 If Position equals No_Element, then Constraint_Error is
47764 propagated. If Position does not designate an element in
47765 Container, then Program_Error is propagated. Otherwise,
47766 Delete removes the element designated by Position from the
47767 set. Position is set to No_Element on return.
47768
47769 53/2
47770 procedure Union (Target : in out Set;
47771 Source : in Set);
47772
47773 54/2
47774 Union inserts into Target the elements of Source that are not
47775 equivalent to some element already in Target.
47776
47777 55/2
47778 function Union (Left, Right : Set) return Set;
47779
47780 56/2
47781 Returns a set comprising all of the elements of Left, and the
47782 elements of Right that are not equivalent to some element of
47783 Left.
47784
47785 57/2
47786 procedure Intersection (Target : in out Set;
47787 Source : in Set);
47788
47789 58/3
47790 Intersection deletes from Target the elements of Target that
47791 are not equivalent to some element of Source.
47792
47793 59/2
47794 function Intersection (Left, Right : Set) return Set;
47795
47796 60/2
47797 Returns a set comprising all the elements of Left that are
47798 equivalent to the some element of Right.
47799
47800 61/2
47801 procedure Difference (Target : in out Set;
47802 Source : in Set);
47803
47804 62/2
47805 If Target denotes the same object as Source, then Difference
47806 clears Target. Otherwise, it deletes from Target the elements
47807 that are equivalent to some element of Source.
47808
47809 63/2
47810 function Difference (Left, Right : Set) return Set;
47811
47812 64/2
47813 Returns a set comprising the elements of Left that are not
47814 equivalent to some element of Right.
47815
47816 65/2
47817 procedure Symmetric_Difference (Target : in out Set;
47818 Source : in Set);
47819
47820 66/2
47821 If Target denotes the same object as Source, then
47822 Symmetric_Difference clears Target. Otherwise, it deletes
47823 from Target the elements that are equivalent to some element
47824 of Source, and inserts into Target the elements of Source that
47825 are not equivalent to some element of Target.
47826
47827 67/2
47828 function Symmetric_Difference (Left, Right : Set) return Set;
47829
47830 68/2
47831 Returns a set comprising the elements of Left that are not
47832 equivalent to some element of Right, and the elements of Right
47833 that are not equivalent to some element of Left.
47834
47835 69/2
47836 function Overlap (Left, Right : Set) return Boolean;
47837
47838 70/3
47839 If an element of Left is equivalent to some element of Right,
47840 then Overlap returns True. Otherwise, it returns False.
47841
47842 71/2
47843 function Is_Subset (Subset : Set;
47844 Of_Set : Set) return Boolean;
47845
47846 72/3
47847 If an element of Subset is not equivalent to some element of
47848 Of_Set, then Is_Subset returns False. Otherwise, it returns
47849 True.
47850
47851 73/2
47852 function First (Container : Set) return Cursor;
47853
47854 74/2
47855 If Length (Container) = 0, then First returns No_Element.
47856 Otherwise, First returns a cursor that designates the first
47857 element in Container.
47858
47859 75/2
47860 function Next (Position : Cursor) return Cursor;
47861
47862 76/2
47863 Returns a cursor that designates the successor of the element
47864 designated by Position. If Position designates the last
47865 element, then No_Element is returned. If Position equals
47866 No_Element, then No_Element is returned.
47867
47868 77/2
47869 procedure Next (Position : in out Cursor);
47870
47871 78/2
47872 Equivalent to Position := Next (Position).
47873
47874 79/3
47875 This paragraph was deleted.
47876
47877 80/2
47878 function Find (Container : Set;
47879 Item : Element_Type) return Cursor;
47880
47881 81/2
47882 If Length (Container) equals 0, then Find returns No_Element.
47883 Otherwise, Find checks if an element equivalent to Item is
47884 present in Container. If a match is found, a cursor
47885 designating the matching element is returned; otherwise,
47886 No_Element is returned.
47887
47888 82/2
47889 function Contains (Container : Set;
47890 Item : Element_Type) return Boolean;
47891
47892 82.1/3
47893 Equivalent to Find (Container, Item) /= No_Element.
47894
47895 Paragraphs 83 and 84 were moved above.
47896
47897 85/2
47898 procedure Iterate
47899 (Container : in Set;
47900 Process : not null access procedure (Position : in Cursor));
47901
47902 86/3
47903 Iterate calls Process.all with a cursor that designates each
47904 element in Container, starting with the first element and
47905 moving the cursor according to the successor relation.
47906 Tampering with the cursors of Container is prohibited during
47907 the execution of a call on Process.all. Any exception raised
47908 by Process.all is propagated.
47909
47910 87/2
47911 Both Containers.Hashed_Set and Containers.Ordered_Set declare a nested
47912 generic package Generic_Keys, which provides operations that allow set
47913 manipulation in terms of a key (typically, a portion of an element)
47914 instead of a complete element. The formal function Key of Generic_Keys
47915 extracts a key value from an element. It is expected to return the same
47916 value each time it is called with a particular element. The behavior of
47917 Generic_Keys is unspecified if Key behaves in some other manner.
47918
47919 88/2
47920 A key is expected to unambiguously determine a single equivalence class
47921 for elements. The behavior of Generic_Keys is unspecified if the formal
47922 parameters of this package behave in some other manner.
47923
47924 89/2
47925 function Key (Position : Cursor) return Key_Type;
47926
47927 90/2
47928 Equivalent to Key (Element (Position)).
47929
47930 91/2
47931 The subprograms in package Generic_Keys named Contains, Find, Element,
47932 Delete, and Exclude, are equivalent to the corresponding subprograms in
47933 the parent package, with the difference that the Key parameter is used
47934 to locate an element in the set.
47935
47936 92/2
47937 procedure Replace (Container : in out Set;
47938 Key : in Key_Type;
47939 New_Item : in Element_Type);
47940
47941 93/2
47942 Equivalent to Replace_Element (Container, Find (Container,
47943 Key), New_Item).
47944
47945 94/2
47946 procedure Update_Element_Preserving_Key
47947 (Container : in out Set;
47948 Position : in Cursor;
47949 Process : not null access procedure
47950 (Element : in out Element_Type));
47951
47952 95/3
47953 If Position equals No_Element, then Constraint_Error is
47954 propagated; if Position does not designate an element in
47955 Container, then Program_Error is propagated. Otherwise,
47956 Update_Element_Preserving_Key uses Key to save the key value K
47957 of the element designated by Position.
47958 Update_Element_Preserving_Key then calls Process.all with that
47959 element as the argument. Tampering with the elements of
47960 Container is prohibited during the execution of the call on
47961 Process.all. Any exception raised by Process.all is
47962 propagated. After Process.all returns,
47963 Update_Element_Preserving_Key checks if K determines the same
47964 equivalence class as that for the new element; if not, the
47965 element is removed from the set and Program_Error is
47966 propagated.
47967
47968 96/2
47969 If Element_Type is unconstrained and definite, then the actual
47970 Element parameter of Process.all shall be unconstrained.
47971
47972 96.1/3
47973 type Reference_Type (Element : not null access Element_Type) is private
47974 with Implicit_Dereference => Element;
47975
47976 96.2/3
47977 The type Reference_Type needs finalization.
47978
47979 96.3/3
47980 The default initialization of an object of type Reference_Type
47981 propagates Program_Error.
47982
47983 96.4/3
47984 function Reference_Preserving_Key (Container : aliased in out Set;
47985 Position : in Cursor)
47986 return Reference_Type;
47987
47988 96.5/3
47989 This function (combined with the Implicit_Dereference aspect)
47990 provides a convenient way to gain read and write access to an
47991 individual element of a set given a cursor.
47992
47993 96.6/3
47994 If Position equals No_Element, then Constraint_Error is
47995 propagated; if Position does not designate an element in
47996 Container, then Program_Error is propagated. Otherwise,
47997 Reference_Preserving_Key uses Key to save the key value K;
47998 then returns an object whose discriminant is an access value
47999 that designates the element designated by Position. Tampering
48000 with the elements of Container is prohibited while the object
48001 returned by Reference_Preserving_Key exists and has not been
48002 finalized. When the object returned by
48003 Reference_Preserving_Key is finalized, a check is made if K
48004 determines the same equivalence class as that for the new
48005 element; if not, the element is removed from the set and
48006 Program_Error is propagated.
48007
48008 96.7/3
48009 function Constant_Reference (Container : aliased in Set;
48010 Key : in Key_Type)
48011 return Constant_Reference_Type;
48012
48013 96.8/3
48014 This function (combined with the Implicit_Dereference aspect)
48015 provides a convenient way to gain read access to an individual
48016 element of a set given a key value.
48017
48018 96.9/3
48019 Equivalent to Constant_Reference (Container, Find (Container,
48020 Key)).
48021
48022 96.10/3
48023 function Reference_Preserving_Key (Container : aliased in out Set;
48024 Key : in Key_Type)
48025 return Reference_Type;
48026
48027 96.11/3
48028 This function (combined with the Implicit_Dereference aspect)
48029 provides a convenient way to gain read and write access to an
48030 individual element of a set given a key value.
48031
48032 96.12/3
48033 Equivalent to Reference_Preserving_Key (Container, Find
48034 (Container, Key)).
48035
48036 _Bounded (Run-Time) Errors_
48037
48038 96.13/3
48039 It is a bounded error for the actual function associated with a generic
48040 formal subprogram, when called as part of an operation of a set package,
48041 to tamper with elements of any set parameter of the operation. Either
48042 Program_Error is raised, or the operation works as defined on the value
48043 of the set either prior to, or subsequent to, some or all of the
48044 modifications to the set.
48045
48046 96.14/3
48047 It is a bounded error to call any subprogram declared in the visible
48048 part of a set package when the associated container has been finalized.
48049 If the operation takes Container as an in out parameter, then it raises
48050 Constraint_Error or Program_Error. Otherwise, the operation either
48051 proceeds as it would for an empty container, or it raises
48052 Constraint_Error or Program_Error.
48053
48054 _Erroneous Execution_
48055
48056 97/2
48057 A Cursor value is invalid if any of the following have occurred since it
48058 was created:
48059
48060 98/2
48061 * The set that contains the element it designates has been finalized;
48062
48063 98.1/3
48064 * The set that contains the element it designates has been used as
48065 the Target of a call to Assign, or as the target of an
48066 assignment_statement;
48067
48068 99/2
48069 * The set that contains the element it designates has been used as
48070 the Source or Target of a call to Move; or
48071
48072 100/3
48073 * The element it designates has been removed from the set that
48074 previously contained the element.
48075
48076 101/2
48077 The result of "=" or Has_Element is unspecified if these functions are
48078 called with an invalid cursor parameter. Execution is erroneous if any
48079 other subprogram declared in Containers.Hashed_Sets or
48080 Containers.Ordered_Sets is called with an invalid cursor parameter.
48081
48082 101.1/3
48083 Execution is erroneous if the set associated with the result of a call
48084 to Reference or Constant_Reference is finalized before the result object
48085 returned by the call to Reference or Constant_Reference is finalized.
48086
48087 _Implementation Requirements_
48088
48089 102/2
48090 No storage associated with a Set object shall be lost upon assignment or
48091 scope exit.
48092
48093 103/3
48094 The execution of an assignment_statement for a set shall have the effect
48095 of copying the elements from the source set object to the target set
48096 object and changing the length of the target object to that of the
48097 source object.
48098
48099 _Implementation Advice_
48100
48101 104/2
48102 Move should not copy elements, and should minimize copying of internal
48103 data structures.
48104
48105 105/2
48106 If an exception is propagated from a set operation, no storage should be
48107 lost, nor any elements removed from a set unless specified by the
48108 operation.
48109
48110 \1f
48111 File: arm2012.info, Node: A.18.8, Next: A.18.9, Prev: A.18.7, Up: A.18
48112
48113 A.18.8 The Generic Package Containers.Hashed_Sets
48114 -------------------------------------------------
48115
48116 _Static Semantics_
48117
48118 1/2
48119 The generic library package Containers.Hashed_Sets has the following
48120 declaration:
48121
48122 2/3
48123 with Ada.Iterator_Interfaces;
48124 generic
48125 type Element_Type is private;
48126 with function Hash (Element : Element_Type) return Hash_Type;
48127 with function Equivalent_Elements (Left, Right : Element_Type)
48128 return Boolean;
48129 with function "=" (Left, Right : Element_Type) return Boolean is <>;
48130 package Ada.Containers.Hashed_Sets is
48131 pragma Preelaborate(Hashed_Sets);
48132 pragma Remote_Types(Hashed_Sets);
48133
48134 3/3
48135 type Set is tagged private
48136 with Constant_Indexing => Constant_Reference,
48137 Default_Iterator => Iterate,
48138 Iterator_Element => Element_Type;
48139 pragma Preelaborable_Initialization(Set);
48140
48141 4/2
48142 type Cursor is private;
48143 pragma Preelaborable_Initialization(Cursor);
48144
48145 5/2
48146 Empty_Set : constant Set;
48147
48148 6/2
48149 No_Element : constant Cursor;
48150
48151 6.1/3
48152 function Has_Element (Position : Cursor) return Boolean;
48153
48154 6.2/3
48155 package Set_Iterator_Interfaces is new
48156 Ada.Iterator_Interfaces (Cursor, Has_Element);
48157
48158 7/2
48159 function "=" (Left, Right : Set) return Boolean;
48160
48161 8/2
48162 function Equivalent_Sets (Left, Right : Set) return Boolean;
48163
48164 9/2
48165 function To_Set (New_Item : Element_Type) return Set;
48166
48167 10/2
48168 function Capacity (Container : Set) return Count_Type;
48169
48170 11/2
48171 procedure Reserve_Capacity (Container : in out Set;
48172 Capacity : in Count_Type);
48173
48174 12/2
48175 function Length (Container : Set) return Count_Type;
48176
48177 13/2
48178 function Is_Empty (Container : Set) return Boolean;
48179
48180 14/2
48181 procedure Clear (Container : in out Set);
48182
48183 15/2
48184 function Element (Position : Cursor) return Element_Type;
48185
48186 16/2
48187 procedure Replace_Element (Container : in out Set;
48188 Position : in Cursor;
48189 New_Item : in Element_Type);
48190
48191 17/2
48192 procedure Query_Element
48193 (Position : in Cursor;
48194 Process : not null access procedure (Element : in Element_Type));
48195
48196 17.1/3
48197 type Constant_Reference_Type
48198 (Element : not null access constant Element_Type) is private
48199 with Implicit_Dereference => Element;
48200
48201 17.2/3
48202 function Constant_Reference (Container : aliased in Set;
48203 Position : in Cursor)
48204 return Constant_Reference_Type;
48205
48206 17.3/3
48207 procedure Assign (Target : in out Set; Source : in Set);
48208
48209 17.4/3
48210 function Copy (Source : Set; Capacity : Count_Type := 0) return Set;
48211
48212 18/2
48213 procedure Move (Target : in out Set;
48214 Source : in out Set);
48215
48216 19/2
48217 procedure Insert (Container : in out Set;
48218 New_Item : in Element_Type;
48219 Position : out Cursor;
48220 Inserted : out Boolean);
48221
48222 20/2
48223 procedure Insert (Container : in out Set;
48224 New_Item : in Element_Type);
48225
48226 21/2
48227 procedure Include (Container : in out Set;
48228 New_Item : in Element_Type);
48229
48230 22/2
48231 procedure Replace (Container : in out Set;
48232 New_Item : in Element_Type);
48233
48234 23/2
48235 procedure Exclude (Container : in out Set;
48236 Item : in Element_Type);
48237
48238 24/2
48239 procedure Delete (Container : in out Set;
48240 Item : in Element_Type);
48241
48242 25/2
48243 procedure Delete (Container : in out Set;
48244 Position : in out Cursor);
48245
48246 26/2
48247 procedure Union (Target : in out Set;
48248 Source : in Set);
48249
48250 27/2
48251 function Union (Left, Right : Set) return Set;
48252
48253 28/2
48254 function "or" (Left, Right : Set) return Set renames Union;
48255
48256 29/2
48257 procedure Intersection (Target : in out Set;
48258 Source : in Set);
48259
48260 30/2
48261 function Intersection (Left, Right : Set) return Set;
48262
48263 31/2
48264 function "and" (Left, Right : Set) return Set renames Intersection;
48265
48266 32/2
48267 procedure Difference (Target : in out Set;
48268 Source : in Set);
48269
48270 33/2
48271 function Difference (Left, Right : Set) return Set;
48272
48273 34/2
48274 function "-" (Left, Right : Set) return Set renames Difference;
48275
48276 35/2
48277 procedure Symmetric_Difference (Target : in out Set;
48278 Source : in Set);
48279
48280 36/2
48281 function Symmetric_Difference (Left, Right : Set) return Set;
48282
48283 37/2
48284 function "xor" (Left, Right : Set) return Set
48285 renames Symmetric_Difference;
48286
48287 38/2
48288 function Overlap (Left, Right : Set) return Boolean;
48289
48290 39/2
48291 function Is_Subset (Subset : Set;
48292 Of_Set : Set) return Boolean;
48293
48294 40/2
48295 function First (Container : Set) return Cursor;
48296
48297 41/2
48298 function Next (Position : Cursor) return Cursor;
48299
48300 42/2
48301 procedure Next (Position : in out Cursor);
48302
48303 43/2
48304 function Find (Container : Set;
48305 Item : Element_Type) return Cursor;
48306
48307 44/2
48308 function Contains (Container : Set;
48309 Item : Element_Type) return Boolean;
48310
48311 45/3
48312 This paragraph was deleted.
48313
48314 46/2
48315 function Equivalent_Elements (Left, Right : Cursor)
48316 return Boolean;
48317
48318 47/2
48319 function Equivalent_Elements (Left : Cursor;
48320 Right : Element_Type)
48321 return Boolean;
48322
48323 48/2
48324 function Equivalent_Elements (Left : Element_Type;
48325 Right : Cursor)
48326 return Boolean;
48327
48328 49/2
48329 procedure Iterate
48330 (Container : in Set;
48331 Process : not null access procedure (Position : in Cursor));
48332
48333 49.1/3
48334 function Iterate (Container : in Set)
48335 return Set_Iterator_Interfaces.Forward_Iterator'Class;
48336
48337 50/2
48338 generic
48339 type Key_Type (<>) is private;
48340 with function Key (Element : Element_Type) return Key_Type;
48341 with function Hash (Key : Key_Type) return Hash_Type;
48342 with function Equivalent_Keys (Left, Right : Key_Type)
48343 return Boolean;
48344 package Generic_Keys is
48345
48346 51/2
48347 function Key (Position : Cursor) return Key_Type;
48348
48349 52/2
48350 function Element (Container : Set;
48351 Key : Key_Type)
48352 return Element_Type;
48353
48354 53/2
48355 procedure Replace (Container : in out Set;
48356 Key : in Key_Type;
48357 New_Item : in Element_Type);
48358
48359 54/2
48360 procedure Exclude (Container : in out Set;
48361 Key : in Key_Type);
48362
48363 55/2
48364 procedure Delete (Container : in out Set;
48365 Key : in Key_Type);
48366
48367 56/2
48368 function Find (Container : Set;
48369 Key : Key_Type)
48370 return Cursor;
48371
48372 57/2
48373 function Contains (Container : Set;
48374 Key : Key_Type)
48375 return Boolean;
48376
48377 58/2
48378 procedure Update_Element_Preserving_Key
48379 (Container : in out Set;
48380 Position : in Cursor;
48381 Process : not null access procedure
48382 (Element : in out Element_Type));
48383
48384 58.1/3
48385 type Reference_Type
48386 (Element : not null access Element_Type) is private
48387 with Implicit_Dereference => Element;
48388
48389 58.2/3
48390 function Reference_Preserving_Key (Container : aliased in out Set;
48391 Position : in Cursor)
48392 return Reference_Type;
48393
48394 58.3/3
48395 function Constant_Reference (Container : aliased in Set;
48396 Key : in Key_Type)
48397 return Constant_Reference_Type;
48398
48399 58.4/3
48400 function Reference_Preserving_Key (Container : aliased in out Set;
48401 Key : in Key_Type)
48402 return Reference_Type;
48403
48404 59/2
48405 end Generic_Keys;
48406
48407 60/2
48408 private
48409
48410 61/2
48411 ... -- not specified by the language
48412
48413 62/2
48414 end Ada.Containers.Hashed_Sets;
48415
48416 63/2
48417 An object of type Set contains an expandable hash table, which is used
48418 to provide direct access to elements. The capacity of an object of type
48419 Set is the maximum number of elements that can be inserted into the hash
48420 table prior to it being automatically expanded.
48421
48422 64/2
48423 Two elements E1 and E2 are defined to be equivalent if
48424 Equivalent_Elements (E1, E2) returns True.
48425
48426 65/2
48427 The actual function for the generic formal function Hash is expected to
48428 return the same value each time it is called with a particular element
48429 value. For any two equivalent elements, the actual for Hash is expected
48430 to return the same value. If the actual for Hash behaves in some other
48431 manner, the behavior of this package is unspecified. Which subprograms
48432 of this package call Hash, and how many times they call it, is
48433 unspecified.
48434
48435 66/2
48436 The actual function for the generic formal function Equivalent_Elements
48437 is expected to return the same value each time it is called with a
48438 particular pair of Element values. It should define an equivalence
48439 relationship, that is, be reflexive, symmetric, and transitive. If the
48440 actual for Equivalent_Elements behaves in some other manner, the
48441 behavior of this package is unspecified. Which subprograms of this
48442 package call Equivalent_Elements, and how many times they call it, is
48443 unspecified.
48444
48445 66.1/3
48446 If the actual function for the generic formal function "=" returns True
48447 for any pair of nonequivalent elements, then the behavior of the
48448 container function "=" is unspecified.
48449
48450 67/2
48451 If the value of an element stored in a set is changed other than by an
48452 operation in this package such that at least one of Hash or
48453 Equivalent_Elements give different results, the behavior of this package
48454 is unspecified.
48455
48456 68/2
48457 Which elements are the first element and the last element of a set, and
48458 which element is the successor of a given element, are unspecified,
48459 other than the general semantics described in *note A.18.7::.
48460
48461 69/2
48462 function Capacity (Container : Set) return Count_Type;
48463
48464 70/2
48465 Returns the capacity of Container.
48466
48467 71/2
48468 procedure Reserve_Capacity (Container : in out Set;
48469 Capacity : in Count_Type);
48470
48471 72/2
48472 Reserve_Capacity allocates a new hash table such that the
48473 length of the resulting set can become at least the value
48474 Capacity without requiring an additional call to
48475 Reserve_Capacity, and is large enough to hold the current
48476 length of Container. Reserve_Capacity then rehashes the
48477 elements in Container onto the new hash table. It replaces
48478 the old hash table with the new hash table, and then
48479 deallocates the old hash table. Any exception raised during
48480 allocation is propagated and Container is not modified.
48481
48482 73/2
48483 Reserve_Capacity tampers with the cursors of Container.
48484
48485 74/2
48486 procedure Clear (Container : in out Set);
48487
48488 75/2
48489 In addition to the semantics described in *note A.18.7::,
48490 Clear does not affect the capacity of Container.
48491
48492 75.1/3
48493 procedure Assign (Target : in out Set; Source : in Set);
48494
48495 75.2/3
48496 In addition to the semantics described in *note A.18.7::, if
48497 the length of Source is greater than the capacity of Target,
48498 Reserve_Capacity (Target, Length (Source)) is called before
48499 assigning any elements.
48500
48501 75.3/3
48502 function Copy (Source : Set; Capacity : Count_Type := 0) return Set;
48503
48504 75.4/3
48505 Returns a set whose elements are initialized from the elements
48506 of Source. If Capacity is 0, then the set capacity is the
48507 length of Source; if Capacity is equal to or greater than the
48508 length of Source, the set capacity is at least the specified
48509 value. Otherwise, the operation propagates Capacity_Error.
48510
48511 76/2
48512 procedure Insert (Container : in out Set;
48513 New_Item : in Element_Type;
48514 Position : out Cursor;
48515 Inserted : out Boolean);
48516
48517 77/2
48518 In addition to the semantics described in *note A.18.7::, if
48519 Length (Container) equals Capacity (Container), then Insert
48520 first calls Reserve_Capacity to increase the capacity of
48521 Container to some larger value.
48522
48523 78/2
48524 function First (Container : Set) return Cursor;
48525
48526 79/2
48527 If Length (Container) = 0, then First returns No_Element.
48528 Otherwise, First returns a cursor that designates the first
48529 hashed element in Container.
48530
48531 80/2
48532 function Equivalent_Elements (Left, Right : Cursor)
48533 return Boolean;
48534
48535 81/2
48536 Equivalent to Equivalent_Elements (Element (Left), Element
48537 (Right)).
48538
48539 82/2
48540 function Equivalent_Elements (Left : Cursor;
48541 Right : Element_Type) return Boolean;
48542
48543 83/2
48544 Equivalent to Equivalent_Elements (Element (Left), Right).
48545
48546 84/2
48547 function Equivalent_Elements (Left : Element_Type;
48548 Right : Cursor) return Boolean;
48549
48550 85/2
48551 Equivalent to Equivalent_Elements (Left, Element (Right)).
48552
48553 85.1/3
48554 function Iterate (Container : in Set)
48555 return Set_Iterator_Interfaces.Forward_Iterator'Class;
48556
48557 85.2/3
48558 Iterate returns an iterator object (see *note 5.5.1::) that
48559 will generate a value for a loop parameter (see *note 5.5.2::)
48560 designating each element in Container, starting with the first
48561 element and moving the cursor according to the successor
48562 relation. Tampering with the cursors of Container is
48563 prohibited while the iterator object exists (in particular, in
48564 the sequence_of_statements of the loop_statement whose
48565 iterator_specification denotes this object). The iterator
48566 object needs finalization.
48567
48568 86/2
48569 For any element E, the actual function for the generic formal function
48570 Generic_Keys.Hash is expected to be such that Hash (E) =
48571 Generic_Keys.Hash (Key (E)). If the actuals for Key or Generic_Keys.Hash
48572 behave in some other manner, the behavior of Generic_Keys is
48573 unspecified. Which subprograms of Generic_Keys call Generic_Keys.Hash,
48574 and how many times they call it, is unspecified.
48575
48576 87/2
48577 For any two elements E1 and E2, the boolean values Equivalent_Elements
48578 (E1, E2) and Equivalent_Keys (Key (E1), Key (E2)) are expected to be
48579 equal. If the actuals for Key or Equivalent_Keys behave in some other
48580 manner, the behavior of Generic_Keys is unspecified. Which subprograms
48581 of Generic_Keys call Equivalent_Keys, and how many times they call it,
48582 is unspecified.
48583
48584 _Implementation Advice_
48585
48586 88/2
48587 If N is the length of a set, the average time complexity of the
48588 subprograms Insert, Include, Replace, Delete, Exclude and Find that take
48589 an element parameter should be O(log N). The average time complexity of
48590 the subprograms that take a cursor parameter should be O(1). The
48591 average time complexity of Reserve_Capacity should be O(N).
48592
48593 \1f
48594 File: arm2012.info, Node: A.18.9, Next: A.18.10, Prev: A.18.8, Up: A.18
48595
48596 A.18.9 The Generic Package Containers.Ordered_Sets
48597 --------------------------------------------------
48598
48599 _Static Semantics_
48600
48601 1/2
48602 The generic library package Containers.Ordered_Sets has the following
48603 declaration:
48604
48605 2/3
48606 with Ada.Iterator_Interfaces;
48607 generic
48608 type Element_Type is private;
48609 with function "<" (Left, Right : Element_Type) return Boolean is <>;
48610 with function "=" (Left, Right : Element_Type) return Boolean is <>;
48611 package Ada.Containers.Ordered_Sets is
48612 pragma Preelaborate(Ordered_Sets);
48613 pragma Remote_Types(Ordered_Sets);
48614
48615 3/2
48616 function Equivalent_Elements (Left, Right : Element_Type) return Boolean;
48617
48618 4/3
48619 type Set is tagged private
48620 with Constant_Indexing => Constant_Reference,
48621 Default_Iterator => Iterate,
48622 Iterator_Element => Element_Type;
48623 pragma Preelaborable_Initialization(Set);
48624
48625 5/2
48626 type Cursor is private;
48627 pragma Preelaborable_Initialization(Cursor);
48628
48629 6/2
48630 Empty_Set : constant Set;
48631
48632 7/2
48633 No_Element : constant Cursor;
48634
48635 7.1/3
48636 function Has_Element (Position : Cursor) return Boolean;
48637
48638 7.2/3
48639 package Set_Iterator_Interfaces is new
48640 Ada.Iterator_Interfaces (Cursor, Has_Element);
48641
48642 8/2
48643 function "=" (Left, Right : Set) return Boolean;
48644
48645 9/2
48646 function Equivalent_Sets (Left, Right : Set) return Boolean;
48647
48648 10/2
48649 function To_Set (New_Item : Element_Type) return Set;
48650
48651 11/2
48652 function Length (Container : Set) return Count_Type;
48653
48654 12/2
48655 function Is_Empty (Container : Set) return Boolean;
48656
48657 13/2
48658 procedure Clear (Container : in out Set);
48659
48660 14/2
48661 function Element (Position : Cursor) return Element_Type;
48662
48663 15/2
48664 procedure Replace_Element (Container : in out Set;
48665 Position : in Cursor;
48666 New_Item : in Element_Type);
48667
48668 16/2
48669 procedure Query_Element
48670 (Position : in Cursor;
48671 Process : not null access procedure (Element : in Element_Type));
48672
48673 16.1/3
48674 type Constant_Reference_Type
48675 (Element : not null access constant Element_Type) is private
48676 with Implicit_Dereference => Element;
48677
48678 16.2/3
48679 function Constant_Reference (Container : aliased in Set;
48680 Position : in Cursor)
48681 return Constant_Reference_Type;
48682
48683 16.3/3
48684 procedure Assign (Target : in out Set; Source : in Set);
48685
48686 16.4/3
48687 function Copy (Source : Set) return Set;
48688
48689 17/2
48690 procedure Move (Target : in out Set;
48691 Source : in out Set);
48692
48693 18/2
48694 procedure Insert (Container : in out Set;
48695 New_Item : in Element_Type;
48696 Position : out Cursor;
48697 Inserted : out Boolean);
48698
48699 19/2
48700 procedure Insert (Container : in out Set;
48701 New_Item : in Element_Type);
48702
48703 20/2
48704 procedure Include (Container : in out Set;
48705 New_Item : in Element_Type);
48706
48707 21/2
48708 procedure Replace (Container : in out Set;
48709 New_Item : in Element_Type);
48710
48711 22/2
48712 procedure Exclude (Container : in out Set;
48713 Item : in Element_Type);
48714
48715 23/2
48716 procedure Delete (Container : in out Set;
48717 Item : in Element_Type);
48718
48719 24/2
48720 procedure Delete (Container : in out Set;
48721 Position : in out Cursor);
48722
48723 25/2
48724 procedure Delete_First (Container : in out Set);
48725
48726 26/2
48727 procedure Delete_Last (Container : in out Set);
48728
48729 27/2
48730 procedure Union (Target : in out Set;
48731 Source : in Set);
48732
48733 28/2
48734 function Union (Left, Right : Set) return Set;
48735
48736 29/2
48737 function "or" (Left, Right : Set) return Set renames Union;
48738
48739 30/2
48740 procedure Intersection (Target : in out Set;
48741 Source : in Set);
48742
48743 31/2
48744 function Intersection (Left, Right : Set) return Set;
48745
48746 32/2
48747 function "and" (Left, Right : Set) return Set renames Intersection;
48748
48749 33/2
48750 procedure Difference (Target : in out Set;
48751 Source : in Set);
48752
48753 34/2
48754 function Difference (Left, Right : Set) return Set;
48755
48756 35/2
48757 function "-" (Left, Right : Set) return Set renames Difference;
48758
48759 36/2
48760 procedure Symmetric_Difference (Target : in out Set;
48761 Source : in Set);
48762
48763 37/2
48764 function Symmetric_Difference (Left, Right : Set) return Set;
48765
48766 38/2
48767 function "xor" (Left, Right : Set) return Set renames
48768 Symmetric_Difference;
48769
48770 39/2
48771 function Overlap (Left, Right : Set) return Boolean;
48772
48773 40/2
48774 function Is_Subset (Subset : Set;
48775 Of_Set : Set) return Boolean;
48776
48777 41/2
48778 function First (Container : Set) return Cursor;
48779
48780 42/2
48781 function First_Element (Container : Set) return Element_Type;
48782
48783 43/2
48784 function Last (Container : Set) return Cursor;
48785
48786 44/2
48787 function Last_Element (Container : Set) return Element_Type;
48788
48789 45/2
48790 function Next (Position : Cursor) return Cursor;
48791
48792 46/2
48793 procedure Next (Position : in out Cursor);
48794
48795 47/2
48796 function Previous (Position : Cursor) return Cursor;
48797
48798 48/2
48799 procedure Previous (Position : in out Cursor);
48800
48801 49/2
48802 function Find (Container : Set;
48803 Item : Element_Type)
48804 return Cursor;
48805
48806 50/2
48807 function Floor (Container : Set;
48808 Item : Element_Type)
48809 return Cursor;
48810
48811 51/2
48812 function Ceiling (Container : Set;
48813 Item : Element_Type)
48814 return Cursor;
48815
48816 52/2
48817 function Contains (Container : Set;
48818 Item : Element_Type) return Boolean;
48819
48820 53/3
48821 This paragraph was deleted.
48822
48823 54/2
48824 function "<" (Left, Right : Cursor) return Boolean;
48825
48826 55/2
48827 function ">" (Left, Right : Cursor) return Boolean;
48828
48829 56/2
48830 function "<" (Left : Cursor; Right : Element_Type)
48831 return Boolean;
48832
48833 57/2
48834 function ">" (Left : Cursor; Right : Element_Type)
48835 return Boolean;
48836
48837 58/2
48838 function "<" (Left : Element_Type; Right : Cursor)
48839 return Boolean;
48840
48841 59/2
48842 function ">" (Left : Element_Type; Right : Cursor)
48843 return Boolean;
48844
48845 60/2
48846 procedure Iterate
48847 (Container : in Set;
48848 Process : not null access procedure (Position : in Cursor));
48849
48850 61/2
48851 procedure Reverse_Iterate
48852 (Container : in Set;
48853 Process : not null access procedure (Position : in Cursor));
48854
48855 61.1/3
48856 function Iterate (Container : in Set)
48857 return Set_Iterator_Interfaces.Reversible_Iterator'Class;
48858
48859 61.2/3
48860 function Iterate (Container : in Set; Start : in Cursor)
48861 return Set_Iterator_Interfaces.Reversible_Iterator'Class;
48862
48863 62/2
48864 generic
48865 type Key_Type (<>) is private;
48866 with function Key (Element : Element_Type) return Key_Type;
48867 with function "<" (Left, Right : Key_Type)
48868 return Boolean is <>;
48869 package Generic_Keys is
48870
48871 63/2
48872 function Equivalent_Keys (Left, Right : Key_Type)
48873 return Boolean;
48874
48875 64/2
48876 function Key (Position : Cursor) return Key_Type;
48877
48878 65/2
48879 function Element (Container : Set;
48880 Key : Key_Type)
48881 return Element_Type;
48882
48883 66/2
48884 procedure Replace (Container : in out Set;
48885 Key : in Key_Type;
48886 New_Item : in Element_Type);
48887
48888 67/2
48889 procedure Exclude (Container : in out Set;
48890 Key : in Key_Type);
48891
48892 68/2
48893 procedure Delete (Container : in out Set;
48894 Key : in Key_Type);
48895
48896 69/2
48897 function Find (Container : Set;
48898 Key : Key_Type)
48899 return Cursor;
48900
48901 70/2
48902 function Floor (Container : Set;
48903 Key : Key_Type)
48904 return Cursor;
48905
48906 71/2
48907 function Ceiling (Container : Set;
48908 Key : Key_Type)
48909 return Cursor;
48910
48911 72/2
48912 function Contains (Container : Set;
48913 Key : Key_Type) return Boolean;
48914
48915 73/2
48916 procedure Update_Element_Preserving_Key
48917 (Container : in out Set;
48918 Position : in Cursor;
48919 Process : not null access procedure
48920 (Element : in out Element_Type));
48921
48922 73.1/3
48923 type Reference_Type
48924 (Element : not null access Element_Type) is private
48925 with Implicit_Dereference => Element;
48926
48927 73.2/3
48928 function Reference_Preserving_Key (Container : aliased in out Set;
48929 Position : in Cursor)
48930 return Reference_Type;
48931
48932 73.3/3
48933 function Constant_Reference (Container : aliased in Set;
48934 Key : in Key_Type)
48935 return Constant_Reference_Type;
48936
48937 73.4/3
48938 function Reference_Preserving_Key (Container : aliased in out Set;
48939 Key : in Key_Type)
48940 return Reference_Type;
48941
48942 74/2
48943 end Generic_Keys;
48944
48945 75/2
48946 private
48947
48948 76/2
48949 ... -- not specified by the language
48950
48951 77/2
48952 end Ada.Containers.Ordered_Sets;
48953
48954 78/2
48955 Two elements E1 and E2 are equivalent if both E1 < E2 and E2 < E1 return
48956 False, using the generic formal "<" operator for elements. Function
48957 Equivalent_Elements returns True if Left and Right are equivalent, and
48958 False otherwise.
48959
48960 79/3
48961 The actual function for the generic formal function "<" on Element_Type
48962 values is expected to return the same value each time it is called with
48963 a particular pair of key values. It should define a strict weak
48964 ordering relationship (see *note A.18::). If the actual for "<" behaves
48965 in some other manner, the behavior of this package is unspecified.
48966 Which subprograms of this package call "<" and how many times they call
48967 it, is unspecified.
48968
48969 79.1/3
48970 If the actual function for the generic formal function "=" returns True
48971 for any pair of nonequivalent elements, then the behavior of the
48972 container function "=" is unspecified.
48973
48974 80/2
48975 If the value of an element stored in a set is changed other than by an
48976 operation in this package such that at least one of "<" or "=" give
48977 different results, the behavior of this package is unspecified.
48978
48979 81/3
48980 The first element of a nonempty set is the one which is less than all
48981 the other elements in the set. The last element of a nonempty set is
48982 the one which is greater than all the other elements in the set. The
48983 successor of an element is the smallest element that is larger than the
48984 given element. The predecessor of an element is the largest element
48985 that is smaller than the given element. All comparisons are done using
48986 the generic formal "<" operator for elements.
48987
48988 81.1/3
48989 function Copy (Source : Set) return Set;
48990
48991 81.2/3
48992 Returns a set whose elements are initialized from the
48993 corresponding elements of Source.
48994
48995 82/2
48996 procedure Delete_First (Container : in out Set);
48997
48998 83/3
48999 If Container is empty, Delete_First has no effect. Otherwise,
49000 the element designated by First (Container) is removed from
49001 Container. Delete_First tampers with the cursors of
49002 Container.
49003
49004 84/2
49005 procedure Delete_Last (Container : in out Set);
49006
49007 85/3
49008 If Container is empty, Delete_Last has no effect. Otherwise,
49009 the element designated by Last (Container) is removed from
49010 Container. Delete_Last tampers with the cursors of Container.
49011
49012 86/2
49013 function First_Element (Container : Set) return Element_Type;
49014
49015 87/2
49016 Equivalent to Element (First (Container)).
49017
49018 88/2
49019 function Last (Container : Set) return Cursor;
49020
49021 89/2
49022 Returns a cursor that designates the last element in
49023 Container. If Container is empty, returns No_Element.
49024
49025 90/2
49026 function Last_Element (Container : Set) return Element_Type;
49027
49028 91/2
49029 Equivalent to Element (Last (Container)).
49030
49031 92/2
49032 function Previous (Position : Cursor) return Cursor;
49033
49034 93/3
49035 If Position equals No_Element, then Previous returns
49036 No_Element. Otherwise, Previous returns a cursor designating
49037 the predecessor element of the one designated by Position. If
49038 Position designates the first element, then Previous returns
49039 No_Element.
49040
49041 94/2
49042 procedure Previous (Position : in out Cursor);
49043
49044 95/2
49045 Equivalent to Position := Previous (Position).
49046
49047 96/2
49048 function Floor (Container : Set;
49049 Item : Element_Type) return Cursor;
49050
49051 97/3
49052 Floor searches for the last element which is not greater than
49053 Item. If such an element is found, a cursor that designates
49054 it is returned. Otherwise, No_Element is returned.
49055
49056 98/2
49057 function Ceiling (Container : Set;
49058 Item : Element_Type) return Cursor;
49059
49060 99/3
49061 Ceiling searches for the first element which is not less than
49062 Item. If such an element is found, a cursor that designates
49063 it is returned. Otherwise, No_Element is returned.
49064
49065 100/2
49066 function "<" (Left, Right : Cursor) return Boolean;
49067
49068 101/2
49069 Equivalent to Element (Left) < Element (Right).
49070
49071 102/2
49072 function ">" (Left, Right : Cursor) return Boolean;
49073
49074 103/2
49075 Equivalent to Element (Right) < Element (Left).
49076
49077 104/2
49078 function "<" (Left : Cursor; Right : Element_Type) return Boolean;
49079
49080 105/2
49081 Equivalent to Element (Left) < Right.
49082
49083 106/2
49084 function ">" (Left : Cursor; Right : Element_Type) return Boolean;
49085
49086 107/2
49087 Equivalent to Right < Element (Left).
49088
49089 108/2
49090 function "<" (Left : Element_Type; Right : Cursor) return Boolean;
49091
49092 109/2
49093 Equivalent to Left < Element (Right).
49094
49095 110/2
49096 function ">" (Left : Element_Type; Right : Cursor) return Boolean;
49097
49098 111/2
49099 Equivalent to Element (Right) < Left.
49100
49101 112/2
49102 procedure Reverse_Iterate
49103 (Container : in Set;
49104 Process : not null access procedure (Position : in Cursor));
49105
49106 113/3
49107 Iterates over the elements in Container as per procedure
49108 Iterate, with the difference that the elements are traversed
49109 in predecessor order, starting with the last element.
49110
49111 113.1/3
49112 function Iterate (Container : in Set)
49113 return Set_Iterator_Interfaces.Reversible_Iterator'Class;
49114
49115 113.2/3
49116 Iterate returns a reversible iterator object (see *note
49117 5.5.1::) that will generate a value for a loop parameter (see
49118 *note 5.5.2::) designating each element in Container, starting
49119 with the first element and moving the cursor according to the
49120 successor relation when used as a forward iterator, and
49121 starting with the last element and moving the cursor according
49122 to the predecessor relation when used as a reverse iterator.
49123 Tampering with the cursors of Container is prohibited while
49124 the iterator object exists (in particular, in the
49125 sequence_of_statements of the loop_statement whose
49126 iterator_specification denotes this object). The iterator
49127 object needs finalization.
49128
49129 113.3/3
49130 function Iterate (Container : in Set; Start : in Cursor)
49131 return Set_Iterator_Interfaces.Reversible_Iterator'Class;
49132
49133 113.4/3
49134 If Start is not No_Element and does not designate an item in
49135 Container, then Program_Error is propagated. If Start is
49136 No_Element, then Constraint_Error is propagated. Otherwise,
49137 Iterate returns a reversible iterator object (see *note
49138 5.5.1::) that will generate a value for a loop parameter (see
49139 *note 5.5.2::) designating each element in Container, starting
49140 with the element designated by Start and moving the cursor
49141 according to the successor relation when used as a forward
49142 iterator, or moving the cursor according to the predecessor
49143 relation when used as a reverse iterator. Tampering with the
49144 cursors of Container is prohibited while the iterator object
49145 exists (in particular, in the sequence_of_statements of the
49146 loop_statement whose iterator_specification denotes this
49147 object). The iterator object needs finalization.
49148
49149 114/2
49150 For any two elements E1 and E2, the boolean values (E1 < E2) and
49151 (Key(E1) < Key(E2)) are expected to be equal. If the actuals for Key or
49152 Generic_Keys."<" behave in some other manner, the behavior of this
49153 package is unspecified. Which subprograms of this package call Key and
49154 Generic_Keys."<", and how many times the functions are called, is
49155 unspecified.
49156
49157 115/2
49158 In addition to the semantics described in *note A.18.7::, the
49159 subprograms in package Generic_Keys named Floor and Ceiling, are
49160 equivalent to the corresponding subprograms in the parent package, with
49161 the difference that the Key subprogram parameter is compared to elements
49162 in the container using the Key and "<" generic formal functions. The
49163 function named Equivalent_Keys in package Generic_Keys returns True if
49164 both Left < Right and Right < Left return False using the generic formal
49165 "<" operator, and returns True otherwise.
49166
49167 _Implementation Advice_
49168
49169 116/2
49170 If N is the length of a set, then the worst-case time complexity of the
49171 Insert, Include, Replace, Delete, Exclude and Find operations that take
49172 an element parameter should be O((log N)**2) or better. The worst-case
49173 time complexity of the subprograms that take a cursor parameter should
49174 be O(1).
49175
49176 \1f
49177 File: arm2012.info, Node: A.18.10, Next: A.18.11, Prev: A.18.9, Up: A.18
49178
49179 A.18.10 The Generic Package Containers.Multiway_Trees
49180 -----------------------------------------------------
49181
49182 1/3
49183 The language-defined generic package Containers.Multiway_Trees provides
49184 private types Tree and Cursor, and a set of operations for each type. A
49185 multiway tree container is well-suited to represent nested structures.
49186
49187 2/3
49188 A multiway tree container object manages a tree of internal nodes, each
49189 of which contains an element and pointers to the parent, first child,
49190 last child, next (successor) sibling, and previous (predecessor) sibling
49191 internal nodes. A cursor designates a particular node within a tree
49192 (and by extension the element contained in that node, if any). A cursor
49193 keeps designating the same node (and element) as long as the node is
49194 part of the container, even if the node is moved within the container.
49195
49196 3/3
49197 A subtree is a particular node (which roots the subtree) and all of its
49198 child nodes (including all of the children of the child nodes,
49199 recursively). There is a special node, the root, which is always
49200 present and has neither an associated element value nor any parent node.
49201 The root node provides a place to add nodes to an otherwise empty tree
49202 and represents the base of the tree.
49203
49204 4/3
49205 A node that has no children is called a leaf node. The ancestors of a
49206 node are the node itself, its parent node, the parent of the parent
49207 node, and so on until a node with no parent is reached. Similarly, the
49208 descendants of a node are the node itself, its child nodes, the children
49209 of each child node, and so on.
49210
49211 5/3
49212 The nodes of a subtree can be visited in several different orders. For
49213 a depth-first order, after visiting a node, the nodes of its child list
49214 are each visited in depth-first order, with each child node visited in
49215 natural order (first child to last child).
49216
49217 _Static Semantics_
49218
49219 6/3
49220 The generic library package Containers.Multiway_Trees has the following
49221 declaration:
49222
49223 7/3
49224 with Ada.Iterator_Interfaces;
49225 generic
49226 type Element_Type is private;
49227 with function "=" (Left, Right : Element_Type) return Boolean is <>;
49228 package Ada.Containers.Multiway_Trees is
49229 pragma Preelaborate(Multiway_Trees);
49230 pragma Remote_Types(Multiway_Trees);
49231
49232 8/3
49233 type Tree is tagged private
49234 with Constant_Indexing => Constant_Reference,
49235 Variable_Indexing => Reference,
49236 Default_Iterator => Iterate,
49237 Iterator_Element => Element_Type;
49238 pragma Preelaborable_Initialization(Tree);
49239
49240 9/3
49241 type Cursor is private;
49242 pragma Preelaborable_Initialization(Cursor);
49243
49244 10/3
49245 Empty_Tree : constant Tree;
49246
49247 11/3
49248 No_Element : constant Cursor;
49249
49250 12/3
49251 function Has_Element (Position : Cursor) return Boolean;
49252
49253 13/3
49254 package Tree_Iterator_Interfaces is new
49255 Ada.Iterator_Interfaces (Cursor, Has_Element);
49256
49257 14/3
49258 function Equal_Subtree (Left_Position : Cursor;
49259 Right_Position: Cursor) return Boolean;
49260
49261 15/3
49262 function "=" (Left, Right : Tree) return Boolean;
49263
49264 16/3
49265 function Is_Empty (Container : Tree) return Boolean;
49266
49267 17/3
49268 function Node_Count (Container : Tree) return Count_Type;
49269
49270 18/3
49271 function Subtree_Node_Count (Position : Cursor) return Count_Type;
49272
49273 19/3
49274 function Depth (Position : Cursor) return Count_Type;
49275
49276 20/3
49277 function Is_Root (Position : Cursor) return Boolean;
49278
49279 21/3
49280 function Is_Leaf (Position : Cursor) return Boolean;
49281
49282 22/3
49283 function Root (Container : Tree) return Cursor;
49284
49285 23/3
49286 procedure Clear (Container : in out Tree);
49287
49288 24/3
49289 function Element (Position : Cursor) return Element_Type;
49290
49291 25/3
49292 procedure Replace_Element (Container : in out Tree;
49293 Position : in Cursor;
49294 New_Item : in Element_Type);
49295
49296 26/3
49297 procedure Query_Element
49298 (Position : in Cursor;
49299 Process : not null access procedure (Element : in Element_Type));
49300
49301 27/3
49302 procedure Update_Element
49303 (Container : in out Tree;
49304 Position : in Cursor;
49305 Process : not null access procedure
49306 (Element : in out Element_Type));
49307
49308 28/3
49309 type Constant_Reference_Type
49310 (Element : not null access constant Element_Type) is private
49311 with Implicit_Dereference => Element;
49312
49313 29/3
49314 type Reference_Type (Element : not null access Element_Type) is private
49315 with Implicit_Dereference => Element;
49316
49317 30/3
49318 function Constant_Reference (Container : aliased in Tree;
49319 Position : in Cursor)
49320 return Constant_Reference_Type;
49321
49322 31/3
49323 function Reference (Container : aliased in out Tree;
49324 Position : in Cursor)
49325 return Reference_Type;
49326
49327 32/3
49328 procedure Assign (Target : in out Tree; Source : in Tree);
49329
49330 33/3
49331 function Copy (Source : Tree) return Tree;
49332
49333 34/3
49334 procedure Move (Target : in out Tree;
49335 Source : in out Tree);
49336
49337 35/3
49338 procedure Delete_Leaf (Container : in out Tree;
49339 Position : in out Cursor);
49340
49341 36/3
49342 procedure Delete_Subtree (Container : in out Tree;
49343 Position : in out Cursor);
49344
49345 37/3
49346 procedure Swap (Container : in out Tree;
49347 I, J : in Cursor);
49348
49349 38/3
49350 function Find (Container : Tree;
49351 Item : Element_Type)
49352 return Cursor;
49353
49354 39/3
49355 function Find_In_Subtree (Position : Cursor;
49356 Item : Element_Type)
49357 return Cursor;
49358
49359 40/3
49360 function Ancestor_Find (Position : Cursor;
49361 Item : Element_Type)
49362 return Cursor;
49363
49364 41/3
49365 function Contains (Container : Tree;
49366 Item : Element_Type) return Boolean;
49367
49368 42/3
49369 procedure Iterate
49370 (Container : in Tree;
49371 Process : not null access procedure (Position : in Cursor));
49372
49373 43/3
49374 procedure Iterate_Subtree
49375 (Position : in Cursor;
49376 Process : not null access procedure (Position : in Cursor));
49377
49378 44/3
49379 function Iterate (Container : in Tree)
49380 return Tree_Iterator_Interfaces.Forward_Iterator'Class;
49381
49382 45/3
49383 function Iterate_Subtree (Position : in Cursor)
49384 return Tree_Iterator_Interfaces.Forward_Iterator'Class;
49385
49386 46/3
49387 function Child_Count (Parent : Cursor) return Count_Type;
49388
49389 47/3
49390 function Child_Depth (Parent, Child : Cursor) return Count_Type;
49391
49392 48/3
49393 procedure Insert_Child (Container : in out Tree;
49394 Parent : in Cursor;
49395 Before : in Cursor;
49396 New_Item : in Element_Type;
49397 Count : in Count_Type := 1);
49398
49399 49/3
49400 procedure Insert_Child (Container : in out Tree;
49401 Parent : in Cursor;
49402 Before : in Cursor;
49403 New_Item : in Element_Type;
49404 Position : out Cursor;
49405 Count : in Count_Type := 1);
49406
49407 50/3
49408 procedure Insert_Child (Container : in out Tree;
49409 Parent : in Cursor;
49410 Before : in Cursor;
49411 Position : out Cursor;
49412 Count : in Count_Type := 1);
49413
49414 51/3
49415 procedure Prepend_Child (Container : in out Tree;
49416 Parent : in Cursor;
49417 New_Item : in Element_Type;
49418 Count : in Count_Type := 1);
49419
49420 52/3
49421 procedure Append_Child (Container : in out Tree;
49422 Parent : in Cursor;
49423 New_Item : in Element_Type;
49424 Count : in Count_Type := 1);
49425
49426 53/3
49427 procedure Delete_Children (Container : in out Tree;
49428 Parent : in Cursor);
49429
49430 54/3
49431 procedure Copy_Subtree (Target : in out Tree;
49432 Parent : in Cursor;
49433 Before : in Cursor;
49434 Source : in Cursor);
49435
49436 55/3
49437 procedure Splice_Subtree (Target : in out Tree;
49438 Parent : in Cursor;
49439 Before : in Cursor;
49440 Source : in out Tree;
49441 Position : in out Cursor);
49442
49443 56/3
49444 procedure Splice_Subtree (Container: in out Tree;
49445 Parent : in Cursor;
49446 Before : in Cursor;
49447 Position : in Cursor);
49448
49449 57/3
49450 procedure Splice_Children (Target : in out Tree;
49451 Target_Parent : in Cursor;
49452 Before : in Cursor;
49453 Source : in out Tree;
49454 Source_Parent : in Cursor);
49455
49456 58/3
49457 procedure Splice_Children (Container : in out Tree;
49458 Target_Parent : in Cursor;
49459 Before : in Cursor;
49460 Source_Parent : in Cursor);
49461
49462 59/3
49463 function Parent (Position : Cursor) return Cursor;
49464
49465 60/3
49466 function First_Child (Parent : Cursor) return Cursor;
49467
49468 61/3
49469 function First_Child_Element (Parent : Cursor) return Element_Type;
49470
49471 62/3
49472 function Last_Child (Parent : Cursor) return Cursor;
49473
49474 63/3
49475 function Last_Child_Element (Parent : Cursor) return Element_Type;
49476
49477 64/3
49478 function Next_Sibling (Position : Cursor) return Cursor;
49479
49480 65/3
49481 function Previous_Sibling (Position : Cursor) return Cursor;
49482
49483 66/3
49484 procedure Next_Sibling (Position : in out Cursor);
49485
49486 67/3
49487 procedure Previous_Sibling (Position : in out Cursor);
49488
49489 68/3
49490 procedure Iterate_Children
49491 (Parent : in Cursor;
49492 Process : not null access procedure (Position : in Cursor));
49493
49494 69/3
49495 procedure Reverse_Iterate_Children
49496 (Parent : in Cursor;
49497 Process : not null access procedure (Position : in Cursor));
49498
49499 70/3
49500 function Iterate_Children (Container : in Tree; Parent : in Cursor)
49501 return Tree_Iterator_Interfaces.Reversible_Iterator'Class;
49502
49503 71/3
49504 private
49505 ... -- not specified by the language
49506 end Ada.Containers.Multiway_Trees;
49507
49508 72/3
49509 The actual function for the generic formal function "=" on Element_Type
49510 values is expected to define a reflexive and symmetric relationship and
49511 return the same result value each time it is called with a particular
49512 pair of values. If it behaves in some other manner, the functions Find,
49513 Reverse_Find, Equal_Subtree, and "=" on tree values return an
49514 unspecified value. The exact arguments and number of calls of this
49515 generic formal function by the functions Find, Reverse_Find,
49516 Equal_Subtree, and "=" on tree values are unspecified.
49517
49518 73/3
49519 The type Tree is used to represent trees. The type Tree needs
49520 finalization (see *note 7.6::).
49521
49522 74/3
49523 Empty_Tree represents the empty Tree object. It contains only the root
49524 node (Node_Count (Empty_Tree) returns 1). If an object of type Tree is
49525 not otherwise initialized, it is initialized to the same value as
49526 Empty_Tree.
49527
49528 75/3
49529 No_Element represents a cursor that designates no element. If an object
49530 of type Cursor is not otherwise initialized, it is initialized to the
49531 same value as No_Element.
49532
49533 76/3
49534 The predefined "=" operator for type Cursor returns True if both cursors
49535 are No_Element, or designate the same element in the same container.
49536
49537 77/3
49538 Execution of the default implementation of the Input, Output, Read, or
49539 Write attribute of type Cursor raises Program_Error.
49540
49541 78/3
49542 Tree'Write for a Tree object T writes Node_Count(T) - 1 elements of the
49543 tree to the stream. It also may write additional information about the
49544 tree.
49545
49546 79/3
49547 Tree'Read reads the representation of a tree from the stream, and
49548 assigns to Item a tree with the same elements and structure as was
49549 written by Tree'Write.
49550
49551 80/3
49552 Some operations of this generic package have access-to-subprogram
49553 parameters. To ensure such operations are well-defined, they guard
49554 against certain actions by the designated subprogram. In particular,
49555 some operations check for "tampering with cursors" of a container
49556 because they depend on the set of elements of the container remaining
49557 constant, and others check for "tampering with elements" of a container
49558 because they depend on elements of the container not being replaced.
49559
49560 81/3
49561 A subprogram is said to tamper with cursors of a tree object T if:
49562
49563 82/3
49564 * it inserts or deletes elements of T, that is, it calls the Clear,
49565 Delete_Leaf, Insert_Child, Delete_Children, Delete_Subtree, or
49566 Copy_Subtree procedures with T as a parameter; or
49567
49568 83/3
49569 * it reorders the elements of T, that is, it calls the Splice_Subtree
49570 or Splice_Children procedures with T as a parameter; or
49571
49572 84/3
49573 * it finalizes T; or
49574
49575 85/3
49576 * it calls Assign with T as the Target parameter; or
49577
49578 86/3
49579 * it calls the Move procedure with T as a parameter.
49580
49581 87/3
49582 A subprogram is said to tamper with elements of a tree object T if:
49583
49584 88/3
49585 * it tampers with cursors of T; or
49586
49587 89/3
49588 * it replaces one or more elements of T, that is, it calls the
49589 Replace_Element or Swap procedures with T as a parameter.
49590
49591 90/3
49592 When tampering with cursors is prohibited for a particular tree object
49593 T, Program_Error is propagated by a call of any language-defined
49594 subprogram that is defined to tamper with the cursors of T, leaving T
49595 unmodified. Similarly, when tampering with elements is prohibited for a
49596 particular tree object T, Program_Error is propagated by a call of any
49597 language-defined subprogram that is defined to tamper with the elements
49598 of T (or tamper with the cursors of T), leaving T unmodified.
49599
49600 91/3
49601 function Has_Element (Position : Cursor) return Boolean;
49602
49603 92/3
49604 Returns True if Position designates an element, and returns
49605 False otherwise. In particular, Has_Element returns False if
49606 the cursor designates a root node or equals No_Element.
49607
49608 93/3
49609 function Equal_Subtree (Left_Position : Cursor;
49610 Right_Position: Cursor) return Boolean;
49611
49612 94/3
49613 If Left_Position or Right_Position equals No_Element,
49614 propagates Constraint_Error. If the number of child nodes of
49615 the element designated by Left_Position is different from the
49616 number of child nodes of the element designated by
49617 Right_Position, the function returns False. If Left_Position
49618 designates a root node and Right_Position does not, the
49619 function returns False. If Right_Position designates a root
49620 node and Left_Position does not, the function returns False.
49621 Unless both cursors designate a root node, the elements are
49622 compared using the generic formal equality operator. If the
49623 result of the element comparison is False, the function
49624 returns False. Otherwise, it calls Equal_Subtree on a cursor
49625 designating each child element of the element designated by
49626 Left_Position and a cursor designating the corresponding child
49627 element of the element designated by Right_Position. If any
49628 such call returns False, the function returns False;
49629 otherwise, it returns True. Any exception raised during the
49630 evaluation of element equality is propagated.
49631
49632 95/3
49633 function "=" (Left, Right : Tree) return Boolean;
49634
49635 96/3
49636 If Left and Right denote the same tree object, then the
49637 function returns True. Otherwise, it calls Equal_Subtree with
49638 cursors designating the root nodes of Left and Right; the
49639 result is returned. Any exception raised during the
49640 evaluation of Equal_Subtree is propagated.
49641
49642 97/3
49643 function Node_Count (Container : Tree) return Count_Type;
49644
49645 98/3
49646 Node_Count returns the number of nodes in Container.
49647
49648 99/3
49649 function Subtree_Node_Count (Position : Cursor) return Count_Type;
49650
49651 100/3
49652 If Position is No_Element, Subtree_Node_Count returns 0;
49653 otherwise, Subtree_Node_Count returns the number of nodes in
49654 the subtree that is rooted by Position.
49655
49656 101/3
49657 function Is_Empty (Container : Tree) return Boolean;
49658
49659 102/3
49660 Equivalent to Node_Count (Container) = 1.
49661
49662 103/3
49663 function Depth (Position : Cursor) return Count_Type;
49664
49665 104/3
49666 If Position equals No_Element, Depth returns 0; otherwise,
49667 Depth returns the number of ancestor nodes of the node
49668 designated by Position (including the node itself).
49669
49670 105/3
49671 function Is_Root (Position : Cursor) return Boolean;
49672
49673 106/3
49674 Is_Root returns True if the Position designates the root node
49675 of some tree; and returns False otherwise.
49676
49677 107/3
49678 function Is_Leaf (Position : Cursor) return Boolean;
49679
49680 108/3
49681 Is_Leaf returns True if Position designates a node that does
49682 not have any child nodes; and returns False otherwise.
49683
49684 109/3
49685 function Root (Container : Tree) return Cursor;
49686
49687 110/3
49688 Root returns a cursor that designates the root node of
49689 Container.
49690
49691 111/3
49692 procedure Clear (Container : in out Tree);
49693
49694 112/3
49695 Removes all the elements from Container.
49696
49697 113/3
49698 function Element (Position : Cursor) return Element_Type;
49699
49700 114/3
49701 If Position equals No_Element, then Constraint_Error is
49702 propagated; if Position designates the root node of a tree,
49703 then Program_Error is propagated. Otherwise, Element returns
49704 the element designated by Position.
49705
49706 115/3
49707 procedure Replace_Element (Container : in out Tree;
49708 Position : in Cursor;
49709 New_Item : in Element_Type);
49710
49711 116/3
49712 If Position equals No_Element, then Constraint_Error is
49713 propagated; if Position does not designate an element in
49714 Container (including if it designates the root node), then
49715 Program_Error is propagated. Otherwise, Replace_Element
49716 assigns the value New_Item to the element designated by
49717 Position.
49718
49719 117/3
49720 procedure Query_Element
49721 (Position : in Cursor;
49722 Process : not null access procedure (Element : in Element_Type));
49723
49724 118/3
49725 If Position equals No_Element, then Constraint_Error is
49726 propagated; if Position designates the root node of a tree,
49727 then Program_Error is propagated. Otherwise, Query_Element
49728 calls Process.all with the element designated by Position as
49729 the argument. Tampering with the elements of the tree that
49730 contains the element designated by Position is prohibited
49731 during the execution of the call on Process.all. Any
49732 exception raised by Process.all is propagated.
49733
49734 119/3
49735 procedure Update_Element
49736 (Container : in out Tree;
49737 Position : in Cursor;
49738 Process : not null access procedure
49739 (Element : in out Element_Type));
49740
49741 120/3
49742 If Position equals No_Element, then Constraint_Error is
49743 propagated; if Position does not designate an element in
49744 Container (including if it designates the root node), then
49745 Program_Error is propagated. Otherwise, Update_Element calls
49746 Process.all with the element designated by Position as the
49747 argument. Tampering with the elements of Container is
49748 prohibited during the execution of the call on Process.all.
49749 Any exception raised by Process.all is propagated.
49750
49751 121/3
49752 If Element_Type is unconstrained and definite, then the actual
49753 Element parameter of Process.all shall be unconstrained.
49754
49755 122/3
49756 type Constant_Reference_Type
49757 (Element : not null access constant Element_Type) is private
49758 with Implicit_Dereference => Element;
49759
49760 123/3
49761 type Reference_Type (Element : not null access Element_Type) is private
49762 with Implicit_Dereference => Element;
49763
49764 124/3
49765 The types Constant_Reference_Type and Reference_Type need
49766 finalization.
49767
49768 125/3
49769 The default initialization of an object of type
49770 Constant_Reference_Type or Reference_Type propagates
49771 Program_Error.
49772
49773 126/3
49774 function Constant_Reference (Container : aliased in Tree;
49775 Position : in Cursor)
49776 return Constant_Reference_Type;
49777
49778 127/3
49779 This function (combined with the Constant_Indexing and
49780 Implicit_Dereference aspects) provides a convenient way to
49781 gain read access to an individual element of a tree given a
49782 cursor.
49783
49784 128/3
49785 If Position equals No_Element, then Constraint_Error is
49786 propagated; if Position does not designate an element in
49787 Container, then Program_Error is propagated. Otherwise,
49788 Constant_Reference returns an object whose discriminant is an
49789 access value that designates the element designated by
49790 Position. Tampering with the elements of Container is
49791 prohibited while the object returned by Constant_Reference
49792 exists and has not been finalized.
49793
49794 129/3
49795 function Reference (Container : aliased in out Tree;
49796 Position : in Cursor)
49797 return Reference_Type;
49798
49799 130/3
49800 This function (combined with the Variable_Indexing and
49801 Implicit_Dereference aspects) provides a convenient way to
49802 gain read and write access to an individual element of a tree
49803 given a cursor.
49804
49805 131/3
49806 If Position equals No_Element, then Constraint_Error is
49807 propagated; if Position does not designate an element in
49808 Container, then Program_Error is propagated. Otherwise,
49809 Reference returns an object whose discriminant is an access
49810 value that designates the element designated by Position.
49811 Tampering with the elements of Container is prohibited while
49812 the object returned by Reference exists and has not been
49813 finalized.
49814
49815 132/3
49816 procedure Assign (Target : in out Tree; Source : in Tree);
49817
49818 133/3
49819 If Target denotes the same object as Source, the operation has
49820 no effect. Otherwise, the elements of Source are copied to
49821 Target as for an assignment_statement assigning Source to
49822 Target.
49823
49824 134/3
49825 function Copy (Source : Tree) return Tree;
49826
49827 135/3
49828 Returns a tree with the same structure as Source and whose
49829 elements are initialized from the corresponding elements of
49830 Source.
49831
49832 136/3
49833 procedure Move (Target : in out Tree;
49834 Source : in out Tree);
49835
49836 137/3
49837 If Target denotes the same object as Source, then the
49838 operation has no effect. Otherwise, Move first calls Clear
49839 (Target). Then, the nodes other than the root node in Source
49840 are moved to Target (in the same positions). After Move
49841 completes, Node_Count (Target) is the number of nodes
49842 originally in Source, and Node_Count (Source) is 1.
49843
49844 138/3
49845 procedure Delete_Leaf (Container : in out Tree;
49846 Position : in out Cursor);
49847
49848 139/3
49849 If Position equals No_Element, then Constraint_Error is
49850 propagated; if Position does not designate an element in
49851 Container (including if it designates the root node), then
49852 Program_Error is propagated. If the element designated by
49853 position has any child elements, then Constraint_Error is
49854 propagated. Otherwise, Delete_Leaf removes (from Container)
49855 the element designated by Position. Finally, Position is set
49856 to No_Element.
49857
49858 140/3
49859 procedure Delete_Subtree (Container : in out Tree;
49860 Position : in out Cursor);
49861
49862 141/3
49863 If Position equals No_Element, then Constraint_Error is
49864 propagated. If Position does not designate an element in
49865 Container (including if it designates the root node), then
49866 Program_Error is propagated. Otherwise, Delete_Subtree
49867 removes (from Container) the subtree designated by Position
49868 (that is, all descendants of the node designated by Position
49869 including the node itself), and Position is set to No_Element.
49870
49871 142/3
49872 procedure Swap (Container : in out Tree;
49873 I, J : in Cursor);
49874
49875 143/3
49876 If either I or J equals No_Element, then Constraint_Error is
49877 propagated. If either I or J do not designate an element in
49878 Container (including if either designates the root node), then
49879 Program_Error is propagated. Otherwise, Swap exchanges the
49880 values of the elements designated by I and J.
49881
49882 144/3
49883 function Find (Container : Tree;
49884 Item : Element_Type)
49885 return Cursor;
49886
49887 145/3
49888 Find searches the elements of Container for an element equal
49889 to Item (using the generic formal equality operator). The
49890 search starts at the root node. The search traverses the tree
49891 in a depth-first order. If no equal element is found, then
49892 Find returns No_Element. Otherwise, it returns a cursor
49893 designating the first equal element encountered.
49894
49895 146/3
49896 function Find_In_Subtree (Position : Cursor;
49897 Item : Element_Type)
49898 return Cursor;
49899
49900 147/3
49901 If Position equals No_Element, then Constraint_Error is
49902 propagated. Find_In_Subtree searches the subtree rooted by
49903 Position for an element equal to Item (using the generic
49904 formal equality operator). The search starts at the element
49905 designated by Position. The search traverses the subtree in a
49906 depth-first order. If no equal element is found, then Find
49907 returns No_Element. Otherwise, it returns a cursor
49908 designating the first equal element encountered.
49909
49910 148/3
49911 function Ancestor_Find (Position : Cursor;
49912 Item : Element_Type)
49913 return Cursor;
49914
49915 149/3
49916 If Position equals No_Element, then Constraint_Error is
49917 propagated. Otherwise, Ancestor_Find searches for an element
49918 equal to Item (using the generic formal equality operator).
49919 The search starts at the node designated by Position, and
49920 checks each ancestor proceeding toward the root of the
49921 subtree. If no equal element is found, then Ancestor_Find
49922 returns No_Element. Otherwise, it returns a cursor
49923 designating the first equal element encountered.
49924
49925 150/3
49926 function Contains (Container : Tree;
49927 Item : Element_Type) return Boolean;
49928
49929 151/3
49930 Equivalent to Find (Container, Item) /= No_Element.
49931
49932 152/3
49933 procedure Iterate
49934 (Container : in Tree;
49935 Process : not null access procedure (Position : in Cursor));
49936
49937 153/3
49938 Iterate calls Process.all with a cursor that designates each
49939 element in Container, starting with the root node and
49940 proceeding in a depth-first order. Tampering with the cursors
49941 of Container is prohibited during the execution of a call on
49942 Process.all. Any exception raised by Process.all is
49943 propagated.
49944
49945 154/3
49946 procedure Iterate_Subtree
49947 (Position : in Cursor;
49948 Process : not null access procedure (Position : in Cursor));
49949
49950 155/3
49951 If Position equals No_Element, then Constraint_Error is
49952 propagated. Otherwise, Iterate_Subtree calls Process.all with
49953 a cursor that designates each element in the subtree rooted by
49954 the node designated by Position, starting with the node
49955 designated by Position and proceeding in a depth-first order.
49956 Tampering with the cursors of the tree that contains the
49957 element designated by Position is prohibited during the
49958 execution of a call on Process.all. Any exception raised by
49959 Process.all is propagated.
49960
49961 156/3
49962 function Iterate (Container : in Tree)
49963 return Tree_Iterator_Interfaces.Forward_Iterator'Class;
49964
49965 157/3
49966 Iterate returns an iterator object (see *note 5.5.1::) that
49967 will generate a value for a loop parameter (see *note 5.5.2::)
49968 designating each node in Container, starting with the root
49969 node and proceeding in a depth-first order. Tampering with
49970 the cursors of Container is prohibited while the iterator
49971 object exists (in particular, in the sequence_of_statements of
49972 the loop_statement whose iterator_specification denotes this
49973 object). The iterator object needs finalization.
49974
49975 158/3
49976 function Iterate_Subtree (Position : in Cursor)
49977 return Tree_Iterator_Interfaces.Forward_Iterator'Class;
49978
49979 159/3
49980 If Position equals No_Element, then Constraint_Error is
49981 propagated. Otherwise, Iterate_Subtree returns an iterator
49982 object (see *note 5.5.1::) that will generate a value for a
49983 loop parameter (see *note 5.5.2::) designating each element in
49984 the subtree rooted by the node designated by Position,
49985 starting with the node designated by Position and proceeding
49986 in a depth-first order. If Position equals No_Element, then
49987 Constraint_Error is propagated. Tampering with the cursors of
49988 the container that contains the node designated by Position is
49989 prohibited while the iterator object exists (in particular, in
49990 the sequence_of_statements of the loop_statement whose
49991 iterator_specification denotes this object). The iterator
49992 object needs finalization.
49993
49994 160/3
49995 function Child_Count (Parent : Cursor) return Count_Type;
49996
49997 161/3
49998 Child_Count returns the number of child nodes of the node
49999 designated by Parent.
50000
50001 162/3
50002 function Child_Depth (Parent, Child : Cursor) return Count_Type;
50003
50004 163/3
50005 If Child or Parent is equal to No_Element, then
50006 Constraint_Error is propagated. Otherwise, Child_Depth
50007 returns the number of ancestor nodes of Child (including Child
50008 itself), up to but not including Parent; Program_Error is
50009 propagated if Parent is not an ancestor of Child.
50010
50011 164/3
50012 procedure Insert_Child (Container : in out Tree;
50013 Parent : in Cursor;
50014 Before : in Cursor;
50015 New_Item : in Element_Type;
50016 Count : in Count_Type := 1);
50017
50018 165/3
50019 If Parent equals No_Element, then Constraint_Error is
50020 propagated. If Parent does not designate a node in Container,
50021 then Program_Error is propagated. If Before is not equal to
50022 No_Element, and does not designate a node in Container, then
50023 Program_Error is propagated. If Before is not equal to
50024 No_Element, and Parent does not designate the parent node of
50025 the node designated by Before, then Constraint_Error is
50026 propagated. Otherwise, Insert_Child allocates Count nodes
50027 containing copies of New_Item and inserts them as children of
50028 Parent. If Parent already has child nodes, then the new nodes
50029 are inserted prior to the node designated by Before, or, if
50030 Before equals No_Element, the new nodes are inserted after the
50031 last existing child node of Parent. Any exception raised
50032 during allocation of internal storage is propagated, and
50033 Container is not modified.
50034
50035 166/3
50036 procedure Insert_Child (Container : in out Tree;
50037 Parent : in Cursor;
50038 Before : in Cursor;
50039 New_Item : in Element_Type;
50040 Position : out Cursor;
50041 Count : in Count_Type := 1);
50042
50043 167/3
50044 If Parent equals No_Element, then Constraint_Error is
50045 propagated. If Parent does not designate a node in Container,
50046 then Program_Error is propagated. If Before is not equal to
50047 No_Element, and does not designate a node in Container, then
50048 Program_Error is propagated. If Before is not equal to
50049 No_Element, and Parent does not designate the parent node of
50050 the node designated by Before, then Constraint_Error is
50051 propagated. Otherwise, Insert_Child allocates Count nodes
50052 containing copies of New_Item and inserts them as children of
50053 Parent. If Parent already has child nodes, then the new nodes
50054 are inserted prior to the node designated by Before, or, if
50055 Before equals No_Element, the new nodes are inserted after the
50056 last existing child node of Parent. Position designates the
50057 first newly-inserted node, or if Count equals 0, then Position
50058 is assigned the value of Before. Any exception raised during
50059 allocation of internal storage is propagated, and Container is
50060 not modified.
50061
50062 168/3
50063 procedure Insert_Child (Container : in out Tree;
50064 Parent : in Cursor;
50065 Before : in Cursor;
50066 Position : out Cursor;
50067 Count : in Count_Type := 1);
50068
50069 169/3
50070 If Parent equals No_Element, then Constraint_Error is
50071 propagated. If Parent does not designate a node in Container,
50072 then Program_Error is propagated. If Before is not equal to
50073 No_Element, and does not designate a node in Container, then
50074 Program_Error is propagated. If Before is not equal to
50075 No_Element, and Parent does not designate the parent node of
50076 the node designated by Before, then Constraint_Error is
50077 propagated. Otherwise, Insert_Child allocates Count nodes,
50078 the elements contained in the new nodes are initialized by
50079 default (see *note 3.3.1::), and the new nodes are inserted as
50080 children of Parent. If Parent already has child nodes, then
50081 the new nodes are inserted prior to the node designated by
50082 Before, or, if Before equals No_Element, the new nodes are
50083 inserted after the last existing child node of Parent.
50084 Position designates the first newly-inserted node, or if Count
50085 equals 0, then Position is assigned the value of Before. Any
50086 exception raised during allocation of internal storage is
50087 propagated, and Container is not modified.
50088
50089 170/3
50090 procedure Prepend_Child (Container : in out Tree;
50091 Parent : in Cursor;
50092 New_Item : in Element_Type;
50093 Count : in Count_Type := 1);
50094
50095 171/3
50096 Equivalent to Insert_Child (Container, Parent, First_Child
50097 (Container, Parent), New_Item, Count).
50098
50099 172/3
50100 procedure Append_Child (Container : in out Tree;
50101 Parent : in Cursor;
50102 New_Item : in Element_Type;
50103 Count : in Count_Type := 1);
50104
50105 173/3
50106 Equivalent to Insert_Child (Container, Parent, No_Element,
50107 New_Item, Count).
50108
50109 174/3
50110 procedure Delete_Children (Container : in out Tree;
50111 Parent : in Cursor);
50112
50113 175/3
50114 If Parent equals No_Element, then Constraint_Error is
50115 propagated. If Parent does not designate a node in Container,
50116 Program_Error is propagated. Otherwise, Delete_Children
50117 removes (from Container) all of the descendants of Parent
50118 other than Parent itself.
50119
50120 176/3
50121 procedure Copy_Subtree (Target : in out Tree;
50122 Parent : in Cursor;
50123 Before : in Cursor;
50124 Source : in Cursor);
50125
50126 177/3
50127 If Parent equals No_Element, then Constraint_Error is
50128 propagated. If Parent does not designate a node in Target,
50129 then Program_Error is propagated. If Before is not equal to
50130 No_Element, and does not designate a node in Target, then
50131 Program_Error is propagated. If Before is not equal to
50132 No_Element, and Parent does not designate the parent node of
50133 the node designated by Before, then Constraint_Error is
50134 propagated. If Source designates a root node, then
50135 Constraint_Error is propagated. If Source is equal to
50136 No_Element, then the operation has no effect. Otherwise, the
50137 subtree rooted by Source (which can be from any tree; it does
50138 not have to be a subtree of Target) is copied (new nodes are
50139 allocated to create a new subtree with the same structure as
50140 the Source subtree, with each element initialized from the
50141 corresponding element of the Source subtree) and inserted into
50142 Target as a child of Parent. If Parent already has child
50143 nodes, then the new nodes are inserted prior to the node
50144 designated by Before, or, if Before equals No_Element, the new
50145 nodes are inserted after the last existing child node of
50146 Parent. The parent of the newly created subtree is set to
50147 Parent, and the overall count of Target is incremented by
50148 Subtree_Node_Count (Source). Any exception raised during
50149 allocation of internal storage is propagated, and Container is
50150 not modified.
50151
50152 178/3
50153 procedure Splice_Subtree (Target : in out Tree;
50154 Parent : in Cursor;
50155 Before : in Cursor;
50156 Source : in out Tree;
50157 Position : in out Cursor);
50158
50159 179/3
50160 If Parent equals No_Element, then Constraint_Error is
50161 propagated. If Parent does not designate a node in Target,
50162 then Program_Error is propagated. If Before is not equal to
50163 No_Element, and does not designate a node in Target, then
50164 Program_Error is propagated. If Before is not equal to
50165 No_Element, and Parent does not designate the parent node of
50166 the node designated by Before, then Constraint_Error is
50167 propagated. If Position equals No_Element, Constraint_Error
50168 is propagated. If Position does not designate a node in
50169 Source or designates a root node, then Program_Error is
50170 propagated. If Source denotes the same object as Target,
50171 then: if Position equals Before there is no effect; if
50172 Position designates an ancestor of Parent (including Parent
50173 itself), Constraint_Error is propagated; otherwise, the
50174 subtree rooted by the element designated by Position is moved
50175 to be a child of Parent. If Parent already has child nodes,
50176 then the moved nodes are inserted prior to the node designated
50177 by Before, or, if Before equals No_Element, the moved nodes
50178 are inserted after the last existing child node of Parent. In
50179 each of these cases, Position and the count of Target are
50180 unchanged, and the parent of the element designated by
50181 Position is set to Parent.
50182
50183 180/3
50184 Otherwise (if Source does not denote the same object as
50185 Target), the subtree designated by Position is removed from
50186 Source and moved to Target. The subtree is inserted as a
50187 child of Parent. If Parent already has child nodes, then the
50188 moved nodes are inserted prior to the node designated by
50189 Before, or, if Before equals No_Element, the moved nodes are
50190 inserted after the last existing child node of Parent. In
50191 each of these cases, the count of Target is incremented by
50192 Subtree_Node_Count (Position), and the count of Source is
50193 decremented by Subtree_Node_Count (Position), Position is
50194 updated to represent an element in Target.
50195
50196 181/3
50197 procedure Splice_Subtree (Container: in out Tree;
50198 Parent : in Cursor;
50199 Before : in Cursor;
50200 Position : in Cursor);
50201
50202 182/3
50203 If Parent equals No_Element, then Constraint_Error is
50204 propagated. If Parent does not designate a node in Container,
50205 then Program_Error is propagated. If Before is not equal to
50206 No_Element, and does not designate a node in Container, then
50207 Program_Error is propagated. If Before is not equal to
50208 No_Element, and Parent does not designate the parent node of
50209 the node designated by Before, then Constraint_Error is
50210 propagated. If Position equals No_Element, Constraint_Error
50211 is propagated. If Position does not designate a node in
50212 Container or designates a root node, then Program_Error is
50213 propagated. If Position equals Before, there is no effect.
50214 If Position designates an ancestor of Parent (including Parent
50215 itself), Constraint_Error is propagated. Otherwise, the
50216 subtree rooted by the element designated by Position is moved
50217 to be a child of Parent. If Parent already has child nodes,
50218 then the moved nodes are inserted prior to the node designated
50219 by Before, or, if Before equals No_Element, the moved nodes
50220 are inserted after the last existing child node of Parent.
50221 The parent of the element designated by Position is set to
50222 Parent.
50223
50224 183/3
50225 procedure Splice_Children (Target : in out Tree;
50226 Target_Parent : in Cursor;
50227 Before : in Cursor;
50228 Source : in out Tree;
50229 Source_Parent : in Cursor);
50230
50231 184/3
50232 If Target_Parent equals No_Element, then Constraint_Error is
50233 propagated. If Target_Parent does not designate a node in
50234 Target, then Program_Error is propagated. If Before is not
50235 equal to No_Element, and does not designate an element in
50236 Target, then Program_Error is propagated. If Source_Parent
50237 equals No_Element, then Constraint_Error is propagated. If
50238 Source_Parent does not designate a node in Source, then
50239 Program_Error is propagated. If Before is not equal to
50240 No_Element, and Target_Parent does not designate the parent
50241 node of the node designated by Before, then Constraint_Error
50242 is propagated.
50243
50244 185/3
50245 If Source denotes the same object as Target, then:
50246
50247 186/3
50248 * if Target_Parent equals Source_Parent there is no effect;
50249 else
50250
50251 187/3
50252 * if Source_Parent is an ancestor of Target_Parent other
50253 than Target_Parent itself, then Constraint_Error is
50254 propagated; else
50255
50256 188/3
50257 * the child elements (and the further descendants) of
50258 Source_Parent are moved to be child elements of
50259 Target_Parent. If Target_Parent already has child
50260 elements, then the moved elements are inserted prior to
50261 the node designated by Before, or, if Before equals
50262 No_Element, the moved elements are inserted after the
50263 last existing child node of Target_Parent. The parent of
50264 each moved child element is set to Target_Parent.
50265
50266 189/3
50267 Otherwise (if Source does not denote the same object as
50268 Target), the child elements (and the further descendants) of
50269 Source_Parent are removed from Source and moved to Target.
50270 The child elements are inserted as children of Target_Parent.
50271 If Target_Parent already has child elements, then the moved
50272 elements are inserted prior to the node designated by Before,
50273 or, if Before equals No_Element, the moved elements are
50274 inserted after the last existing child node of Target_Parent.
50275 In each of these cases, the overall count of Target is
50276 incremented by Subtree_Node_Count (Source_Parent)-1, and the
50277 overall count of Source is decremented by Subtree_Node_Count
50278 (Source_Parent)-1.
50279
50280 190/3
50281 procedure Splice_Children (Container : in out Tree;
50282 Target_Parent : in Cursor;
50283 Before : in Cursor;
50284 Source_Parent : in Cursor);
50285
50286 191/3
50287 If Target_Parent equals No_Element, then Constraint_Error is
50288 propagated. If Target_Parent does not designate a node in
50289 Container, then Program_Error is propagated. If Before is not
50290 equal to No_Element, and does not designate an element in
50291 Container, then Program_Error is propagated. If Source_Parent
50292 equals No_Element, then Constraint_Error is propagated. If
50293 Source_Parent does not designate a node in Container, then
50294 Program_Error is propagated. If Before is not equal to
50295 No_Element, and Target_Parent does not designate the parent
50296 node of the node designated by Before, then Constraint_Error
50297 is propagated. If Target_Parent equals Source_Parent there is
50298 no effect. If Source_Parent is an ancestor of Target_Parent
50299 other than Target_Parent itself, then Constraint_Error is
50300 propagated. Otherwise, the child elements (and the further
50301 descendants) of Source_Parent are moved to be child elements
50302 of Target_Parent. If Target_Parent already has child
50303 elements, then the moved elements are inserted prior to the
50304 node designated by Before, or, if Before equals No_Element,
50305 the moved elements are inserted after the last existing child
50306 node of Target_Parent. The parent of each moved child element
50307 is set to Target_Parent.
50308
50309 192/3
50310 function Parent (Position : Cursor) return Cursor;
50311
50312 193/3
50313 If Position is equal to No_Element or designates a root node,
50314 No_Element is returned. Otherwise, a cursor designating the
50315 parent node of the node designated by Position is returned.
50316
50317 194/3
50318 function First_Child (Parent : Cursor) return Cursor;
50319
50320 195/3
50321 If Parent is equal to No_Element, then Constraint_Error is
50322 propagated. Otherwise, First_Child returns a cursor
50323 designating the first child node of the node designated by
50324 Parent; if there is no such node, No_Element is returned.
50325
50326 196/3
50327 function First_Child_Element (Parent : Cursor) return Element_Type;
50328
50329 197/3
50330 Equivalent to Element (First_Child (Parent)).
50331
50332 198/3
50333 function Last_Child (Parent : Cursor) return Cursor;
50334
50335 199/3
50336 If Parent is equal to No_Element, then Constraint_Error is
50337 propagated. Otherwise, Last_Child returns a cursor
50338 designating the last child node of the node designated by
50339 Parent; if there is no such node, No_Element is returned.
50340
50341 200/3
50342 function Last_Child_Element (Parent : Cursor) return Element_Type;
50343
50344 201/3
50345 Equivalent to Element (Last_Child (Parent)).
50346
50347 202/3
50348 function Next_Sibling (Position : Cursor) return Cursor;
50349
50350 203/3
50351 If Position equals No_Element or designates the last child
50352 node of its parent, then Next_Sibling returns the value
50353 No_Element. Otherwise, it returns a cursor that designates
50354 the successor (with the same parent) of the node designated by
50355 Position.
50356
50357 204/3
50358 function Previous_Sibling (Position : Cursor) return Cursor;
50359
50360 205/3
50361 If Position equals No_Element or designates the first child
50362 node of its parent, then Previous_Sibling returns the value
50363 No_Element. Otherwise, it returns a cursor that designates
50364 the predecessor (with the same parent) of the node designated
50365 by Position.
50366
50367 206/3
50368 procedure Next_Sibling (Position : in out Cursor);
50369
50370 207/3
50371 Equivalent to Position := Next_Sibling (Position);
50372
50373 208/3
50374 procedure Previous_Sibling (Position : in out Cursor);
50375
50376 209/3
50377 Equivalent to Position := Previous_Sibling (Position);
50378
50379 210/3
50380 procedure Iterate_Children
50381 (Parent : in Cursor;
50382 Process : not null access procedure (Position : in Cursor));
50383
50384 211/3
50385 If Parent equals No_Element, then Constraint_Error is
50386 propagated.
50387
50388 212/3
50389 Iterate_Children calls Process.all with a cursor that
50390 designates each child node of Parent, starting with the first
50391 child node and moving the cursor as per the Next_Sibling
50392 function.
50393
50394 213/3
50395 Tampering with the cursors of the tree containing Parent is
50396 prohibited during the execution of a call on Process.all. Any
50397 exception raised by Process.all is propagated.
50398
50399 214/3
50400 procedure Reverse_Iterate_Children
50401 (Parent : in Cursor;
50402 Process : not null access procedure (Position : in Cursor));
50403
50404 215/3
50405 If Parent equals No_Element, then Constraint_Error is
50406 propagated.
50407
50408 216/3
50409 Reverse_Iterate_Children calls Process.all with a cursor that
50410 designates each child node of Parent, starting with the last
50411 child node and moving the cursor as per the Previous_Sibling
50412 function.
50413
50414 217/3
50415 Tampering with the cursors of the tree containing Parent is
50416 prohibited during the execution of a call on Process.all. Any
50417 exception raised by Process.all is propagated.
50418
50419 218/3
50420 function Iterate_Children (Container : in Tree; Parent : in Cursor)
50421 return Tree_Iterator_Interfaces.Reversible_Iterator'Class;
50422
50423 219/3
50424 Iterate_Children returns a reversible iterator object (see
50425 *note 5.5.1::) that will generate a value for a loop parameter
50426 (see *note 5.5.2::) designating each child node of Parent. If
50427 Parent equals No_Element, then Constraint_Error is propagated.
50428 If Parent does not designate a node in Container, then
50429 Program_Error is propagated. Otherwise, when used as a
50430 forward iterator, the nodes are designated starting with the
50431 first child node and moving the cursor as per the function
50432 Next_Sibling; when used as a reverse iterator, the nodes are
50433 designated starting with the last child node and moving the
50434 cursor as per the function Previous_Sibling. Tampering with
50435 the cursors of Container is prohibited while the iterator
50436 object exists (in particular, in the sequence_of_statements of
50437 the loop_statement whose iterator_specification denotes this
50438 object). The iterator object needs finalization.
50439
50440 _Bounded (Run-Time) Errors_
50441
50442 220/3
50443 It is a bounded error for the actual function associated with a generic
50444 formal subprogram, when called as part of an operation of this package,
50445 to tamper with elements of any Tree parameter of the operation. Either
50446 Program_Error is raised, or the operation works as defined on the value
50447 of the Tree either prior to, or subsequent to, some or all of the
50448 modifications to the Tree.
50449
50450 221/3
50451 It is a bounded error to call any subprogram declared in the visible
50452 part of Containers.Multiway_Trees when the associated container has been
50453 finalized. If the operation takes Container as an in out parameter,
50454 then it raises Constraint_Error or Program_Error. Otherwise, the
50455 operation either proceeds as it would for an empty container, or it
50456 raises Constraint_Error or Program_Error.
50457
50458 _Erroneous Execution_
50459
50460 222/3
50461 A Cursor value is invalid if any of the following have occurred since it
50462 was created:
50463
50464 223/3
50465 * The tree that contains the element it designates has been
50466 finalized;
50467
50468 224/3
50469 * The tree that contains the element it designates has been used as
50470 the Source or Target of a call to Move;
50471
50472 225/3
50473 * The tree that contains the element it designates has been used as
50474 the Target of a call to Assign or the target of an
50475 assignment_statement;
50476
50477 226/3
50478 * The element it designates has been removed from the tree that
50479 previously contained the element.
50480
50481 227/3
50482 The result of "=" or Has_Element is unspecified if it is called with an
50483 invalid cursor parameter. Execution is erroneous if any other
50484 subprogram declared in Containers.Multiway_Trees is called with an
50485 invalid cursor parameter.
50486
50487 228/3
50488 Execution is erroneous if the tree associated with the result of a call
50489 to Reference or Constant_Reference is finalized before the result object
50490 returned by the call to Reference or Constant_Reference is finalized.
50491
50492 _Implementation Requirements_
50493
50494 229/3
50495 No storage associated with a multiway tree object shall be lost upon
50496 assignment or scope exit.
50497
50498 230/3
50499 The execution of an assignment_statement for a tree shall have the
50500 effect of copying the elements from the source tree object to the target
50501 tree object and changing the node count of the target object to that of
50502 the source object.
50503
50504 _Implementation Advice_
50505
50506 231/3
50507 Containers.Multiway_Trees should be implemented similarly to a multiway
50508 tree. In particular, if N is the overall number of nodes for a
50509 particular tree, then the worst-case time complexity of Element, Parent,
50510 First_Child, Last_Child, Next_Sibling, Previous_Sibling, Insert_Child
50511 with Count=1, and Delete should be O(log N).
50512
50513 232/3
50514 Move should not copy elements, and should minimize copying of internal
50515 data structures.
50516
50517 233/3
50518 If an exception is propagated from a tree operation, no storage should
50519 be lost, nor any elements removed from a tree unless specified by the
50520 operation.
50521
50522 \1f
50523 File: arm2012.info, Node: A.18.11, Next: A.18.12, Prev: A.18.10, Up: A.18
50524
50525 A.18.11 The Generic Package Containers.Indefinite_Vectors
50526 ---------------------------------------------------------
50527
50528 1/2
50529 The language-defined generic package Containers.Indefinite_Vectors
50530 provides a private type Vector and a set of operations. It provides the
50531 same operations as the package Containers.Vectors (see *note A.18.2::),
50532 with the difference that the generic formal Element_Type is indefinite.
50533
50534 _Static Semantics_
50535
50536 2/3
50537 The declaration of the generic library package
50538 Containers.Indefinite_Vectors has the same contents and semantics as
50539 Containers.Vectors except:
50540
50541 3/2
50542 * The generic formal Element_Type is indefinite.
50543
50544 4/2
50545 * The procedures with the profiles:
50546
50547 5/2
50548 procedure Insert (Container : in out Vector;
50549 Before : in Extended_Index;
50550 Count : in Count_Type := 1);
50551
50552 6/2
50553 procedure Insert (Container : in out Vector;
50554 Before : in Cursor;
50555 Position : out Cursor;
50556 Count : in Count_Type := 1);
50557
50558 7/2
50559 are omitted.
50560
50561 8/2
50562 * The actual Element parameter of access subprogram Process of
50563 Update_Element may be constrained even if Element_Type is
50564 unconstrained.
50565
50566 \1f
50567 File: arm2012.info, Node: A.18.12, Next: A.18.13, Prev: A.18.11, Up: A.18
50568
50569 A.18.12 The Generic Package Containers.Indefinite_Doubly_Linked_Lists
50570 ---------------------------------------------------------------------
50571
50572 1/2
50573 The language-defined generic package
50574 Containers.Indefinite_Doubly_Linked_Lists provides private types List
50575 and Cursor, and a set of operations for each type. It provides the same
50576 operations as the package Containers.Doubly_Linked_Lists (see *note
50577 A.18.3::), with the difference that the generic formal Element_Type is
50578 indefinite.
50579
50580 _Static Semantics_
50581
50582 2/3
50583 The declaration of the generic library package
50584 Containers.Indefinite_Doubly_Linked_Lists has the same contents and
50585 semantics as Containers.Doubly_Linked_Lists except:
50586
50587 3/2
50588 * The generic formal Element_Type is indefinite.
50589
50590 4/2
50591 * The procedure with the profile:
50592
50593 5/2
50594 procedure Insert (Container : in out List;
50595 Before : in Cursor;
50596 Position : out Cursor;
50597 Count : in Count_Type := 1);
50598
50599 6/2
50600 is omitted.
50601
50602 7/2
50603 * The actual Element parameter of access subprogram Process of
50604 Update_Element may be constrained even if Element_Type is
50605 unconstrained.
50606
50607 \1f
50608 File: arm2012.info, Node: A.18.13, Next: A.18.14, Prev: A.18.12, Up: A.18
50609
50610 A.18.13 The Generic Package Containers.Indefinite_Hashed_Maps
50611 -------------------------------------------------------------
50612
50613 1/2
50614 The language-defined generic package Containers.Indefinite_Hashed_Maps
50615 provides a map with the same operations as the package
50616 Containers.Hashed_Maps (see *note A.18.5::), with the difference that
50617 the generic formal types Key_Type and Element_Type are indefinite.
50618
50619 _Static Semantics_
50620
50621 2/3
50622 The declaration of the generic library package
50623 Containers.Indefinite_Hashed_Maps has the same contents and semantics as
50624 Containers.Hashed_Maps except:
50625
50626 3/2
50627 * The generic formal Key_Type is indefinite.
50628
50629 4/2
50630 * The generic formal Element_Type is indefinite.
50631
50632 5/2
50633 * The procedure with the profile:
50634
50635 6/2
50636 procedure Insert (Container : in out Map;
50637 Key : in Key_Type;
50638 Position : out Cursor;
50639 Inserted : out Boolean);
50640
50641 7/2
50642 is omitted.
50643
50644 8/2
50645 * The actual Element parameter of access subprogram Process of
50646 Update_Element may be constrained even if Element_Type is
50647 unconstrained.
50648
50649 \1f
50650 File: arm2012.info, Node: A.18.14, Next: A.18.15, Prev: A.18.13, Up: A.18
50651
50652 A.18.14 The Generic Package Containers.Indefinite_Ordered_Maps
50653 --------------------------------------------------------------
50654
50655 1/2
50656 The language-defined generic package Containers.Indefinite_Ordered_Maps
50657 provides a map with the same operations as the package
50658 Containers.Ordered_Maps (see *note A.18.6::), with the difference that
50659 the generic formal types Key_Type and Element_Type are indefinite.
50660
50661 _Static Semantics_
50662
50663 2/3
50664 The declaration of the generic library package
50665 Containers.Indefinite_Ordered_Maps has the same contents and semantics
50666 as Containers.Ordered_Maps except:
50667
50668 3/2
50669 * The generic formal Key_Type is indefinite.
50670
50671 4/2
50672 * The generic formal Element_Type is indefinite.
50673
50674 5/2
50675 * The procedure with the profile:
50676
50677 6/2
50678 procedure Insert (Container : in out Map;
50679 Key : in Key_Type;
50680 Position : out Cursor;
50681 Inserted : out Boolean);
50682
50683 7/2
50684 is omitted.
50685
50686 8/2
50687 * The actual Element parameter of access subprogram Process of
50688 Update_Element may be constrained even if Element_Type is
50689 unconstrained.
50690
50691 \1f
50692 File: arm2012.info, Node: A.18.15, Next: A.18.16, Prev: A.18.14, Up: A.18
50693
50694 A.18.15 The Generic Package Containers.Indefinite_Hashed_Sets
50695 -------------------------------------------------------------
50696
50697 1/2
50698 The language-defined generic package Containers.Indefinite_Hashed_Sets
50699 provides a set with the same operations as the package
50700 Containers.Hashed_Sets (see *note A.18.8::), with the difference that
50701 the generic formal type Element_Type is indefinite.
50702
50703 _Static Semantics_
50704
50705 2/3
50706 The declaration of the generic library package
50707 Containers.Indefinite_Hashed_Sets has the same contents and semantics as
50708 Containers.Hashed_Sets except:
50709
50710 3/2
50711 * The generic formal Element_Type is indefinite.
50712
50713 4/2
50714 * The actual Element parameter of access subprogram Process of
50715 Update_Element_Preserving_Key may be constrained even if
50716 Element_Type is unconstrained.
50717
50718 \1f
50719 File: arm2012.info, Node: A.18.16, Next: A.18.17, Prev: A.18.15, Up: A.18
50720
50721 A.18.16 The Generic Package Containers.Indefinite_Ordered_Sets
50722 --------------------------------------------------------------
50723
50724 1/2
50725 The language-defined generic package Containers.Indefinite_Ordered_Sets
50726 provides a set with the same operations as the package
50727 Containers.Ordered_Sets (see *note A.18.9::), with the difference that
50728 the generic formal type Element_Type is indefinite.
50729
50730 _Static Semantics_
50731
50732 2/3
50733 The declaration of the generic library package
50734 Containers.Indefinite_Ordered_Sets has the same contents and semantics
50735 as Containers.Ordered_Sets except:
50736
50737 3/2
50738 * The generic formal Element_Type is indefinite.
50739
50740 4/2
50741 * The actual Element parameter of access subprogram Process of
50742 Update_Element_Preserving_Key may be constrained even if
50743 Element_Type is unconstrained.
50744
50745 \1f
50746 File: arm2012.info, Node: A.18.17, Next: A.18.18, Prev: A.18.16, Up: A.18
50747
50748 A.18.17 The Generic Package Containers.Indefinite_Multiway_Trees
50749 ----------------------------------------------------------------
50750
50751 1/3
50752 The language-defined generic package
50753 Containers.Indefinite_Multiway_Trees provides a multiway tree with the
50754 same operations as the package Containers.Multiway_Trees (see *note
50755 A.18.10::), with the difference that the generic formal Element_Type is
50756 indefinite.
50757
50758 _Static Semantics_
50759
50760 2/3
50761 The declaration of the generic library package
50762 Containers.Indefinite_Multiway_Trees has the same contents and semantics
50763 as Containers.Multiway_Trees except:
50764
50765 3/3
50766 * The generic formal Element_Type is indefinite.
50767
50768 4/3
50769 * The procedure with the profile:
50770
50771 5/3
50772 procedure Insert_Child (Container : in out Tree;
50773 Parent : in Cursor;
50774 Before : in Cursor;
50775 Position : out Cursor;
50776 Count : in Count_Type := 1);
50777
50778 6/3
50779 is omitted.
50780
50781 7/3
50782 * The actual Element parameter of access subprogram Process of
50783 Update_Element may be constrained even if Element_Type is
50784 unconstrained.
50785
50786 \1f
50787 File: arm2012.info, Node: A.18.18, Next: A.18.19, Prev: A.18.17, Up: A.18
50788
50789 A.18.18 The Generic Package Containers.Indefinite_Holders
50790 ---------------------------------------------------------
50791
50792 1/3
50793 The language-defined generic package Containers.Indefinite_Holders
50794 provides a private type Holder and a set of operations for that type. A
50795 holder container holds a single element of an indefinite type.
50796
50797 2/3
50798 A holder container allows the declaration of an object that can be used
50799 like an uninitialized variable or component of an indefinite type.
50800
50801 3/3
50802 A holder container may be empty. An empty holder does not contain an
50803 element.
50804
50805 _Static Semantics_
50806
50807 4/3
50808 The generic library package Containers.Indefinite_Holders has the
50809 following declaration:
50810
50811 5/3
50812 generic
50813 type Element_Type (<>) is private;
50814 with function "=" (Left, Right : Element_Type) return Boolean is <>;
50815 package Ada.Containers.Indefinite_Holders is
50816 pragma Preelaborate(Indefinite_Holders);
50817 pragma Remote_Types(Indefinite_Holders);
50818
50819 6/3
50820 type Holder is tagged private;
50821 pragma Preelaborable_Initialization (Holder);
50822
50823 7/3
50824 Empty_Holder : constant Holder;
50825
50826 8/3
50827 function "=" (Left, Right : Holder) return Boolean;
50828
50829 9/3
50830 function To_Holder (New_Item : Element_Type) return Holder;
50831
50832 10/3
50833 function Is_Empty (Container : Holder) return Boolean;
50834
50835 11/3
50836 procedure Clear (Container : in out Holder);
50837
50838 12/3
50839 function Element (Container : Holder) return Element_Type;
50840
50841 13/3
50842 procedure Replace_Element (Container : in out Holder;
50843 New_Item : in Element_Type);
50844
50845 14/3
50846 procedure Query_Element
50847 (Container : in Holder;
50848 Process : not null access procedure (Element : in Element_Type));
50849
50850 15/3
50851 procedure Update_Element
50852 (Container : in out Holder;
50853 Process : not null access procedure (Element : in out Element_Type));
50854
50855 16/3
50856 type Constant_Reference_Type
50857 (Element : not null access constant Element_Type) is private
50858 with Implicit_Dereference => Element;
50859
50860 17/3
50861 type Reference_Type (Element : not null access Element_Type) is private
50862 with Implicit_Dereference => Element;
50863
50864 18/3
50865 function Constant_Reference (Container : aliased in Holder)
50866 return Constant_Reference_Type;
50867
50868 19/3
50869 function Reference (Container : aliased in out Holder)
50870 return Reference_Type;
50871
50872 20/3
50873 procedure Assign (Target : in out Holder; Source : in Holder);
50874
50875 21/3
50876 function Copy (Source : Holder) return Holder;
50877
50878 22/3
50879 procedure Move (Target : in out Holder; Source : in out Holder);
50880
50881 23/3
50882 private
50883
50884 24/3
50885 ... -- not specified by the language
50886
50887 25/3
50888 end Ada.Containers.Indefinite_Holders;
50889
50890 26/3
50891 The actual function for the generic formal function "=" on Element_Type
50892 values is expected to define a reflexive and symmetric relationship and
50893 return the same result value each time it is called with a particular
50894 pair of values. If it behaves in some other manner, the function "=" on
50895 holder values returns an unspecified value. The exact arguments and
50896 number of calls of this generic formal function by the function "=" on
50897 holder values are unspecified.
50898
50899 27/3
50900 The type Holder is used to represent holder containers. The type Holder
50901 needs finalization (see *note 7.6::).
50902
50903 28/3
50904 Empty_Holder represents an empty holder object. If an object of type
50905 Holder is not otherwise initialized, it is initialized to the same value
50906 as Empty_Holder.
50907
50908 29/3
50909 Some operations of this generic package have access-to-subprogram
50910 parameters. To ensure such operations are well-defined, they guard
50911 against certain actions by the designated subprogram. In particular,
50912 some operations check for "tampering with the element" of a container
50913 because they depend on the element of the container not being replaced.
50914
50915 30/3
50916 A subprogram is said to tamper with the element of a holder object H if:
50917
50918 31/3
50919 * It clears the element contained by H, that is, it calls the Clear
50920 procedure with H as a parameter;
50921
50922 32/3
50923 * It replaces the element contained by H, that is, it calls the
50924 Replace_Element procedure with H as a parameter;
50925
50926 33/3
50927 * It calls the Move procedure with H as a parameter;
50928
50929 34/3
50930 * It finalizes H.
50931
50932 35/3
50933 When tampering with the element is prohibited for a particular holder
50934 object H, Program_Error is propagated by a call of any language-defined
50935 subprogram that is defined to tamper with the element of H, leaving H
50936 unmodified.
50937
50938 36/3
50939 function "=" (Left, Right : Holder) return Boolean;
50940
50941 37/3
50942 If Left and Right denote the same holder object, then the
50943 function returns True. Otherwise, it compares the element
50944 contained in Left to the element contained in Right using the
50945 generic formal equality operator, returning the result of that
50946 operation. Any exception raised during the evaluation of
50947 element equality is propagated.
50948
50949 38/3
50950 function To_Holder (New_Item : Element_Type) return Holder;
50951
50952 39/3
50953 Returns a nonempty holder containing an element initialized to
50954 New_Item.
50955
50956 40/3
50957 function Is_Empty (Container : Holder) return Boolean;
50958
50959 41/3
50960 Returns True if Container is empty, and False if it contains
50961 an element.
50962
50963 42/3
50964 procedure Clear (Container : in out Holder);
50965
50966 43/3
50967 Removes the element from Container. Container is empty after
50968 a successful Clear operation.
50969
50970 44/3
50971 function Element (Container : Holder) return Element_Type;
50972
50973 45/3
50974 If Container is empty, Constraint_Error is propagated.
50975 Otherwise, returns the element stored in Container.
50976
50977 46/3
50978 procedure Replace_Element (Container : in out Holder;
50979 New_Item : in Element_Type);
50980
50981 47/3
50982 Replace_Element assigns the value New_Item into Container,
50983 replacing any preexisting content of Container. Container is
50984 not empty after a successful call to Replace_Element.
50985
50986 48/3
50987 procedure Query_Element
50988 (Container : in Holder;
50989 Process : not null access procedure (Element : in Element_Type));
50990
50991 49/3
50992 If Container is empty, Constraint_Error is propagated.
50993 Otherwise, Query_Element calls Process.all with the contained
50994 element as the argument. Tampering with the element of
50995 Container is prohibited during the execution of the call on
50996 Process.all. Any exception raised by Process.all is
50997 propagated.
50998
50999 50/3
51000 procedure Update_Element
51001 (Container : in out Holder;
51002 Process : not null access procedure (Element : in out Element_Type));
51003
51004 51/3
51005 If Container is empty, Constraint_Error is propagated.
51006 Otherwise, Update_Element calls Process.all with the contained
51007 element as the argument. Tampering with the element of
51008 Container is prohibited during the execution of the call on
51009 Process.all. Any exception raised by Process.all is
51010 propagated.
51011
51012 52/3
51013 type Constant_Reference_Type
51014 (Element : not null access constant Element_Type) is private
51015 with Implicit_Dereference => Element;
51016
51017 53/3
51018 type Reference_Type (Element : not null access Element_Type) is private
51019 with Implicit_Dereference => Element;
51020
51021 54/3
51022 The types Constant_Reference_Type and Reference_Type need
51023 finalization.
51024
51025 55/3
51026 The default initialization of an object of type
51027 Constant_Reference_Type or Reference_Type propagates
51028 Program_Error.
51029
51030 56/3
51031 function Constant_Reference (Container : aliased in Holder)
51032 return Constant_Reference_Type;
51033
51034 57/3
51035 This function (combined with the Implicit_Dereference aspect)
51036 provides a convenient way to gain read access to the contained
51037 element of a holder container.
51038
51039 58/3
51040 If Container is empty, Constraint_Error is propagated.
51041 Otherwise, Constant_Reference returns an object whose
51042 discriminant is an access value that designates the contained
51043 element. Tampering with the elements of Container is
51044 prohibited while the object returned by Constant_Reference
51045 exists and has not been finalized.
51046
51047 59/3
51048 function Reference (Container : aliased in out Holder)
51049 return Reference_Type;
51050
51051 60/3
51052 This function (combined with the Implicit_Dereference aspects)
51053 provides a convenient way to gain read and write access to the
51054 contained element of a holder container.
51055
51056 61/3
51057 If Container is empty, Constraint_Error is propagated.
51058 Otherwise, Reference returns an object whose discriminant is
51059 an access value that designates the contained element.
51060 Tampering with the elements of Container is prohibited while
51061 the object returned by Reference exists and has not been
51062 finalized.
51063
51064 62/3
51065 procedure Assign (Target : in out Holder; Source : in Holder);
51066
51067 63/3
51068 If Target denotes the same object as Source, the operation has
51069 no effect. If Source is empty, Clear (Target) is called.
51070 Otherwise, Replace_Element (Target, Element (Source)) is
51071 called.
51072
51073 64/3
51074 function Copy (Source : Holder) return Holder;
51075
51076 65/3
51077 If Source is empty, returns an empty holder container;
51078 otherwise, returns To_Holder (Element (Source)).
51079
51080 66/3
51081 procedure Move (Target : in out Holder; Source : in out Holder);
51082
51083 67/3
51084 If Target denotes the same object as Source, then the
51085 operation has no effect. Otherwise, the element contained by
51086 Source (if any) is removed from Source and inserted into
51087 Target, replacing any preexisting content. Source is empty
51088 after a successful call to Move.
51089
51090 _Bounded (Run-Time) Errors_
51091
51092 68/3
51093 It is a bounded error for the actual function associated with a generic
51094 formal subprogram, when called as part of an operation of this package,
51095 to tamper with the element of any Holder parameter of the operation.
51096 Either Program_Error is raised, or the operation works as defined on the
51097 value of the Holder either prior to, or subsequent to, some or all of
51098 the modifications to the Holder.
51099
51100 69/3
51101 It is a bounded error to call any subprogram declared in the visible
51102 part of Containers.Indefinite_Holders when the associated container has
51103 been finalized. If the operation takes Container as an in out
51104 parameter, then it raises Constraint_Error or Program_Error. Otherwise,
51105 the operation either proceeds as it would for an empty container, or it
51106 raises Constraint_Error or Program_Error.
51107
51108 _Erroneous Execution_
51109
51110 70/3
51111 Execution is erroneous if the holder container associated with the
51112 result of a call to Reference or Constant_Reference is finalized before
51113 the result object returned by the call to Reference or
51114 Constant_Reference is finalized.
51115
51116 _Implementation Requirements_
51117
51118 71/3
51119 No storage associated with a holder object shall be lost upon assignment
51120 or scope exit.
51121
51122 72/3
51123 The execution of an assignment_statement for a holder container shall
51124 have the effect of copying the element (if any) from the source holder
51125 object to the target holder object.
51126
51127 _Implementation Advice_
51128
51129 73/3
51130 Move should not copy the element, and should minimize copying of
51131 internal data structures.
51132
51133 74/3
51134 If an exception is propagated from a holder operation, no storage should
51135 be lost, nor should the element be removed from a holder container
51136 unless specified by the operation.
51137
51138 \1f
51139 File: arm2012.info, Node: A.18.19, Next: A.18.20, Prev: A.18.18, Up: A.18
51140
51141 A.18.19 The Generic Package Containers.Bounded_Vectors
51142 ------------------------------------------------------
51143
51144 1/3
51145 The language-defined generic package Containers.Bounded_Vectors provides
51146 a private type Vector and a set of operations. It provides the same
51147 operations as the package Containers.Vectors (see *note A.18.2::), with
51148 the difference that the maximum storage is bounded.
51149
51150 _Static Semantics_
51151
51152 2/3
51153 The declaration of the generic library package
51154 Containers.Bounded_Vectors has the same contents and semantics as
51155 Containers.Vectors except:
51156
51157 3/3
51158 * The pragma Preelaborate is replaced with pragma Pure.
51159
51160 4/3
51161 * The type Vector is declared with a discriminant that specifies the
51162 capacity:
51163
51164 5/3
51165 type Vector (Capacity : Count_Type) is tagged private;
51166
51167 6/3
51168 * The type Vector needs finalization if and only if type Element_Type
51169 needs finalization.
51170
51171 7/3
51172 * In function Copy, if the Capacity parameter is equal to or greater
51173 than the length of Source, the vector capacity exactly equals the
51174 value of the Capacity parameter.
51175
51176 8/3
51177 * The description of Reserve_Capacity is replaced with:
51178
51179 9/3
51180 If the specified Capacity is larger than the capacity of
51181 Container, then Reserve_Capacity propagates Capacity_Error.
51182 Otherwise, the operation has no effect.
51183
51184 _Bounded (Run-Time) Errors_
51185
51186 10/3
51187 It is a bounded error to assign from a bounded vector object while
51188 tampering with elements or cursors of that object is prohibited. Either
51189 Program_Error is raised by the assignment, execution proceeds with the
51190 target object prohibiting tampering with elements or cursors, or
51191 execution proceeds normally.
51192
51193 _Erroneous Execution_
51194
51195 11/3
51196 When a bounded vector object V is finalized, if tampering with cursors
51197 is prohibited for V other than due to an assignment from another vector,
51198 then execution is erroneous.
51199
51200 _Implementation Requirements_
51201
51202 12/3
51203 For each instance of Containers.Vectors and each instance of
51204 Containers.Bounded_Vectors, if the two instances meet the following
51205 conditions, then the output generated by the Vector'Output or
51206 Vector'Write subprograms of either instance shall be readable by the
51207 Vector'Input or Vector'Read of the other instance, respectively:
51208
51209 13/3
51210 * the Element_Type parameters of the two instances are statically
51211 matching subtypes of the same type; and
51212
51213 14/3
51214 * the output generated by Element_Type'Output or Element_Type'Write
51215 is readable by Element_Type'Input or Element_Type'Read,
51216 respectively (where Element_Type denotes the type of the two actual
51217 Element_Type parameters); and
51218
51219 15/3
51220 * the preceding two conditions also hold for the Index_Type
51221 parameters of the instances.
51222
51223 _Implementation Advice_
51224
51225 16/3
51226 Bounded vector objects should be implemented without implicit pointers
51227 or dynamic allocation.
51228
51229 17/3
51230 The implementation advice for procedure Move to minimize copying does
51231 not apply.
51232
51233 \1f
51234 File: arm2012.info, Node: A.18.20, Next: A.18.21, Prev: A.18.19, Up: A.18
51235
51236 A.18.20 The Generic Package Containers.Bounded_Doubly_Linked_Lists
51237 ------------------------------------------------------------------
51238
51239 1/3
51240 The language-defined generic package
51241 Containers.Bounded_Doubly_Linked_Lists provides a private type List and
51242 a set of operations. It provides the same operations as the package
51243 Containers.Doubly_Linked_Lists (see *note A.18.3::), with the difference
51244 that the maximum storage is bounded.
51245
51246 _Static Semantics_
51247
51248 2/3
51249 The declaration of the generic library package
51250 Containers.Bounded_Doubly_Linked_Lists has the same contents and
51251 semantics as Containers.Doubly_Linked_Lists except:
51252
51253 3/3
51254 * The pragma Preelaborate is replaced with pragma Pure.
51255
51256 4/3
51257 * The type List is declared with a discriminant that specifies the
51258 capacity (maximum number of elements) as follows:
51259
51260 5/3
51261 type List (Capacity : Count_Type) is tagged private;
51262
51263 6/3
51264 * The type List needs finalization if and only if type Element_Type
51265 needs finalization.
51266
51267 7/3
51268 * The allocation of internal storage includes a check that the
51269 capacity is not exceeded, and Capacity_Error is raised if this
51270 check fails.
51271
51272 8/3
51273 * In procedure Assign, if Source length is greater than Target
51274 capacity, then Capacity_Error is propagated.
51275
51276 9/3
51277 * The function Copy is replaced with:
51278
51279 10/3
51280 function Copy (Source : List; Capacity : Count_Type := 0)
51281 return List;
51282
51283 11/3
51284 If Capacity is 0, then the list capacity is the length of
51285 Source; if Capacity is equal to or greater than the length of
51286 Source, the list capacity equals the value of the Capacity
51287 parameter; otherwise, the operation propagates Capacity_Error.
51288
51289 12/3
51290 * In the three-parameter procedure Splice whose Source has type List,
51291 if the sum of the length of Target and the length of Source is
51292 greater than the capacity of Target, then Splice propagates
51293 Capacity_Error.
51294
51295 13/3
51296 * In the four-parameter procedure Splice, if the length of Target
51297 equals the capacity of Target, then Splice propagates
51298 Capacity_Error.
51299
51300 _Bounded (Run-Time) Errors_
51301
51302 14/3
51303 It is a bounded error to assign from a bounded list object while
51304 tampering with elements or cursors of that object is prohibited. Either
51305 Program_Error is raised by the assignment, execution proceeds with the
51306 target object prohibiting tampering with elements or cursors, or
51307 execution proceeds normally.
51308
51309 _Erroneous Execution_
51310
51311 15/3
51312 When a bounded list object L is finalized, if tampering with cursors is
51313 prohibited for L other than due to an assignment from another list, then
51314 execution is erroneous.
51315
51316 _Implementation Requirements_
51317
51318 16/3
51319 For each instance of Containers.Doubly_Linked_Lists and each instance of
51320 Containers.Bounded_Doubly_Linked_Lists, if the two instances meet the
51321 following conditions, then the output generated by the List'Output or
51322 List'Write subprograms of either instance shall be readable by the
51323 List'Input or List'Read of the other instance, respectively:
51324
51325 17/3
51326 * the Element_Type parameters of the two instances are statically
51327 matching subtypes of the same type; and
51328
51329 18/3
51330 * the output generated by Element_Type'Output or Element_Type'Write
51331 is readable by Element_Type'Input or Element_Type'Read,
51332 respectively (where Element_Type denotes the type of the two actual
51333 Element_Type parameters).
51334
51335 _Implementation Advice_
51336
51337 19/3
51338 Bounded list objects should be implemented without implicit pointers or
51339 dynamic allocation.
51340
51341 20/3
51342 The implementation advice for procedure Move to minimize copying does
51343 not apply.
51344
51345 \1f
51346 File: arm2012.info, Node: A.18.21, Next: A.18.22, Prev: A.18.20, Up: A.18
51347
51348 A.18.21 The Generic Package Containers.Bounded_Hashed_Maps
51349 ----------------------------------------------------------
51350
51351 1/3
51352 The language-defined generic package Containers.Bounded_Hashed_Maps
51353 provides a private type Map and a set of operations. It provides the
51354 same operations as the package Containers.Hashed_Maps (see *note
51355 A.18.5::), with the difference that the maximum storage is bounded.
51356
51357 _Static Semantics_
51358
51359 2/3
51360 The declaration of the generic library package
51361 Containers.Bounded_Hashed_Maps has the same contents and semantics as
51362 Containers.Hashed_Maps except:
51363
51364 3/3
51365 * The pragma Preelaborate is replaced with pragma Pure.
51366
51367 4/3
51368 * The type Map is declared with discriminants that specify both the
51369 capacity (number of elements) and modulus (number of distinct hash
51370 values) of the hash table as follows:
51371
51372 5/3
51373 type Map (Capacity : Count_Type;
51374 Modulus : Hash_Type) is tagged private;
51375
51376 6/3
51377 * The type Map needs finalization if and only if type Key_Type or
51378 type Element_Type needs finalization.
51379
51380 7/3
51381 * The description of Reserve_Capacity is replaced with:
51382
51383 8/3
51384 If the specified Capacity is larger than the capacity of
51385 Container, then Reserve_Capacity propagates Capacity_Error.
51386 Otherwise, the operation has no effect.
51387
51388 9/3
51389 * An additional operation is added immediately following
51390 Reserve_Capacity:
51391
51392 10/3
51393 function Default_Modulus (Capacity : Count_Type) return Hash_Type;
51394
51395 11/3
51396 Default_Modulus returns an implementation-defined value for
51397 the number of distinct hash values to be used for the given
51398 capacity (maximum number of elements).
51399
51400 12/3
51401 * The function Copy is replaced with:
51402
51403 13/3
51404 function Copy (Source : Map;
51405 Capacity : Count_Type := 0;
51406 Modulus : Hash_Type := 0) return Map;
51407
51408 14/3
51409 Returns a map with key/element pairs initialized from the
51410 values in Source. If Capacity is 0, then the map capacity is
51411 the length of Source; if Capacity is equal to or greater than
51412 the length of Source, the map capacity is the value of the
51413 Capacity parameter; otherwise, the operation propagates
51414 Capacity_Error. If the Modulus argument is 0, then the map
51415 modulus is the value returned by a call to Default_Modulus
51416 with the map capacity as its argument; otherwise, the map
51417 modulus is the value of the Modulus parameter.
51418
51419 _Bounded (Run-Time) Errors_
51420
51421 15/3
51422 It is a bounded error to assign from a bounded map object while
51423 tampering with elements or cursors of that object is prohibited. Either
51424 Program_Error is raised by the assignment, execution proceeds with the
51425 target object prohibiting tampering with elements or cursors, or
51426 execution proceeds normally.
51427
51428 _Erroneous Execution_
51429
51430 16/3
51431 When a bounded map object M is finalized, if tampering with cursors is
51432 prohibited for M other than due to an assignment from another map, then
51433 execution is erroneous.
51434
51435 _Implementation Requirements_
51436
51437 17/3
51438 For each instance of Containers.Hashed_Maps and each instance of
51439 Containers.Bounded_Hashed_Maps, if the two instances meet the following
51440 conditions, then the output generated by the Map'Output or Map'Write
51441 subprograms of either instance shall be readable by the Map'Input or
51442 Map'Read of the other instance, respectively:
51443
51444 18/3
51445 * the Element_Type parameters of the two instances are statically
51446 matching subtypes of the same type; and
51447
51448 19/3
51449 * the output generated by Element_Type'Output or Element_Type'Write
51450 is readable by Element_Type'Input or Element_Type'Read,
51451 respectively (where Element_Type denotes the type of the two actual
51452 Element_Type parameters); and
51453
51454 20/3
51455 * the preceding two conditions also hold for the Key_Type parameters
51456 of the instances.
51457
51458 _Implementation Advice_
51459
51460 21/3
51461 Bounded hashed map objects should be implemented without implicit
51462 pointers or dynamic allocation.
51463
51464 22/3
51465 The implementation advice for procedure Move to minimize copying does
51466 not apply.
51467
51468 \1f
51469 File: arm2012.info, Node: A.18.22, Next: A.18.23, Prev: A.18.21, Up: A.18
51470
51471 A.18.22 The Generic Package Containers.Bounded_Ordered_Maps
51472 -----------------------------------------------------------
51473
51474 1/3
51475 The language-defined generic package Containers.Bounded_Ordered_Maps
51476 provides a private type Map and a set of operations. It provides the
51477 same operations as the package Containers.Ordered_Maps (see *note
51478 A.18.6::), with the difference that the maximum storage is bounded.
51479
51480 _Static Semantics_
51481
51482 2/3
51483 The declaration of the generic library package
51484 Containers.Bounded_Ordered_Maps has the same contents and semantics as
51485 Containers.Ordered_Maps except:
51486
51487 3/3
51488 * The pragma Preelaborate is replaced with pragma Pure.
51489
51490 4/3
51491 * The type Map is declared with a discriminant that specifies the
51492 capacity (maximum number of elements) as follows:
51493
51494 5/3
51495 type Map (Capacity : Count_Type) is tagged private;
51496
51497 6/3
51498 * The type Map needs finalization if and only if type Key_Type or
51499 type Element_Type needs finalization.
51500
51501 7/3
51502 * The allocation of a new node includes a check that the capacity is
51503 not exceeded, and Capacity_Error is raised if this check fails.
51504
51505 8/3
51506 * In procedure Assign, if Source length is greater than Target
51507 capacity, then Capacity_Error is propagated.
51508
51509 9/3
51510 * The function Copy is replaced with:
51511
51512 10/3
51513 function Copy (Source : Map;
51514 Capacity : Count_Type := 0) return Map;
51515
51516 11/3
51517 Returns a map with key/element pairs initialized from the
51518 values in Source. If Capacity is 0, then the map capacity is
51519 the length of Source; if Capacity is equal to or greater than
51520 the length of Source, the map capacity is the specified value;
51521 otherwise, the operation propagates Capacity_Error.
51522
51523 _Bounded (Run-Time) Errors_
51524
51525 12/3
51526 It is a bounded error to assign from a bounded map object while
51527 tampering with elements or cursors of that object is prohibited. Either
51528 Program_Error is raised by the assignment, execution proceeds with the
51529 target object prohibiting tampering with elements or cursors, or
51530 execution proceeds normally.
51531
51532 _Erroneous Execution_
51533
51534 13/3
51535 When a bounded map object M is finalized, if tampering with cursors is
51536 prohibited for M other than due to an assignment from another map, then
51537 execution is erroneous.
51538
51539 _Implementation Requirements_
51540
51541 14/3
51542 For each instance of Containers.Ordered_Maps and each instance of
51543 Containers.Bounded_Ordered_Maps, if the two instances meet the following
51544 conditions, then the output generated by the Map'Output or Map'Write
51545 subprograms of either instance shall be readable by the Map'Input or
51546 Map'Read of the other instance, respectively:
51547
51548 15/3
51549 * the Element_Type parameters of the two instances are statically
51550 matching subtypes of the same type; and
51551
51552 16/3
51553 * the output generated by Element_Type'Output or Element_Type'Write
51554 is readable by Element_Type'Input or Element_Type'Read,
51555 respectively (where Element_Type denotes the type of the two actual
51556 Element_Type parameters); and
51557
51558 17/3
51559 * the preceding two conditions also hold for the Key_Type parameters
51560 of the instances.
51561
51562 _Implementation Advice_
51563
51564 18/3
51565 Bounded ordered map objects should be implemented without implicit
51566 pointers or dynamic allocation.
51567
51568 19/3
51569 The implementation advice for procedure Move to minimize copying does
51570 not apply.
51571
51572 \1f
51573 File: arm2012.info, Node: A.18.23, Next: A.18.24, Prev: A.18.22, Up: A.18
51574
51575 A.18.23 The Generic Package Containers.Bounded_Hashed_Sets
51576 ----------------------------------------------------------
51577
51578 1/3
51579 The language-defined generic package Containers.Bounded_Hashed_Sets
51580 provides a private type Set and a set of operations. It provides the
51581 same operations as the package Containers.Hashed_Sets (see *note
51582 A.18.8::), with the difference that the maximum storage is bounded.
51583
51584 _Static Semantics_
51585
51586 2/3
51587 The declaration of the generic library package
51588 Containers.Bounded_Hashed_Sets has the same contents and semantics as
51589 Containers.Hashed_Sets except:
51590
51591 3/3
51592 * The pragma Preelaborate is replaced with pragma Pure.
51593
51594 4/3
51595 * The type Set is declared with discriminants that specify both the
51596 capacity (number of elements) and modulus (number of distinct hash
51597 values) of the hash table as follows:
51598
51599 5/3
51600 type Set (Capacity : Count_Type;
51601 Modulus : Hash_Type) is tagged private;
51602
51603 6/3
51604 * The type Set needs finalization if and only if type Element_Type
51605 needs finalization.
51606
51607 7/3
51608 * The description of Reserve_Capacity is replaced with:
51609
51610 8/3
51611 If the specified Capacity is larger than the capacity of
51612 Container, then Reserve_Capacity propagates Capacity_Error.
51613 Otherwise, the operation has no effect.
51614
51615 9/3
51616 * An additional operation is added immediately following
51617 Reserve_Capacity:
51618
51619 10/3
51620 function Default_Modulus (Capacity : Count_Type) return Hash_Type;
51621
51622 11/3
51623 Default_Modulus returns an implementation-defined value for
51624 the number of distinct hash values to be used for the given
51625 capacity (maximum number of elements).
51626
51627 12/3
51628 * The function Copy is replaced with:
51629
51630 13/3
51631 function Copy (Source : Set;
51632 Capacity : Count_Type := 0;
51633 Modulus : Hash_Type := 0) return Set;
51634
51635 14/3
51636 Returns a set whose elements are initialized from the values
51637 in Source. If Capacity is 0, then the set capacity is the
51638 length of Source; if Capacity is equal to or greater than the
51639 length of Source, the set capacity is the value of the
51640 Capacity parameter; otherwise, the operation propagates
51641 Capacity_Error. If the Modulus argument is 0, then the set
51642 modulus is the value returned by a call to Default_Modulus
51643 with the set capacity as its argument; otherwise, the set
51644 modulus is the value of the Modulus parameter.
51645
51646 _Bounded (Run-Time) Errors_
51647
51648 15/3
51649 It is a bounded error to assign from a bounded set object while
51650 tampering with elements or cursors of that object is prohibited. Either
51651 Program_Error is raised by the assignment, execution proceeds with the
51652 target object prohibiting tampering with elements or cursors, or
51653 execution proceeds normally.
51654
51655 _Erroneous Execution_
51656
51657 16/3
51658 When a bounded set object S is finalized, if tampering with cursors is
51659 prohibited for S other than due to an assignment from another set, then
51660 execution is erroneous.
51661
51662 _Implementation Requirements_
51663
51664 17/3
51665 For each instance of Containers.Hashed_Sets and each instance of
51666 Containers.Bounded_Hashed_Sets, if the two instances meet the following
51667 conditions, then the output generated by the Set'Output or Set'Write
51668 subprograms of either instance shall be readable by the Set'Input or
51669 Set'Read of the other instance, respectively:
51670
51671 18/3
51672 * the Element_Type parameters of the two instances are statically
51673 matching subtypes of the same type; and
51674
51675 19/3
51676 * the output generated by Element_Type'Output or Element_Type'Write
51677 is readable by Element_Type'Input or Element_Type'Read,
51678 respectively (where Element_Type denotes the type of the two actual
51679 Element_Type parameters).
51680
51681 _Implementation Advice_
51682
51683 20/3
51684 Bounded hashed set objects should be implemented without implicit
51685 pointers or dynamic allocation.
51686
51687 21/3
51688 The implementation advice for procedure Move to minimize copying does
51689 not apply.
51690
51691 \1f
51692 File: arm2012.info, Node: A.18.24, Next: A.18.25, Prev: A.18.23, Up: A.18
51693
51694 A.18.24 The Generic Package Containers.Bounded_Ordered_Sets
51695 -----------------------------------------------------------
51696
51697 1/3
51698 The language-defined generic package Containers.Bounded_Ordered_Sets
51699 provides a private type Set and a set of operations. It provides the
51700 same operations as the package Containers.Ordered_Sets (see *note
51701 A.18.9::), with the difference that the maximum storage is bounded.
51702
51703 _Static Semantics_
51704
51705 2/3
51706 The declaration of the generic library package
51707 Containers.Bounded_Ordered_Sets has the same contents and semantics as
51708 Containers.Ordered_Sets except:
51709
51710 3/3
51711 * The pragma Preelaborate is replaced with pragma Pure.
51712
51713 4/3
51714 * The type Set is declared with a discriminant that specifies the
51715 capacity (maximum number of elements) as follows:
51716
51717 5/3
51718 type Set (Capacity : Count_Type) is tagged private;
51719
51720 6/3
51721 * The type Set needs finalization if and only if type Element_Type
51722 needs finalization.
51723
51724 7/3
51725 * If Insert (or Include) adds an element, a check is made that the
51726 capacity is not exceeded, and Capacity_Error is raised if this
51727 check fails.
51728
51729 8/3
51730 * In procedure Assign, if Source length is greater than Target
51731 capacity, then Capacity_Error is propagated.
51732
51733 9/3
51734 * The function Copy is replaced with:
51735
51736 10/3
51737 function Copy (Source : Set;
51738 Capacity : Count_Type := 0) return Set;
51739
51740 11/3
51741 Returns a set whose elements are initialized from the values
51742 in Source. If Capacity is 0, then the set capacity is the
51743 length of Source; if Capacity is equal to or greater than the
51744 length of Source, the set capacity is the specified value;
51745 otherwise, the operation propagates Capacity_Error.
51746
51747 _Bounded (Run-Time) Errors_
51748
51749 12/3
51750 It is a bounded error to assign from a bounded set object while
51751 tampering with elements or cursors of that object is prohibited. Either
51752 Program_Error is raised by the assignment, execution proceeds with the
51753 target object prohibiting tampering with elements or cursors, or
51754 execution proceeds normally.
51755
51756 _Erroneous Execution_
51757
51758 13/3
51759 When a bounded set object S is finalized, if tampering with cursors is
51760 prohibited for S other than due to an assignment from another set, then
51761 execution is erroneous.
51762
51763 _Implementation Requirements_
51764
51765 14/3
51766 For each instance of Containers.Ordered_Sets and each instance of
51767 Containers.Bounded_Ordered_Sets, if the two instances meet the following
51768 conditions, then the output generated by the Set'Output or Set'Write
51769 subprograms of either instance shall be readable by the Set'Input or
51770 Set'Read of the other instance, respectively:
51771
51772 15/3
51773 * the Element_Type parameters of the two instances are statically
51774 matching subtypes of the same type; and
51775
51776 16/3
51777 * the output generated by Element_Type'Output or Element_Type'Write
51778 is readable by Element_Type'Input or Element_Type'Read,
51779 respectively (where Element_Type denotes the type of the two actual
51780 Element_Type parameters).
51781
51782 _Implementation Advice_
51783
51784 17/3
51785 Bounded ordered set objects should be implemented without implicit
51786 pointers or dynamic allocation.
51787
51788 18/3
51789 The implementation advice for procedure Move to minimize copying does
51790 not apply.
51791
51792 \1f
51793 File: arm2012.info, Node: A.18.25, Next: A.18.26, Prev: A.18.24, Up: A.18
51794
51795 A.18.25 The Generic Package Containers.Bounded_Multiway_Trees
51796 -------------------------------------------------------------
51797
51798 1/3
51799 The language-defined generic package Containers.Bounded_Multiway_Trees
51800 provides a private type Tree and a set of operations. It provides the
51801 same operations as the package Containers.Multiway_Trees (see *note
51802 A.18.10::), with the difference that the maximum storage is bounded.
51803
51804 _Static Semantics_
51805
51806 2/3
51807 The declaration of the generic library package
51808 Containers.Bounded_Multiway_Trees has the same contents and semantics as
51809 Containers.Multiway_Trees except:
51810
51811 3/3
51812 * The pragma Preelaborate is replaced with pragma Pure.
51813
51814 4/3
51815 * The type Tree is declared with a discriminant that specifies the
51816 capacity (maximum number of elements) as follows:
51817
51818 5/3
51819 type Tree (Capacity : Count_Type) is tagged private;
51820
51821 6/3
51822 * The type Tree needs finalization if and only if type Element_Type
51823 needs finalization.
51824
51825 7/3
51826 * The allocation of internal storage includes a check that the
51827 capacity is not exceeded, and Capacity_Error is raised if this
51828 check fails.
51829
51830 8/3
51831 * In procedure Assign, if Source length is greater than Target
51832 capacity, then Capacity_Error is propagated.
51833
51834 9/3
51835 * Function Copy is declared as follows:
51836
51837 10/3
51838 function Copy (Source : Tree; Capacity : Count_Type := 0)
51839 return List;
51840
51841 11/3
51842 If Capacity is 0, then the tree capacity is the count of Source; if
51843 Capacity is equal to or greater than Source.Count, the tree
51844 capacity equals the value of the Capacity parameter; otherwise, the
51845 operation propagates Capacity_Error.
51846
51847 12/3
51848 * In the five-parameter procedure Splice_Subtree, if Source is not
51849 the same object as Target, and if the sum of Target.Count and
51850 Subtree_Node_Count (Position) is greater than Target.Capacity, then
51851 Splice_Subtree propagates Capacity_Error.
51852
51853 13/3
51854 * In the five-parameter procedure Splice_Children, if Source is not
51855 the same object as Target, and if the sum of Target.Count and
51856 Subtree_Node_Count (Source_Parent)-1 is greater than
51857 Target.Capacity, then Splice_Children propagates Capacity_Error.
51858
51859 _Bounded (Run-Time) Errors_
51860
51861 14/3
51862 It is a bounded error to assign from a bounded tree object while
51863 tampering with elements or cursors of that object is prohibited. Either
51864 Program_Error is raised by the assignment, execution proceeds with the
51865 target object prohibiting tampering with elements or cursors, or
51866 execution proceeds normally.
51867
51868 _Erroneous Execution_
51869
51870 15/3
51871 When a bounded tree object T is finalized, if tampering with cursors is
51872 prohibited for T other than due to an assignment from another tree, then
51873 execution is erroneous.
51874
51875 _Implementation Requirements_
51876
51877 16/3
51878 For each instance of Containers.Multiway_Trees and each instance of
51879 Containers.Bounded_Multiway_Trees, if the two instances meet the
51880 following conditions, then the output generated by the Tree'Output or
51881 Tree'Write subprograms of either instance shall be readable by the
51882 Tree'Input or Tree'Read of the other instance, respectively:
51883
51884 17/3
51885 * the Element_Type parameters of the two instances are statically
51886 matching subtypes of the same type; and
51887
51888 18/3
51889 * the output generated by Element_Type'Output or Element_Type'Write
51890 is readable by Element_Type'Input or Element_Type'Read,
51891 respectively (where Element_Type denotes the type of the two actual
51892 Element_Type parameters).
51893
51894 _Implementation Advice_
51895
51896 19/3
51897 Bounded tree objects should be implemented without implicit pointers or
51898 dynamic allocation.
51899
51900 20/3
51901 The implementation advice for procedure Move to minimize copying does
51902 not apply.
51903
51904 \1f
51905 File: arm2012.info, Node: A.18.26, Next: A.18.27, Prev: A.18.25, Up: A.18
51906
51907 A.18.26 Array Sorting
51908 ---------------------
51909
51910 1/3
51911 The language-defined generic procedures Containers.Generic_Array_Sort,
51912 Containers.Generic_Constrained_Array_Sort, and Containers.Generic_Sort
51913 provide sorting on arbitrary array types.
51914
51915 _Static Semantics_
51916
51917 2/2
51918 The generic library procedure Containers.Generic_Array_Sort has the
51919 following declaration:
51920
51921 3/2
51922 generic
51923 type Index_Type is (<>);
51924 type Element_Type is private;
51925 type Array_Type is array (Index_Type range <>) of Element_Type;
51926 with function "<" (Left, Right : Element_Type)
51927 return Boolean is <>;
51928 procedure Ada.Containers.Generic_Array_Sort (Container : in out Array_Type);
51929 pragma Pure(Ada.Containers.Generic_Array_Sort);
51930
51931 4/2
51932 Reorders the elements of Container such that the elements are
51933 sorted smallest first as determined by the generic formal "<"
51934 operator provided. Any exception raised during evaluation of
51935 "<" is propagated.
51936
51937 5/3
51938 The actual function for the generic formal function "<" of
51939 Generic_Array_Sort is expected to return the same value each
51940 time it is called with a particular pair of element values.
51941 It should define a strict weak ordering relationship (see
51942 *note A.18::); it should not modify Container. If the actual
51943 for "<" behaves in some other manner, the behavior of the
51944 instance of Generic_Array_Sort is unspecified. The number of
51945 times Generic_Array_Sort calls "<" is unspecified.
51946
51947 6/2
51948 The generic library procedure Containers.Generic_Constrained_Array_Sort
51949 has the following declaration:
51950
51951 7/2
51952 generic
51953 type Index_Type is (<>);
51954 type Element_Type is private;
51955 type Array_Type is array (Index_Type) of Element_Type;
51956 with function "<" (Left, Right : Element_Type)
51957 return Boolean is <>;
51958 procedure Ada.Containers.Generic_Constrained_Array_Sort
51959 (Container : in out Array_Type);
51960 pragma Pure(Ada.Containers.Generic_Constrained_Array_Sort);
51961
51962 8/2
51963 Reorders the elements of Container such that the elements are
51964 sorted smallest first as determined by the generic formal "<"
51965 operator provided. Any exception raised during evaluation of
51966 "<" is propagated.
51967
51968 9/3
51969 The actual function for the generic formal function "<" of
51970 Generic_Constrained_Array_Sort is expected to return the same
51971 value each time it is called with a particular pair of element
51972 values. It should define a strict weak ordering relationship
51973 (see *note A.18::); it should not modify Container. If the
51974 actual for "<" behaves in some other manner, the behavior of
51975 the instance of Generic_Constrained_Array_Sort is unspecified.
51976 The number of times Generic_Constrained_Array_Sort calls "<"
51977 is unspecified.
51978
51979 9.1/3
51980 The generic library procedure Containers.Generic_Sort has the following
51981 declaration:
51982
51983 9.2/3
51984 generic
51985 type Index_Type is (<>);
51986 with function Before (Left, Right : Index_Type) return Boolean;
51987 with procedure Swap (Left, Right : Index_Type);
51988 procedure Ada.Containers.Generic_Sort
51989 (First, Last : Index_Type'Base);
51990 pragma Pure(Ada.Containers.Generic_Sort);
51991
51992 9.3/3
51993 Reorders the elements of an indexable structure, over the
51994 range First .. Last, such that the elements are sorted in the
51995 ordering determined by the generic formal function Before;
51996 Before should return True if Left is to be sorted before
51997 Right. The generic formal Before compares the elements having
51998 the given indices, and the generic formal Swap exchanges the
51999 values of the indicated elements. Any exception raised during
52000 evaluation of Before or Swap is propagated.
52001
52002 9.4/3
52003 The actual function for the generic formal function Before of
52004 Generic_Sort is expected to return the same value each time it
52005 is called with index values that identify a particular pair of
52006 element values. It should define a strict weak ordering
52007 relationship (see *note A.18::); it should not modify the
52008 elements. The actual function for the generic formal Swap
52009 should exchange the values of the indicated elements. If the
52010 actual for either Before or Swap behaves in some other manner,
52011 the behavior of Generic_Sort is unspecified. The number of
52012 times the Generic_Sort calls Before or Swap is unspecified.
52013
52014 _Implementation Advice_
52015
52016 10/2
52017 The worst-case time complexity of a call on an instance of
52018 Containers.Generic_Array_Sort or
52019 Containers.Generic_Constrained_Array_Sort should be O(N**2) or better,
52020 and the average time complexity should be better than O(N**2), where N
52021 is the length of the Container parameter.
52022
52023 11/2
52024 Containers.Generic_Array_Sort and
52025 Containers.Generic_Constrained_Array_Sort should minimize copying of
52026 elements.
52027
52028 12/3
52029 The worst-case time complexity of a call on an instance of
52030 Containers.Generic_Sort should be O(N**2) or better, and the average
52031 time complexity should be better than O(N**2), where N is the difference
52032 between the Last and First parameters plus 1.
52033
52034 13/3
52035 Containers.Generic_Sort should minimize calls to the generic formal
52036 Swap.
52037
52038 \1f
52039 File: arm2012.info, Node: A.18.27, Next: A.18.28, Prev: A.18.26, Up: A.18
52040
52041 A.18.27 The Generic Package Containers.Synchronized_Queue_Interfaces
52042 --------------------------------------------------------------------
52043
52044 1/3
52045 The language-defined generic package
52046 Containers.Synchronized_Queue_Interfaces provides interface type Queue,
52047 and a set of operations for that type. Interface Queue specifies a
52048 first-in, first-out queue.
52049
52050 _Static Semantics_
52051
52052 2/3
52053 The generic library package Containers.Synchronized_Queue_Interfaces has
52054 the following declaration:
52055
52056 3/3
52057 generic
52058 type Element_Type is private;
52059 package Ada.Containers.Synchronized_Queue_Interfaces is
52060 pragma Pure(Synchronized_Queue_Interfaces);
52061
52062 4/3
52063 type Queue is synchronized interface;
52064
52065 5/3
52066 procedure Enqueue
52067 (Container : in out Queue;
52068 New_Item : in Element_Type) is abstract
52069 with Synchronization => By_Entry;
52070
52071 6/3
52072 procedure Dequeue
52073 (Container : in out Queue;
52074 Element : out Element_Type) is abstract
52075 with Synchronization => By_Entry;
52076
52077 7/3
52078 function Current_Use (Container : Queue) return Count_Type is abstract;
52079 function Peak_Use (Container : Queue) return Count_Type is abstract;
52080
52081 8/3
52082 end Ada.Containers.Synchronized_Queue_Interfaces;
52083
52084 9/3
52085 procedure Enqueue
52086 (Container : in out Queue;
52087 New_Item : in Element_Type) is abstract;
52088
52089 10/3
52090 A queue type that implements this interface is allowed to have
52091 a bounded capacity. If the queue object has a bounded
52092 capacity, and the number of existing elements equals the
52093 capacity, then Enqueue blocks until storage becomes available;
52094 otherwise, Enqueue does not block. In any case, it then
52095 copies New_Item onto the queue.
52096
52097 11/3
52098 procedure Dequeue
52099 (Container : in out Queue;
52100 Element : out Element_Type) is abstract;
52101
52102 12/3
52103 If the queue is empty, then Dequeue blocks until an item
52104 becomes available. In any case, it then assigns the element
52105 at the head of the queue to Element, and removes it from the
52106 queue.
52107
52108 13/3
52109 function Current_Use (Container : Queue) return Count_Type is abstract;
52110
52111 14/3
52112 Returns the number of elements currently in the queue.
52113
52114 15/3
52115 function Peak_Use (Container : Queue) return Count_Type is abstract;
52116
52117 16/3
52118 Returns the maximum number of elements that have been in the
52119 queue at any one time.
52120
52121 NOTES
52122
52123 17/3
52124 51 Unlike other language-defined containers, there are no queues
52125 whose element types are indefinite. Elements of an indefinite type
52126 can be handled by defining the element of the queue to be a holder
52127 container (see *note A.18.18::) of the indefinite type, or to be an
52128 explicit access type that designates the indefinite type.
52129
52130 \1f
52131 File: arm2012.info, Node: A.18.28, Next: A.18.29, Prev: A.18.27, Up: A.18
52132
52133 A.18.28 The Generic Package Containers.Unbounded_Synchronized_Queues
52134 --------------------------------------------------------------------
52135
52136 _Static Semantics_
52137
52138 1/3
52139 The language-defined generic package
52140 Containers.Unbounded_Synchronized_Queues provides type Queue, which
52141 implements the interface type
52142 Containers.Synchronized_Queue_Interfaces.Queue.
52143
52144 2/3
52145 with System;
52146 with Ada.Containers.Synchronized_Queue_Interfaces;
52147 generic
52148 with package Queue_Interfaces is new Ada.Containers.Synchronized_Queue_Interfaces (<>);
52149 Default_Ceiling : System.Any_Priority := System.Priority'Last;
52150 package Ada.Containers.Unbounded_Synchronized_Queues is
52151 pragma Preelaborate(Unbounded_Synchronized_Queues);
52152
52153 3/3
52154 package Implementation is
52155 ... -- not specified by the language
52156 end Implementation;
52157
52158 4/3
52159 protected type Queue
52160 (Ceiling : System.Any_Priority := Default_Ceiling)
52161 with Priority => Ceiling is
52162 new Queue_Interfaces.Queue with
52163
52164 5/3
52165 overriding
52166 entry Enqueue (New_Item : in Queue_Interfaces.Element_Type);
52167 overriding
52168 entry Dequeue (Element : out Queue_Interfaces.Element_Type);
52169
52170 6/3
52171 overriding
52172 function Current_Use return Count_Type;
52173 overriding
52174 function Peak_Use return Count_Type;
52175
52176 7/3
52177 private
52178 ... -- not specified by the language
52179 end Queue;
52180
52181 8/3
52182 private
52183
52184 9/3
52185 ... -- not specified by the language
52186
52187 10/3
52188 end Ada.Containers.Unbounded_Synchronized_Queues;
52189
52190 11/3
52191 The type Queue is used to represent task-safe queues.
52192
52193 12/3
52194 The capacity for instances of type Queue is unbounded.
52195
52196 \1f
52197 File: arm2012.info, Node: A.18.29, Next: A.18.30, Prev: A.18.28, Up: A.18
52198
52199 A.18.29 The Generic Package Containers.Bounded_Synchronized_Queues
52200 ------------------------------------------------------------------
52201
52202 _Static Semantics_
52203
52204 1/3
52205 The language-defined generic package
52206 Containers.Bounded_Synchronized_Queues provides type Queue, which
52207 implements the interface type
52208 Containers.Synchronized_Queue_Interfaces.Queue.
52209
52210 2/3
52211 with System;
52212 with Ada.Containers.Synchronized_Queue_Interfaces;
52213 generic
52214 with package Queue_Interfaces is new Ada.Containers.Synchronized_Queue_Interfaces (<>);
52215 Default_Capacity : Count_Type;
52216 Default_Ceiling : System.Any_Priority := System.Priority'Last;
52217 package Ada.Containers.Bounded_Synchronized_Queues is
52218 pragma Preelaborate(Bounded_Synchronized_Queues);
52219
52220 3/3
52221 package Implementation is
52222 ... -- not specified by the language
52223 end Implementation;
52224
52225 4/3
52226 protected type Queue
52227 (Capacity : Count_Type := Default_Capacity;
52228 Ceiling : System.Any_Priority := Default_Ceiling)
52229 with Priority => Ceiling is
52230 new Queue_Interfaces.Queue with
52231
52232 5/3
52233 overriding
52234 entry Enqueue (New_Item : in Queue_Interfaces.Element_Type);
52235 overriding
52236 entry Dequeue (Element : out Queue_Interfaces.Element_Type);
52237
52238 6/3
52239 overriding
52240 function Current_Use return Count_Type;
52241 overriding
52242 function Peak_Use return Count_Type;
52243
52244 7/3
52245 private
52246 ... -- not specified by the language
52247 end Queue;
52248
52249 8/3
52250 private
52251
52252 9/3
52253 ... -- not specified by the language
52254
52255 10/3
52256 end Ada.Containers.Bounded_Synchronized_Queues;
52257
52258 11/3
52259 The semantics are the same as for Unbounded_Synchronized_Queues, except:
52260
52261 12/3
52262 * The capacity for instances of type Queue is bounded and specified
52263 by the discriminant Capacity.
52264
52265 _Implementation Advice_
52266
52267 13/3
52268 Bounded queue objects should be implemented without implicit pointers or
52269 dynamic allocation.
52270
52271 \1f
52272 File: arm2012.info, Node: A.18.30, Next: A.18.31, Prev: A.18.29, Up: A.18
52273
52274 A.18.30 The Generic Package Containers.Unbounded_Priority_Queues
52275 ----------------------------------------------------------------
52276
52277 _Static Semantics_
52278
52279 1/3
52280 The language-defined generic package
52281 Containers.Unbounded_Priority_Queues provides type Queue, which
52282 implements the interface type
52283 Containers.Synchronized_Queue_Interfaces.Queue.
52284
52285 2/3
52286 with System;
52287 with Ada.Containers.Synchronized_Queue_Interfaces;
52288 generic
52289 with package Queue_Interfaces is new Ada.Containers.Synchronized_Queue_Interfaces (<>);
52290 type Queue_Priority is private;
52291 with function Get_Priority
52292 (Element : Queue_Interfaces.Element_Type) return Queue_Priority is <>;
52293 with function Before
52294 (Left, Right : Queue_Priority) return Boolean is <>;
52295 Default_Ceiling : System.Any_Priority := System.Priority'Last;
52296 package Ada.Containers.Unbounded_Priority_Queues is
52297 pragma Preelaborate(Unbounded_Priority_Queues);
52298
52299 3/3
52300 package Implementation is
52301 ... -- not specified by the language
52302 end Implementation;
52303
52304 4/3
52305 protected type Queue
52306 (Ceiling : System.Any_Priority := Default_Ceiling)
52307 with Priority => Ceiling is
52308 new Queue_Interfaces.Queue with
52309
52310 5/3
52311 overriding
52312 entry Enqueue (New_Item : in Queue_Interfaces.Element_Type);
52313 overriding
52314 entry Dequeue (Element : out Queue_Interfaces.Element_Type);
52315
52316 6/3
52317 not overriding
52318 procedure Dequeue_Only_High_Priority
52319 (At_Least : in Queue_Priority;
52320 Element : in out Queue_Interfaces.Element_Type;
52321 Success : out Boolean);
52322
52323 7/3
52324 overriding
52325 function Current_Use return Count_Type;
52326 overriding
52327 function Peak_Use return Count_Type;
52328
52329 8/3
52330 private
52331 ... -- not specified by the language
52332 end Queue;
52333
52334 9/3
52335 private
52336
52337 10/3
52338 ... -- not specified by the language
52339
52340 11/3
52341 end Ada.Containers.Unbounded_Priority_Queues;
52342
52343 12/3
52344 The type Queue is used to represent task-safe priority queues.
52345
52346 13/3
52347 The capacity for instances of type Queue is unbounded.
52348
52349 14/3
52350 Two elements E1 and E2 are equivalent if Before(Get_Priority(E1),
52351 Get_Priority(E2)) and Before(Get_Priority(E2), Get_Priority(E1)) both
52352 return False.
52353
52354 15/3
52355 The actual functions for Get_Priority and Before are expected to return
52356 the same value each time they are called with the same actuals, and
52357 should not modify their actuals. Before should define a strict weak
52358 ordering relationship (see *note A.18::). If the actual functions
52359 behave in some other manner, the behavior of Unbounded_Priority_Queues
52360 is unspecified.
52361
52362 16/3
52363 Enqueue inserts an item according to the order specified by the Before
52364 function on the result of Get_Priority on the elements; Before should
52365 return True if Left is to be inserted before Right. If the queue
52366 already contains elements equivalent to New_Item, then it is inserted
52367 after the existing equivalent elements.
52368
52369 17/3
52370 For a call on Dequeue_Only_High_Priority, if the head of the nonempty
52371 queue is E, and the function Before(At_Least, Get_Priority(E)) returns
52372 False, then E is assigned to Element and then removed from the queue,
52373 and Success is set to True; otherwise, Success is set to False and
52374 Element is unchanged.
52375
52376 \1f
52377 File: arm2012.info, Node: A.18.31, Next: A.18.32, Prev: A.18.30, Up: A.18
52378
52379 A.18.31 The Generic Package Containers.Bounded_Priority_Queues
52380 --------------------------------------------------------------
52381
52382 _Static Semantics_
52383
52384 1/3
52385 The language-defined generic package Containers.Bounded_Priority_Queues
52386 provides type Queue, which implements the interface type
52387 Containers.Synchronized_Queue_Interfaces.Queue.
52388
52389 2/3
52390 with System;
52391 with Ada.Containers.Synchronized_Queue_Interfaces;
52392 generic
52393 with package Queue_Interfaces is new Ada.Containers.Synchronized_Queue_Interfaces (<>);
52394 type Queue_Priority is private;
52395 with function Get_Priority
52396 (Element : Queue_Interfaces.Element_Type) return Queue_Priority is <>;
52397 with function Before
52398 (Left, Right : Queue_Priority) return Boolean is <>;
52399 Default_Capacity : Count_Type;
52400 Default_Ceiling : System.Any_Priority := System.Priority'Last;
52401 package Ada.Containers.Bounded_Priority_Queues is
52402 pragma Preelaborate(Bounded_Priority_Queues);
52403
52404 3/3
52405 package Implementation is
52406 ... -- not specified by the language
52407 end Implementation;
52408
52409 4/3
52410 protected type Queue
52411 (Capacity : Count_Type := Default_Capacity;
52412 Ceiling : System.Any_Priority := Default_Ceiling)
52413 with Priority => Ceiling is
52414 new Queue_Interfaces.Queue with
52415
52416 5/3
52417 overriding
52418 entry Enqueue (New_Item : in Queue_Interfaces.Element_Type);
52419 overriding
52420 entry Dequeue (Element : out Queue_Interfaces.Element_Type);
52421
52422 6/3
52423 not overriding
52424 procedure Dequeue_Only_High_Priority
52425 (At_Least : in Queue_Priority;
52426 Element : in out Queue_Interfaces.Element_Type;
52427 Success : out Boolean);
52428
52429 7/3
52430 overriding
52431 function Current_Use return Count_Type;
52432 overriding
52433 function Peak_Use return Count_Type;
52434
52435 8/3
52436 private
52437 ... -- not specified by the language
52438 end Queue;
52439
52440 9/3
52441 private
52442
52443 10/3
52444 ... -- not specified by the language
52445
52446 11/3
52447 end Ada.Containers.Bounded_Priority_Queues;
52448
52449 12/3
52450 The semantics are the same as for Unbounded_Priority_Queues, except:
52451
52452 13/3
52453 * The capacity for instances of type Queue is bounded and specified
52454 by the discriminant Capacity.
52455
52456 _Implementation Advice_
52457
52458 14/3
52459 Bounded priority queue objects should be implemented without implicit
52460 pointers or dynamic allocation.
52461
52462 \1f
52463 File: arm2012.info, Node: A.18.32, Prev: A.18.31, Up: A.18
52464
52465 A.18.32 Example of Container Use
52466 --------------------------------
52467
52468 _Examples_
52469
52470 1/3
52471 The following example is an implementation of Dijkstra's shortest path
52472 algorithm in a directed graph with positive distances. The graph is
52473 represented by a map from nodes to sets of edges.
52474
52475 2/3
52476 with Ada.Containers.Vectors;
52477 with Ada.Containers.Doubly_Linked_Lists;
52478 use Ada.Containers;
52479 generic
52480 type Node is range <>;
52481 package Shortest_Paths is
52482 type Distance is new Float range 0.0 .. Float'Last;
52483 type Edge is record
52484 To, From : Node;
52485 Length : Distance;
52486 end record;
52487
52488 3/3
52489 package Node_Maps is new Vectors (Node, Node);
52490 -- The algorithm builds a map to indicate the node used to reach a given
52491 -- node in the shortest distance.
52492
52493 4/3
52494 package Adjacency_Lists is new Doubly_Linked_Lists (Edge);
52495 use Adjacency_Lists;
52496
52497 5/3
52498 package Graphs is new Vectors (Node, Adjacency_Lists.List);
52499
52500 6/3
52501 package Paths is new Doubly_Linked_Lists (Node);
52502
52503 7/3
52504 function Shortest_Path
52505 (G : Graphs.Vector; Source : Node; Target : Node) return Paths.List
52506 with Pre => G (Source) /= Adjacency_Lists.Empty_List;
52507
52508 8/3
52509 end Shortest_Paths;
52510
52511 9/3
52512 package body Shortest_Paths is
52513 function Shortest_Path
52514 (G : Graphs.Vector; Source : Node; Target : Node) return Paths.List
52515 is
52516 use Adjacency_Lists, Node_Maps, Paths, Graphs;
52517 Reached : array (Node) of Boolean := (others => False);
52518 -- The set of nodes whose shortest distance to the source is known.
52519
52520 10/3
52521 Reached_From : array (Node) of Node;
52522 So_Far : array (Node) of Distance := (others => Distance'Last);
52523 The_Path : Paths.List := Paths.Empty_List;
52524 Nearest_Distance : Distance;
52525 Next : Node;
52526 begin
52527 So_Far(Source) := 0.0;
52528
52529 11/3
52530 while not Reached(Target) loop
52531 Nearest_Distance := Distance'Last;
52532
52533 12/3
52534 -- Find closest node not reached yet, by iterating over all nodes.
52535 -- A more efficient algorithm uses a priority queue for this step.
52536
52537 13/3
52538 Next := Source;
52539 for N in Node'First .. Node'Last loop
52540 if not Reached(N)
52541 and then So_Far(N) < Nearest_Distance then
52542 Next := N;
52543 Nearest_Distance := So_Far(N);
52544 end if;
52545 end loop;
52546
52547 14/3
52548 if Nearest_Distance = Distance'Last then
52549 -- No next node found, graph is not connected
52550 return Paths.Empty_List;
52551
52552 15/3
52553 else
52554 Reached(Next) := True;
52555 end if;
52556
52557 16/3
52558 -- Update minimum distance to newly reachable nodes.
52559
52560 17/3
52561 for E of G (Next) loop
52562 if not Reached(E.To) then
52563 Nearest_Distance := E.Length + So_Far(Next);
52564
52565 18/3
52566 if Nearest_Distance < So_Far(E.To) then
52567 Reached_From(E.To) := Next;
52568 So_Far(E.To) := Nearest_Distance;
52569 end if;
52570 end if;
52571 end loop;
52572 end loop;
52573
52574 19/3
52575 -- Rebuild path from target to source.
52576
52577 20/3
52578 declare
52579 N : Node := Target;
52580 begin
52581 while N /= Source loop
52582 N := Reached_From(N);
52583 Prepend (The_Path, N);
52584 end loop;
52585 end;
52586
52587 21/3
52588 return The_Path;
52589 end;
52590 end Shortest_Paths;
52591
52592 22/3
52593 Note that the effect of the Constant_Indexing aspect (on type Vector)
52594 and the Implicit_Dereference aspect (on type Reference_Type) is that
52595
52596 23/3
52597 G (Next)
52598
52599 24/3
52600 is a convenient short hand for
52601
52602 25/3
52603 G.Constant_Reference (Next).Element.all
52604
52605 26/3
52606 Similarly, the effect of the loop:
52607
52608 27/3
52609 for E of G (Next) loop
52610 if not Reached(E.To) then
52611 ...
52612 end if;
52613 end loop;
52614
52615 28/3
52616 is the same as:
52617
52618 29/3
52619 for C in G (Next).Iterate loop
52620 declare
52621 E : Edge renames G (Next)(C).all;
52622 begin
52623 if not Reached(E.To) then
52624 ...
52625 end if;
52626 end;
52627 end loop;
52628
52629 30/3
52630 which is the same as:
52631
52632 31/3
52633 declare
52634 L : Adjacency_Lists.List renames G (Next);
52635 C : Adjacency_Lists.Cursor := L.First;
52636 begin
52637 while Has_Element (C) loop
52638 declare
52639 E : Edge renames L(C).all;
52640 begin
52641 if not Reached(E.To) then
52642 ...
52643 end if;
52644 end;
52645 C := L.Next (C);
52646 end loop;
52647 end;
52648
52649 \1f
52650 File: arm2012.info, Node: A.19, Prev: A.18, Up: Annex A
52651
52652 A.19 The Package Locales
52653 ========================
52654
52655 1/3
52656 A locale identifies a geopolitical place or region and its associated
52657 language, which can be used to determine other
52658 internationalization-related characteristics.
52659
52660 _Static Semantics_
52661
52662 2/3
52663 The library package Locales has the following declaration:
52664
52665 3/3
52666 package Ada.Locales is
52667 pragma Preelaborate(Locales);
52668 pragma Remote_Types(Locales);
52669
52670 4/3
52671 type Language_Code is array (1 .. 3) of Character range 'a' .. 'z';
52672 type Country_Code is array (1 .. 2) of Character range 'A' .. 'Z';
52673
52674 5/3
52675 Language_Unknown : constant Language_Code := "und";
52676 Country_Unknown : constant Country_Code := "ZZ";
52677
52678 6/3
52679 function Language return Language_Code;
52680 function Country return Country_Code;
52681
52682 7/3
52683 end Ada.Locales;
52684
52685 8/3
52686 The active locale is the locale associated with the partition of the
52687 current task.
52688
52689 9/3
52690 Language_Code is a lower-case string representation of an ISO 639-3
52691 alpha-3 code that identifies a language.
52692
52693 10/3
52694 Country_Code is an upper-case string representation of an ISO 3166-1
52695 alpha-2 code that identifies a country.
52696
52697 11/3
52698 Function Language returns the code of the language associated with the
52699 active locale. If the Language_Code associated with the active locale
52700 cannot be determined from the environment, then Language returns
52701 Language_Unknown.
52702
52703 12/3
52704 Function Country returns the code of the country associated with the
52705 active locale. If the Country_Code associated with the active locale
52706 cannot be determined from the environment, then Country returns
52707 Country_Unknown.
52708
52709 \1f
52710 File: arm2012.info, Node: Annex B, Next: Annex C, Prev: Annex A, Up: Top
52711
52712 Annex B Interface to Other Languages
52713 ************************************
52714
52715 1
52716 This Annex describes features for writing mixed-language programs.
52717 General interface support is presented first; then specific support for
52718 C, COBOL, and Fortran is defined, in terms of language interface
52719 packages for each of these languages.
52720
52721 _Implementation Requirements_
52722
52723 2/3
52724 Support for interfacing to any foreign language is optional. However,
52725 an implementation shall not provide any optional aspect, attribute,
52726 library unit, or pragma having the same name as an aspect, attribute,
52727 library unit, or pragma (respectively) specified in the subclauses of
52728 this Annex unless the provided construct is either as specified in those
52729 subclauses or is more limited in capability than that required by those
52730 subclauses. A program that attempts to use an unsupported capability of
52731 this Annex shall either be identified by the implementation before run
52732 time or shall raise an exception at run time.
52733
52734 * Menu:
52735
52736 * B.1 :: Interfacing Aspects
52737 * B.2 :: The Package Interfaces
52738 * B.3 :: Interfacing with C and C++
52739 * B.4 :: Interfacing with COBOL
52740 * B.5 :: Interfacing with Fortran
52741
52742 \1f
52743 File: arm2012.info, Node: B.1, Next: B.2, Up: Annex B
52744
52745 B.1 Interfacing Aspects
52746 =======================
52747
52748 0.1/3
52749 An interfacing aspect is a representation aspect that is one of the
52750 aspects Import, Export, Link_Name, External_Name, or Convention.
52751
52752 1/3
52753 Specifying the Import aspect to have the value True is used to import an
52754 entity defined in a foreign language into an Ada program, thus allowing
52755 a foreign-language subprogram to be called from Ada, or a
52756 foreign-language variable to be accessed from Ada. In contrast,
52757 specifying the Export aspect to have the value True is used to export an
52758 Ada entity to a foreign language, thus allowing an Ada subprogram to be
52759 called from a foreign language, or an Ada object to be accessed from a
52760 foreign language. The Import and Export aspects are intended primarily
52761 for objects and subprograms, although implementations are allowed to
52762 support other entities. The Link_Name and External_Name aspects are
52763 used to specify the link name and external name, respectively, to be
52764 used to identify imported or exported entities in the external
52765 environment.
52766
52767 2/3
52768 The Convention aspect is used to indicate that an Ada entity should use
52769 the conventions of another language. It is intended primarily for types
52770 and "callback" subprograms. For example, "with Convention => Fortran"
52771 on the declaration of an array type Matrix implies that Matrix should be
52772 represented according to the conventions of the supported Fortran
52773 implementation, namely column-major order.
52774
52775 3
52776 A pragma Linker_Options is used to specify the system linker parameters
52777 needed when a given compilation unit is included in a partition.
52778
52779 _Syntax_
52780
52781 4/3
52782 The form of a pragma Linker_Options is as follows:
52783
52784 Paragraphs 5 through 7 were moved to *note Annex J::, "*note Annex
52785 J:: Obsolescent Features".
52786
52787 8
52788 pragma Linker_Options(string_expression);
52789
52790 9
52791 A pragma Linker_Options is allowed only at the place of a
52792 declarative_item.
52793
52794 9.1/3
52795 This paragraph was deleted.
52796
52797 _Name Resolution Rules_
52798
52799 9.2/3
52800 The Import and Export aspects are of type Boolean.
52801
52802 10/3
52803 The Link_Name and External_Name aspects are of type String.
52804
52805 10.1/3
52806 The expected type for the string_expression in pragma Linker_Options is
52807 String.
52808
52809 _Legality Rules_
52810
52811 11/3
52812 The aspect Convention shall be specified by a convention_identifier
52813 which shall be the name of a convention. The convention names are
52814 implementation defined, except for certain language-defined ones, such
52815 as Ada and Intrinsic, as explained in *note 6.3.1::, "*note 6.3.1::
52816 Conformance Rules". Additional convention names generally represent the
52817 calling conventions of foreign languages, language implementations, or
52818 specific run-time models. The convention of a callable entity is its
52819 calling convention.
52820
52821 12
52822 If L is a convention_identifier for a language, then a type T is said to
52823 be compatible with convention L, (alternatively, is said to be an
52824 L-compatible type) if any of the following conditions are met:
52825
52826 13
52827 * T is declared in a language interface package corresponding to L
52828 and is defined to be L-compatible (see *note B.3::, *note B.3.1::,
52829 *note B.3.2::, *note B.4::, *note B.5::),
52830
52831 14/3
52832 * Convention L has been specified for T, and T is eligible for
52833 convention L; that is:
52834
52835 15
52836 * T is an array type with either an unconstrained or
52837 statically-constrained first subtype, and its component
52838 type is L-compatible,
52839
52840 16
52841 * T is a record type that has no discriminants and that
52842 only has components with statically-constrained subtypes,
52843 and each component type is L-compatible,
52844
52845 17/3
52846 * T is an access-to-object type, its designated type is
52847 L-compatible, and its designated subtype is not an
52848 unconstrained array subtype,
52849
52850 18
52851 * T is an access-to-subprogram type, and its designated
52852 profile's parameter and result types are all
52853 L-compatible.
52854
52855 19
52856 * T is derived from an L-compatible type,
52857
52858 20
52859 * The implementation permits T as an L-compatible type.
52860
52861 21/3
52862 If the Convention aspect is specified for a type, then the type shall
52863 either be compatible with or eligible for the specified convention.
52864
52865 22/3
52866 Notwithstanding any rule to the contrary, a declaration with a True
52867 Import aspect shall not have a completion.
52868
52869 23/3
52870 An entity with a True Import aspect (or Export aspect) is said to be
52871 imported (respectively, exported). An entity shall not be both imported
52872 and exported.
52873
52874 24
52875 The declaration of an imported object shall not include an explicit
52876 initialization expression. Default initializations are not performed.
52877
52878 25/3
52879 The type of an imported or exported object shall be compatible with the
52880 specified Convention aspect, if any.
52881
52882 26/3
52883 For an imported or exported subprogram, the result and parameter types
52884 shall each be compatible with the specified Convention aspect, if any.
52885
52886 27/3
52887 The aspect_definition (if any) used to directly specify an Import,
52888 Export, External_Name, or Link_Name aspect shall be a static expression.
52889 The string_expression of a pragma Linker_Options shall be static. An
52890 External_Name or Link_Name aspect shall be specified only for an entity
52891 that is either imported or exported.
52892
52893 _Static Semantics_
52894
52895 Paragraphs 28 and 29 were deleted.
52896
52897 30/3
52898 The Convention aspect represents the calling convention or
52899 representation convention of the entity. For an access-to-subprogram
52900 type, it represents the calling convention of designated subprograms.
52901 In addition:
52902
52903 31/3
52904 * A True Import aspect indicates that the entity is defined
52905 externally (that is, outside the Ada program). This aspect is
52906 never inherited; if not directly specified, the Import aspect is
52907 False.
52908
52909 32/3
52910 * A True Export aspect indicates that the entity is used externally.
52911 This aspect is never inherited; if not directly specified, the
52912 Export aspect is False.
52913
52914 33/3
52915 * For an entity with a True Import or Export aspect, an external
52916 name, link name, or both may also be specified.
52917
52918 34
52919 An external name is a string value for the name used by a foreign
52920 language program either for an entity that an Ada program imports, or
52921 for referring to an entity that an Ada program exports.
52922
52923 35
52924 A link name is a string value for the name of an exported or imported
52925 entity, based on the conventions of the foreign language's compiler in
52926 interfacing with the system's linker tool.
52927
52928 36
52929 The meaning of link names is implementation defined. If neither a link
52930 name nor the Address attribute of an imported or exported entity is
52931 specified, then a link name is chosen in an implementation-defined
52932 manner, based on the external name if one is specified.
52933
52934 37
52935 Pragma Linker_Options has the effect of passing its string argument as a
52936 parameter to the system linker (if one exists), if the immediately
52937 enclosing compilation unit is included in the partition being linked.
52938 The interpretation of the string argument, and the way in which the
52939 string arguments from multiple Linker_Options pragmas are combined, is
52940 implementation defined.
52941
52942 _Dynamic Semantics_
52943
52944 38/3
52945 Notwithstanding what this International Standard says elsewhere, the
52946 elaboration of a declaration with a True Import aspect does not create
52947 the entity. Such an elaboration has no other effect than to allow the
52948 defining name to denote the external entity.
52949
52950 _Erroneous Execution_
52951
52952 38.1/3
52953 It is the programmer's responsibility to ensure that the use of
52954 interfacing aspects does not violate Ada semantics; otherwise, program
52955 execution is erroneous.
52956
52957 _Implementation Advice_
52958
52959 39/3
52960 If an implementation supports Export for a given language, then it
52961 should also allow the main subprogram to be written in that language.
52962 It should support some mechanism for invoking the elaboration of the Ada
52963 library units included in the system, and for invoking the finalization
52964 of the environment task. On typical systems, the recommended mechanism
52965 is to provide two subprograms whose link names are "adainit" and
52966 "adafinal". Adainit should contain the elaboration code for library
52967 units. Adafinal should contain the finalization code. These
52968 subprograms should have no effect the second and subsequent time they
52969 are called.
52970
52971 40/3
52972 Automatic elaboration of preelaborated packages should be provided when
52973 specifying the Export aspect as True is supported.
52974
52975 41/3
52976 For each supported convention L other than Intrinsic, an implementation
52977 should support specifying the Import and Export aspects for objects of
52978 L-compatible types and for subprograms, and the Convention aspect for
52979 L-eligible types and for subprograms, presuming the other language has
52980 corresponding features. Specifying the Convention aspect need not be
52981 supported for scalar types.
52982
52983 NOTES
52984
52985 42/3
52986 1 Implementations may place restrictions on interfacing aspects;
52987 for example, requiring each exported entity to be declared at the
52988 library level.
52989
52990 43/3
52991 2 The Convention aspect in combination with the Import aspect
52992 indicates the conventions for accessing external entities. It is
52993 possible that the actual entity is written in assembly language,
52994 but reflects the conventions of a particular language. For
52995 example, with Convention => Ada can be used to interface to an
52996 assembly language routine that obeys the Ada compiler's calling
52997 conventions.
52998
52999 44/3
53000 3 To obtain "call-back" to an Ada subprogram from a foreign
53001 language environment, the Convention aspect should be specified
53002 both for the access-to-subprogram type and the specific
53003 subprogram(s) to which 'Access is applied.
53004
53005 Paragraphs 45 and 46 were deleted.
53006
53007 47
53008 4 See also *note 13.8::, "*note 13.8:: Machine Code Insertions".
53009
53010 48/3
53011 5 If both External_Name and Link_Name are specified for a given
53012 entity, then the External_Name is ignored.
53013
53014 49/2
53015 This paragraph was deleted.
53016
53017 _Examples_
53018
53019 50
53020 Example of interfacing pragmas:
53021
53022 51/3
53023 package Fortran_Library is
53024 function Sqrt (X : Float) return Float
53025 with Import => True, Convention => Fortran;
53026 type Matrix is array (Natural range <>, Natural range <>) of Float
53027 with Convention => Fortran;
53028 function Invert (M : Matrix) return Matrix
53029 with Import => True, Convention => Fortran;
53030 end Fortran_Library;
53031
53032 \1f
53033 File: arm2012.info, Node: B.2, Next: B.3, Prev: B.1, Up: Annex B
53034
53035 B.2 The Package Interfaces
53036 ==========================
53037
53038 1
53039 Package Interfaces is the parent of several library packages that
53040 declare types and other entities useful for interfacing to foreign
53041 languages. It also contains some implementation-defined types that are
53042 useful across more than one language (in particular for interfacing to
53043 assembly language).
53044
53045 _Static Semantics_
53046
53047 2
53048 The library package Interfaces has the following skeletal declaration:
53049
53050 3
53051
53052 package Interfaces is
53053 pragma Pure(Interfaces);
53054
53055 4
53056 type Integer_n is range -2**(n-1) .. 2**(n-1) - 1; --2's complement
53057
53058 5
53059 type Unsigned_n is mod 2**n;
53060
53061 6
53062 function Shift_Left (Value : Unsigned_n; Amount : Natural)
53063 return Unsigned_n;
53064 function Shift_Right (Value : Unsigned_n; Amount : Natural)
53065 return Unsigned_n;
53066 function Shift_Right_Arithmetic (Value : Unsigned_n; Amount : Natural)
53067 return Unsigned_n;
53068 function Rotate_Left (Value : Unsigned_n; Amount : Natural)
53069 return Unsigned_n;
53070 function Rotate_Right (Value : Unsigned_n; Amount : Natural)
53071 return Unsigned_n;
53072 ...
53073 end Interfaces;
53074
53075 _Implementation Requirements_
53076
53077 7
53078 An implementation shall provide the following declarations in the
53079 visible part of package Interfaces:
53080
53081 8
53082 * Signed and modular integer types of n bits, if supported by the
53083 target architecture, for each n that is at least the size of a
53084 storage element and that is a factor of the word size. The names
53085 of these types are of the form Integer_n for the signed types, and
53086 Unsigned_n for the modular types;
53087
53088 9
53089 * For each such modular type in Interfaces, shifting and rotating
53090 subprograms as specified in the declaration of Interfaces above.
53091 These subprograms are Intrinsic. They operate on a bit-by-bit
53092 basis, using the binary representation of the value of the operands
53093 to yield a binary representation for the result. The Amount
53094 parameter gives the number of bits by which to shift or rotate.
53095 For shifting, zero bits are shifted in, except in the case of
53096 Shift_Right_Arithmetic, where one bits are shifted in if Value is
53097 at least half the modulus.
53098
53099 10
53100 * Floating point types corresponding to each floating point format
53101 fully supported by the hardware.
53102
53103 _Implementation Permissions_
53104
53105 11
53106 An implementation may provide implementation-defined library units that
53107 are children of Interfaces, and may add declarations to the visible part
53108 of Interfaces in addition to the ones defined above.
53109
53110 11.1/3
53111 A child package of package Interfaces with the name of a convention may
53112 be provided independently of whether the convention is supported by the
53113 Convention aspect and vice versa. Such a child package should contain
53114 any declarations that would be useful for interfacing to the language
53115 (implementation) represented by the convention. Any declarations useful
53116 for interfacing to any language on the given hardware architecture
53117 should be provided directly in Interfaces.
53118
53119 _Implementation Advice_
53120
53121 12/2
53122 This paragraph was deleted.
53123
53124 13/3
53125 An implementation supporting an interface to C, COBOL, or Fortran should
53126 provide the corresponding package or packages described in the following
53127 subclauses.
53128
53129 \1f
53130 File: arm2012.info, Node: B.3, Next: B.4, Prev: B.2, Up: Annex B
53131
53132 B.3 Interfacing with C and C++
53133 ==============================
53134
53135 1/3
53136 The facilities relevant to interfacing with the C language and the
53137 corresponding subset of the C++ language are the package Interfaces.C
53138 and its children, and support for specifying the Convention aspect with
53139 convention_identifiers C and C_Pass_By_Copy.
53140
53141 2/3
53142 The package Interfaces.C contains the basic types, constants, and
53143 subprograms that allow an Ada program to pass scalars and strings to C
53144 and C++ functions. When this subclause mentions a C entity, the
53145 reference also applies to the corresponding entity in C++.
53146
53147 _Static Semantics_
53148
53149 3
53150 The library package Interfaces.C has the following declaration:
53151
53152 4
53153 package Interfaces.C is
53154 pragma Pure(C);
53155
53156 5
53157 -- Declarations based on C's <limits.h>
53158
53159 6
53160 CHAR_BIT : constant := implementation-defined; -- typically 8
53161 SCHAR_MIN : constant := implementation-defined; -- typically -128
53162 SCHAR_MAX : constant := implementation-defined; -- typically 127
53163 UCHAR_MAX : constant := implementation-defined; -- typically 255
53164
53165 7
53166 -- Signed and Unsigned Integers
53167 type int is range implementation-defined;
53168 type short is range implementation-defined;
53169 type long is range implementation-defined;
53170
53171 8
53172 type signed_char is range SCHAR_MIN .. SCHAR_MAX;
53173 for signed_char'Size use CHAR_BIT;
53174
53175 9
53176 type unsigned is mod implementation-defined;
53177 type unsigned_short is mod implementation-defined;
53178 type unsigned_long is mod implementation-defined;
53179
53180 10
53181 type unsigned_char is mod (UCHAR_MAX+1);
53182 for unsigned_char'Size use CHAR_BIT;
53183
53184 11
53185 subtype plain_char is implementation-defined;
53186
53187 12
53188 type ptrdiff_t is range implementation-defined;
53189
53190 13
53191 type size_t is mod implementation-defined;
53192
53193 14
53194 -- Floating Point
53195
53196 15
53197 type C_float is digits implementation-defined;
53198
53199 16
53200 type double is digits implementation-defined;
53201
53202 17
53203 type long_double is digits implementation-defined;
53204
53205 18
53206 -- Characters and Strings
53207
53208 19
53209 type char is <implementation-defined character type>;
53210
53211 20/1
53212 nul : constant char := implementation-defined;
53213
53214 21
53215 function To_C (Item : in Character) return char;
53216
53217 22
53218 function To_Ada (Item : in char) return Character;
53219
53220 23/3
53221 type char_array is array (size_t range <>) of aliased char
53222 with Pack;
53223 for char_array'Component_Size use CHAR_BIT;
53224
53225 24
53226 function Is_Nul_Terminated (Item : in char_array) return Boolean;
53227
53228 25
53229 function To_C (Item : in String;
53230 Append_Nul : in Boolean := True)
53231 return char_array;
53232
53233 26
53234 function To_Ada (Item : in char_array;
53235 Trim_Nul : in Boolean := True)
53236 return String;
53237
53238 27
53239 procedure To_C (Item : in String;
53240 Target : out char_array;
53241 Count : out size_t;
53242 Append_Nul : in Boolean := True);
53243
53244 28
53245 procedure To_Ada (Item : in char_array;
53246 Target : out String;
53247 Count : out Natural;
53248 Trim_Nul : in Boolean := True);
53249
53250 29
53251 -- Wide Character and Wide String
53252
53253 30/1
53254 type wchar_t is <implementation-defined character type>;
53255
53256 31/1
53257 wide_nul : constant wchar_t := implementation-defined;
53258
53259 32
53260 function To_C (Item : in Wide_Character) return wchar_t;
53261 function To_Ada (Item : in wchar_t ) return Wide_Character;
53262
53263 33/3
53264 type wchar_array is array (size_t range <>) of aliased wchar_t
53265 with Pack;
53266
53267 34/3
53268 This paragraph was deleted.
53269
53270 35
53271 function Is_Nul_Terminated (Item : in wchar_array) return Boolean;
53272
53273 36
53274 function To_C (Item : in Wide_String;
53275 Append_Nul : in Boolean := True)
53276 return wchar_array;
53277
53278 37
53279 function To_Ada (Item : in wchar_array;
53280 Trim_Nul : in Boolean := True)
53281 return Wide_String;
53282
53283 38
53284 procedure To_C (Item : in Wide_String;
53285 Target : out wchar_array;
53286 Count : out size_t;
53287 Append_Nul : in Boolean := True);
53288
53289 39
53290 procedure To_Ada (Item : in wchar_array;
53291 Target : out Wide_String;
53292 Count : out Natural;
53293 Trim_Nul : in Boolean := True);
53294
53295 39.1/2
53296 -- ISO/IEC 10646:2003 compatible types defined by ISO/IEC TR 19769:2004.
53297
53298 39.2/2
53299 type char16_t is <implementation-defined character type>;
53300
53301 39.3/2
53302 char16_nul : constant char16_t := implementation-defined;
53303
53304 39.4/2
53305 function To_C (Item : in Wide_Character) return char16_t;
53306 function To_Ada (Item : in char16_t) return Wide_Character;
53307
53308 39.5/3
53309 type char16_array is array (size_t range <>) of aliased char16_t
53310 with Pack;
53311
53312 39.6/3
53313 This paragraph was deleted.
53314
53315 39.7/2
53316 function Is_Nul_Terminated (Item : in char16_array) return Boolean;
53317 function To_C (Item : in Wide_String;
53318 Append_Nul : in Boolean := True)
53319 return char16_array;
53320
53321 39.8/2
53322 function To_Ada (Item : in char16_array;
53323 Trim_Nul : in Boolean := True)
53324 return Wide_String;
53325
53326 39.9/2
53327 procedure To_C (Item : in Wide_String;
53328 Target : out char16_array;
53329 Count : out size_t;
53330 Append_Nul : in Boolean := True);
53331
53332 39.10/2
53333 procedure To_Ada (Item : in char16_array;
53334 Target : out Wide_String;
53335 Count : out Natural;
53336 Trim_Nul : in Boolean := True);
53337
53338 39.11/2
53339 type char32_t is <implementation-defined character type>;
53340
53341 39.12/2
53342 char32_nul : constant char32_t := implementation-defined;
53343
53344 39.13/2
53345 function To_C (Item : in Wide_Wide_Character) return char32_t;
53346 function To_Ada (Item : in char32_t) return Wide_Wide_Character;
53347
53348 39.14/3
53349 type char32_array is array (size_t range <>) of aliased char32_t
53350 with Pack;
53351
53352 39.15/3
53353 This paragraph was deleted.
53354
53355 39.16/2
53356 function Is_Nul_Terminated (Item : in char32_array) return Boolean;
53357 function To_C (Item : in Wide_Wide_String;
53358 Append_Nul : in Boolean := True)
53359 return char32_array;
53360
53361 39.17/2
53362 function To_Ada (Item : in char32_array;
53363 Trim_Nul : in Boolean := True)
53364 return Wide_Wide_String;
53365
53366 39.18/2
53367 procedure To_C (Item : in Wide_Wide_String;
53368 Target : out char32_array;
53369 Count : out size_t;
53370 Append_Nul : in Boolean := True);
53371
53372 39.19/2
53373 procedure To_Ada (Item : in char32_array;
53374 Target : out Wide_Wide_String;
53375 Count : out Natural;
53376 Trim_Nul : in Boolean := True);
53377
53378 40
53379 Terminator_Error : exception;
53380
53381 41
53382 end Interfaces.C;
53383
53384 42
53385 Each of the types declared in Interfaces.C is C-compatible.
53386
53387 43/2
53388 The types int, short, long, unsigned, ptrdiff_t, size_t, double, char,
53389 wchar_t, char16_t, and char32_t correspond respectively to the C types
53390 having the same names. The types signed_char, unsigned_short,
53391 unsigned_long, unsigned_char, C_float, and long_double correspond
53392 respectively to the C types signed char, unsigned short, unsigned long,
53393 unsigned char, float, and long double.
53394
53395 44
53396 The type of the subtype plain_char is either signed_char or
53397 unsigned_char, depending on the C implementation.
53398
53399 45
53400 function To_C (Item : in Character) return char;
53401 function To_Ada (Item : in char ) return Character;
53402
53403 46
53404 The functions To_C and To_Ada map between the Ada type
53405 Character and the C type char.
53406
53407 47
53408 function Is_Nul_Terminated (Item : in char_array) return Boolean;
53409
53410 48
53411 The result of Is_Nul_Terminated is True if Item contains nul,
53412 and is False otherwise.
53413
53414 49
53415 function To_C (Item : in String; Append_Nul : in Boolean := True)
53416 return char_array;
53417
53418 function To_Ada (Item : in char_array; Trim_Nul : in Boolean := True)
53419 return String;
53420
53421 50/2
53422 The result of To_C is a char_array value of length Item'Length
53423 (if Append_Nul is False) or Item'Length+1 (if Append_Nul is
53424 True). The lower bound is 0. For each component Item(I), the
53425 corresponding component in the result is To_C applied to
53426 Item(I). The value nul is appended if Append_Nul is True. If
53427 Append_Nul is False and Item'Length is 0, then To_C propagates
53428 Constraint_Error.
53429
53430 51
53431 The result of To_Ada is a String whose length is Item'Length
53432 (if Trim_Nul is False) or the length of the slice of Item
53433 preceding the first nul (if Trim_Nul is True). The lower
53434 bound of the result is 1. If Trim_Nul is False, then for each
53435 component Item(I) the corresponding component in the result is
53436 To_Ada applied to Item(I). If Trim_Nul is True, then for each
53437 component Item(I) before the first nul the corresponding
53438 component in the result is To_Ada applied to Item(I). The
53439 function propagates Terminator_Error if Trim_Nul is True and
53440 Item does not contain nul.
53441
53442 52
53443 procedure To_C (Item : in String;
53444 Target : out char_array;
53445 Count : out size_t;
53446 Append_Nul : in Boolean := True);
53447
53448 procedure To_Ada (Item : in char_array;
53449 Target : out String;
53450 Count : out Natural;
53451 Trim_Nul : in Boolean := True);
53452
53453 53
53454 For procedure To_C, each element of Item is converted (via the
53455 To_C function) to a char, which is assigned to the
53456 corresponding element of Target. If Append_Nul is True, nul
53457 is then assigned to the next element of Target. In either
53458 case, Count is set to the number of Target elements assigned.
53459 If Target is not long enough, Constraint_Error is propagated.
53460
53461 54
53462 For procedure To_Ada, each element of Item (if Trim_Nul is
53463 False) or each element of Item preceding the first nul (if
53464 Trim_Nul is True) is converted (via the To_Ada function) to a
53465 Character, which is assigned to the corresponding element of
53466 Target. Count is set to the number of Target elements
53467 assigned. If Target is not long enough, Constraint_Error is
53468 propagated. If Trim_Nul is True and Item does not contain
53469 nul, then Terminator_Error is propagated.
53470
53471 55
53472 function Is_Nul_Terminated (Item : in wchar_array) return Boolean;
53473
53474 56
53475 The result of Is_Nul_Terminated is True if Item contains
53476 wide_nul, and is False otherwise.
53477
53478 57
53479 function To_C (Item : in Wide_Character) return wchar_t;
53480 function To_Ada (Item : in wchar_t ) return Wide_Character;
53481
53482 58
53483 To_C and To_Ada provide the mappings between the Ada and C
53484 wide character types.
53485
53486 59
53487 function To_C (Item : in Wide_String;
53488 Append_Nul : in Boolean := True)
53489 return wchar_array;
53490
53491 function To_Ada (Item : in wchar_array;
53492 Trim_Nul : in Boolean := True)
53493 return Wide_String;
53494
53495 procedure To_C (Item : in Wide_String;
53496 Target : out wchar_array;
53497 Count : out size_t;
53498 Append_Nul : in Boolean := True);
53499
53500 procedure To_Ada (Item : in wchar_array;
53501 Target : out Wide_String;
53502 Count : out Natural;
53503 Trim_Nul : in Boolean := True);
53504
53505 60
53506 The To_C and To_Ada subprograms that convert between
53507 Wide_String and wchar_array have analogous effects to the To_C
53508 and To_Ada subprograms that convert between String and
53509 char_array, except that wide_nul is used instead of nul.
53510
53511 60.1/2
53512 function Is_Nul_Terminated (Item : in char16_array) return Boolean;
53513
53514 60.2/2
53515 The result of Is_Nul_Terminated is True if Item contains
53516 char16_nul, and is False otherwise.
53517
53518 60.3/2
53519 function To_C (Item : in Wide_Character) return char16_t;
53520 function To_Ada (Item : in char16_t ) return Wide_Character;
53521
53522 60.4/2
53523 To_C and To_Ada provide mappings between the Ada and C 16-bit
53524 character types.
53525
53526 60.5/2
53527 function To_C (Item : in Wide_String;
53528 Append_Nul : in Boolean := True)
53529 return char16_array;
53530
53531 function To_Ada (Item : in char16_array;
53532 Trim_Nul : in Boolean := True)
53533 return Wide_String;
53534
53535 procedure To_C (Item : in Wide_String;
53536 Target : out char16_array;
53537 Count : out size_t;
53538 Append_Nul : in Boolean := True);
53539
53540 procedure To_Ada (Item : in char16_array;
53541 Target : out Wide_String;
53542 Count : out Natural;
53543 Trim_Nul : in Boolean := True);
53544
53545 60.6/2
53546 The To_C and To_Ada subprograms that convert between
53547 Wide_String and char16_array have analogous effects to the
53548 To_C and To_Ada subprograms that convert between String and
53549 char_array, except that char16_nul is used instead of nul.
53550
53551 60.7/2
53552 function Is_Nul_Terminated (Item : in char32_array) return Boolean;
53553
53554 60.8/2
53555 The result of Is_Nul_Terminated is True if Item contains
53556 char16_nul, and is False otherwise.
53557
53558 60.9/2
53559 function To_C (Item : in Wide_Wide_Character) return char32_t;
53560 function To_Ada (Item : in char32_t ) return Wide_Wide_Character;
53561
53562 60.10/2
53563 To_C and To_Ada provide mappings between the Ada and C 32-bit
53564 character types.
53565
53566 60.11/2
53567 function To_C (Item : in Wide_Wide_String;
53568 Append_Nul : in Boolean := True)
53569 return char32_array;
53570
53571 function To_Ada (Item : in char32_array;
53572 Trim_Nul : in Boolean := True)
53573 return Wide_Wide_String;
53574
53575 procedure To_C (Item : in Wide_Wide_String;
53576 Target : out char32_array;
53577 Count : out size_t;
53578 Append_Nul : in Boolean := True);
53579
53580 procedure To_Ada (Item : in char32_array;
53581 Target : out Wide_Wide_String;
53582 Count : out Natural;
53583 Trim_Nul : in Boolean := True);
53584
53585 60.12/2
53586 The To_C and To_Ada subprograms that convert between
53587 Wide_Wide_String and char32_array have analogous effects to
53588 the To_C and To_Ada subprograms that convert between String
53589 and char_array, except that char32_nul is used instead of nul.
53590
53591 60.13/3
53592 The Convention aspect with convention_identifier C_Pass_By_Copy shall
53593 only be specified for a type.
53594
53595 60.14/2
53596 The eligibility rules in *note B.1:: do not apply to convention
53597 C_Pass_By_Copy. Instead, a type T is eligible for convention
53598 C_Pass_By_Copy if T is an unchecked union type or if T is a record type
53599 that has no discriminants and that only has components with statically
53600 constrained subtypes, and each component is C-compatible.
53601
53602 60.15/3
53603 If a type is C_Pass_By_Copy-compatible, then it is also C-compatible.
53604
53605 _Implementation Requirements_
53606
53607 61/3
53608 An implementation shall support specifying aspect Convention with a C
53609 convention_identifier for a C-eligible type (see *note B.1::). An
53610 implementation shall support specifying aspect Convention with a
53611 C_Pass_By_Copy convention_identifier for a C_Pass_By_Copy-eligible type.
53612
53613 _Implementation Permissions_
53614
53615 62
53616 An implementation may provide additional declarations in the C interface
53617 packages.
53618
53619 62.1/3
53620 An implementation need not support specifying the Convention aspect with
53621 convention_identifier C in the following cases:
53622
53623 62.2/3
53624 * for a subprogram that has a parameter of an unconstrained array
53625 subtype, unless the Import aspect has the value True for the
53626 subprogram;
53627
53628 62.3/3
53629 * for a function with an unconstrained array result subtype;
53630
53631 62.4/3
53632 * for an object whose nominal subtype is an unconstrained array
53633 subtype.
53634
53635 _Implementation Advice_
53636
53637 62.5/3
53638 The constants nul, wide_nul, char16_nul, and char32_nul should have a
53639 representation of zero.
53640
53641 63
53642 An implementation should support the following interface correspondences
53643 between Ada and C.
53644
53645 64
53646 * An Ada procedure corresponds to a void-returning C function.
53647
53648 65
53649 * An Ada function corresponds to a non-void C function.
53650
53651 66
53652 * An Ada in scalar parameter is passed as a scalar argument to a C
53653 function.
53654
53655 67
53656 * An Ada in parameter of an access-to-object type with designated
53657 type T is passed as a t* argument to a C function, where t is the C
53658 type corresponding to the Ada type T.
53659
53660 68
53661 * An Ada access T parameter, or an Ada out or in out parameter of an
53662 elementary type T, is passed as a t* argument to a C function,
53663 where t is the C type corresponding to the Ada type T. In the case
53664 of an elementary out or in out parameter, a pointer to a temporary
53665 copy is used to preserve by-copy semantics.
53666
53667 68.1/2
53668 * An Ada parameter of a (record) type T of convention C_Pass_By_Copy,
53669 of mode in, is passed as a t argument to a C function, where t is
53670 the C struct corresponding to the Ada type T.
53671
53672 69/2
53673 * An Ada parameter of a record type T, of any mode, other than an in
53674 parameter of a type of convention C_Pass_By_Copy, is passed as a t*
53675 argument to a C function, where t is the C struct corresponding to
53676 the Ada type T.
53677
53678 70
53679 * An Ada parameter of an array type with component type T, of any
53680 mode, is passed as a t* argument to a C function, where t is the C
53681 type corresponding to the Ada type T.
53682
53683 71
53684 * An Ada parameter of an access-to-subprogram type is passed as a
53685 pointer to a C function whose prototype corresponds to the
53686 designated subprogram's specification.
53687
53688 71.1/3
53689 * An Ada parameter of a private type is passed as specified for the
53690 full view of the type.
53691
53692 71.2/3
53693 * The rules of correspondence given above for parameters of mode in
53694 also apply to the return object of a function.
53695
53696 71.3/3
53697 This paragraph was deleted.
53698
53699 NOTES
53700
53701 72
53702 6 Values of type char_array are not implicitly terminated with
53703 nul. If a char_array is to be passed as a parameter to an imported
53704 C function requiring nul termination, it is the programmer's
53705 responsibility to obtain this effect.
53706
53707 73
53708 7 To obtain the effect of C's sizeof(item_type), where Item_Type
53709 is the corresponding Ada type, evaluate the expression:
53710 size_t(Item_Type'Size/CHAR_BIT).
53711
53712 74/2
53713 This paragraph was deleted.
53714
53715 75
53716 8 A C function that takes a variable number of arguments can
53717 correspond to several Ada subprograms, taking various specific
53718 numbers and types of parameters.
53719
53720 _Examples_
53721
53722 76
53723 Example of using the Interfaces.C package:
53724
53725 77
53726 --Calling the C Library Function strcpy
53727 with Interfaces.C;
53728 procedure Test is
53729 package C renames Interfaces.C;
53730 use type C.char_array;
53731 -- Call <string.h>strcpy:
53732 -- C definition of strcpy: char *strcpy(char *s1, const char *s2);
53733 -- This function copies the string pointed to by s2 (including the terminating null character)
53734 -- into the array pointed to by s1. If copying takes place between objects that overlap,
53735 -- the behavior is undefined. The strcpy function returns the value of s1.
53736
53737 78/3
53738 -- Note: since the C function's return value is of no interest, the Ada interface is a procedure
53739 procedure Strcpy (Target : out C.char_array;
53740 Source : in C.char_array)
53741 with Import => True, Convention => C, External_Name => "strcpy";
53742
53743 79/3
53744 This paragraph was deleted.
53745
53746 80
53747 Chars1 : C.char_array(1..20);
53748 Chars2 : C.char_array(1..20);
53749
53750 81
53751 begin
53752 Chars2(1..6) := "qwert" & C.nul;
53753
53754 82
53755 Strcpy(Chars1, Chars2);
53756
53757 83
53758 -- Now Chars1(1..6) = "qwert" & C.Nul
53759
53760 84
53761 end Test;
53762
53763 * Menu:
53764
53765 * B.3.1 :: The Package Interfaces.C.Strings
53766 * B.3.2 :: The Generic Package Interfaces.C.Pointers
53767 * B.3.3 :: Unchecked Union Types
53768
53769 \1f
53770 File: arm2012.info, Node: B.3.1, Next: B.3.2, Up: B.3
53771
53772 B.3.1 The Package Interfaces.C.Strings
53773 --------------------------------------
53774
53775 1/3
53776 The package Interfaces.C.Strings declares types and subprograms allowing
53777 an Ada program to allocate, reference, update, and free C-style strings.
53778 In particular, the private type chars_ptr corresponds to a common use of
53779 "char *" in C programs, and an object of this type can be passed to a
53780 subprogram to which with Import => True, Convention => C has been
53781 specified, and for which "char *" is the type of the argument of the C
53782 function.
53783
53784 _Static Semantics_
53785
53786 2
53787 The library package Interfaces.C.Strings has the following declaration:
53788
53789 3
53790 package Interfaces.C.Strings is
53791 pragma Preelaborate(Strings);
53792
53793 4
53794 type char_array_access is access all char_array;
53795
53796 5/2
53797 type chars_ptr is private;
53798 pragma Preelaborable_Initialization(chars_ptr);
53799
53800 6/2
53801 type chars_ptr_array is array (size_t range <>) of aliased chars_ptr;
53802
53803 7
53804 Null_Ptr : constant chars_ptr;
53805
53806 8
53807 function To_Chars_Ptr (Item : in char_array_access;
53808 Nul_Check : in Boolean := False)
53809 return chars_ptr;
53810
53811 9
53812 function New_Char_Array (Chars : in char_array) return chars_ptr;
53813
53814 10
53815 function New_String (Str : in String) return chars_ptr;
53816
53817 11
53818 procedure Free (Item : in out chars_ptr);
53819
53820 12
53821 Dereference_Error : exception;
53822
53823 13
53824 function Value (Item : in chars_ptr) return char_array;
53825
53826 14
53827 function Value (Item : in chars_ptr; Length : in size_t)
53828 return char_array;
53829
53830 15
53831 function Value (Item : in chars_ptr) return String;
53832
53833 16
53834 function Value (Item : in chars_ptr; Length : in size_t)
53835 return String;
53836
53837 17
53838 function Strlen (Item : in chars_ptr) return size_t;
53839
53840 18
53841 procedure Update (Item : in chars_ptr;
53842 Offset : in size_t;
53843 Chars : in char_array;
53844 Check : in Boolean := True);
53845
53846 19
53847 procedure Update (Item : in chars_ptr;
53848 Offset : in size_t;
53849 Str : in String;
53850 Check : in Boolean := True);
53851
53852 20
53853 Update_Error : exception;
53854
53855 21
53856 private
53857 ... -- not specified by the language
53858 end Interfaces.C.Strings;
53859
53860 22
53861 The type chars_ptr is C-compatible and corresponds to the use of C's
53862 "char *" for a pointer to the first char in a char array terminated by
53863 nul. When an object of type chars_ptr is declared, its value is by
53864 default set to Null_Ptr, unless the object is imported (see *note
53865 B.1::).
53866
53867 23
53868 function To_Chars_Ptr (Item : in char_array_access;
53869 Nul_Check : in Boolean := False)
53870 return chars_ptr;
53871
53872 24/3
53873 If Item is null, then To_Chars_Ptr returns Null_Ptr. If Item
53874 is not null, Nul_Check is True, and Item.all does not contain
53875 nul, then the function propagates Terminator_Error; otherwise,
53876 To_Chars_Ptr performs a pointer conversion with no allocation
53877 of memory.
53878
53879 25
53880 function New_Char_Array (Chars : in char_array) return chars_ptr;
53881
53882 26
53883 This function returns a pointer to an allocated object
53884 initialized to Chars(Chars'First .. Index) & nul, where
53885
53886 27
53887 * Index = Chars'Last if Chars does not contain nul, or
53888
53889 28
53890 * Index is the smallest size_t value I such that Chars(I+1)
53891 = nul.
53892
53893 28.1
53894 Storage_Error is propagated if the allocation fails.
53895
53896 29
53897 function New_String (Str : in String) return chars_ptr;
53898
53899 30
53900 This function is equivalent to New_Char_Array(To_C(Str)).
53901
53902 31
53903 procedure Free (Item : in out chars_ptr);
53904
53905 32
53906 If Item is Null_Ptr, then Free has no effect. Otherwise, Free
53907 releases the storage occupied by Value(Item), and resets Item
53908 to Null_Ptr.
53909
53910 33
53911 function Value (Item : in chars_ptr) return char_array;
53912
53913 34/3
53914 If Item = Null_Ptr, then Value propagates Dereference_Error.
53915 Otherwise, Value returns the prefix of the array of chars
53916 pointed to by Item, up to and including the first nul. The
53917 lower bound of the result is 0. If Item does not point to a
53918 nul-terminated string, then execution of Value is erroneous.
53919
53920 35
53921 function Value (Item : in chars_ptr; Length : in size_t)
53922 return char_array;
53923
53924 36/3
53925 If Item = Null_Ptr, then Value propagates Dereference_Error.
53926 Otherwise, Value returns the shorter of two arrays, either the
53927 first Length chars pointed to by Item, or Value(Item). The
53928 lower bound of the result is 0. If Length is 0, then Value
53929 propagates Constraint_Error.
53930
53931 37
53932 function Value (Item : in chars_ptr) return String;
53933
53934 38
53935 Equivalent to To_Ada(Value(Item), Trim_Nul=>True).
53936
53937 39
53938 function Value (Item : in chars_ptr; Length : in size_t)
53939 return String;
53940
53941 40/1
53942 Equivalent to To_Ada(Value(Item, Length) & nul,
53943 Trim_Nul=>True).
53944
53945 41
53946 function Strlen (Item : in chars_ptr) return size_t;
53947
53948 42
53949 Returns Val'Length-1 where Val = Value(Item); propagates
53950 Dereference_Error if Item = Null_Ptr.
53951
53952 43
53953 procedure Update (Item : in chars_ptr;
53954 Offset : in size_t;
53955 Chars : in char_array;
53956 Check : Boolean := True);
53957
53958 44/1
53959 If Item = Null_Ptr, then Update propagates Dereference_Error.
53960 Otherwise, this procedure updates the value pointed to by
53961 Item, starting at position Offset, using Chars as the data to
53962 be copied into the array. Overwriting the nul terminator, and
53963 skipping with the Offset past the nul terminator, are both
53964 prevented if Check is True, as follows:
53965
53966 45
53967 * Let N = Strlen(Item). If Check is True, then:
53968
53969 46
53970 * If Offset+Chars'Length>N, propagate
53971 Update_Error.
53972
53973 47
53974 * Otherwise, overwrite the data in the array
53975 pointed to by Item, starting at the char at
53976 position Offset, with the data in Chars.
53977
53978 48
53979 * If Check is False, then processing is as above, but with
53980 no check that Offset+Chars'Length>N.
53981
53982 49
53983 procedure Update (Item : in chars_ptr;
53984 Offset : in size_t;
53985 Str : in String;
53986 Check : in Boolean := True);
53987
53988 50/2
53989 Equivalent to Update(Item, Offset, To_C(Str, Append_Nul =>
53990 False), Check).
53991
53992 _Erroneous Execution_
53993
53994 51
53995 Execution of any of the following is erroneous if the Item parameter is
53996 not null_ptr and Item does not point to a nul-terminated array of chars.
53997
53998 52
53999 * a Value function not taking a Length parameter,
54000
54001 53
54002 * the Free procedure,
54003
54004 54
54005 * the Strlen function.
54006
54007 55
54008 Execution of Free(X) is also erroneous if the chars_ptr X was not
54009 returned by New_Char_Array or New_String.
54010
54011 56
54012 Reading or updating a freed char_array is erroneous.
54013
54014 57
54015 Execution of Update is erroneous if Check is False and a call with Check
54016 equal to True would have propagated Update_Error.
54017
54018 NOTES
54019
54020 58
54021 9 New_Char_Array and New_String might be implemented either
54022 through the allocation function from the C environment ("malloc")
54023 or through Ada dynamic memory allocation ("new"). The key points
54024 are
54025
54026 59
54027 * the returned value (a chars_ptr) is represented as a C "char
54028 *" so that it may be passed to C functions;
54029
54030 60
54031 * the allocated object should be freed by the programmer via a
54032 call of Free, not by a called C function.
54033
54034 \1f
54035 File: arm2012.info, Node: B.3.2, Next: B.3.3, Prev: B.3.1, Up: B.3
54036
54037 B.3.2 The Generic Package Interfaces.C.Pointers
54038 -----------------------------------------------
54039
54040 1
54041 The generic package Interfaces.C.Pointers allows the Ada programmer to
54042 perform C-style operations on pointers. It includes an access type
54043 Pointer, Value functions that dereference a Pointer and deliver the
54044 designated array, several pointer arithmetic operations, and "copy"
54045 procedures that copy the contents of a source pointer into the array
54046 designated by a destination pointer. As in C, it treats an object Ptr
54047 of type Pointer as a pointer to the first element of an array, so that
54048 for example, adding 1 to Ptr yields a pointer to the second element of
54049 the array.
54050
54051 2
54052 The generic allows two styles of usage: one in which the array is
54053 terminated by a special terminator element; and another in which the
54054 programmer needs to keep track of the length.
54055
54056 _Static Semantics_
54057
54058 3
54059 The generic library package Interfaces.C.Pointers has the following
54060 declaration:
54061
54062 4
54063 generic
54064 type Index is (<>);
54065 type Element is private;
54066 type Element_Array is array (Index range <>) of aliased Element;
54067 Default_Terminator : Element;
54068 package Interfaces.C.Pointers is
54069 pragma Preelaborate(Pointers);
54070
54071 5
54072 type Pointer is access all Element;
54073
54074 6
54075 function Value(Ref : in Pointer;
54076 Terminator : in Element := Default_Terminator)
54077 return Element_Array;
54078
54079 7
54080 function Value(Ref : in Pointer;
54081 Length : in ptrdiff_t)
54082 return Element_Array;
54083
54084 8
54085 Pointer_Error : exception;
54086
54087 9
54088 -- C-style Pointer arithmetic
54089
54090 10/3
54091 function "+" (Left : in Pointer; Right : in ptrdiff_t) return Pointer
54092 with Convention => Intrinsic;
54093 function "+" (Left : in ptrdiff_t; Right : in Pointer) return Pointer
54094 with Convention => Intrinsic;
54095 function "-" (Left : in Pointer; Right : in ptrdiff_t) return Pointer
54096 with Convention => Intrinsic;
54097 function "-" (Left : in Pointer; Right : in Pointer) return ptrdiff_t
54098 with Convention => Intrinsic;
54099
54100 11/3
54101 procedure Increment (Ref : in out Pointer)
54102 with Convention => Intrinsic;
54103 procedure Decrement (Ref : in out Pointer)
54104 with Convention => Intrinsic;
54105
54106 12/3
54107 This paragraph was deleted.
54108
54109 13
54110 function Virtual_Length (Ref : in Pointer;
54111 Terminator : in Element := Default_Terminator)
54112 return ptrdiff_t;
54113
54114 14
54115 procedure Copy_Terminated_Array
54116 (Source : in Pointer;
54117 Target : in Pointer;
54118 Limit : in ptrdiff_t := ptrdiff_t'Last;
54119 Terminator : in Element := Default_Terminator);
54120
54121 15
54122 procedure Copy_Array (Source : in Pointer;
54123 Target : in Pointer;
54124 Length : in ptrdiff_t);
54125
54126 16
54127 end Interfaces.C.Pointers;
54128
54129 17
54130 The type Pointer is C-compatible and corresponds to one use of C's
54131 "Element *". An object of type Pointer is interpreted as a pointer to
54132 the initial Element in an Element_Array. Two styles are supported:
54133
54134 18
54135 * Explicit termination of an array value with Default_Terminator (a
54136 special terminator value);
54137
54138 19
54139 * Programmer-managed length, with Default_Terminator treated simply
54140 as a data element.
54141
54142 20
54143 function Value(Ref : in Pointer;
54144 Terminator : in Element := Default_Terminator)
54145 return Element_Array;
54146
54147 21
54148 This function returns an Element_Array whose value is the
54149 array pointed to by Ref, up to and including the first
54150 Terminator; the lower bound of the array is Index'First.
54151 Interfaces.C.Strings.Dereference_Error is propagated if Ref is
54152 null.
54153
54154 22
54155 function Value(Ref : in Pointer;
54156 Length : in ptrdiff_t)
54157 return Element_Array;
54158
54159 23
54160 This function returns an Element_Array comprising the first
54161 Length elements pointed to by Ref. The exception
54162 Interfaces.C.Strings.Dereference_Error is propagated if Ref is
54163 null.
54164
54165 24
54166 The "+" and "-" functions perform arithmetic on Pointer values, based on
54167 the Size of the array elements. In each of these functions,
54168 Pointer_Error is propagated if a Pointer parameter is null.
54169
54170 25
54171 procedure Increment (Ref : in out Pointer);
54172
54173 26
54174 Equivalent to Ref := Ref+1.
54175
54176 27
54177 procedure Decrement (Ref : in out Pointer);
54178
54179 28
54180 Equivalent to Ref := Ref-1.
54181
54182 29
54183 function Virtual_Length (Ref : in Pointer;
54184 Terminator : in Element := Default_Terminator)
54185 return ptrdiff_t;
54186
54187 30
54188 Returns the number of Elements, up to the one just before the
54189 first Terminator, in Value(Ref, Terminator).
54190
54191 31
54192 procedure Copy_Terminated_Array
54193 (Source : in Pointer;
54194 Target : in Pointer;
54195 Limit : in ptrdiff_t := ptrdiff_t'Last;
54196 Terminator : in Element := Default_Terminator);
54197
54198 32
54199 This procedure copies Value(Source, Terminator) into the array
54200 pointed to by Target; it stops either after Terminator has
54201 been copied, or the number of elements copied is Limit,
54202 whichever occurs first. Dereference_Error is propagated if
54203 either Source or Target is null.
54204
54205 33
54206 procedure Copy_Array (Source : in Pointer;
54207 Target : in Pointer;
54208 Length : in ptrdiff_t);
54209
54210 34
54211 This procedure copies the first Length elements from the array
54212 pointed to by Source, into the array pointed to by Target.
54213 Dereference_Error is propagated if either Source or Target is
54214 null.
54215
54216 _Erroneous Execution_
54217
54218 35
54219 It is erroneous to dereference a Pointer that does not designate an
54220 aliased Element.
54221
54222 36
54223 Execution of Value(Ref, Terminator) is erroneous if Ref does not
54224 designate an aliased Element in an Element_Array terminated by
54225 Terminator.
54226
54227 37
54228 Execution of Value(Ref, Length) is erroneous if Ref does not designate
54229 an aliased Element in an Element_Array containing at least Length
54230 Elements between the designated Element and the end of the array,
54231 inclusive.
54232
54233 38
54234 Execution of Virtual_Length(Ref, Terminator) is erroneous if Ref does
54235 not designate an aliased Element in an Element_Array terminated by
54236 Terminator.
54237
54238 39
54239 Execution of Copy_Terminated_Array(Source, Target, Limit, Terminator) is
54240 erroneous in either of the following situations:
54241
54242 40
54243 * Execution of both Value(Source, Terminator) and Value(Source,
54244 Limit) are erroneous, or
54245
54246 41
54247 * Copying writes past the end of the array containing the Element
54248 designated by Target.
54249
54250 42
54251 Execution of Copy_Array(Source, Target, Length) is erroneous if either
54252 Value(Source, Length) is erroneous, or copying writes past the end of
54253 the array containing the Element designated by Target.
54254
54255 NOTES
54256
54257 43
54258 10 To compose a Pointer from an Element_Array, use 'Access on the
54259 first element. For example (assuming appropriate instantiations):
54260
54261 44
54262 Some_Array : Element_Array(0..5) ;
54263 Some_Pointer : Pointer := Some_Array(0)'Access;
54264
54265 _Examples_
54266
54267 45
54268 Example of Interfaces.C.Pointers:
54269
54270 46
54271 with Interfaces.C.Pointers;
54272 with Interfaces.C.Strings;
54273 procedure Test_Pointers is
54274 package C renames Interfaces.C;
54275 package Char_Ptrs is
54276 new C.Pointers (Index => C.size_t,
54277 Element => C.char,
54278 Element_Array => C.char_array,
54279 Default_Terminator => C.nul);
54280
54281 47
54282 use type Char_Ptrs.Pointer;
54283 subtype Char_Star is Char_Ptrs.Pointer;
54284
54285 48
54286 procedure Strcpy (Target_Ptr, Source_Ptr : Char_Star) is
54287 Target_Temp_Ptr : Char_Star := Target_Ptr;
54288 Source_Temp_Ptr : Char_Star := Source_Ptr;
54289 Element : C.char;
54290 begin
54291 if Target_Temp_Ptr = null or Source_Temp_Ptr = null then
54292 raise C.Strings.Dereference_Error;
54293 end if;
54294
54295 49/1
54296 loop
54297 Element := Source_Temp_Ptr.all;
54298 Target_Temp_Ptr.all := Element;
54299 exit when C."="(Element, C.nul);
54300 Char_Ptrs.Increment(Target_Temp_Ptr);
54301 Char_Ptrs.Increment(Source_Temp_Ptr);
54302 end loop;
54303 end Strcpy;
54304 begin
54305 ...
54306 end Test_Pointers;
54307
54308 \1f
54309 File: arm2012.info, Node: B.3.3, Prev: B.3.2, Up: B.3
54310
54311 B.3.3 Unchecked Union Types
54312 ---------------------------
54313
54314 1/3
54315 Specifying aspect Unchecked_Union to have the value True defines an
54316 interface correspondence between a given discriminated type and some C
54317 union. The aspect requires that the associated type shall be given a
54318 representation that allocates no space for its discriminant(s).
54319
54320 Paragraphs 2 through 3 were moved to *note Annex J::, "*note Annex J::
54321 Obsolescent Features".
54322
54323 _Static Semantics_
54324
54325 3.1/3
54326 For a discriminated record type having a variant_part, the following
54327 language-defined representation aspect may be specified:
54328
54329 3.2/3
54330 Unchecked_Union
54331 The type of aspect Unchecked_Union is Boolean. If
54332 directly specified, the aspect_definition shall be a
54333 static expression. If not specified (including by
54334 inheritance), the aspect is False.
54335
54336 _Legality Rules_
54337
54338 Paragraphs 4 and 5 were deleted.
54339
54340 6/3
54341 A type for which aspect Unchecked_Union is True is called an unchecked
54342 union type. A subtype of an unchecked union type is defined to be an
54343 unchecked union subtype. An object of an unchecked union type is
54344 defined to be an unchecked union object.
54345
54346 7/2
54347 All component subtypes of an unchecked union type shall be C-compatible.
54348
54349 8/2
54350 If a component subtype of an unchecked union type is subject to a
54351 per-object constraint, then the component subtype shall be an unchecked
54352 union subtype.
54353
54354 9/3
54355 Any name that denotes a discriminant of an object of an unchecked union
54356 type shall occur within the declarative region of the type, and shall
54357 not occur within a record_representation_clause.
54358
54359 10/3
54360 The type of a component declared in a variant_part of an unchecked union
54361 type shall not need finalization. In addition to the places where
54362 Legality Rules normally apply (see *note 12.3::), this rule also applies
54363 in the private part of an instance of a generic unit. For an unchecked
54364 union type declared within the body of a generic unit, or within the
54365 body of any of its descendant library units, no part of the type of a
54366 component declared in a variant_part of the unchecked union type shall
54367 be of a formal private type or formal private extension declared within
54368 the formal part of the generic unit.
54369
54370 11/2
54371 The completion of an incomplete or private type declaration having a
54372 known_discriminant_part shall not be an unchecked union type.
54373
54374 12/2
54375 An unchecked union subtype shall only be passed as a generic actual
54376 parameter if the corresponding formal type has no known discriminants or
54377 is an unchecked union type.
54378
54379 _Static Semantics_
54380
54381 13/2
54382 An unchecked union type is eligible for convention C.
54383
54384 14/2
54385 All objects of an unchecked union type have the same size.
54386
54387 15/2
54388 Discriminants of objects of an unchecked union type are of size zero.
54389
54390 16/2
54391 Any check which would require reading a discriminant of an unchecked
54392 union object is suppressed (see *note 11.5::). These checks include:
54393
54394 17/2
54395 * The check performed when addressing a variant component (i.e., a
54396 component that was declared in a variant part) of an unchecked
54397 union object that the object has this component (see *note
54398 4.1.3::).
54399
54400 18/2
54401 * Any checks associated with a type or subtype conversion of a value
54402 of an unchecked union type (see *note 4.6::). This includes, for
54403 example, the check associated with the implicit subtype conversion
54404 of an assignment statement.
54405
54406 19/2
54407 * The subtype membership check associated with the evaluation of a
54408 qualified expression (see *note 4.7::) or an uninitialized
54409 allocator (see *note 4.8::).
54410
54411 _Dynamic Semantics_
54412
54413 20/2
54414 A view of an unchecked union object (including a type conversion or
54415 function call) has inferable discriminants if it has a constrained
54416 nominal subtype, unless the object is a component of an enclosing
54417 unchecked union object that is subject to a per-object constraint and
54418 the enclosing object lacks inferable discriminants.
54419
54420 21/2
54421 An expression of an unchecked union type has inferable discriminants if
54422 it is either a name of an object with inferable discriminants or a
54423 qualified expression whose subtype_mark denotes a constrained subtype.
54424
54425 22/2
54426 Program_Error is raised in the following cases:
54427
54428 23/2
54429 * Evaluation of the predefined equality operator for an unchecked
54430 union type if either of the operands lacks inferable discriminants.
54431
54432 24/2
54433 * Evaluation of the predefined equality operator for a type which has
54434 a subcomponent of an unchecked union type whose nominal subtype is
54435 unconstrained.
54436
54437 25/2
54438 * Evaluation of a membership test if the subtype_mark denotes a
54439 constrained unchecked union subtype and the expression lacks
54440 inferable discriminants.
54441
54442 26/2
54443 * Conversion from a derived unchecked union type to an unconstrained
54444 non-unchecked-union type if the operand of the conversion lacks
54445 inferable discriminants.
54446
54447 27/2
54448 * Execution of the default implementation of the Write or Read
54449 attribute of an unchecked union type.
54450
54451 28/2
54452 * Execution of the default implementation of the Output or Input
54453 attribute of an unchecked union type if the type lacks default
54454 discriminant values.
54455
54456 Paragraph 29 was deleted.
54457
54458 NOTES
54459
54460 30/2
54461 11 The use of an unchecked union to obtain the effect of an
54462 unchecked conversion results in erroneous execution (see *note
54463 11.5::). Execution of the following example is erroneous even if
54464 Float'Size = Integer'Size:
54465
54466 31/3
54467 type T (Flag : Boolean := False) is
54468 record
54469 case Flag is
54470 when False =>
54471 F1 : Float := 0.0;
54472 when True =>
54473 F2 : Integer := 0;
54474 end case;
54475 end record
54476 with Unchecked_Union;
54477
54478 32/2
54479 X : T;
54480 Y : Integer := X.F2; -- erroneous
54481
54482 \1f
54483 File: arm2012.info, Node: B.4, Next: B.5, Prev: B.3, Up: Annex B
54484
54485 B.4 Interfacing with COBOL
54486 ==========================
54487
54488 1/3
54489 The facilities relevant to interfacing with the COBOL language are the
54490 package Interfaces.COBOL and support for specifying the Convention
54491 aspect with convention_identifier COBOL.
54492
54493 2
54494 The COBOL interface package supplies several sets of facilities:
54495
54496 3
54497 * A set of types corresponding to the native COBOL types of the
54498 supported COBOL implementation (so-called "internal COBOL
54499 representations"), allowing Ada data to be passed as parameters to
54500 COBOL programs
54501
54502 4
54503 * A set of types and constants reflecting external data
54504 representations such as might be found in files or databases,
54505 allowing COBOL-generated data to be read by an Ada program, and
54506 Ada-generated data to be read by COBOL programs
54507
54508 5
54509 * A generic package for converting between an Ada decimal type value
54510 and either an internal or external COBOL representation
54511
54512 _Static Semantics_
54513
54514 6
54515 The library package Interfaces.COBOL has the following declaration:
54516
54517 7
54518 package Interfaces.COBOL is
54519 pragma Preelaborate(COBOL);
54520
54521 8
54522 -- Types and operations for internal data representations
54523
54524 9
54525 type Floating is digits implementation-defined;
54526 type Long_Floating is digits implementation-defined;
54527
54528 10
54529 type Binary is range implementation-defined;
54530 type Long_Binary is range implementation-defined;
54531
54532 11
54533 Max_Digits_Binary : constant := implementation-defined;
54534 Max_Digits_Long_Binary : constant := implementation-defined;
54535
54536 12/3
54537 type Decimal_Element is mod implementation-defined;
54538 type Packed_Decimal is array (Positive range <>) of Decimal_Element
54539 with Pack;
54540
54541 13
54542 type COBOL_Character is implementation-defined character type;
54543
54544 14
54545 Ada_To_COBOL : array (Character) of COBOL_Character := implementation-defined;
54546
54547 15
54548 COBOL_To_Ada : array (COBOL_Character) of Character := implementation-defined;
54549
54550 16/3
54551 type Alphanumeric is array (Positive range <>) of COBOL_Character
54552 with Pack;
54553
54554 17
54555 function To_COBOL (Item : in String) return Alphanumeric;
54556 function To_Ada (Item : in Alphanumeric) return String;
54557
54558 18
54559 procedure To_COBOL (Item : in String;
54560 Target : out Alphanumeric;
54561 Last : out Natural);
54562
54563 19
54564 procedure To_Ada (Item : in Alphanumeric;
54565 Target : out String;
54566 Last : out Natural);
54567
54568 20/3
54569 type Numeric is array (Positive range <>) of COBOL_Character
54570 with Pack;
54571
54572 21
54573 -- Formats for COBOL data representations
54574
54575 22
54576 type Display_Format is private;
54577
54578 23
54579 Unsigned : constant Display_Format;
54580 Leading_Separate : constant Display_Format;
54581 Trailing_Separate : constant Display_Format;
54582 Leading_Nonseparate : constant Display_Format;
54583 Trailing_Nonseparate : constant Display_Format;
54584
54585 24
54586 type Binary_Format is private;
54587
54588 25
54589 High_Order_First : constant Binary_Format;
54590 Low_Order_First : constant Binary_Format;
54591 Native_Binary : constant Binary_Format;
54592
54593 26
54594 type Packed_Format is private;
54595
54596 27
54597 Packed_Unsigned : constant Packed_Format;
54598 Packed_Signed : constant Packed_Format;
54599
54600 28
54601 -- Types for external representation of COBOL binary data
54602
54603 29/3
54604 type Byte is mod 2**COBOL_Character'Size;
54605 type Byte_Array is array (Positive range <>) of Byte
54606 with Pack;
54607
54608 30
54609 Conversion_Error : exception;
54610
54611 31
54612 generic
54613 type Num is delta <> digits <>;
54614 package Decimal_Conversions is
54615
54616 32
54617 -- Display Formats: data values are represented as Numeric
54618
54619 33
54620 function Valid (Item : in Numeric;
54621 Format : in Display_Format) return Boolean;
54622
54623 34
54624 function Length (Format : in Display_Format) return Natural;
54625
54626 35
54627 function To_Decimal (Item : in Numeric;
54628 Format : in Display_Format) return Num;
54629
54630 36
54631 function To_Display (Item : in Num;
54632 Format : in Display_Format) return Numeric;
54633
54634 37
54635 -- Packed Formats: data values are represented as Packed_Decimal
54636
54637 38
54638 function Valid (Item : in Packed_Decimal;
54639 Format : in Packed_Format) return Boolean;
54640
54641 39
54642 function Length (Format : in Packed_Format) return Natural;
54643
54644 40
54645 function To_Decimal (Item : in Packed_Decimal;
54646 Format : in Packed_Format) return Num;
54647
54648 41
54649 function To_Packed (Item : in Num;
54650 Format : in Packed_Format) return Packed_Decimal;
54651
54652 42
54653 -- Binary Formats: external data values are represented as Byte_Array
54654
54655 43
54656 function Valid (Item : in Byte_Array;
54657 Format : in Binary_Format) return Boolean;
54658
54659 44
54660 function Length (Format : in Binary_Format) return Natural;
54661 function To_Decimal (Item : in Byte_Array;
54662 Format : in Binary_Format) return Num;
54663
54664 45
54665 function To_Binary (Item : in Num;
54666 Format : in Binary_Format) return Byte_Array;
54667
54668 46
54669 -- Internal Binary formats: data values are of type Binary or Long_Binary
54670
54671 47
54672 function To_Decimal (Item : in Binary) return Num;
54673 function To_Decimal (Item : in Long_Binary) return Num;
54674
54675 48
54676 function To_Binary (Item : in Num) return Binary;
54677 function To_Long_Binary (Item : in Num) return Long_Binary;
54678
54679 49
54680 end Decimal_Conversions;
54681
54682 50
54683 private
54684 ... -- not specified by the language
54685 end Interfaces.COBOL;
54686
54687 51
54688 Each of the types in Interfaces.COBOL is COBOL-compatible.
54689
54690 52
54691 The types Floating and Long_Floating correspond to the native types in
54692 COBOL for data items with computational usage implemented by floating
54693 point. The types Binary and Long_Binary correspond to the native types
54694 in COBOL for data items with binary usage, or with computational usage
54695 implemented by binary.
54696
54697 53
54698 Max_Digits_Binary is the largest number of decimal digits in a numeric
54699 value that is represented as Binary. Max_Digits_Long_Binary is the
54700 largest number of decimal digits in a numeric value that is represented
54701 as Long_Binary.
54702
54703 54
54704 The type Packed_Decimal corresponds to COBOL's packed-decimal usage.
54705
54706 55
54707 The type COBOL_Character defines the run-time character set used in the
54708 COBOL implementation. Ada_To_COBOL and COBOL_To_Ada are the mappings
54709 between the Ada and COBOL run-time character sets.
54710
54711 56
54712 Type Alphanumeric corresponds to COBOL's alphanumeric data category.
54713
54714 57
54715 Each of the functions To_COBOL and To_Ada converts its parameter based
54716 on the mappings Ada_To_COBOL and COBOL_To_Ada, respectively. The length
54717 of the result for each is the length of the parameter, and the lower
54718 bound of the result is 1. Each component of the result is obtained by
54719 applying the relevant mapping to the corresponding component of the
54720 parameter.
54721
54722 58
54723 Each of the procedures To_COBOL and To_Ada copies converted elements
54724 from Item to Target, using the appropriate mapping (Ada_To_COBOL or
54725 COBOL_To_Ada, respectively). The index in Target of the last element
54726 assigned is returned in Last (0 if Item is a null array). If
54727 Item'Length exceeds Target'Length, Constraint_Error is propagated.
54728
54729 59
54730 Type Numeric corresponds to COBOL's numeric data category with display
54731 usage.
54732
54733 60
54734 The types Display_Format, Binary_Format, and Packed_Format are used in
54735 conversions between Ada decimal type values and COBOL internal or
54736 external data representations. The value of the constant Native_Binary
54737 is either High_Order_First or Low_Order_First, depending on the
54738 implementation.
54739
54740 61
54741 function Valid (Item : in Numeric;
54742 Format : in Display_Format) return Boolean;
54743
54744 62
54745 The function Valid checks that the Item parameter has a value
54746 consistent with the value of Format. If the value of Format
54747 is other than Unsigned, Leading_Separate, and
54748 Trailing_Separate, the effect is implementation defined. If
54749 Format does have one of these values, the following rules
54750 apply:
54751
54752 63/3
54753 * Format=Unsigned: if Item comprises one or more decimal
54754 digit characters, then Valid returns True, else it
54755 returns False.
54756
54757 64/1
54758 * Format=Leading_Separate: if Item comprises a single
54759 occurrence of the plus or minus sign character, and then
54760 one or more decimal digit characters, then Valid returns
54761 True, else it returns False.
54762
54763 65/1
54764 * Format=Trailing_Separate: if Item comprises one or more
54765 decimal digit characters and finally a plus or minus sign
54766 character, then Valid returns True, else it returns
54767 False.
54768
54769 66
54770 function Length (Format : in Display_Format) return Natural;
54771
54772 67
54773 The Length function returns the minimal length of a Numeric
54774 value sufficient to hold any value of type Num when
54775 represented as Format.
54776
54777 68
54778 function To_Decimal (Item : in Numeric;
54779 Format : in Display_Format) return Num;
54780
54781 69
54782 Produces a value of type Num corresponding to Item as
54783 represented by Format. The number of digits after the assumed
54784 radix point in Item is Num'Scale. Conversion_Error is
54785 propagated if the value represented by Item is outside the
54786 range of Num.
54787
54788 70
54789 function To_Display (Item : in Num;
54790 Format : in Display_Format) return Numeric;
54791
54792 71/1
54793 This function returns the Numeric value for Item, represented
54794 in accordance with Format. The length of the returned value
54795 is Length(Format), and the lower bound is 1. Conversion_Error
54796 is propagated if Num is negative and Format is Unsigned.
54797
54798 72
54799 function Valid (Item : in Packed_Decimal;
54800 Format : in Packed_Format) return Boolean;
54801
54802 73
54803 This function returns True if Item has a value consistent with
54804 Format, and False otherwise. The rules for the formation of
54805 Packed_Decimal values are implementation defined.
54806
54807 74
54808 function Length (Format : in Packed_Format) return Natural;
54809
54810 75
54811 This function returns the minimal length of a Packed_Decimal
54812 value sufficient to hold any value of type Num when
54813 represented as Format.
54814
54815 76
54816 function To_Decimal (Item : in Packed_Decimal;
54817 Format : in Packed_Format) return Num;
54818
54819 77
54820 Produces a value of type Num corresponding to Item as
54821 represented by Format. Num'Scale is the number of digits
54822 after the assumed radix point in Item. Conversion_Error is
54823 propagated if the value represented by Item is outside the
54824 range of Num.
54825
54826 78
54827 function To_Packed (Item : in Num;
54828 Format : in Packed_Format) return Packed_Decimal;
54829
54830 79/1
54831 This function returns the Packed_Decimal value for Item,
54832 represented in accordance with Format. The length of the
54833 returned value is Length(Format), and the lower bound is 1.
54834 Conversion_Error is propagated if Num is negative and Format
54835 is Packed_Unsigned.
54836
54837 80
54838 function Valid (Item : in Byte_Array;
54839 Format : in Binary_Format) return Boolean;
54840
54841 81
54842 This function returns True if Item has a value consistent with
54843 Format, and False otherwise.
54844
54845 82
54846 function Length (Format : in Binary_Format) return Natural;
54847
54848 83
54849 This function returns the minimal length of a Byte_Array value
54850 sufficient to hold any value of type Num when represented as
54851 Format.
54852
54853 84
54854 function To_Decimal (Item : in Byte_Array;
54855 Format : in Binary_Format) return Num;
54856
54857 85
54858 Produces a value of type Num corresponding to Item as
54859 represented by Format. Num'Scale is the number of digits
54860 after the assumed radix point in Item. Conversion_Error is
54861 propagated if the value represented by Item is outside the
54862 range of Num.
54863
54864 86
54865 function To_Binary (Item : in Num;
54866 Format : in Binary_Format) return Byte_Array;
54867
54868 87/1
54869 This function returns the Byte_Array value for Item,
54870 represented in accordance with Format. The length of the
54871 returned value is Length(Format), and the lower bound is 1.
54872
54873 88
54874 function To_Decimal (Item : in Binary) return Num;
54875
54876 function To_Decimal (Item : in Long_Binary) return Num;
54877
54878 89
54879 These functions convert from COBOL binary format to a
54880 corresponding value of the decimal type Num. Conversion_Error
54881 is propagated if Item is too large for Num.
54882
54883 90
54884 function To_Binary (Item : in Num) return Binary;
54885
54886 function To_Long_Binary (Item : in Num) return Long_Binary;
54887
54888 91
54889 These functions convert from Ada decimal to COBOL binary
54890 format. Conversion_Error is propagated if the value of Item
54891 is too large to be represented in the result type.
54892
54893 _Implementation Requirements_
54894
54895 92/3
54896 An implementation shall support specifying aspect Convention with a
54897 COBOL convention_identifier for a COBOL-eligible type (see *note B.1::).
54898
54899 _Implementation Permissions_
54900
54901 93
54902 An implementation may provide additional constants of the private types
54903 Display_Format, Binary_Format, or Packed_Format.
54904
54905 94
54906 An implementation may provide further floating point and integer types
54907 in Interfaces.COBOL to match additional native COBOL types, and may also
54908 supply corresponding conversion functions in the generic package
54909 Decimal_Conversions.
54910
54911 _Implementation Advice_
54912
54913 95
54914 An Ada implementation should support the following interface
54915 correspondences between Ada and COBOL.
54916
54917 96
54918 * An Ada access T parameter is passed as a "BY REFERENCE" data item
54919 of the COBOL type corresponding to T.
54920
54921 97
54922 * An Ada in scalar parameter is passed as a "BY CONTENT" data item of
54923 the corresponding COBOL type.
54924
54925 98
54926 * Any other Ada parameter is passed as a "BY REFERENCE" data item of
54927 the COBOL type corresponding to the Ada parameter type; for
54928 scalars, a local copy is used if necessary to ensure by-copy
54929 semantics.
54930
54931 NOTES
54932
54933 99/3
54934 12 An implementation is not required to support specifying aspect
54935 Convention for access types, nor is it required to support
54936 specifying aspects Import, Export, or Convention for functions.
54937
54938 100
54939 13 If an Ada subprogram is exported to COBOL, then a call from
54940 COBOL call may specify either "BY CONTENT" or "BY REFERENCE".
54941
54942 _Examples_
54943
54944 101
54945 Examples of Interfaces.COBOL:
54946
54947 102
54948 with Interfaces.COBOL;
54949 procedure Test_Call is
54950
54951 103
54952 -- Calling a foreign COBOL program
54953 -- Assume that a COBOL program PROG has the following declaration
54954 -- in its LINKAGE section:
54955 -- 01 Parameter-Area
54956 -- 05 NAME PIC X(20).
54957 -- 05 SSN PIC X(9).
54958 -- 05 SALARY PIC 99999V99 USAGE COMP.
54959 -- The effect of PROG is to update SALARY based on some algorithm
54960
54961 104
54962 package COBOL renames Interfaces.COBOL;
54963
54964 105
54965 type Salary_Type is delta 0.01 digits 7;
54966
54967 106/3
54968 type COBOL_Record is
54969 record
54970 Name : COBOL.Numeric(1..20);
54971 SSN : COBOL.Numeric(1..9);
54972 Salary : COBOL.Binary; -- Assume Binary = 32 bits
54973 end record
54974 with Convention => COBOL;
54975
54976 107/3
54977 procedure Prog (Item : in out COBOL_Record)
54978 with Import => True, Convention => COBOL;
54979
54980 108
54981 package Salary_Conversions is
54982 new COBOL.Decimal_Conversions(Salary_Type);
54983
54984 109
54985 Some_Salary : Salary_Type := 12_345.67;
54986 Some_Record : COBOL_Record :=
54987 (Name => "Johnson, John ",
54988 SSN => "111223333",
54989 Salary => Salary_Conversions.To_Binary(Some_Salary));
54990
54991 110
54992 begin
54993 Prog (Some_Record);
54994 ...
54995 end Test_Call;
54996
54997 111
54998 with Interfaces.COBOL;
54999 with COBOL_Sequential_IO; -- Assumed to be supplied by implementation
55000 procedure Test_External_Formats is
55001
55002 112
55003 -- Using data created by a COBOL program
55004 -- Assume that a COBOL program has created a sequential file with
55005 -- the following record structure, and that we need to
55006 -- process the records in an Ada program
55007 -- 01 EMPLOYEE-RECORD
55008 -- 05 NAME PIC X(20).
55009 -- 05 SSN PIC X(9).
55010 -- 05 SALARY PIC 99999V99 USAGE COMP.
55011 -- 05 ADJUST PIC S999V999 SIGN LEADING SEPARATE.
55012 -- The COMP data is binary (32 bits), high-order byte first
55013
55014 113
55015 package COBOL renames Interfaces.COBOL;
55016
55017 114
55018 type Salary_Type is delta 0.01 digits 7;
55019 type Adjustments_Type is delta 0.001 digits 6;
55020
55021 115/3
55022 type COBOL_Employee_Record_Type is -- External representation
55023 record
55024 Name : COBOL.Alphanumeric(1..20);
55025 SSN : COBOL.Alphanumeric(1..9);
55026 Salary : COBOL.Byte_Array(1..4);
55027 Adjust : COBOL.Numeric(1..7); -- Sign and 6 digits
55028 end record
55029 with Convention => COBOL;
55030
55031 116
55032 package COBOL_Employee_IO is
55033 new COBOL_Sequential_IO(COBOL_Employee_Record_Type);
55034 use COBOL_Employee_IO;
55035
55036 117
55037 COBOL_File : File_Type;
55038
55039 118
55040 type Ada_Employee_Record_Type is -- Internal representation
55041 record
55042 Name : String(1..20);
55043 SSN : String(1..9);
55044 Salary : Salary_Type;
55045 Adjust : Adjustments_Type;
55046 end record;
55047
55048 119
55049 COBOL_Record : COBOL_Employee_Record_Type;
55050 Ada_Record : Ada_Employee_Record_Type;
55051
55052 120
55053 package Salary_Conversions is
55054 new COBOL.Decimal_Conversions(Salary_Type);
55055 use Salary_Conversions;
55056
55057 121
55058 package Adjustments_Conversions is
55059 new COBOL.Decimal_Conversions(Adjustments_Type);
55060 use Adjustments_Conversions;
55061
55062 122
55063 begin
55064 Open (COBOL_File, Name => "Some_File");
55065
55066 123
55067 loop
55068 Read (COBOL_File, COBOL_Record);
55069
55070 124
55071 Ada_Record.Name := To_Ada(COBOL_Record.Name);
55072 Ada_Record.SSN := To_Ada(COBOL_Record.SSN);
55073 Ada_Record.Salary :=
55074 To_Decimal(COBOL_Record.Salary, COBOL.High_Order_First);
55075 Ada_Record.Adjust :=
55076 To_Decimal(COBOL_Record.Adjust, COBOL.Leading_Separate);
55077 ... -- Process Ada_Record
55078 end loop;
55079 exception
55080 when End_Error => ...
55081 end Test_External_Formats;
55082
55083 \1f
55084 File: arm2012.info, Node: B.5, Prev: B.4, Up: Annex B
55085
55086 B.5 Interfacing with Fortran
55087 ============================
55088
55089 1/3
55090 The facilities relevant to interfacing with the Fortran language are the
55091 package Interfaces.Fortran and support for specifying the Convention
55092 aspect with convention_identifier Fortran.
55093
55094 2
55095 The package Interfaces.Fortran defines Ada types whose representations
55096 are identical to the default representations of the Fortran intrinsic
55097 types Integer, Real, Double Precision, Complex, Logical, and Character
55098 in a supported Fortran implementation. These Ada types can therefore be
55099 used to pass objects between Ada and Fortran programs.
55100
55101 _Static Semantics_
55102
55103 3
55104 The library package Interfaces.Fortran has the following declaration:
55105
55106 4
55107 with Ada.Numerics.Generic_Complex_Types; -- see *note G.1.1::
55108 pragma Elaborate_All(Ada.Numerics.Generic_Complex_Types);
55109 package Interfaces.Fortran is
55110 pragma Pure(Fortran);
55111
55112 5
55113 type Fortran_Integer is range implementation-defined;
55114
55115 6
55116 type Real is digits implementation-defined;
55117 type Double_Precision is digits implementation-defined;
55118
55119 7
55120 type Logical is new Boolean;
55121
55122 8
55123 package Single_Precision_Complex_Types is
55124 new Ada.Numerics.Generic_Complex_Types (Real);
55125
55126 9
55127 type Complex is new Single_Precision_Complex_Types.Complex;
55128
55129 10
55130 subtype Imaginary is Single_Precision_Complex_Types.Imaginary;
55131 i : Imaginary renames Single_Precision_Complex_Types.i;
55132 j : Imaginary renames Single_Precision_Complex_Types.j;
55133
55134 11
55135 type Character_Set is implementation-defined character type;
55136
55137 12/3
55138 type Fortran_Character is array (Positive range <>) of Character_Set
55139 with Pack;
55140
55141 13
55142 function To_Fortran (Item : in Character) return Character_Set;
55143 function To_Ada (Item : in Character_Set) return Character;
55144
55145 14
55146 function To_Fortran (Item : in String) return Fortran_Character;
55147 function To_Ada (Item : in Fortran_Character) return String;
55148
55149 15
55150 procedure To_Fortran (Item : in String;
55151 Target : out Fortran_Character;
55152 Last : out Natural);
55153
55154 16
55155 procedure To_Ada (Item : in Fortran_Character;
55156 Target : out String;
55157 Last : out Natural);
55158
55159 17
55160 end Interfaces.Fortran;
55161
55162 18
55163 The types Fortran_Integer, Real, Double_Precision, Logical, Complex, and
55164 Fortran_Character are Fortran-compatible.
55165
55166 19
55167 The To_Fortran and To_Ada functions map between the Ada type Character
55168 and the Fortran type Character_Set, and also between the Ada type String
55169 and the Fortran type Fortran_Character. The To_Fortran and To_Ada
55170 procedures have analogous effects to the string conversion subprograms
55171 found in Interfaces.COBOL.
55172
55173 _Implementation Requirements_
55174
55175 20/3
55176 An implementation shall support specifying aspect Convention with a
55177 Fortran convention_identifier for a Fortran-eligible type (see *note
55178 B.1::).
55179
55180 _Implementation Permissions_
55181
55182 21
55183 An implementation may add additional declarations to the Fortran
55184 interface packages. For example, the Fortran interface package for an
55185 implementation of Fortran 77 (ANSI X3.9-1978) that defines types like
55186 Integer*n, Real*n, Logical*n, and Complex*n may contain the declarations
55187 of types named Integer_Star_n, Real_Star_n, Logical_Star_n, and
55188 Complex_Star_n. (This convention should not apply to Character*n, for
55189 which the Ada analog is the constrained array subtype Fortran_Character
55190 (1..n).) Similarly, the Fortran interface package for an implementation
55191 of Fortran 90 that provides multiple kinds of intrinsic types, e.g.
55192 Integer (Kind=n), Real (Kind=n), Logical (Kind=n), Complex (Kind=n), and
55193 Character (Kind=n), may contain the declarations of types with the
55194 recommended names Integer_Kind_n, Real_Kind_n, Logical_Kind_n,
55195 Complex_Kind_n, and Character_Kind_n.
55196
55197 _Implementation Advice_
55198
55199 22
55200 An Ada implementation should support the following interface
55201 correspondences between Ada and Fortran:
55202
55203 23
55204 * An Ada procedure corresponds to a Fortran subroutine.
55205
55206 24
55207 * An Ada function corresponds to a Fortran function.
55208
55209 25
55210 * An Ada parameter of an elementary, array, or record type T is
55211 passed as a TF argument to a Fortran procedure, where TF is the
55212 Fortran type corresponding to the Ada type T, and where the INTENT
55213 attribute of the corresponding dummy argument matches the Ada
55214 formal parameter mode; the Fortran implementation's parameter
55215 passing conventions are used. For elementary types, a local copy
55216 is used if necessary to ensure by-copy semantics.
55217
55218 26
55219 * An Ada parameter of an access-to-subprogram type is passed as a
55220 reference to a Fortran procedure whose interface corresponds to the
55221 designated subprogram's specification.
55222
55223 NOTES
55224
55225 27
55226 14 An object of a Fortran-compatible record type, declared in a
55227 library package or subprogram, can correspond to a Fortran common
55228 block; the type also corresponds to a Fortran "derived type".
55229
55230 _Examples_
55231
55232 28
55233 Example of Interfaces.Fortran:
55234
55235 29
55236 with Interfaces.Fortran;
55237 use Interfaces.Fortran;
55238 procedure Ada_Application is
55239
55240 30/3
55241 type Fortran_Matrix is array (Integer range <>,
55242 Integer range <>) of Double_Precision
55243 with Convention => Fortran; -- stored in Fortran's
55244 -- column-major order
55245 procedure Invert (Rank : in Fortran_Integer; X : in out Fortran_Matrix)
55246 with Import => True, Convention => Fortran; -- a Fortran subroutine
55247
55248 31
55249 Rank : constant Fortran_Integer := 100;
55250 My_Matrix : Fortran_Matrix (1 .. Rank, 1 .. Rank);
55251
55252 32
55253 begin
55254
55255 33
55256 ...
55257 My_Matrix := ...;
55258 ...
55259 Invert (Rank, My_Matrix);
55260 ...
55261
55262 34
55263 end Ada_Application;
55264
55265 \1f
55266 File: arm2012.info, Node: Annex C, Next: Annex D, Prev: Annex B, Up: Top
55267
55268 Annex C Systems Programming
55269 ***************************
55270
55271 1
55272 The Systems Programming Annex specifies additional capabilities provided
55273 for low-level programming. These capabilities are also required in many
55274 real-time, embedded, distributed, and information systems.
55275
55276 * Menu:
55277
55278 * C.1 :: Access to Machine Operations
55279 * C.2 :: Required Representation Support
55280 * C.3 :: Interrupt Support
55281 * C.4 :: Preelaboration Requirements
55282 * C.5 :: Pragma Discard_Names
55283 * C.6 :: Shared Variable Control
55284 * C.7 :: Task Information
55285
55286 \1f
55287 File: arm2012.info, Node: C.1, Next: C.2, Up: Annex C
55288
55289 C.1 Access to Machine Operations
55290 ================================
55291
55292 1/3
55293 This subclause specifies rules regarding access to machine instructions
55294 from within an Ada program.
55295
55296 _Implementation Requirements_
55297
55298 2
55299 The implementation shall support machine code insertions (see *note
55300 13.8::) or intrinsic subprograms (see *note 6.3.1::) (or both).
55301 Implementation-defined attributes shall be provided to allow the use of
55302 Ada entities as operands.
55303
55304 _Implementation Advice_
55305
55306 3
55307 The machine code or intrinsics support should allow access to all
55308 operations normally available to assembly language programmers for the
55309 target environment, including privileged instructions, if any.
55310
55311 4/3
55312 The support for interfacing aspects (see *note Annex B::) should include
55313 interface to assembler; the default assembler should be associated with
55314 the convention identifier Assembler.
55315
55316 5
55317 If an entity is exported to assembly language, then the implementation
55318 should allocate it at an addressable location, and should ensure that it
55319 is retained by the linking process, even if not otherwise referenced
55320 from the Ada code. The implementation should assume that any call to a
55321 machine code or assembler subprogram is allowed to read or update every
55322 object that is specified as exported.
55323
55324 _Documentation Requirements_
55325
55326 6
55327 The implementation shall document the overhead associated with calling
55328 machine-code or intrinsic subprograms, as compared to a fully-inlined
55329 call, and to a regular out-of-line call.
55330
55331 7
55332 The implementation shall document the types of the package
55333 System.Machine_Code usable for machine code insertions, and the
55334 attributes to be used in machine code insertions for references to Ada
55335 entities.
55336
55337 8/3
55338 The implementation shall document the subprogram calling conventions
55339 associated with the convention identifiers available for use with the
55340 Convention aspect (Ada and Assembler, at a minimum), including register
55341 saving, exception propagation, parameter passing, and function value
55342 returning.
55343
55344 9
55345 For exported and imported subprograms, the implementation shall document
55346 the mapping between the Link_Name string, if specified, or the Ada
55347 designator, if not, and the external link name used for such a
55348 subprogram.
55349
55350 _Implementation Advice_
55351
55352 10
55353 The implementation should ensure that little or no overhead is
55354 associated with calling intrinsic and machine-code subprograms.
55355
55356 11
55357 It is recommended that intrinsic subprograms be provided for convenient
55358 access to any machine operations that provide special capabilities or
55359 efficiency and that are not otherwise available through the language
55360 constructs. Examples of such instructions include:
55361
55362 12
55363 * Atomic read-modify-write operations -- e.g., test and set, compare
55364 and swap, decrement and test, enqueue/dequeue.
55365
55366 13
55367 * Standard numeric functions -- e.g., sin, log.
55368
55369 14
55370 * String manipulation operations -- e.g., translate and test.
55371
55372 15
55373 * Vector operations -- e.g., compare vector against thresholds.
55374
55375 16
55376 * Direct operations on I/O ports.
55377
55378 \1f
55379 File: arm2012.info, Node: C.2, Next: C.3, Prev: C.1, Up: Annex C
55380
55381 C.2 Required Representation Support
55382 ===================================
55383
55384 1/3
55385 This subclause specifies minimal requirements on the support for
55386 representation items and related features.
55387
55388 _Implementation Requirements_
55389
55390 2/3
55391 The implementation shall support at least the functionality defined by
55392 the recommended levels of support in Clause *note 13::.
55393
55394 \1f
55395 File: arm2012.info, Node: C.3, Next: C.4, Prev: C.2, Up: Annex C
55396
55397 C.3 Interrupt Support
55398 =====================
55399
55400 1/3
55401 This subclause specifies the language-defined model for hardware
55402 interrupts in addition to mechanisms for handling interrupts.
55403
55404 _Dynamic Semantics_
55405
55406 2
55407 An interrupt represents a class of events that are detected by the
55408 hardware or the system software. Interrupts are said to occur. An
55409 occurrence of an interrupt is separable into generation and delivery.
55410 Generation of an interrupt is the event in the underlying hardware or
55411 system that makes the interrupt available to the program. Delivery is
55412 the action that invokes part of the program as response to the interrupt
55413 occurrence. Between generation and delivery, the interrupt occurrence
55414 (or interrupt) is pending. Some or all interrupts may be blocked. When
55415 an interrupt is blocked, all occurrences of that interrupt are prevented
55416 from being delivered. Certain interrupts are reserved. The set of
55417 reserved interrupts is implementation defined. A reserved interrupt is
55418 either an interrupt for which user-defined handlers are not supported,
55419 or one which already has an attached handler by some other
55420 implementation-defined means. Program units can be connected to
55421 nonreserved interrupts. While connected, the program unit is said to be
55422 attached to that interrupt. The execution of that program unit, the
55423 interrupt handler, is invoked upon delivery of the interrupt occurrence.
55424
55425 3
55426 While a handler is attached to an interrupt, it is called once for each
55427 delivered occurrence of that interrupt. While the handler executes, the
55428 corresponding interrupt is blocked.
55429
55430 4
55431 While an interrupt is blocked, all occurrences of that interrupt are
55432 prevented from being delivered. Whether such occurrences remain pending
55433 or are lost is implementation defined.
55434
55435 5
55436 Each interrupt has a default treatment which determines the system's
55437 response to an occurrence of that interrupt when no user-defined handler
55438 is attached. The set of possible default treatments is implementation
55439 defined, as is the method (if one exists) for configuring the default
55440 treatments for interrupts.
55441
55442 6
55443 An interrupt is delivered to the handler (or default treatment) that is
55444 in effect for that interrupt at the time of delivery.
55445
55446 7
55447 An exception propagated from a handler that is invoked by an interrupt
55448 has no effect.
55449
55450 8
55451 If the Ceiling_Locking policy (see *note D.3::) is in effect, the
55452 interrupt handler executes with the active priority that is the ceiling
55453 priority of the corresponding protected object.
55454
55455 _Implementation Requirements_
55456
55457 9
55458 The implementation shall provide a mechanism to determine the minimum
55459 stack space that is needed for each interrupt handler and to reserve
55460 that space for the execution of the handler. This space should
55461 accommodate nested invocations of the handler where the system permits
55462 this.
55463
55464 10
55465 If the hardware or the underlying system holds pending interrupt
55466 occurrences, the implementation shall provide for later delivery of
55467 these occurrences to the program.
55468
55469 11
55470 If the Ceiling_Locking policy is not in effect, the implementation shall
55471 provide means for the application to specify whether interrupts are to
55472 be blocked during protected actions.
55473
55474 _Documentation Requirements_
55475
55476 12
55477 The implementation shall document the following items:
55478
55479 13
55480 1. For each interrupt, which interrupts are blocked from delivery
55481 when a handler attached to that interrupt executes (either as a
55482 result of an interrupt delivery or of an ordinary call on a
55483 procedure of the corresponding protected object).
55484
55485 14
55486 2. Any interrupts that cannot be blocked, and the effect of
55487 attaching handlers to such interrupts, if this is permitted.
55488
55489 15
55490 3. Which run-time stack an interrupt handler uses when it executes
55491 as a result of an interrupt delivery; if this is configurable, what
55492 is the mechanism to do so; how to specify how much space to reserve
55493 on that stack.
55494
55495 16
55496 4. Any implementation- or hardware-specific activity that happens
55497 before a user-defined interrupt handler gets control (e.g., reading
55498 device registers, acknowledging devices).
55499
55500 17
55501 5. Any timing or other limitations imposed on the execution of
55502 interrupt handlers.
55503
55504 18
55505 6. The state (blocked/unblocked) of the nonreserved interrupts
55506 when the program starts; if some interrupts are unblocked, what is
55507 the mechanism a program can use to protect itself before it can
55508 attach the corresponding handlers.
55509
55510 19
55511 7. Whether the interrupted task is allowed to resume execution
55512 before the interrupt handler returns.
55513
55514 20
55515 8. The treatment of interrupt occurrences that are generated while
55516 the interrupt is blocked; i.e., whether one or more occurrences are
55517 held for later delivery, or all are lost.
55518
55519 21
55520 9. Whether predefined or implementation-defined exceptions are
55521 raised as a result of the occurrence of any interrupt, and the
55522 mapping between the machine interrupts (or traps) and the
55523 predefined exceptions.
55524
55525 22
55526 10. On a multi-processor, the rules governing the delivery of an
55527 interrupt to a particular processor.
55528
55529 _Implementation Permissions_
55530
55531 23/2
55532 If the underlying system or hardware does not allow interrupts to be
55533 blocked, then no blocking is required as part of the execution of
55534 subprograms of a protected object for which one of its subprograms is an
55535 interrupt handler.
55536
55537 24
55538 In a multi-processor with more than one interrupt subsystem, it is
55539 implementation defined whether (and how) interrupt sources from separate
55540 subsystems share the same Interrupt_Id type (see *note C.3.2::). In
55541 particular, the meaning of a blocked or pending interrupt may then be
55542 applicable to one processor only.
55543
55544 25
55545 Implementations are allowed to impose timing or other limitations on the
55546 execution of interrupt handlers.
55547
55548 26/3
55549 Other forms of handlers are allowed to be supported, in which case the
55550 rules of this subclause should be adhered to.
55551
55552 27
55553 The active priority of the execution of an interrupt handler is allowed
55554 to vary from one occurrence of the same interrupt to another.
55555
55556 _Implementation Advice_
55557
55558 28/2
55559 If the Ceiling_Locking policy is not in effect, the implementation
55560 should provide means for the application to specify which interrupts are
55561 to be blocked during protected actions, if the underlying system allows
55562 for finer-grained control of interrupt blocking.
55563
55564 NOTES
55565
55566 29
55567 1 The default treatment for an interrupt can be to keep the
55568 interrupt pending or to deliver it to an implementation-defined
55569 handler. Examples of actions that an implementation-defined
55570 handler is allowed to perform include aborting the partition,
55571 ignoring (i.e., discarding occurrences of) the interrupt, or
55572 queuing one or more occurrences of the interrupt for possible later
55573 delivery when a user-defined handler is attached to that interrupt.
55574
55575 30
55576 2 It is a bounded error to call Task_Identification.Current_Task
55577 (see *note C.7.1::) from an interrupt handler.
55578
55579 31
55580 3 The rule that an exception propagated from an interrupt handler
55581 has no effect is modeled after the rule about exceptions propagated
55582 out of task bodies.
55583
55584 * Menu:
55585
55586 * C.3.1 :: Protected Procedure Handlers
55587 * C.3.2 :: The Package Interrupts
55588
55589 \1f
55590 File: arm2012.info, Node: C.3.1, Next: C.3.2, Up: C.3
55591
55592 C.3.1 Protected Procedure Handlers
55593 ----------------------------------
55594
55595 Paragraphs 1 through 6 were moved to *note Annex J::, "*note Annex J::
55596 Obsolescent Features".
55597
55598 _Static Semantics_
55599
55600 6.1/3
55601 For a parameterless protected procedure, the following language-defined
55602 representation aspects may be specified:
55603
55604 6.2/3
55605 Interrupt_Handler
55606 The type of aspect Interrupt_Handler is Boolean. If
55607 directly specified, the aspect_definition shall be a
55608 static expression. This aspect is never inherited; if
55609 not directly specified, the aspect is False.
55610
55611 6.3/3
55612 Attach_Handler
55613 The aspect Attach_Handler is an expression, which shall
55614 be of type Interrupts.Interrupt_Id. This aspect is never
55615 inherited.
55616
55617 _Legality Rules_
55618
55619 7/3
55620 If either the Attach_Handler or Interrupt_Handler aspect are specified
55621 for a protected procedure, the corresponding protected_type_declaration
55622 (*note 9.4: S0210.) or single_protected_declaration (*note 9.4: S0211.)
55623 shall be a library-level declaration and shall not be declared within a
55624 generic body. In addition to the places where Legality Rules normally
55625 apply (see *note 12.3::), this rule also applies in the private part of
55626 an instance of a generic unit.
55627
55628 8/3
55629 This paragraph was deleted.
55630
55631 _Dynamic Semantics_
55632
55633 9/3
55634 If the Interrupt_Handler aspect of a protected procedure is True, then
55635 the procedure may be attached dynamically, as a handler, to interrupts
55636 (see *note C.3.2::). Such procedures are allowed to be attached to
55637 multiple interrupts.
55638
55639 10/3
55640 The expression specified for the Attach_Handler aspect of a protected
55641 procedure P is evaluated as part of the creation of the protected object
55642 that contains P. The value of the expression identifies an interrupt.
55643 As part of the initialization of that object, P (the handler procedure)
55644 is attached to the identified interrupt. A check is made that the
55645 corresponding interrupt is not reserved. Program_Error is raised if the
55646 check fails, and the existing treatment for the interrupt is not
55647 affected.
55648
55649 11/3
55650 If the Ceiling_Locking policy (see *note D.3::) is in effect, then upon
55651 the initialization of a protected object that contains a protected
55652 procedure for which either the Attach_Handler aspect is specified or the
55653 Interrupt_Handler aspect is True, a check is made that the initial
55654 ceiling priority of the object is in the range of
55655 System.Interrupt_Priority. If the check fails, Program_Error is raised.
55656
55657 12/3
55658 When a protected object is finalized, for any of its procedures that are
55659 attached to interrupts, the handler is detached. If the handler was
55660 attached by a procedure in the Interrupts package or if no user handler
55661 was previously attached to the interrupt, the default treatment is
55662 restored. If the Attach_Handler aspect was specified and the most
55663 recently attached handler for the same interrupt is the same as the one
55664 that was attached at the time the protected object was initialized, the
55665 previous handler is restored.
55666
55667 13
55668 When a handler is attached to an interrupt, the interrupt is blocked
55669 (subject to the Implementation Permission in *note C.3::) during the
55670 execution of every protected action on the protected object containing
55671 the handler.
55672
55673 _Erroneous Execution_
55674
55675 14
55676 If the Ceiling_Locking policy (see *note D.3::) is in effect and an
55677 interrupt is delivered to a handler, and the interrupt hardware priority
55678 is higher than the ceiling priority of the corresponding protected
55679 object, the execution of the program is erroneous.
55680
55681 14.1/3
55682 If the handlers for a given interrupt attached via aspect Attach_Handler
55683 are not attached and detached in a stack-like (LIFO) order, program
55684 execution is erroneous. In particular, when a protected object is
55685 finalized, the execution is erroneous if any of the procedures of the
55686 protected object are attached to interrupts via aspect Attach_Handler
55687 and the most recently attached handler for the same interrupt is not the
55688 same as the one that was attached at the time the protected object was
55689 initialized.
55690
55691 _Metrics_
55692
55693 15
55694 The following metric shall be documented by the implementation:
55695
55696 16/2
55697 * The worst-case overhead for an interrupt handler that is a
55698 parameterless protected procedure, in clock cycles. This is the
55699 execution time not directly attributable to the handler procedure
55700 or the interrupted execution. It is estimated as C - (A+B), where
55701 A is how long it takes to complete a given sequence of instructions
55702 without any interrupt, B is how long it takes to complete a normal
55703 call to a given protected procedure, and C is how long it takes to
55704 complete the same sequence of instructions when it is interrupted
55705 by one execution of the same procedure called via an interrupt.
55706
55707 _Implementation Permissions_
55708
55709 17/3
55710 When the aspects Attach_Handler or Interrupt_Handler are specified for a
55711 protected procedure, the implementation is allowed to impose
55712 implementation-defined restrictions on the corresponding
55713 protected_type_declaration (*note 9.4: S0210.) and protected_body (*note
55714 9.4: S0215.).
55715
55716 18
55717 An implementation may use a different mechanism for invoking a protected
55718 procedure in response to a hardware interrupt than is used for a call to
55719 that protected procedure from a task.
55720
55721 19/3
55722 Notwithstanding what this subclause says elsewhere, the Attach_Handler
55723 and Interrupt_Handler aspects are allowed to be used for other,
55724 implementation defined, forms of interrupt handlers.
55725
55726 _Implementation Advice_
55727
55728 20
55729 Whenever possible, the implementation should allow interrupt handlers to
55730 be called directly by the hardware.
55731
55732 21
55733 Whenever practical, the implementation should detect violations of any
55734 implementation-defined restrictions before run time.
55735
55736 NOTES
55737
55738 22/3
55739 4 The Attach_Handler aspect may provide static attachment of
55740 handlers to interrupts if the implementation supports
55741 preelaboration of protected objects. (See *note C.4::.)
55742
55743 23/2
55744 5 A protected object that has a (protected) procedure attached to
55745 an interrupt should have a ceiling priority at least as high as the
55746 highest processor priority at which that interrupt will ever be
55747 delivered.
55748
55749 24
55750 6 Protected procedures can also be attached dynamically to
55751 interrupts via operations declared in the predefined package
55752 Interrupts.
55753
55754 25
55755 7 An example of a possible implementation-defined restriction is
55756 disallowing the use of the standard storage pools within the body
55757 of a protected procedure that is an interrupt handler.
55758
55759 \1f
55760 File: arm2012.info, Node: C.3.2, Prev: C.3.1, Up: C.3
55761
55762 C.3.2 The Package Interrupts
55763 ----------------------------
55764
55765 _Static Semantics_
55766
55767 1
55768 The following language-defined packages exist:
55769
55770 2/3
55771 with System;
55772 with System.Multiprocessors;
55773 package Ada.Interrupts is
55774 type Interrupt_Id is implementation-defined;
55775 type Parameterless_Handler is
55776 access protected procedure;
55777
55778 3/1
55779 This paragraph was deleted.
55780
55781 4
55782 function Is_Reserved (Interrupt : Interrupt_Id)
55783 return Boolean;
55784
55785 5
55786 function Is_Attached (Interrupt : Interrupt_Id)
55787 return Boolean;
55788
55789 6
55790 function Current_Handler (Interrupt : Interrupt_Id)
55791 return Parameterless_Handler;
55792
55793 7
55794 procedure Attach_Handler
55795 (New_Handler : in Parameterless_Handler;
55796 Interrupt : in Interrupt_Id);
55797
55798 8
55799 procedure Exchange_Handler
55800 (Old_Handler : out Parameterless_Handler;
55801 New_Handler : in Parameterless_Handler;
55802 Interrupt : in Interrupt_Id);
55803
55804 9
55805 procedure Detach_Handler
55806 (Interrupt : in Interrupt_Id);
55807
55808 10
55809 function Reference (Interrupt : Interrupt_Id)
55810 return System.Address;
55811
55812 10.1/3
55813 function Get_CPU (Interrupt : Interrupt_Id)
55814 return System.Multiprocessors.CPU_Range;
55815
55816 11
55817 private
55818 ... -- not specified by the language
55819 end Ada.Interrupts;
55820
55821 12
55822 package Ada.Interrupts.Names is
55823 implementation-defined : constant Interrupt_Id :=
55824 implementation-defined;
55825 . . .
55826 implementation-defined : constant Interrupt_Id :=
55827 implementation-defined;
55828 end Ada.Interrupts.Names;
55829
55830 _Dynamic Semantics_
55831
55832 13
55833 The Interrupt_Id type is an implementation-defined discrete type used to
55834 identify interrupts.
55835
55836 14
55837 The Is_Reserved function returns True if and only if the specified
55838 interrupt is reserved.
55839
55840 15
55841 The Is_Attached function returns True if and only if a user-specified
55842 interrupt handler is attached to the interrupt.
55843
55844 16/1
55845 The Current_Handler function returns a value that represents the
55846 attached handler of the interrupt. If no user-defined handler is
55847 attached to the interrupt, Current_Handler returns null.
55848
55849 17/3
55850 The Attach_Handler procedure attaches the specified handler to the
55851 interrupt, overriding any existing treatment (including a user handler)
55852 in effect for that interrupt. If New_Handler is null, the default
55853 treatment is restored. If New_Handler designates a protected procedure
55854 for which the aspect Interrupt_Handler is False, Program_Error is
55855 raised. In this case, the operation does not modify the existing
55856 interrupt treatment.
55857
55858 18/1
55859 The Exchange_Handler procedure operates in the same manner as
55860 Attach_Handler with the addition that the value returned in Old_Handler
55861 designates the previous treatment for the specified interrupt. If the
55862 previous treatment is not a user-defined handler, null is returned.
55863
55864 19
55865 The Detach_Handler procedure restores the default treatment for the
55866 specified interrupt.
55867
55868 20
55869 For all operations defined in this package that take a parameter of type
55870 Interrupt_Id, with the exception of Is_Reserved and Reference, a check
55871 is made that the specified interrupt is not reserved. Program_Error is
55872 raised if this check fails.
55873
55874 21/3
55875 If, by using the Attach_Handler, Detach_Handler, or Exchange_Handler
55876 procedures, an attempt is made to detach a handler that was attached
55877 statically (using the aspect Attach_Handler), the handler is not
55878 detached and Program_Error is raised.
55879
55880 22/2
55881 The Reference function returns a value of type System.Address that can
55882 be used to attach a task entry via an address clause (see *note J.7.1::)
55883 to the interrupt specified by Interrupt. This function raises
55884 Program_Error if attaching task entries to interrupts (or to this
55885 particular interrupt) is not supported.
55886
55887 22.1/3
55888 The function Get_CPU returns the processor on which the handler for
55889 Interrupt is executed. If the handler can execute on more than one
55890 processor the value System.Multiprocessors.Not_A_Specific_CPU is
55891 returned.
55892
55893 _Implementation Requirements_
55894
55895 23
55896 At no time during attachment or exchange of handlers shall the current
55897 handler of the corresponding interrupt be undefined.
55898
55899 _Documentation Requirements_
55900
55901 24/3
55902 If the Ceiling_Locking policy (see *note D.3::) is in effect, the
55903 implementation shall document the default ceiling priority assigned to a
55904 protected object that contains a protected procedure that specifies
55905 either the Attach_Handler or Interrupt_Handler aspects, but does not
55906 specify the Interrupt_Priority aspect. This default need not be the
55907 same for all interrupts.
55908
55909 _Implementation Advice_
55910
55911 25
55912 If implementation-defined forms of interrupt handler procedures are
55913 supported, such as protected procedures with parameters, then for each
55914 such form of a handler, a type analogous to Parameterless_Handler should
55915 be specified in a child package of Interrupts, with the same operations
55916 as in the predefined package Interrupts.
55917
55918 NOTES
55919
55920 26
55921 8 The package Interrupts.Names contains implementation-defined
55922 names (and constant values) for the interrupts that are supported
55923 by the implementation.
55924
55925 _Examples_
55926
55927 27
55928 Example of interrupt handlers:
55929
55930 28/3
55931 Device_Priority : constant
55932 array (1..5) of System.Interrupt_Priority := ( ... );
55933 protected type Device_Interface
55934 (Int_Id : Ada.Interrupts.Interrupt_Id)
55935 with Interrupt_Priority => Device_Priority(Int_Id) is
55936 procedure Handler
55937 with Attach_Handler => Int_Id;
55938 ...
55939 end Device_Interface;
55940 ...
55941 Device_1_Driver : Device_Interface(1);
55942 ...
55943 Device_5_Driver : Device_Interface(5);
55944 ...
55945
55946 \1f
55947 File: arm2012.info, Node: C.4, Next: C.5, Prev: C.3, Up: Annex C
55948
55949 C.4 Preelaboration Requirements
55950 ===============================
55951
55952 1/3
55953 This subclause specifies additional implementation and documentation
55954 requirements for the Preelaborate pragma (see *note 10.2.1::).
55955
55956 _Implementation Requirements_
55957
55958 2
55959 The implementation shall not incur any run-time overhead for the
55960 elaboration checks of subprograms and protected_bodies declared in
55961 preelaborated library units.
55962
55963 3
55964 The implementation shall not execute any memory write operations after
55965 load time for the elaboration of constant objects declared immediately
55966 within the declarative region of a preelaborated library package, so
55967 long as the subtype and initial expression (or default initial
55968 expressions if initialized by default) of the object_declaration satisfy
55969 the following restrictions. The meaning of load time is implementation
55970 defined.
55971
55972 4
55973 * Any subtype_mark denotes a statically constrained subtype, with
55974 statically constrained subcomponents, if any;
55975
55976 4.1/2
55977 * no subtype_mark denotes a controlled type, a private type, a
55978 private extension, a generic formal private type, a generic formal
55979 derived type, or a descendant of such a type;
55980
55981 5
55982 * any constraint is a static constraint;
55983
55984 6
55985 * any allocator is for an access-to-constant type;
55986
55987 7
55988 * any uses of predefined operators appear only within static
55989 expressions;
55990
55991 8
55992 * any primaries that are names, other than attribute_references for
55993 the Access or Address attributes, appear only within static
55994 expressions;
55995
55996 9
55997 * any name that is not part of a static expression is an expanded
55998 name or direct_name that statically denotes some entity;
55999
56000 10
56001 * any discrete_choice of an array_aggregate is static;
56002
56003 11
56004 * no language-defined check associated with the elaboration of the
56005 object_declaration can fail.
56006
56007 _Documentation Requirements_
56008
56009 12
56010 The implementation shall document any circumstances under which the
56011 elaboration of a preelaborated package causes code to be executed at run
56012 time.
56013
56014 13
56015 The implementation shall document whether the method used for
56016 initialization of preelaborated variables allows a partition to be
56017 restarted without reloading.
56018
56019 _Implementation Advice_
56020
56021 14
56022 It is recommended that preelaborated packages be implemented in such a
56023 way that there should be little or no code executed at run time for the
56024 elaboration of entities not already covered by the Implementation
56025 Requirements.
56026
56027 \1f
56028 File: arm2012.info, Node: C.5, Next: C.6, Prev: C.4, Up: Annex C
56029
56030 C.5 Pragma Discard_Names
56031 ========================
56032
56033 1
56034 A pragma Discard_Names may be used to request a reduction in storage
56035 used for the names of certain entities.
56036
56037 _Syntax_
56038
56039 2
56040 The form of a pragma Discard_Names is as follows:
56041
56042 3
56043 pragma Discard_Names[([On => ] local_name)];
56044
56045 4
56046 A pragma Discard_Names is allowed only immediately within a
56047 declarative_part, immediately within a package_specification, or as
56048 a configuration pragma.
56049
56050 _Legality Rules_
56051
56052 5
56053 The local_name (if present) shall denote a nonderived enumeration first
56054 subtype, a tagged first subtype, or an exception. The pragma applies to
56055 the type or exception. Without a local_name, the pragma applies to all
56056 such entities declared after the pragma, within the same declarative
56057 region. Alternatively, the pragma can be used as a configuration
56058 pragma. If the pragma applies to a type, then it applies also to all
56059 descendants of the type.
56060
56061 _Static Semantics_
56062
56063 6
56064 If a local_name is given, then a pragma Discard_Names is a
56065 representation pragma.
56066
56067 7/2
56068 If the pragma applies to an enumeration type, then the semantics of the
56069 Wide_Wide_Image and Wide_Wide_Value attributes are implementation
56070 defined for that type; the semantics of Image, Wide_Image, Value, and
56071 Wide_Value are still defined in terms of Wide_Wide_Image and
56072 Wide_Wide_Value. In addition, the semantics of Text_IO.Enumeration_IO
56073 are implementation defined. If the pragma applies to a tagged type,
56074 then the semantics of the Tags.Wide_Wide_Expanded_Name function are
56075 implementation defined for that type; the semantics of
56076 Tags.Expanded_Name and Tags.Wide_Expanded_Name are still defined in
56077 terms of Tags.Wide_Wide_Expanded_Name. If the pragma applies to an
56078 exception, then the semantics of the Exceptions.Wide_Wide_Exception_Name
56079 function are implementation defined for that exception; the semantics of
56080 Exceptions.Exception_Name and Exceptions.Wide_Exception_Name are still
56081 defined in terms of Exceptions.Wide_Wide_Exception_Name.
56082
56083 _Implementation Advice_
56084
56085 8
56086 If the pragma applies to an entity, then the implementation should
56087 reduce the amount of storage used for storing names associated with that
56088 entity.
56089
56090 \1f
56091 File: arm2012.info, Node: C.6, Next: C.7, Prev: C.5, Up: Annex C
56092
56093 C.6 Shared Variable Control
56094 ===========================
56095
56096 1/3
56097 This subclause defines representation aspects that control the use of
56098 shared variables.
56099
56100 Paragraphs 2 through 6 were moved to *note Annex J::, "*note Annex J::
56101 Obsolescent Features".
56102
56103 _Static Semantics_
56104
56105 6.1/3
56106 For an object_declaration, a component_declaration, or a
56107 full_type_declaration, the following representation aspects may be
56108 specified:
56109
56110 6.2/3
56111 Atomic
56112 The type of aspect Atomic is Boolean.
56113
56114 6.3/3
56115 Independent
56116 The type of aspect Independent is Boolean.
56117
56118 6.4/3
56119 Volatile
56120 The type of aspect Volatile is Boolean.
56121
56122 6.5/3
56123 For a full_type_declaration of an array type (including the anonymous
56124 type of an object_declaration of an anonymous array object), the
56125 following representation aspects may be specified:
56126
56127 6.6/3
56128 Atomic_Components
56129 The type of aspect Atomic_Components is Boolean.
56130
56131 6.7/3
56132 Volatile_Components
56133 The type of aspect Volatile_Components is Boolean.
56134
56135 6.8/3
56136 For a full_type_declaration (including the anonymous type of an
56137 object_declaration of an anonymous array object), the following
56138 representation aspect may be specified:
56139
56140 6.9/3
56141 Independent_Components
56142 The type of aspect Independent_Components is Boolean.
56143
56144 6.10/3
56145 If any of these aspects are directly specified, the aspect_definition
56146 shall be a static expression. If not specified (including by
56147 inheritance), each of these aspects is False.
56148
56149 7/3
56150 An atomic type is one for which the aspect Atomic is True. An atomic
56151 object (including a component) is one for which the aspect Atomic is
56152 True, or a component of an array for which the aspect Atomic_Components
56153 is True for the associated type, or any object of an atomic type, other
56154 than objects obtained by evaluating a slice.
56155
56156 8/3
56157 A volatile type is one for which the aspect Volatile is True. A
56158 volatile object (including a component) is one for which the aspect
56159 Volatile is True, or a component of an array for which the aspect
56160 Volatile_Components is True for the associated type, or any object of a
56161 volatile type. In addition, every atomic type or object is also defined
56162 to be volatile. Finally, if an object is volatile, then so are all of
56163 its subcomponents (the same does not apply to atomic).
56164
56165 8.1/3
56166 When True, the aspects Independent and Independent_Components specify as
56167 independently addressable the named object or component(s), or in the
56168 case of a type, all objects or components of that type. All atomic
56169 objects are considered to be specified as independently addressable.
56170
56171 Paragraph 9 was moved to *note Annex J::, "*note Annex J:: Obsolescent
56172 Features".
56173
56174 _Legality Rules_
56175
56176 9.1/3
56177 If aspect Independent_Components is specified for a
56178 full_type_declaration, the declaration shall be that of an array or
56179 record type.
56180
56181 10/3
56182 It is illegal to specify either of the aspects Atomic or
56183 Atomic_Components to have the value True for an object or type if the
56184 implementation cannot support the indivisible reads and updates required
56185 by the aspect (see below).
56186
56187 11
56188 It is illegal to specify the Size attribute of an atomic object, the
56189 Component_Size attribute for an array type with atomic components, or
56190 the layout attributes of an atomic component, in a way that prevents the
56191 implementation from performing the required indivisible reads and
56192 updates.
56193
56194 12/3
56195 If an atomic object is passed as a parameter, then the formal parameter
56196 shall either have an atomic type or allow pass by copy. If an atomic
56197 object is used as an actual for a generic formal object of mode in out,
56198 then the type of the generic formal object shall be atomic. If the
56199 prefix of an attribute_reference for an Access attribute denotes an
56200 atomic object (including a component), then the designated type of the
56201 resulting access type shall be atomic. If an atomic type is used as an
56202 actual for a generic formal derived type, then the ancestor of the
56203 formal type shall be atomic. Corresponding rules apply to volatile
56204 objects and types.
56205
56206 12.1/3
56207 If a volatile type is used as an actual for a generic formal array type,
56208 then the element type of the formal type shall be volatile.
56209
56210 13/3
56211 If an aspect Volatile, Volatile_Components, Atomic, or Atomic_Components
56212 is directly specified to have the value True for a stand-alone constant
56213 object, then the aspect Import shall also be specified as True for it.
56214
56215 13.1/3
56216 It is illegal to specify the aspect Independent or
56217 Independent_Components as True for a component, object or type if the
56218 implementation cannot provide the independent addressability required by
56219 the aspect (see *note 9.10::).
56220
56221 13.2/3
56222 It is illegal to specify a representation aspect for a component, object
56223 or type for which the aspect Independent or Independent_Components is
56224 True, in a way that prevents the implementation from providing the
56225 independent addressability required by the aspect.
56226
56227 Paragraph 14 was moved to *note Annex J::, "*note Annex J:: Obsolescent
56228 Features".
56229
56230 _Dynamic Semantics_
56231
56232 15
56233 For an atomic object (including an atomic component) all reads and
56234 updates of the object as a whole are indivisible.
56235
56236 16/3
56237 All tasks of the program (on all processors) that read or update
56238 volatile variables see the same order of updates to the variables. A
56239 use of an atomic variable or other mechanism may be necessary to avoid
56240 erroneous execution and to ensure that access to nonatomic volatile
56241 variables is sequential (see *note 9.10::).
56242
56243 17
56244 Two actions are sequential (see *note 9.10::) if each is the read or
56245 update of the same atomic object.
56246
56247 18
56248 If a type is atomic or volatile and it is not a by-copy type, then the
56249 type is defined to be a by-reference type. If any subcomponent of a
56250 type is atomic or volatile, then the type is defined to be a
56251 by-reference type.
56252
56253 19
56254 If an actual parameter is atomic or volatile, and the corresponding
56255 formal parameter is not, then the parameter is passed by copy.
56256
56257 _Implementation Requirements_
56258
56259 20
56260 The external effect of a program (see *note 1.1.3::) is defined to
56261 include each read and update of a volatile or atomic object. The
56262 implementation shall not generate any memory reads or updates of atomic
56263 or volatile objects other than those specified by the program.
56264
56265 21/3
56266 If the Pack aspect is True for a type any of whose subcomponents are
56267 atomic, the implementation shall not pack the atomic subcomponents more
56268 tightly than that for which it can support indivisible reads and
56269 updates.
56270
56271 _Implementation Advice_
56272
56273 22/2
56274 A load or store of a volatile object whose size is a multiple of
56275 System.Storage_Unit and whose alignment is nonzero, should be
56276 implemented by accessing exactly the bits of the object and no others.
56277
56278 23/2
56279 A load or store of an atomic object should, where possible, be
56280 implemented by a single load or store instruction.
56281
56282 NOTES
56283
56284 24
56285 9 An imported volatile or atomic constant behaves as a constant
56286 (i.e. read-only) with respect to other parts of the Ada program,
56287 but can still be modified by an "external source."
56288
56289 \1f
56290 File: arm2012.info, Node: C.7, Prev: C.6, Up: Annex C
56291
56292 C.7 Task Information
56293 ====================
56294
56295 1/3
56296 This subclause describes operations and attributes that can be used to
56297 obtain the identity of a task. In addition, a package that associates
56298 user-defined information with a task is defined. Finally, a package
56299 that associates termination procedures with a task or set of tasks is
56300 defined.
56301
56302 * Menu:
56303
56304 * C.7.1 :: The Package Task_Identification
56305 * C.7.2 :: The Package Task_Attributes
56306 * C.7.3 :: The Package Task_Termination
56307
56308 \1f
56309 File: arm2012.info, Node: C.7.1, Next: C.7.2, Up: C.7
56310
56311 C.7.1 The Package Task_Identification
56312 -------------------------------------
56313
56314 _Static Semantics_
56315
56316 1
56317 The following language-defined library package exists:
56318
56319 2/2
56320 package Ada.Task_Identification is
56321 pragma Preelaborate(Task_Identification);
56322 type Task_Id is private;
56323 pragma Preelaborable_Initialization (Task_Id);
56324 Null_Task_Id : constant Task_Id;
56325 function "=" (Left, Right : Task_Id) return Boolean;
56326
56327 3/3
56328 function Image (T : Task_Id) return String;
56329 function Current_Task return Task_Id;
56330 function Environment_Task return Task_Id;
56331 procedure Abort_Task (T : in Task_Id);
56332
56333 4/3
56334 function Is_Terminated (T : Task_Id) return Boolean;
56335 function Is_Callable (T : Task_Id) return Boolean;
56336 function Activation_Is_Complete (T : Task_Id) return Boolean;
56337 private
56338 ... -- not specified by the language
56339 end Ada.Task_Identification;
56340
56341 _Dynamic Semantics_
56342
56343 5
56344 A value of the type Task_Id identifies an existent task. The constant
56345 Null_Task_Id does not identify any task. Each object of the type
56346 Task_Id is default initialized to the value of Null_Task_Id.
56347
56348 6
56349 The function "=" returns True if and only if Left and Right identify the
56350 same task or both have the value Null_Task_Id.
56351
56352 7
56353 The function Image returns an implementation-defined string that
56354 identifies T. If T equals Null_Task_Id, Image returns an empty string.
56355
56356 8
56357 The function Current_Task returns a value that identifies the calling
56358 task.
56359
56360 8.1/3
56361 The function Environment_Task returns a value that identifies the
56362 environment task.
56363
56364 9
56365 The effect of Abort_Task is the same as the abort_statement for the task
56366 identified by T. In addition, if T identifies the environment task, the
56367 entire partition is aborted, See *note E.1::.
56368
56369 10
56370 The functions Is_Terminated and Is_Callable return the value of the
56371 corresponding attribute of the task identified by T.
56372
56373 10.1/3
56374 The function Activation_Is_Complete returns True if the task identified
56375 by T has completed its activation (whether successfully or not). It
56376 returns False otherwise. If T identifies the environment task,
56377 Activation_Is_Complete returns True after the elaboration of the
56378 library_items of the partition has completed.
56379
56380 11
56381 For a prefix T that is of a task type (after any implicit dereference),
56382 the following attribute is defined:
56383
56384 12
56385 T'Identity
56386 Yields a value of the type Task_Id that identifies the
56387 task denoted by T.
56388
56389 13
56390 For a prefix E that denotes an entry_declaration, the following
56391 attribute is defined:
56392
56393 14/3
56394 E'Caller
56395 Yields a value of the type Task_Id that identifies the
56396 task whose call is now being serviced. Use of this
56397 attribute is allowed only inside an accept_statement, or
56398 entry_body after the entry_barrier, corresponding to the
56399 entry_declaration denoted by E.
56400
56401 15
56402 Program_Error is raised if a value of Null_Task_Id is passed as a
56403 parameter to Abort_Task, Is_Terminated, and Is_Callable.
56404
56405 16
56406 Abort_Task is a potentially blocking operation (see *note 9.5.1::).
56407
56408 _Bounded (Run-Time) Errors_
56409
56410 17/3
56411 It is a bounded error to call the Current_Task function from an
56412 entry_body, interrupt handler, or finalization of a task attribute.
56413 Program_Error is raised, or an implementation-defined value of the type
56414 Task_Id is returned.
56415
56416 _Erroneous Execution_
56417
56418 18
56419 If a value of Task_Id is passed as a parameter to any of the operations
56420 declared in this package (or any language-defined child of this
56421 package), and the corresponding task object no longer exists, the
56422 execution of the program is erroneous.
56423
56424 _Documentation Requirements_
56425
56426 19
56427 The implementation shall document the effect of calling Current_Task
56428 from an entry body or interrupt handler.
56429
56430 NOTES
56431
56432 20
56433 10 This package is intended for use in writing user-defined task
56434 scheduling packages and constructing server tasks. Current_Task
56435 can be used in conjunction with other operations requiring a task
56436 as an argument such as Set_Priority (see *note D.5::).
56437
56438 21
56439 11 The function Current_Task and the attribute Caller can return a
56440 Task_Id value that identifies the environment task.
56441
56442 \1f
56443 File: arm2012.info, Node: C.7.2, Next: C.7.3, Prev: C.7.1, Up: C.7
56444
56445 C.7.2 The Package Task_Attributes
56446 ---------------------------------
56447
56448 _Static Semantics_
56449
56450 1
56451 The following language-defined generic library package exists:
56452
56453 2
56454 with Ada.Task_Identification; use Ada.Task_Identification;
56455 generic
56456 type Attribute is private;
56457 Initial_Value : in Attribute;
56458 package Ada.Task_Attributes is
56459
56460 3
56461 type Attribute_Handle is access all Attribute;
56462
56463 4
56464 function Value(T : Task_Id := Current_Task)
56465 return Attribute;
56466
56467 5
56468 function Reference(T : Task_Id := Current_Task)
56469 return Attribute_Handle;
56470
56471 6
56472 procedure Set_Value(Val : in Attribute;
56473 T : in Task_Id := Current_Task);
56474 procedure Reinitialize(T : in Task_Id := Current_Task);
56475
56476 7
56477 end Ada.Task_Attributes;
56478
56479 _Dynamic Semantics_
56480
56481 8
56482 When an instance of Task_Attributes is elaborated in a given active
56483 partition, an object of the actual type corresponding to the formal type
56484 Attribute is implicitly created for each task (of that partition) that
56485 exists and is not yet terminated. This object acts as a user-defined
56486 attribute of the task. A task created previously in the partition and
56487 not yet terminated has this attribute from that point on. Each task
56488 subsequently created in the partition will have this attribute when
56489 created. In all these cases, the initial value of the given attribute
56490 is Initial_Value.
56491
56492 9
56493 The Value operation returns the value of the corresponding attribute of
56494 T.
56495
56496 10
56497 The Reference operation returns an access value that designates the
56498 corresponding attribute of T.
56499
56500 11
56501 The Set_Value operation performs any finalization on the old value of
56502 the attribute of T and assigns Val to that attribute (see *note 5.2::
56503 and *note 7.6::).
56504
56505 12
56506 The effect of the Reinitialize operation is the same as Set_Value where
56507 the Val parameter is replaced with Initial_Value.
56508
56509 13
56510 For all the operations declared in this package, Tasking_Error is raised
56511 if the task identified by T is terminated. Program_Error is raised if
56512 the value of T is Null_Task_Id.
56513
56514 13.1/2
56515 After a task has terminated, all of its attributes are finalized, unless
56516 they have been finalized earlier. When the master of an instantiation
56517 of Ada.Task_Attributes is finalized, the corresponding attribute of each
56518 task is finalized, unless it has been finalized earlier.
56519
56520 _Bounded (Run-Time) Errors_
56521
56522 13.2/1
56523 If the package Ada.Task_Attributes is instantiated with a controlled
56524 type and the controlled type has user-defined Adjust or Finalize
56525 operations that in turn access task attributes by any of the above
56526 operations, then a call of Set_Value of the instantiated package
56527 constitutes a bounded error. The call may perform as expected or may
56528 result in forever blocking the calling task and subsequently some or all
56529 tasks of the partition.
56530
56531 _Erroneous Execution_
56532
56533 14
56534 It is erroneous to dereference the access value returned by a given call
56535 on Reference after a subsequent call on Reinitialize for the same task
56536 attribute, or after the associated task terminates.
56537
56538 15
56539 If a value of Task_Id is passed as a parameter to any of the operations
56540 declared in this package and the corresponding task object no longer
56541 exists, the execution of the program is erroneous.
56542
56543 15.1/2
56544 An access to a task attribute via a value of type Attribute_Handle is
56545 erroneous if executed concurrently with another such access or a call of
56546 any of the operations declared in package Task_Attributes. An access to
56547 a task attribute is erroneous if executed concurrently with or after the
56548 finalization of the task attribute.
56549
56550 _Implementation Requirements_
56551
56552 16/1
56553 For a given attribute of a given task, the implementation shall perform
56554 the operations declared in this package atomically with respect to any
56555 of these operations of the same attribute of the same task. The
56556 granularity of any locking mechanism necessary to achieve such atomicity
56557 is implementation defined.
56558
56559 17/2
56560 After task attributes are finalized, the implementation shall reclaim
56561 any storage associated with the attributes.
56562
56563 _Documentation Requirements_
56564
56565 18
56566 The implementation shall document the limit on the number of attributes
56567 per task, if any, and the limit on the total storage for attribute
56568 values per task, if such a limit exists.
56569
56570 19
56571 In addition, if these limits can be configured, the implementation shall
56572 document how to configure them.
56573
56574 _Metrics_
56575
56576 20/2
56577 The implementation shall document the following metrics: A task calling
56578 the following subprograms shall execute at a sufficiently high priority
56579 as to not be preempted during the measurement period. This period shall
56580 start just before issuing the call and end just after the call
56581 completes. If the attributes of task T are accessed by the measurement
56582 tests, no other task shall access attributes of that task during the
56583 measurement period. For all measurements described here, the Attribute
56584 type shall be a scalar type whose size is equal to the size of the
56585 predefined type Integer. For each measurement, two cases shall be
56586 documented: one where the accessed attributes are of the calling task
56587 (that is, the default value for the T parameter is used), and the other,
56588 where T identifies another, nonterminated, task.
56589
56590 21
56591 The following calls (to subprograms in the Task_Attributes package)
56592 shall be measured:
56593
56594 22
56595 * a call to Value, where the return value is Initial_Value;
56596
56597 23
56598 * a call to Value, where the return value is not equal to
56599 Initial_Value;
56600
56601 24
56602 * a call to Reference, where the return value designates a value
56603 equal to Initial_Value;
56604
56605 25
56606 * a call to Reference, where the return value designates a value not
56607 equal to Initial_Value;
56608
56609 26/2
56610 * a call to Set_Value where the Val parameter is not equal to
56611 Initial_Value and the old attribute value is equal to
56612 Initial_Value;
56613
56614 27
56615 * a call to Set_Value where the Val parameter is not equal to
56616 Initial_Value and the old attribute value is not equal to
56617 Initial_Value.
56618
56619 _Implementation Permissions_
56620
56621 28
56622 An implementation need not actually create the object corresponding to a
56623 task attribute until its value is set to something other than that of
56624 Initial_Value, or until Reference is called for the task attribute.
56625 Similarly, when the value of the attribute is to be reinitialized to
56626 that of Initial_Value, the object may instead be finalized and its
56627 storage reclaimed, to be recreated when needed later. While the object
56628 does not exist, the function Value may simply return Initial_Value,
56629 rather than implicitly creating the object.
56630
56631 29
56632 An implementation is allowed to place restrictions on the maximum number
56633 of attributes a task may have, the maximum size of each attribute, and
56634 the total storage size allocated for all the attributes of a task.
56635
56636 _Implementation Advice_
56637
56638 30/2
56639 Some implementations are targeted to domains in which memory use at run
56640 time must be completely deterministic. For such implementations, it is
56641 recommended that the storage for task attributes will be pre-allocated
56642 statically and not from the heap. This can be accomplished by either
56643 placing restrictions on the number and the size of the attributes of a
56644 task, or by using the pre-allocated storage for the first N attribute
56645 objects, and the heap for the others. In the latter case, N should be
56646 documented.
56647
56648 30.1/2
56649 Finalization of task attributes and reclamation of associated storage
56650 should be performed as soon as possible after task termination.
56651
56652 NOTES
56653
56654 31
56655 12 An attribute always exists (after instantiation), and has the
56656 initial value. It need not occupy memory until the first operation
56657 that potentially changes the attribute value. The same holds true
56658 after Reinitialize.
56659
56660 32
56661 13 The result of the Reference function should be used with care;
56662 it is always safe to use that result in the task body whose
56663 attribute is being accessed. However, when the result is being
56664 used by another task, the programmer must make sure that the task
56665 whose attribute is being accessed is not yet terminated. Failing
56666 to do so could make the program execution erroneous.
56667
56668 \1f
56669 File: arm2012.info, Node: C.7.3, Prev: C.7.2, Up: C.7
56670
56671 C.7.3 The Package Task_Termination
56672 ----------------------------------
56673
56674 _Static Semantics_
56675
56676 1/2
56677 The following language-defined library package exists:
56678
56679 2/2
56680 with Ada.Task_Identification;
56681 with Ada.Exceptions;
56682 package Ada.Task_Termination is
56683 pragma Preelaborate(Task_Termination);
56684
56685 3/2
56686 type Cause_Of_Termination is (Normal, Abnormal, Unhandled_Exception);
56687
56688 4/2
56689 type Termination_Handler is access protected procedure
56690 (Cause : in Cause_Of_Termination;
56691 T : in Ada.Task_Identification.Task_Id;
56692 X : in Ada.Exceptions.Exception_Occurrence);
56693
56694 5/2
56695 procedure Set_Dependents_Fallback_Handler
56696 (Handler: in Termination_Handler);
56697 function Current_Task_Fallback_Handler return Termination_Handler;
56698
56699 6/2
56700 procedure Set_Specific_Handler
56701 (T : in Ada.Task_Identification.Task_Id;
56702 Handler : in Termination_Handler);
56703 function Specific_Handler (T : Ada.Task_Identification.Task_Id)
56704 return Termination_Handler;
56705
56706 7/2
56707 end Ada.Task_Termination;
56708
56709 _Dynamic Semantics_
56710
56711 8/3
56712 The type Termination_Handler identifies a protected procedure to be
56713 executed by the implementation when a task terminates. Such a protected
56714 procedure is called a handler. In all cases T identifies the task that
56715 is terminating. If the task terminates due to completing the last
56716 statement of its body, or as a result of waiting on a terminate
56717 alternative, and the finalization of the task completes normally, then
56718 Cause is set to Normal and X is set to Null_Occurrence. If the task
56719 terminates because it is being aborted, then Cause is set to Abnormal; X
56720 is set to Null_Occurrence if the finalization of the task completes
56721 normally. If the task terminates because of an exception raised by the
56722 execution of its task_body, then Cause is set to Unhandled_Exception; X
56723 is set to the associated exception occurrence if the finalization of the
56724 task completes normally. Independent of how the task completes, if
56725 finalization of the task propagates an exception, then Cause is either
56726 Unhandled_Exception or Abnormal, and X is an exception occurrence that
56727 identifies the Program_Error exception.
56728
56729 9/2
56730 Each task has two termination handlers, a fall-back handler and a
56731 specific handler. The specific handler applies only to the task itself,
56732 while the fall-back handler applies only to the dependent tasks of the
56733 task. A handler is said to be set if it is associated with a nonnull
56734 value of type Termination_Handler, and cleared otherwise. When a task
56735 is created, its specific handler and fall-back handler are cleared.
56736
56737 10/3
56738 The procedure Set_Dependents_Fallback_Handler changes the fall-back
56739 handler for the calling task: if Handler is null, that fall-back handler
56740 is cleared; otherwise, it is set to be Handler.all. If a fall-back
56741 handler had previously been set it is replaced.
56742
56743 11/3
56744 The function Current_Task_Fallback_Handler returns the fall-back handler
56745 that is currently set for the calling task, if one is set; otherwise, it
56746 returns null.
56747
56748 12/3
56749 The procedure Set_Specific_Handler changes the specific handler for the
56750 task identified by T: if Handler is null, that specific handler is
56751 cleared; otherwise, it is set to be Handler.all. If a specific handler
56752 had previously been set it is replaced.
56753
56754 13/3
56755 The function Specific_Handler returns the specific handler that is
56756 currently set for the task identified by T, if one is set; otherwise, it
56757 returns null.
56758
56759 14/2
56760 As part of the finalization of a task_body, after performing the actions
56761 specified in *note 7.6:: for finalization of a master, the specific
56762 handler for the task, if one is set, is executed. If the specific
56763 handler is cleared, a search for a fall-back handler proceeds by
56764 recursively following the master relationship for the task. If a task
56765 is found whose fall-back handler is set, that handler is executed;
56766 otherwise, no handler is executed.
56767
56768 15/2
56769 For Set_Specific_Handler or Specific_Handler, Tasking_Error is raised if
56770 the task identified by T has already terminated. Program_Error is
56771 raised if the value of T is Ada.Task_Identification.Null_Task_Id.
56772
56773 16/2
56774 An exception propagated from a handler that is invoked as part of the
56775 termination of a task has no effect.
56776
56777 _Erroneous Execution_
56778
56779 17/2
56780 For a call of Set_Specific_Handler or Specific_Handler, if the task
56781 identified by T no longer exists, the execution of the program is
56782 erroneous.
56783
56784 \1f
56785 File: arm2012.info, Node: Annex D, Next: Annex E, Prev: Annex C, Up: Top
56786
56787 Annex D Real-Time Systems
56788 *************************
56789
56790 1
56791 This Annex specifies additional characteristics of Ada implementations
56792 intended for real-time systems software. To conform to this Annex, an
56793 implementation shall also conform to the Systems Programming Annex.
56794
56795 _Metrics_
56796
56797 2
56798 The metrics are documentation requirements; an implementation shall
56799 document the values of the language-defined metrics for at least one
56800 configuration of hardware or an underlying system supported by the
56801 implementation, and shall document the details of that configuration.
56802
56803 3
56804 The metrics do not necessarily yield a simple number. For some, a range
56805 is more suitable, for others a formula dependent on some parameter is
56806 appropriate, and for others, it may be more suitable to break the metric
56807 into several cases. Unless specified otherwise, the metrics in this
56808 annex are expressed in processor clock cycles. For metrics that require
56809 documentation of an upper bound, if there is no upper bound, the
56810 implementation shall report that the metric is unbounded.
56811
56812 NOTES
56813
56814 4
56815 1 The specification of the metrics makes a distinction between
56816 upper bounds and simple execution times. Where something is just
56817 specified as "the execution time of" a piece of code, this leaves
56818 one the freedom to choose a nonpathological case. This kind of
56819 metric is of the form "there exists a program such that the value
56820 of the metric is V". Conversely, the meaning of upper bounds is
56821 "there is no program such that the value of the metric is greater
56822 than V". This kind of metric can only be partially tested, by
56823 finding the value of V for one or more test programs.
56824
56825 5
56826 2 The metrics do not cover the whole language; they are limited to
56827 features that are specified in *note Annex C::, "*note Annex C::
56828 Systems Programming" and in this Annex. The metrics are intended
56829 to provide guidance to potential users as to whether a particular
56830 implementation of such a feature is going to be adequate for a
56831 particular real-time application. As such, the metrics are aimed
56832 at known implementation choices that can result in significant
56833 performance differences.
56834
56835 6
56836 3 The purpose of the metrics is not necessarily to provide
56837 fine-grained quantitative results or to serve as a comparison
56838 between different implementations on the same or different
56839 platforms. Instead, their goal is rather qualitative; to define a
56840 standard set of approximate values that can be measured and used to
56841 estimate the general suitability of an implementation, or to
56842 evaluate the comparative utility of certain features of an
56843 implementation for a particular real-time application.
56844
56845 * Menu:
56846
56847 * D.1 :: Task Priorities
56848 * D.2 :: Priority Scheduling
56849 * D.3 :: Priority Ceiling Locking
56850 * D.4 :: Entry Queuing Policies
56851 * D.5 :: Dynamic Priorities
56852 * D.6 :: Preemptive Abort
56853 * D.7 :: Tasking Restrictions
56854 * D.8 :: Monotonic Time
56855 * D.9 :: Delay Accuracy
56856 * D.10 :: Synchronous Task Control
56857 * D.11 :: Asynchronous Task Control
56858 * D.12 :: Other Optimizations and Determinism Rules
56859 * D.13 :: The Ravenscar Profile
56860 * D.14 :: Execution Time
56861 * D.15 :: Timing Events
56862 * D.16 :: Multiprocessor Implementation
56863
56864 \1f
56865 File: arm2012.info, Node: D.1, Next: D.2, Up: Annex D
56866
56867 D.1 Task Priorities
56868 ===================
56869
56870 1/3
56871 This subclause specifies the priority model for real-time systems. In
56872 addition, the methods for specifying priorities are defined.
56873
56874 Paragraphs 2 through 6 were moved to *note Annex J::, "*note Annex J::
56875 Obsolescent Features".
56876
56877 _Static Semantics_
56878
56879 6.1/3
56880 For a task type (including the anonymous type of a
56881 single_task_declaration), protected type (including the anonymous type
56882 of a single_protected_declaration), or subprogram, the following
56883 language-defined representation aspects may be specified:
56884
56885 6.2/3
56886 Priority
56887 The aspect Priority is an expression, which shall be of
56888 type Integer.
56889
56890 6.3/3
56891 Interrupt_Priority
56892 The aspect Interrupt_Priority is an expression, which
56893 shall be of type Integer.
56894
56895 _Legality Rules_
56896
56897 7/3
56898 This paragraph was deleted.
56899
56900 8/3
56901 If the Priority aspect is specified for a subprogram, the expression
56902 shall be static, and its value shall be in the range of System.Priority.
56903
56904 8.1/3
56905 At most one of the Priority and Interrupt_Priority aspects may be
56906 specified for a given entity.
56907
56908 8.2/3
56909 Neither of the Priority or Interrupt_Priority aspects shall be specified
56910 for a synchronized interface type.
56911
56912 _Static Semantics_
56913
56914 9
56915 The following declarations exist in package System:
56916
56917 10
56918 subtype Any_Priority is Integer range implementation-defined;
56919 subtype Priority is Any_Priority
56920 range Any_Priority'First .. implementation-defined;
56921 subtype Interrupt_Priority is Any_Priority
56922 range Priority'Last+1 .. Any_Priority'Last;
56923
56924 11
56925 Default_Priority : constant Priority := (Priority'First + Priority'Last)/2;
56926
56927 12
56928 The full range of priority values supported by an implementation is
56929 specified by the subtype Any_Priority. The subrange of priority values
56930 that are high enough to require the blocking of one or more interrupts
56931 is specified by the subtype Interrupt_Priority. The subrange of
56932 priority values below System.Interrupt_Priority'First is specified by
56933 the subtype System.Priority.
56934
56935 13/3
56936 This paragraph was deleted.
56937
56938 _Dynamic Semantics_
56939
56940 14/3
56941 The Priority aspect has no effect if it is specified for a subprogram
56942 other than the main subprogram; the Priority value is not associated
56943 with any task.
56944
56945 15
56946 A task priority is an integer value that indicates a degree of urgency
56947 and is the basis for resolving competing demands of tasks for resources.
56948 Unless otherwise specified, whenever tasks compete for processors or
56949 other implementation-defined resources, the resources are allocated to
56950 the task with the highest priority value. The base priority of a task
56951 is the priority with which it was created, or to which it was later set
56952 by Dynamic_Priorities.Set_Priority (see *note D.5::). At all times, a
56953 task also has an active priority, which generally reflects its base
56954 priority as well as any priority it inherits from other sources.
56955 Priority inheritance is the process by which the priority of a task or
56956 other entity (e.g. a protected object; see *note D.3::) is used in the
56957 evaluation of another task's active priority.
56958
56959 16/3
56960 The effect of specifying a Priority or Interrupt_Priority aspect for a
56961 protected type or single_protected_declaration is discussed in *note
56962 D.3::.
56963
56964 17/3
56965 The expression specified for the Priority or Interrupt_Priority aspect
56966 of a task is evaluated for each task object (see *note 9.1::). For the
56967 Priority aspect, the value of the expression is converted to the subtype
56968 Priority; for the Interrupt_Priority aspect, this value is converted to
56969 the subtype Any_Priority. The priority value is then associated with
56970 the task object whose task declaration specifies the aspect.
56971
56972 18/3
56973 Likewise, the priority value is associated with the environment task if
56974 the aspect is specified for the main subprogram.
56975
56976 19/3
56977 The initial value of a task's base priority is specified by default or
56978 by means of a Priority or Interrupt_Priority aspect. After a task is
56979 created, its base priority can be changed only by a call to
56980 Dynamic_Priorities.Set_Priority (see *note D.5::). The initial base
56981 priority of a task in the absence of an aspect is the base priority of
56982 the task that creates it at the time of creation (see *note 9.1::). If
56983 the aspect Priority is not specified for the main subprogram, the
56984 initial base priority of the environment task is
56985 System.Default_Priority. The task's active priority is used when the
56986 task competes for processors. Similarly, the task's active priority is
56987 used to determine the task's position in any queue when Priority_Queuing
56988 is specified (see *note D.4::).
56989
56990 20/2
56991 At any time, the active priority of a task is the maximum of all the
56992 priorities the task is inheriting at that instant. For a task that is
56993 not held (see *note D.11::), its base priority is a source of priority
56994 inheritance unless otherwise specified for a particular task dispatching
56995 policy. Other sources of priority inheritance are specified under the
56996 following conditions:
56997
56998 21/1
56999 * During activation, a task being activated inherits the active
57000 priority that its activator (see *note 9.2::) had at the time the
57001 activation was initiated.
57002
57003 22/1
57004 * During rendezvous, the task accepting the entry call inherits the
57005 priority of the entry call (see *note 9.5.3:: and *note D.4::).
57006
57007 23
57008 * During a protected action on a protected object, a task inherits
57009 the ceiling priority of the protected object (see *note 9.5:: and
57010 *note D.3::).
57011
57012 24
57013 In all of these cases, the priority ceases to be inherited as soon as
57014 the condition calling for the inheritance no longer exists.
57015
57016 _Implementation Requirements_
57017
57018 25
57019 The range of System.Interrupt_Priority shall include at least one value.
57020
57021 26
57022 The range of System.Priority shall include at least 30 values.
57023
57024 NOTES
57025
57026 27
57027 4 The priority expression can include references to discriminants
57028 of the enclosing type.
57029
57030 28
57031 5 It is a consequence of the active priority rules that at the
57032 point when a task stops inheriting a priority from another source,
57033 its active priority is re-evaluated. This is in addition to other
57034 instances described in this Annex for such re-evaluation.
57035
57036 29/3
57037 6 An implementation may provide a nonstandard mode in which tasks
57038 inherit priorities under conditions other than those specified
57039 above.
57040
57041 \1f
57042 File: arm2012.info, Node: D.2, Next: D.3, Prev: D.1, Up: Annex D
57043
57044 D.2 Priority Scheduling
57045 =======================
57046
57047 1/3
57048 This subclause describes the rules that determine which task is selected
57049 for execution when more than one task is ready (see *note 9::).
57050
57051 * Menu:
57052
57053 * D.2.1 :: The Task Dispatching Model
57054 * D.2.2 :: Task Dispatching Pragmas
57055 * D.2.3 :: Preemptive Dispatching
57056 * D.2.4 :: Non-Preemptive Dispatching
57057 * D.2.5 :: Round Robin Dispatching
57058 * D.2.6 :: Earliest Deadline First Dispatching
57059
57060 \1f
57061 File: arm2012.info, Node: D.2.1, Next: D.2.2, Up: D.2
57062
57063 D.2.1 The Task Dispatching Model
57064 --------------------------------
57065
57066 1/2
57067 The task dispatching model specifies task scheduling, based on
57068 conceptual priority-ordered ready queues.
57069
57070 _Static Semantics_
57071
57072 1.1/2
57073 The following language-defined library package exists:
57074
57075 1.2/3
57076 package Ada.Dispatching is
57077 pragma Preelaborate(Dispatching);
57078
57079 1.3/3
57080 procedure Yield;
57081
57082 1.4/3
57083 Dispatching_Policy_Error : exception;
57084 end Ada.Dispatching;
57085
57086 1.5/2
57087 Dispatching serves as the parent of other language-defined library units
57088 concerned with task dispatching.
57089
57090 _Dynamic Semantics_
57091
57092 2/2
57093 A task can become a running task only if it is ready (see *note 9::) and
57094 the execution resources required by that task are available. Processors
57095 are allocated to tasks based on each task's active priority.
57096
57097 3
57098 It is implementation defined whether, on a multiprocessor, a task that
57099 is waiting for access to a protected object keeps its processor busy.
57100
57101 4/2
57102 Task dispatching is the process by which one ready task is selected for
57103 execution on a processor. This selection is done at certain points
57104 during the execution of a task called task dispatching points. A task
57105 reaches a task dispatching point whenever it becomes blocked, and when
57106 it terminates. Other task dispatching points are defined throughout
57107 this Annex for specific policies.
57108
57109 5/2
57110 Task dispatching policies are specified in terms of conceptual ready
57111 queues and task states. A ready queue is an ordered list of ready
57112 tasks. The first position in a queue is called the head of the queue,
57113 and the last position is called the tail of the queue. A task is ready
57114 if it is in a ready queue, or if it is running. Each processor has one
57115 ready queue for each priority value. At any instant, each ready queue
57116 of a processor contains exactly the set of tasks of that priority that
57117 are ready for execution on that processor, but are not running on any
57118 processor; that is, those tasks that are ready, are not running on any
57119 processor, and can be executed using that processor and other available
57120 resources. A task can be on the ready queues of more than one
57121 processor.
57122
57123 6/2
57124 Each processor also has one running task, which is the task currently
57125 being executed by that processor. Whenever a task running on a
57126 processor reaches a task dispatching point it goes back to one or more
57127 ready queues; a task (possibly the same task) is then selected to run on
57128 that processor. The task selected is the one at the head of the highest
57129 priority nonempty ready queue; this task is then removed from all ready
57130 queues to which it belongs.
57131
57132 7/3
57133 A call of Yield is a task dispatching point. Yield is a potentially
57134 blocking operation (see *note 9.5.1::).
57135
57136 8/2
57137 This paragraph was deleted.
57138
57139 _Implementation Permissions_
57140
57141 9/2
57142 An implementation is allowed to define additional resources as execution
57143 resources, and to define the corresponding allocation policies for them.
57144 Such resources may have an implementation-defined effect on task
57145 dispatching.
57146
57147 10
57148 An implementation may place implementation-defined restrictions on tasks
57149 whose active priority is in the Interrupt_Priority range.
57150
57151 10.1/2
57152 For optimization purposes, an implementation may alter the points at
57153 which task dispatching occurs, in an implementation-defined manner.
57154 However, a delay_statement always corresponds to at least one task
57155 dispatching point.
57156
57157 NOTES
57158
57159 11/3
57160 7 Clause *note 9:: specifies under which circumstances a task
57161 becomes ready. The ready state is affected by the rules for task
57162 activation and termination, delay statements, and entry calls.
57163 When a task is not ready, it is said to be blocked.
57164
57165 12
57166 8 An example of a possible implementation-defined execution
57167 resource is a page of physical memory, which needs to be loaded
57168 with a particular page of virtual memory before a task can continue
57169 execution.
57170
57171 13
57172 9 The ready queues are purely conceptual; there is no requirement
57173 that such lists physically exist in an implementation.
57174
57175 14
57176 10 While a task is running, it is not on any ready queue. Any
57177 time the task that is running on a processor is added to a ready
57178 queue, a new running task is selected for that processor.
57179
57180 15
57181 11 In a multiprocessor system, a task can be on the ready queues
57182 of more than one processor. At the extreme, if several processors
57183 share the same set of ready tasks, the contents of their ready
57184 queues is identical, and so they can be viewed as sharing one ready
57185 queue, and can be implemented that way. Thus, the dispatching
57186 model covers multiprocessors where dispatching is implemented using
57187 a single ready queue, as well as those with separate dispatching
57188 domains.
57189
57190 16
57191 12 The priority of a task is determined by rules specified in this
57192 subclause, and under *note D.1::, "*note D.1:: Task Priorities",
57193 *note D.3::, "*note D.3:: Priority Ceiling Locking", and *note
57194 D.5::, "*note D.5:: Dynamic Priorities".
57195
57196 17/2
57197 13 The setting of a task's base priority as a result of a call to
57198 Set_Priority does not always take effect immediately when
57199 Set_Priority is called. The effect of setting the task's base
57200 priority is deferred while the affected task performs a protected
57201 action.
57202
57203 \1f
57204 File: arm2012.info, Node: D.2.2, Next: D.2.3, Prev: D.2.1, Up: D.2
57205
57206 D.2.2 Task Dispatching Pragmas
57207 ------------------------------
57208
57209 1/3
57210 This subclause allows a single task dispatching policy to be defined for
57211 all priorities, or the range of priorities to be split into subranges
57212 that are assigned individual dispatching policies.
57213
57214 _Syntax_
57215
57216 2
57217 The form of a pragma Task_Dispatching_Policy is as follows:
57218
57219 3
57220 pragma Task_Dispatching_Policy(policy_identifier);
57221
57222 3.1/2
57223 The form of a pragma Priority_Specific_Dispatching is as follows:
57224
57225 3.2/2
57226 pragma Priority_Specific_Dispatching (
57227 policy_identifier, first_priority_expression, last_priority_
57228 expression);
57229
57230 _Name Resolution Rules_
57231
57232 3.3/2
57233 The expected type for first_priority_expression and
57234 last_priority_expression is Integer.
57235
57236 _Legality Rules_
57237
57238 4/2
57239 The policy_identifier used in a pragma Task_Dispatching_Policy shall be
57240 the name of a task dispatching policy.
57241
57242 4.1/2
57243 The policy_identifier used in a pragma Priority_Specific_Dispatching
57244 shall be the name of a task dispatching policy.
57245
57246 4.2/2
57247 Both first_priority_expression and last_priority_expression shall be
57248 static expressions in the range of System.Any_Priority;
57249 last_priority_expression shall have a value greater than or equal to
57250 first_priority_expression.
57251
57252 _Static Semantics_
57253
57254 4.3/2
57255 Pragma Task_Dispatching_Policy specifies the single task dispatching
57256 policy.
57257
57258 4.4/2
57259 Pragma Priority_Specific_Dispatching specifies the task dispatching
57260 policy for the specified range of priorities. Tasks with base
57261 priorities within the range of priorities specified in a
57262 Priority_Specific_Dispatching pragma have their active priorities
57263 determined according to the specified dispatching policy. Tasks with
57264 active priorities within the range of priorities specified in a
57265 Priority_Specific_Dispatching pragma are dispatched according to the
57266 specified dispatching policy.
57267
57268 4.5/3
57269 If a partition contains one or more Priority_Specific_Dispatching
57270 pragmas, the dispatching policy for priorities not covered by any
57271 Priority_Specific_Dispatching pragmas is FIFO_Within_Priorities.
57272
57273 _Post-Compilation Rules_
57274
57275 5/2
57276 A Task_Dispatching_Policy pragma is a configuration pragma. A
57277 Priority_Specific_Dispatching pragma is a configuration pragma.
57278
57279 5.1/2
57280 The priority ranges specified in more than one
57281 Priority_Specific_Dispatching pragma within the same partition shall not
57282 be overlapping.
57283
57284 5.2/2
57285 If a partition contains one or more Priority_Specific_Dispatching
57286 pragmas it shall not contain a Task_Dispatching_Policy pragma.
57287
57288 6/2
57289 This paragraph was deleted.
57290
57291 _Dynamic Semantics_
57292
57293 7/2
57294 A task dispatching policy specifies the details of task dispatching that
57295 are not covered by the basic task dispatching model. These rules govern
57296 when tasks are inserted into and deleted from the ready queues. A
57297 single task dispatching policy is specified by a Task_Dispatching_Policy
57298 pragma. Pragma Priority_Specific_Dispatching assigns distinct
57299 dispatching policies to subranges of System.Any_Priority.
57300
57301 7.1/2
57302 If neither pragma applies to any of the program units comprising a
57303 partition, the task dispatching policy for that partition is
57304 unspecified.
57305
57306 7.2/3
57307 If a partition contains one or more Priority_Specific_Dispatching
57308 pragmas, a task dispatching point occurs for the currently running task
57309 of a processor whenever there is a nonempty ready queue for that
57310 processor with a higher priority than the priority of the running task.
57311
57312 7.3/2
57313 A task that has its base priority changed may move from one dispatching
57314 policy to another. It is immediately subject to the new dispatching
57315 policy.
57316
57317 Paragraphs 7 through 13 were moved to D.2.3.
57318
57319 _Implementation Requirements_
57320
57321 14.1/2
57322 An implementation shall allow, for a single partition, both the locking
57323 policy (see *note D.3::) to be specified as Ceiling_Locking and also one
57324 or more Priority_Specific_Dispatching pragmas to be given.
57325
57326 _Documentation Requirements_
57327
57328 Paragraphs 14 through 16 were moved to D.2.3.
57329
57330 _Implementation Permissions_
57331
57332 18/2
57333 Implementations are allowed to define other task dispatching policies,
57334 but need not support more than one task dispatching policy per
57335 partition.
57336
57337 19/2
57338 An implementation need not support pragma Priority_Specific_Dispatching
57339 if it is infeasible to support it in the target environment.
57340
57341 NOTES
57342
57343 Paragraphs 19 through 21 were deleted.
57344
57345 \1f
57346 File: arm2012.info, Node: D.2.3, Next: D.2.4, Prev: D.2.2, Up: D.2
57347
57348 D.2.3 Preemptive Dispatching
57349 ----------------------------
57350
57351 1/3
57352 This subclause defines a preemptive task dispatching policy.
57353
57354 _Static Semantics_
57355
57356 2/2
57357 The policy_identifier FIFO_Within_Priorities is a task dispatching
57358 policy.
57359
57360 _Dynamic Semantics_
57361
57362 3/2
57363 When FIFO_Within_Priorities is in effect, modifications to the ready
57364 queues occur only as follows:
57365
57366 4/2
57367 * When a blocked task becomes ready, it is added at the tail of the
57368 ready queue for its active priority.
57369
57370 5/2
57371 * When the active priority of a ready task that is not running
57372 changes, or the setting of its base priority takes effect, the task
57373 is removed from the ready queue for its old active priority and is
57374 added at the tail of the ready queue for its new active priority,
57375 except in the case where the active priority is lowered due to the
57376 loss of inherited priority, in which case the task is added at the
57377 head of the ready queue for its new active priority.
57378
57379 6/2
57380 * When the setting of the base priority of a running task takes
57381 effect, the task is added to the tail of the ready queue for its
57382 active priority.
57383
57384 7/2
57385 * When a task executes a delay_statement that does not result in
57386 blocking, it is added to the tail of the ready queue for its active
57387 priority.
57388
57389 8/2
57390 Each of the events specified above is a task dispatching point (see
57391 *note D.2.1::).
57392
57393 9/2
57394 A task dispatching point occurs for the currently running task of a
57395 processor whenever there is a nonempty ready queue for that processor
57396 with a higher priority than the priority of the running task. The
57397 currently running task is said to be preempted and it is added at the
57398 head of the ready queue for its active priority.
57399
57400 _Implementation Requirements_
57401
57402 10/2
57403 An implementation shall allow, for a single partition, both the task
57404 dispatching policy to be specified as FIFO_Within_Priorities and also
57405 the locking policy (see *note D.3::) to be specified as Ceiling_Locking.
57406
57407 _Documentation Requirements_
57408
57409 11/2
57410 Priority inversion is the duration for which a task remains at the head
57411 of the highest priority nonempty ready queue while the processor
57412 executes a lower priority task. The implementation shall document:
57413
57414 12/2
57415 * The maximum priority inversion a user task can experience due to
57416 activity of the implementation (on behalf of lower priority tasks),
57417 and
57418
57419 13/2
57420 * whether execution of a task can be preempted by the implementation
57421 processing of delay expirations for lower priority tasks, and if
57422 so, for how long.
57423
57424 NOTES
57425
57426 14/2
57427 14 If the active priority of a running task is lowered due to loss
57428 of inherited priority (as it is on completion of a protected
57429 operation) and there is a ready task of the same active priority
57430 that is not running, the running task continues to run (provided
57431 that there is no higher priority task).
57432
57433 15/2
57434 15 Setting the base priority of a ready task causes the task to
57435 move to the tail of the queue for its active priority, regardless
57436 of whether the active priority of the task actually changes.
57437
57438 \1f
57439 File: arm2012.info, Node: D.2.4, Next: D.2.5, Prev: D.2.3, Up: D.2
57440
57441 D.2.4 Non-Preemptive Dispatching
57442 --------------------------------
57443
57444 1/3
57445 This subclause defines a non-preemptive task dispatching policy.
57446
57447 _Static Semantics_
57448
57449 2/2
57450 The policy_identifier Non_Preemptive_FIFO_Within_Priorities is a task
57451 dispatching policy.
57452
57453 2.1/3
57454 The following language-defined library package exists:
57455
57456 2.2/3
57457 package Ada.Dispatching.Non_Preemptive is
57458 pragma Preelaborate(Non_Preemptive);
57459 procedure Yield_To_Higher;
57460 procedure Yield_To_Same_Or_Higher renames Yield;
57461 end Ada.Dispatching.Non_Preemptive;
57462
57463 2.3/3
57464 A call of Yield_To_Higher is a task dispatching point for this policy.
57465 If the task at the head of the highest priority ready queue has a higher
57466 active priority than the calling task, then the calling task is
57467 preempted.
57468
57469 _Legality Rules_
57470
57471 3/2
57472 Non_Preemptive_FIFO_Within_Priorities shall not be specified as the
57473 policy_identifier of pragma Priority_Specific_Dispatching (see *note
57474 D.2.2::).
57475
57476 _Dynamic Semantics_
57477
57478 4/2
57479 When Non_Preemptive_FIFO_Within_Priorities is in effect, modifications
57480 to the ready queues occur only as follows:
57481
57482 5/2
57483 * When a blocked task becomes ready, it is added at the tail of the
57484 ready queue for its active priority.
57485
57486 6/2
57487 * When the active priority of a ready task that is not running
57488 changes, or the setting of its base priority takes effect, the task
57489 is removed from the ready queue for its old active priority and is
57490 added at the tail of the ready queue for its new active priority.
57491
57492 7/2
57493 * When the setting of the base priority of a running task takes
57494 effect, the task is added to the tail of the ready queue for its
57495 active priority.
57496
57497 8/2
57498 * When a task executes a delay_statement that does not result in
57499 blocking, it is added to the tail of the ready queue for its active
57500 priority.
57501
57502 9/3
57503 For this policy, blocking or termination of a task, a delay_statement, a
57504 call to Yield_To_Higher, and a call to Yield_To_Same_Or_Higher or Yield
57505 are the only task dispatching points (see *note D.2.1::).
57506
57507 _Implementation Requirements_
57508
57509 10/2
57510 An implementation shall allow, for a single partition, both the task
57511 dispatching policy to be specified as
57512 Non_Preemptive_FIFO_Within_Priorities and also the locking policy (see
57513 *note D.3::) to be specified as Ceiling_Locking.
57514
57515 _Implementation Permissions_
57516
57517 11/3
57518 Since implementations are allowed to round all ceiling priorities in
57519 subrange System.Priority to System.Priority'Last (see *note D.3::), an
57520 implementation may allow a task of a partition using the
57521 Non_Premptive_FIFO_Within_Priorities policy to execute within a
57522 protected object without raising its active priority provided the
57523 associated protected unit does not contain any subprograms with aspects
57524 Interrupt_Handler or Attach_Handler specified, nor does the unit have
57525 aspect Interrupt_Priority specified. When the locking policy (see *note
57526 D.3::) is Ceiling_Locking, an implementation taking advantage of this
57527 permission shall ensure that a call to Yield_to_Higher that occurs
57528 within a protected action uses the ceiling priority of the protected
57529 object (rather than the active priority of the task) when determining
57530 whether to preempt the task.
57531
57532 \1f
57533 File: arm2012.info, Node: D.2.5, Next: D.2.6, Prev: D.2.4, Up: D.2
57534
57535 D.2.5 Round Robin Dispatching
57536 -----------------------------
57537
57538 1/3
57539 This subclause defines the task dispatching policy
57540 Round_Robin_Within_Priorities and the package Round_Robin.
57541
57542 _Static Semantics_
57543
57544 2/2
57545 The policy_identifier Round_Robin_Within_Priorities is a task
57546 dispatching policy.
57547
57548 3/2
57549 The following language-defined library package exists:
57550
57551 4/2
57552 with System;
57553 with Ada.Real_Time;
57554 package Ada.Dispatching.Round_Robin is
57555 Default_Quantum : constant Ada.Real_Time.Time_Span :=
57556 implementation-defined;
57557 procedure Set_Quantum (Pri : in System.Priority;
57558 Quantum : in Ada.Real_Time.Time_Span);
57559 procedure Set_Quantum (Low, High : in System.Priority;
57560 Quantum : in Ada.Real_Time.Time_Span);
57561 function Actual_Quantum (Pri : System.Priority)
57562 return Ada.Real_Time.Time_Span;
57563 function Is_Round_Robin (Pri : System.Priority) return Boolean;
57564 end Ada.Dispatching.Round_Robin;
57565
57566 5/2
57567 When task dispatching policy Round_Robin_Within_Priorities is the single
57568 policy in effect for a partition, each task with priority in the range
57569 of System.Interrupt_Priority is dispatched according to policy
57570 FIFO_Within_Priorities.
57571
57572 _Dynamic Semantics_
57573
57574 6/2
57575 The procedures Set_Quantum set the required Quantum value for a single
57576 priority level Pri or a range of priority levels Low .. High. If no
57577 quantum is set for a Round Robin priority level, Default_Quantum is
57578 used.
57579
57580 7/2
57581 The function Actual_Quantum returns the actual quantum used by the
57582 implementation for the priority level Pri.
57583
57584 8/3
57585 The function Is_Round_Robin returns True if priority Pri is covered by
57586 task dispatching policy Round_Robin_Within_Priorities; otherwise, it
57587 returns False.
57588
57589 9/2
57590 A call of Actual_Quantum or Set_Quantum raises exception
57591 Dispatching.Dispatching_Policy_Error if a predefined policy other than
57592 Round_Robin_Within_Priorities applies to the specified priority or any
57593 of the priorities in the specified range.
57594
57595 10/2
57596 For Round_Robin_Within_Priorities, the dispatching rules for
57597 FIFO_Within_Priorities apply with the following additional rules:
57598
57599 11/2
57600 * When a task is added or moved to the tail of the ready queue for
57601 its base priority, it has an execution time budget equal to the
57602 quantum for that priority level. This will also occur when a
57603 blocked task becomes executable again.
57604
57605 12/2
57606 * When a task is preempted (by a higher priority task) and is added
57607 to the head of the ready queue for its priority level, it retains
57608 its remaining budget.
57609
57610 13/2
57611 * While a task is executing, its budget is decreased by the amount of
57612 execution time it uses. The accuracy of this accounting is the
57613 same as that for execution time clocks (see *note D.14::).
57614
57615 14/2
57616 * When a task has exhausted its budget and is without an inherited
57617 priority (and is not executing within a protected operation), it is
57618 moved to the tail of the ready queue for its priority level. This
57619 is a task dispatching point.
57620
57621 _Implementation Requirements_
57622
57623 15/2
57624 An implementation shall allow, for a single partition, both the task
57625 dispatching policy to be specified as Round_Robin_Within_Priorities and
57626 also the locking policy (see *note D.3::) to be specified as
57627 Ceiling_Locking.
57628
57629 _Documentation Requirements_
57630
57631 16/2
57632 An implementation shall document the quantum values supported.
57633
57634 17/2
57635 An implementation shall document the accuracy with which it detects the
57636 exhaustion of the budget of a task.
57637
57638 NOTES
57639
57640 18/2
57641 16 Due to implementation constraints, the quantum value returned
57642 by Actual_Quantum might not be identical to that set with
57643 Set_Quantum.
57644
57645 19/2
57646 17 A task that executes continuously with an inherited priority
57647 will not be subject to round robin dispatching.
57648
57649 \1f
57650 File: arm2012.info, Node: D.2.6, Prev: D.2.5, Up: D.2
57651
57652 D.2.6 Earliest Deadline First Dispatching
57653 -----------------------------------------
57654
57655 1/2
57656 The deadline of a task is an indication of the urgency of the task; it
57657 represents a point on an ideal physical time line. The deadline might
57658 affect how resources are allocated to the task.
57659
57660 2/3
57661 This subclause defines a package for representing the deadline of a task
57662 and a dispatching policy that defines Earliest Deadline First (EDF)
57663 dispatching. An aspect is defined to assign an initial deadline to a
57664 task.
57665
57666 Paragraphs 3 through 6 were moved to *note Annex J::, "*note Annex J::
57667 Obsolescent Features".
57668
57669 _Static Semantics_
57670
57671 7/2
57672 The policy_identifier EDF_Across_Priorities is a task dispatching
57673 policy.
57674
57675 8/2
57676 The following language-defined library package exists:
57677
57678 9/2
57679 with Ada.Real_Time;
57680 with Ada.Task_Identification;
57681 package Ada.Dispatching.EDF is
57682 subtype Deadline is Ada.Real_Time.Time;
57683 Default_Deadline : constant Deadline :=
57684 Ada.Real_Time.Time_Last;
57685 procedure Set_Deadline (D : in Deadline;
57686 T : in Ada.Task_Identification.Task_Id :=
57687 Ada.Task_Identification.Current_Task);
57688 procedure Delay_Until_And_Set_Deadline (
57689 Delay_Until_Time : in Ada.Real_Time.Time;
57690 Deadline_Offset : in Ada.Real_Time.Time_Span);
57691 function Get_Deadline (T : Ada.Task_Identification.Task_Id :=
57692 Ada.Task_Identification.Current_Task) return Deadline;
57693 end Ada.Dispatching.EDF;
57694
57695 9.1/3
57696 For a task type (including the anonymous type of a
57697 single_task_declaration) or subprogram, the following language-defined
57698 representation aspect may be specified:
57699
57700 9.2/3
57701 Relative_Deadline
57702 The aspect Relative_Deadline is an expression, which
57703 shall be of type Real_Time.Time_Span.
57704
57705 _Legality Rules_
57706
57707 9.3/3
57708 The Relative_Deadline aspect shall not be specified on a task interface
57709 type.
57710
57711 _Post-Compilation Rules_
57712
57713 10/2
57714 If the EDF_Across_Priorities policy is specified for a partition, then
57715 the Ceiling_Locking policy (see *note D.3::) shall also be specified for
57716 the partition.
57717
57718 11/2
57719 If the EDF_Across_Priorities policy appears in a
57720 Priority_Specific_Dispatching pragma (see *note D.2.2::) in a partition,
57721 then the Ceiling_Locking policy (see *note D.3::) shall also be
57722 specified for the partition.
57723
57724 _Dynamic Semantics_
57725
57726 12/3
57727 The Relative_Deadline aspect has no effect if it is specified for a
57728 subprogram other than the main subprogram.
57729
57730 13/3
57731 The initial absolute deadline of a task for which aspect
57732 Relative_Deadline is specified is the value of Real_Time.Clock + the
57733 expression that is the value of the aspect, where this entire
57734 expression, including the call of Real_Time.Clock, is evaluated between
57735 task creation and the start of its activation. If the aspect
57736 Relative_Deadline is not specified, then the initial absolute deadline
57737 of a task is the value of Default_Deadline. The environment task is
57738 also given an initial deadline by this rule, using the value of the
57739 Relative_Deadline aspect of the main subprogram (if any).
57740
57741 14/2
57742 The procedure Set_Deadline changes the absolute deadline of the task to
57743 D. The function Get_Deadline returns the absolute deadline of the task.
57744
57745 15/2
57746 The procedure Delay_Until_And_Set_Deadline delays the calling task until
57747 time Delay_Until_Time. When the task becomes runnable again it will
57748 have deadline Delay_Until_Time + Deadline_Offset.
57749
57750 16/2
57751 On a system with a single processor, the setting of the deadline of a
57752 task to the new value occurs immediately at the first point that is
57753 outside the execution of a protected action. If the task is currently
57754 on a ready queue it is removed and re-entered on to the ready queue
57755 determined by the rules defined below.
57756
57757 17/2
57758 When EDF_Across_Priorities is specified for priority range Low..High all
57759 ready queues in this range are ordered by deadline. The task at the
57760 head of a queue is the one with the earliest deadline.
57761
57762 18/2
57763 A task dispatching point occurs for the currently running task T to
57764 which policy EDF_Across_Priorities applies:
57765
57766 19/2
57767 * when a change to the deadline of T occurs;
57768
57769 20/2
57770 * there is a task on the ready queue for the active priority of T
57771 with a deadline earlier than the deadline of T; or
57772
57773 21/2
57774 * there is a nonempty ready queue for that processor with a higher
57775 priority than the active priority of the running task.
57776
57777 22/2
57778 In these cases, the currently running task is said to be preempted and
57779 is returned to the ready queue for its active priority.
57780
57781 23/2
57782 For a task T to which policy EDF_Across_Priorities applies, the base
57783 priority is not a source of priority inheritance; the active priority
57784 when first activated or while it is blocked is defined as the maximum of
57785 the following:
57786
57787 24/2
57788 * the lowest priority in the range specified as EDF_Across_Priorities
57789 that includes the base priority of T;
57790
57791 25/2
57792 * the priorities, if any, currently inherited by T;
57793
57794 26/3
57795 * the highest priority P, if any, less than the base priority of T
57796 such that one or more tasks are executing within a protected object
57797 with ceiling priority P and task T has an earlier deadline than all
57798 such tasks; and furthermore T has an earlier deadline than all
57799 other tasks on ready queues with priorities in the given
57800 EDF_Across_Priorities range that are strictly less than P.
57801
57802 27/2
57803 When a task T is first activated or becomes unblocked, it is added to
57804 the ready queue corresponding to this active priority. Until it becomes
57805 blocked again, the active priority of T remains no less than this value;
57806 it will exceed this value only while it is inheriting a higher priority.
57807
57808 28/2
57809 When the setting of the base priority of a ready task takes effect and
57810 the new priority is in a range specified as EDF_Across_Priorities, the
57811 task is added to the ready queue corresponding to its new active
57812 priority, as determined above.
57813
57814 29/2
57815 For all the operations defined in Dispatching.EDF, Tasking_Error is
57816 raised if the task identified by T has terminated. Program_Error is
57817 raised if the value of T is Null_Task_Id.
57818
57819 _Bounded (Run-Time) Errors_
57820
57821 30/2
57822 If EDF_Across_Priorities is specified for priority range Low..High, it
57823 is a bounded error to declare a protected object with ceiling priority
57824 Low or to assign the value Low to attribute 'Priority. In either case
57825 either Program_Error is raised or the ceiling of the protected object is
57826 assigned the value Low+1.
57827
57828 _Erroneous Execution_
57829
57830 31/2
57831 If a value of Task_Id is passed as a parameter to any of the subprograms
57832 of this package and the corresponding task object no longer exists, the
57833 execution of the program is erroneous.
57834
57835 _Documentation Requirements_
57836
57837 32/2
57838 On a multiprocessor, the implementation shall document any conditions
57839 that cause the completion of the setting of the deadline of a task to be
57840 delayed later than what is specified for a single processor.
57841
57842 NOTES
57843
57844 33/3
57845 18 If two adjacent priority ranges, A..B and B+1..C are specified
57846 to have policy EDF_Across_Priorities, then this is not equivalent
57847 to this policy being specified for the single range, A..C.
57848
57849 34/2
57850 19 The above rules implement the preemption-level protocol (also
57851 called Stack Resource Policy protocol) for resource sharing under
57852 EDF dispatching. The preemption-level for a task is denoted by its
57853 base priority. The definition of a ceiling preemption-level for a
57854 protected object follows the existing rules for ceiling locking.
57855
57856 \1f
57857 File: arm2012.info, Node: D.3, Next: D.4, Prev: D.2, Up: Annex D
57858
57859 D.3 Priority Ceiling Locking
57860 ============================
57861
57862 1/3
57863 This subclause specifies the interactions between priority task
57864 scheduling and protected object ceilings. This interaction is based on
57865 the concept of the ceiling priority of a protected object.
57866
57867 _Syntax_
57868
57869 2
57870 The form of a pragma Locking_Policy is as follows:
57871
57872 3
57873 pragma Locking_Policy(policy_identifier);
57874
57875 _Legality Rules_
57876
57877 4
57878 The policy_identifier shall either be Ceiling_Locking or an
57879 implementation-defined identifier.
57880
57881 _Post-Compilation Rules_
57882
57883 5
57884 A Locking_Policy pragma is a configuration pragma.
57885
57886 _Dynamic Semantics_
57887
57888 6/2
57889 A locking policy specifies the details of protected object locking. All
57890 protected objects have a priority. The locking policy specifies the
57891 meaning of the priority of a protected object, and the relationships
57892 between these priorities and task priorities. In addition, the policy
57893 specifies the state of a task when it executes a protected action, and
57894 how its active priority is affected by the locking. The locking policy
57895 is specified by a Locking_Policy pragma. For implementation-defined
57896 locking policies, the meaning of the priority of a protected object is
57897 implementation defined. If no Locking_Policy pragma applies to any of
57898 the program units comprising a partition, the locking policy for that
57899 partition, as well as the meaning of the priority of a protected object,
57900 are implementation defined.
57901
57902 6.1/3
57903 The expression specified for the Priority or Interrupt_Priority aspect
57904 (see *note D.1::) is evaluated as part of the creation of the
57905 corresponding protected object and converted to the subtype
57906 System.Any_Priority or System.Interrupt_Priority, respectively. The
57907 value of the expression is the initial priority of the corresponding
57908 protected object. If no Priority or Interrupt_Priority aspect is
57909 specified for a protected object, the initial priority is specified by
57910 the locking policy.
57911
57912 7
57913 There is one predefined locking policy, Ceiling_Locking; this policy is
57914 defined as follows:
57915
57916 8/3
57917 * Every protected object has a ceiling priority, which is determined
57918 by either a Priority or Interrupt_Priority aspect as defined in
57919 *note D.1::, or by assignment to the Priority attribute as
57920 described in *note D.5.2::. The ceiling priority of a protected
57921 object (or ceiling, for short) is an upper bound on the active
57922 priority a task can have when it calls protected operations of that
57923 protected object.
57924
57925 9/2
57926 * The initial ceiling priority of a protected object is equal to the
57927 initial priority for that object.
57928
57929 10/3
57930 * If an Interrupt_Handler or Attach_Handler aspect (see *note
57931 C.3.1::) is specified for a protected subprogram of a protected
57932 type that does not have the Interrupt_Priority aspect specified,
57933 the initial priority of protected objects of that type is
57934 implementation defined, but in the range of the subtype
57935 System.Interrupt_Priority.
57936
57937 11/3
57938 * If neither aspect Priority nor Interrupt_Priority is specified for
57939 a protected type, and no protected subprogram of the type has
57940 aspect Interrupt_Handler or Attach_Handler specified, then the
57941 initial priority of the corresponding protected object is
57942 System.Priority'Last.
57943
57944 12
57945 * While a task executes a protected action, it inherits the ceiling
57946 priority of the corresponding protected object.
57947
57948 13
57949 * When a task calls a protected operation, a check is made that its
57950 active priority is not higher than the ceiling of the corresponding
57951 protected object; Program_Error is raised if this check fails.
57952
57953 _Bounded (Run-Time) Errors_
57954
57955 13.1/2
57956 Following any change of priority, it is a bounded error for the active
57957 priority of any task with a call queued on an entry of a protected
57958 object to be higher than the ceiling priority of the protected object.
57959 In this case one of the following applies:
57960
57961 13.2/2
57962 * at any time prior to executing the entry body Program_Error is
57963 raised in the calling task;
57964
57965 13.3/2
57966 * when the entry is open the entry body is executed at the ceiling
57967 priority of the protected object;
57968
57969 13.4/2
57970 * when the entry is open the entry body is executed at the ceiling
57971 priority of the protected object and then Program_Error is raised
57972 in the calling task; or
57973
57974 13.5/2
57975 * when the entry is open the entry body is executed at the ceiling
57976 priority of the protected object that was in effect when the entry
57977 call was queued.
57978
57979 _Implementation Permissions_
57980
57981 14
57982 The implementation is allowed to round all ceilings in a certain
57983 subrange of System.Priority or System.Interrupt_Priority up to the top
57984 of that subrange, uniformly.
57985
57986 15/2
57987 Implementations are allowed to define other locking policies, but need
57988 not support more than one locking policy per partition.
57989
57990 16
57991 Since implementations are allowed to place restrictions on code that
57992 runs at an interrupt-level active priority (see *note C.3.1:: and *note
57993 D.2.1::), the implementation may implement a language feature in terms
57994 of a protected object with an implementation-defined ceiling, but the
57995 ceiling shall be no less than Priority'Last.
57996
57997 _Implementation Advice_
57998
57999 17
58000 The implementation should use names that end with "_Locking" for
58001 implementation-defined locking policies.
58002
58003 NOTES
58004
58005 18
58006 20 While a task executes in a protected action, it can be
58007 preempted only by tasks whose active priorities are higher than the
58008 ceiling priority of the protected object.
58009
58010 19
58011 21 If a protected object has a ceiling priority in the range of
58012 Interrupt_Priority, certain interrupts are blocked while protected
58013 actions of that object execute. In the extreme, if the ceiling is
58014 Interrupt_Priority'Last, all blockable interrupts are blocked
58015 during that time.
58016
58017 20
58018 22 The ceiling priority of a protected object has to be in the
58019 Interrupt_Priority range if one of its procedures is to be used as
58020 an interrupt handler (see *note C.3::).
58021
58022 21
58023 23 When specifying the ceiling of a protected object, one should
58024 choose a value that is at least as high as the highest active
58025 priority at which tasks can be executing when they call protected
58026 operations of that object. In determining this value the following
58027 factors, which can affect active priority, should be considered:
58028 the effect of Set_Priority, nested protected operations, entry
58029 calls, task activation, and other implementation-defined factors.
58030
58031 22
58032 24 Attaching a protected procedure whose ceiling is below the
58033 interrupt hardware priority to an interrupt causes the execution of
58034 the program to be erroneous (see *note C.3.1::).
58035
58036 23
58037 25 On a single processor implementation, the ceiling priority
58038 rules guarantee that there is no possibility of deadlock involving
58039 only protected subprograms (excluding the case where a protected
58040 operation calls another protected operation on the same protected
58041 object).
58042
58043 \1f
58044 File: arm2012.info, Node: D.4, Next: D.5, Prev: D.3, Up: Annex D
58045
58046 D.4 Entry Queuing Policies
58047 ==========================
58048
58049 1/3
58050 This subclause specifies a mechanism for a user to choose an entry
58051 queuing policy. It also defines two such policies. Other policies are
58052 implementation defined.
58053
58054 _Syntax_
58055
58056 2
58057 The form of a pragma Queuing_Policy is as follows:
58058
58059 3
58060 pragma Queuing_Policy(policy_identifier);
58061
58062 _Legality Rules_
58063
58064 4
58065 The policy_identifier shall be either FIFO_Queuing, Priority_Queuing or
58066 an implementation-defined identifier.
58067
58068 _Post-Compilation Rules_
58069
58070 5
58071 A Queuing_Policy pragma is a configuration pragma.
58072
58073 _Dynamic Semantics_
58074
58075 6
58076 A queuing policy governs the order in which tasks are queued for entry
58077 service, and the order in which different entry queues are considered
58078 for service. The queuing policy is specified by a Queuing_Policy
58079 pragma.
58080
58081 7/2
58082 Two queuing policies, FIFO_Queuing and Priority_Queuing, are language
58083 defined. If no Queuing_Policy pragma applies to any of the program
58084 units comprising the partition, the queuing policy for that partition is
58085 FIFO_Queuing. The rules for this policy are specified in *note 9.5.3::
58086 and *note 9.7.1::.
58087
58088 8
58089 The Priority_Queuing policy is defined as follows:
58090
58091 9
58092 * The calls to an entry (including a member of an entry family) are
58093 queued in an order consistent with the priorities of the calls.
58094 The priority of an entry call is initialized from the active
58095 priority of the calling task at the time the call is made, but can
58096 change later. Within the same priority, the order is consistent
58097 with the calling (or requeuing, or priority setting) time (that is,
58098 a FIFO order).
58099
58100 10/1
58101 * After a call is first queued, changes to the active priority of a
58102 task do not affect the priority of the call, unless the base
58103 priority of the task is set while the task is blocked on an entry
58104 call.
58105
58106 11
58107 * When the base priority of a task is set (see *note D.5::), if the
58108 task is blocked on an entry call, and the call is queued, the
58109 priority of the call is updated to the new active priority of the
58110 calling task. This causes the call to be removed from and then
58111 reinserted in the queue at the new active priority.
58112
58113 12
58114 * When more than one condition of an entry_barrier of a protected
58115 object becomes True, and more than one of the respective queues is
58116 nonempty, the call with the highest priority is selected. If more
58117 than one such call has the same priority, the call that is queued
58118 on the entry whose declaration is first in textual order in the
58119 protected_definition is selected. For members of the same entry
58120 family, the one with the lower family index is selected.
58121
58122 13
58123 * If the expiration time of two or more open delay_alternatives is
58124 the same and no other accept_alternatives are open, the
58125 sequence_of_statements of the delay_alternative that is first in
58126 textual order in the selective_accept is executed.
58127
58128 14
58129 * When more than one alternative of a selective_accept is open and
58130 has queued calls, an alternative whose queue has the
58131 highest-priority call at its head is selected. If two or more open
58132 alternatives have equal-priority queued calls, then a call on the
58133 entry in the accept_alternative that is first in textual order in
58134 the selective_accept is selected.
58135
58136 _Implementation Permissions_
58137
58138 15/2
58139 Implementations are allowed to define other queuing policies, but need
58140 not support more than one queuing policy per partition.
58141
58142 15.1/2
58143 Implementations are allowed to defer the reordering of entry queues
58144 following a change of base priority of a task blocked on the entry call
58145 if it is not practical to reorder the queue immediately.
58146
58147 _Implementation Advice_
58148
58149 16
58150 The implementation should use names that end with "_Queuing" for
58151 implementation-defined queuing policies.
58152
58153 \1f
58154 File: arm2012.info, Node: D.5, Next: D.6, Prev: D.4, Up: Annex D
58155
58156 D.5 Dynamic Priorities
58157 ======================
58158
58159 1/3
58160 This subclause describes how the priority of an entity can be modified
58161 or queried at run time.
58162
58163 * Menu:
58164
58165 * D.5.1 :: Dynamic Priorities for Tasks
58166 * D.5.2 :: Dynamic Priorities for Protected Objects
58167
58168 \1f
58169 File: arm2012.info, Node: D.5.1, Next: D.5.2, Up: D.5
58170
58171 D.5.1 Dynamic Priorities for Tasks
58172 ----------------------------------
58173
58174 1/3
58175 This subclause describes how the base priority of a task can be modified
58176 or queried at run time.
58177
58178 _Static Semantics_
58179
58180 2
58181 The following language-defined library package exists:
58182
58183 3/2
58184 with System;
58185 with Ada.Task_Identification; -- See *note C.7.1::
58186 package Ada.Dynamic_Priorities is
58187 pragma Preelaborate(Dynamic_Priorities);
58188
58189 4
58190 procedure Set_Priority(Priority : in System.Any_Priority;
58191 T : in Ada.Task_Identification.Task_Id :=
58192 Ada.Task_Identification.Current_Task);
58193
58194 5
58195 function Get_Priority (T : Ada.Task_Identification.Task_Id :=
58196 Ada.Task_Identification.Current_Task)
58197 return System.Any_Priority;
58198
58199 6
58200 end Ada.Dynamic_Priorities;
58201
58202 _Dynamic Semantics_
58203
58204 7
58205 The procedure Set_Priority sets the base priority of the specified task
58206 to the specified Priority value. Set_Priority has no effect if the task
58207 is terminated.
58208
58209 8
58210 The function Get_Priority returns T's current base priority.
58211 Tasking_Error is raised if the task is terminated.
58212
58213 9
58214 Program_Error is raised by Set_Priority and Get_Priority if T is equal
58215 to Null_Task_Id.
58216
58217 10/2
58218 On a system with a single processor, the setting of the base priority of
58219 a task T to the new value occurs immediately at the first point when T
58220 is outside the execution of a protected action.
58221
58222 Paragraph 11 was deleted.
58223
58224 _Erroneous Execution_
58225
58226 12
58227 If any subprogram in this package is called with a parameter T that
58228 specifies a task object that no longer exists, the execution of the
58229 program is erroneous.
58230
58231 _Documentation Requirements_
58232
58233 12.1/2
58234 On a multiprocessor, the implementation shall document any conditions
58235 that cause the completion of the setting of the priority of a task to be
58236 delayed later than what is specified for a single processor.
58237
58238 _Metrics_
58239
58240 13
58241 The implementation shall document the following metric:
58242
58243 14
58244 * The execution time of a call to Set_Priority, for the nonpreempting
58245 case, in processor clock cycles. This is measured for a call that
58246 modifies the priority of a ready task that is not running (which
58247 cannot be the calling one), where the new base priority of the
58248 affected task is lower than the active priority of the calling
58249 task, and the affected task is not on any entry queue and is not
58250 executing a protected operation.
58251
58252 NOTES
58253
58254 15/2
58255 26 Setting a task's base priority affects task dispatching.
58256 First, it can change the task's active priority. Second, under the
58257 FIFO_Within_Priorities policy it always causes the task to move to
58258 the tail of the ready queue corresponding to its active priority,
58259 even if the new base priority is unchanged.
58260
58261 16
58262 27 Under the priority queuing policy, setting a task's base
58263 priority has an effect on a queued entry call if the task is
58264 blocked waiting for the call. That is, setting the base priority
58265 of a task causes the priority of a queued entry call from that task
58266 to be updated and the call to be removed and then reinserted in the
58267 entry queue at the new priority (see *note D.4::), unless the call
58268 originated from the triggering_statement of an asynchronous_select.
58269
58270 17
58271 28 The effect of two or more Set_Priority calls executed in
58272 parallel on the same task is defined as executing these calls in
58273 some serial order.
58274
58275 18/3
58276 29 The rule for when Tasking_Error is raised for Set_Priority or
58277 Get_Priority is different from the rule for when Tasking_Error is
58278 raised on an entry call (see *note 9.5.3::). In particular,
58279 querying the priority of a completed or an abnormal task is
58280 allowed, so long as the task is not yet terminated, and setting the
58281 priority of a task is allowed for any task state (including for
58282 terminated tasks).
58283
58284 19
58285 30 Changing the priorities of a set of tasks can be performed by a
58286 series of calls to Set_Priority for each task separately. For this
58287 to work reliably, it should be done within a protected operation
58288 that has high enough ceiling priority to guarantee that the
58289 operation completes without being preempted by any of the affected
58290 tasks.
58291
58292 \1f
58293 File: arm2012.info, Node: D.5.2, Prev: D.5.1, Up: D.5
58294
58295 D.5.2 Dynamic Priorities for Protected Objects
58296 ----------------------------------------------
58297
58298 1/3
58299 This subclause specifies how the priority of a protected object can be
58300 modified or queried at run time.
58301
58302 _Static Semantics_
58303
58304 2/2
58305 The following attribute is defined for a prefix P that denotes a
58306 protected object:
58307
58308 3/2
58309 P'Priority
58310 Denotes a non-aliased component of the protected object
58311 P. This component is of type System.Any_Priority and its
58312 value is the priority of P. P'Priority denotes a variable
58313 if and only if P denotes a variable. A reference to this
58314 attribute shall appear only within the body of P.
58315
58316 4/2
58317 The initial value of this attribute is the initial value of the priority
58318 of the protected object, and can be changed by an assignment.
58319
58320 _Dynamic Semantics_
58321
58322 5/3
58323 If the locking policy Ceiling_Locking (see *note D.3::) is in effect,
58324 then the ceiling priority of a protected object P is set to the value of
58325 P'Priority at the end of each protected action of P.
58326
58327 6/3
58328 If the locking policy Ceiling_Locking is in effect, then for a protected
58329 object P with either an Attach_Handler or Interrupt_Handler aspect
58330 specified for one of its procedures, a check is made that the value to
58331 be assigned to P'Priority is in the range System.Interrupt_Priority. If
58332 the check fails, Program_Error is raised.
58333
58334 _Metrics_
58335
58336 7/2
58337 The implementation shall document the following metric:
58338
58339 8/2
58340 * The difference in execution time of calls to the following
58341 procedures in protected object P:
58342
58343 9/2
58344 protected P is
58345 procedure Do_Not_Set_Ceiling (Pr : System.Any_Priority);
58346 procedure Set_Ceiling (Pr : System.Any_Priority);
58347 end P;
58348
58349 10/2
58350 protected body P is
58351 procedure Do_Not_Set_Ceiling (Pr : System.Any_Priority) is
58352 begin
58353 null;
58354 end;
58355 procedure Set_Ceiling (Pr : System.Any_Priority) is
58356 begin
58357 P'Priority := Pr;
58358 end;
58359 end P;
58360
58361 NOTES
58362
58363 11/2
58364 31 Since P'Priority is a normal variable, the value following an
58365 assignment to the attribute immediately reflects the new value even
58366 though its impact on the ceiling priority of P is postponed until
58367 completion of the protected action in which it is executed.
58368
58369 \1f
58370 File: arm2012.info, Node: D.6, Next: D.7, Prev: D.5, Up: Annex D
58371
58372 D.6 Preemptive Abort
58373 ====================
58374
58375 1/3
58376 This subclause specifies requirements on the immediacy with which an
58377 aborted construct is completed.
58378
58379 _Dynamic Semantics_
58380
58381 2
58382 On a system with a single processor, an aborted construct is completed
58383 immediately at the first point that is outside the execution of an
58384 abort-deferred operation.
58385
58386 _Documentation Requirements_
58387
58388 3
58389 On a multiprocessor, the implementation shall document any conditions
58390 that cause the completion of an aborted construct to be delayed later
58391 than what is specified for a single processor.
58392
58393 _Metrics_
58394
58395 4
58396 The implementation shall document the following metrics:
58397
58398 5
58399 * The execution time, in processor clock cycles, that it takes for an
58400 abort_statement to cause the completion of the aborted task. This
58401 is measured in a situation where a task T2 preempts task T1 and
58402 aborts T1. T1 does not have any finalization code. T2 shall
58403 verify that T1 has terminated, by means of the Terminated
58404 attribute.
58405
58406 6
58407 * On a multiprocessor, an upper bound in seconds, on the time that
58408 the completion of an aborted task can be delayed beyond the point
58409 that it is required for a single processor.
58410
58411 7/2
58412 * An upper bound on the execution time of an asynchronous_select, in
58413 processor clock cycles. This is measured between a point
58414 immediately before a task T1 executes a protected operation Pr.Set
58415 that makes the condition of an entry_barrier Pr.Wait True, and the
58416 point where task T2 resumes execution immediately after an entry
58417 call to Pr.Wait in an asynchronous_select. T1 preempts T2 while T2
58418 is executing the abortable part, and then blocks itself so that T2
58419 can execute. The execution time of T1 is measured separately, and
58420 subtracted.
58421
58422 8
58423 * An upper bound on the execution time of an asynchronous_select, in
58424 the case that no asynchronous transfer of control takes place.
58425 This is measured between a point immediately before a task executes
58426 the asynchronous_select with a nonnull abortable part, and the
58427 point where the task continues execution immediately after it. The
58428 execution time of the abortable part is subtracted.
58429
58430 _Implementation Advice_
58431
58432 9
58433 Even though the abort_statement is included in the list of potentially
58434 blocking operations (see *note 9.5.1::), it is recommended that this
58435 statement be implemented in a way that never requires the task executing
58436 the abort_statement to block.
58437
58438 10
58439 On a multi-processor, the delay associated with aborting a task on
58440 another processor should be bounded; the implementation should use
58441 periodic polling, if necessary, to achieve this.
58442
58443 NOTES
58444
58445 11
58446 32 Abortion does not change the active or base priority of the
58447 aborted task.
58448
58449 12
58450 33 Abortion cannot be more immediate than is allowed by the rules
58451 for deferral of abortion during finalization and in protected
58452 actions.
58453
58454 \1f
58455 File: arm2012.info, Node: D.7, Next: D.8, Prev: D.6, Up: Annex D
58456
58457 D.7 Tasking Restrictions
58458 ========================
58459
58460 1/3
58461 This subclause defines restrictions that can be used with a pragma
58462 Restrictions (see *note 13.12::) to facilitate the construction of
58463 highly efficient tasking run-time systems.
58464
58465 _Static Semantics_
58466
58467 2
58468 The following restriction_identifiers are language defined:
58469
58470 3/3
58471 No_Task_Hierarchy
58472 No task depends on a master other than the library-level
58473 master.
58474
58475 4/3
58476 No_Nested_Finalization
58477 Objects of a type that needs finalization (see *note
58478 7.6::) are declared only at library level. If an access
58479 type does not have library-level accessibility, then
58480 there are no allocators of the type where the type
58481 determined by the subtype_mark of the subtype_indication
58482 or qualified_expression needs finalization.
58483
58484 5/3
58485 No_Abort_Statements
58486 There are no abort_statements, and there is no use of a
58487 name denoting Task_Identification.Abort_Task.
58488
58489 6
58490 No_Terminate_Alternatives
58491 There are no selective_accepts with
58492 terminate_alternatives.
58493
58494 7
58495 No_Task_Allocators
58496 There are no allocators for task types or types
58497 containing task subcomponents.
58498
58499 7.1/3
58500 In the case of an initialized allocator of an access type
58501 whose designated type is class-wide and limited, a check
58502 is made that the specific type of the allocated object
58503 has no task subcomponents. Program_Error is raised if
58504 this check fails.
58505
58506 8
58507 No_Implicit_Heap_Allocations
58508 There are no operations that implicitly require heap
58509 storage allocation to be performed by the implementation.
58510 The operations that implicitly require heap storage
58511 allocation are implementation defined.
58512
58513 9/2
58514 No_Dynamic_Priorities
58515 There are no semantic dependences on the package
58516 Dynamic_Priorities, and no occurrences of the attribute
58517 Priority.
58518
58519 10/3
58520 No_Dynamic_Attachment
58521 There is no use of a name denoting any of the operations
58522 defined in package Interrupts (Is_Reserved, Is_Attached,
58523 Current_Handler, Attach_Handler, Exchange_Handler,
58524 Detach_Handler, and Reference).
58525
58526 10.1/3
58527 No_Local_Protected_Objects
58528 Protected objects are declared only at library level.
58529
58530 10.2/3
58531 No_Local_Timing_Events
58532 Timing_Events are declared only at library level.
58533
58534 10.3/2
58535 No_Protected_Type_Allocators
58536 There are no allocators for protected types or types
58537 containing protected type subcomponents.
58538
58539 10.4/3
58540 In the case of an initialized allocator of an access type
58541 whose designated type is class-wide and limited, a check
58542 is made that the specific type of the allocated object
58543 has no protected subcomponents. Program_Error is raised
58544 if this check fails.
58545
58546 10.5/3
58547 No_Relative_Delay
58548 There are no delay_relative_statements, and there is no
58549 use of a name that denotes the Timing_Events.Set_Handler
58550 subprogram that has a Time_Span parameter.
58551
58552 10.6/3
58553 No_Requeue_Statements
58554 There are no requeue_statements.
58555
58556 10.7/3
58557 No_Select_Statements
58558 There are no select_statements.
58559
58560 10.8/3
58561 No_Specific_Termination_Handlers
58562 There is no use of a name denoting the
58563 Set_Specific_Handler and Specific_Handler subprograms in
58564 Task_Termination.
58565
58566 10.9/3
58567 Simple_Barriers
58568 The Boolean expression in each entry barrier is either a
58569 static expression or a name that statically denotes a
58570 component of the enclosing protected object.
58571
58572 11
58573 The following restriction_parameter_identifiers are language defined:
58574
58575 12
58576 Max_Select_Alternatives
58577 Specifies the maximum number of alternatives in a
58578 selective_accept.
58579
58580 13
58581 Max_Task_Entries
58582 Specifies the maximum number of entries per task. The
58583 bounds of every entry family of a task unit shall be
58584 static, or shall be defined by a discriminant of a
58585 subtype whose corresponding bound is static. A value of
58586 zero indicates that no rendezvous are possible.
58587
58588 14
58589 Max_Protected_Entries
58590 Specifies the maximum number of entries per protected
58591 type. The bounds of every entry family of a protected
58592 unit shall be static, or shall be defined by a
58593 discriminant of a subtype whose corresponding bound is
58594 static.
58595
58596 _Dynamic Semantics_
58597
58598 15/2
58599 The following restriction_identifier is language defined:
58600
58601 15.1/2
58602 No_Task_Termination
58603 All tasks are nonterminating. It is
58604 implementation-defined what happens if a task attempts to
58605 terminate. If there is a fall-back handler (see C.7.3)
58606 set for the partition it should be called when the first
58607 task attempts to terminate.
58608
58609 16
58610 The following restriction_parameter_identifiers are language defined:
58611
58612 17/1
58613 Max_Storage_At_Blocking
58614 Specifies the maximum portion (in storage elements) of a
58615 task's Storage_Size that can be retained by a blocked
58616 task. If an implementation chooses to detect a violation
58617 of this restriction, Storage_Error should be raised;
58618 otherwise, the behavior is implementation defined.
58619
58620 18/1
58621 Max_Asynchronous_Select_Nesting
58622 Specifies the maximum dynamic nesting level of
58623 asynchronous_selects. A value of zero prevents the use
58624 of any asynchronous_select (*note 9.7.4: S0241.) and, if
58625 a program contains an asynchronous_select (*note 9.7.4:
58626 S0241.), it is illegal. If an implementation chooses to
58627 detect a violation of this restriction for values other
58628 than zero, Storage_Error should be raised; otherwise, the
58629 behavior is implementation defined.
58630
58631 19/1
58632 Max_Tasks
58633 Specifies the maximum number of task creations that may
58634 be executed over the lifetime of a partition, not
58635 counting the creation of the environment task. A value
58636 of zero prevents any task creation and, if a program
58637 contains a task creation, it is illegal. If an
58638 implementation chooses to detect a violation of this
58639 restriction, Storage_Error should be raised; otherwise,
58640 the behavior is implementation defined.
58641
58642 19.1/2
58643 Max_Entry_Queue_Length
58644 Max_Entry_Queue_Length defines the maximum number of
58645 calls that are queued on an entry. Violation of this
58646 restriction results in the raising of Program_Error at
58647 the point of the call or requeue.
58648
58649 19.2/3
58650 No_Standard_Allocators_After_Elaboration
58651 Specifies that an allocator using a standard storage pool
58652 (see *note 13.11::) shall not occur within a
58653 parameterless library subprogram, nor within the
58654 handled_sequence_of_statements of a task body. For the
58655 purposes of this rule, an allocator of a type derived
58656 from a formal access type does not use a standard storage
58657 pool.
58658
58659 19.3/3
58660 At run time, Storage_Error is raised if an allocator
58661 using a standard storage pool is evaluated after the
58662 elaboration of the library_items of the partition has
58663 completed.
58664
58665 20
58666 It is implementation defined whether the use of pragma Restrictions
58667 results in a reduction in executable program size, storage requirements,
58668 or execution time. If possible, the implementation should provide
58669 quantitative descriptions of such effects for each restriction.
58670
58671 _Implementation Advice_
58672
58673 21
58674 When feasible, the implementation should take advantage of the specified
58675 restrictions to produce a more efficient implementation.
58676
58677 NOTES
58678
58679 22
58680 34 The above Storage_Checks can be suppressed with pragma
58681 Suppress.
58682
58683 \1f
58684 File: arm2012.info, Node: D.8, Next: D.9, Prev: D.7, Up: Annex D
58685
58686 D.8 Monotonic Time
58687 ==================
58688
58689 1/3
58690 This subclause specifies a high-resolution, monotonic clock package.
58691
58692 _Static Semantics_
58693
58694 2
58695 The following language-defined library package exists:
58696
58697 3
58698 package Ada.Real_Time is
58699
58700 4
58701 type Time is private;
58702 Time_First : constant Time;
58703 Time_Last : constant Time;
58704 Time_Unit : constant := implementation-defined-real-number;
58705
58706 5
58707 type Time_Span is private;
58708 Time_Span_First : constant Time_Span;
58709 Time_Span_Last : constant Time_Span;
58710 Time_Span_Zero : constant Time_Span;
58711 Time_Span_Unit : constant Time_Span;
58712
58713 6
58714 Tick : constant Time_Span;
58715 function Clock return Time;
58716
58717 7
58718 function "+" (Left : Time; Right : Time_Span) return Time;
58719 function "+" (Left : Time_Span; Right : Time) return Time;
58720 function "-" (Left : Time; Right : Time_Span) return Time;
58721 function "-" (Left : Time; Right : Time) return Time_Span;
58722
58723 8
58724 function "<" (Left, Right : Time) return Boolean;
58725 function "<="(Left, Right : Time) return Boolean;
58726 function ">" (Left, Right : Time) return Boolean;
58727 function ">="(Left, Right : Time) return Boolean;
58728
58729 9
58730 function "+" (Left, Right : Time_Span) return Time_Span;
58731 function "-" (Left, Right : Time_Span) return Time_Span;
58732 function "-" (Right : Time_Span) return Time_Span;
58733 function "*" (Left : Time_Span; Right : Integer) return Time_Span;
58734 function "*" (Left : Integer; Right : Time_Span) return Time_Span;
58735 function "/" (Left, Right : Time_Span) return Integer;
58736 function "/" (Left : Time_Span; Right : Integer) return Time_Span;
58737
58738 10
58739 function "abs"(Right : Time_Span) return Time_Span;
58740
58741 11/1
58742 This paragraph was deleted.
58743
58744 12
58745 function "<" (Left, Right : Time_Span) return Boolean;
58746 function "<="(Left, Right : Time_Span) return Boolean;
58747 function ">" (Left, Right : Time_Span) return Boolean;
58748 function ">="(Left, Right : Time_Span) return Boolean;
58749
58750 13
58751 function To_Duration (TS : Time_Span) return Duration;
58752 function To_Time_Span (D : Duration) return Time_Span;
58753
58754 14/2
58755 function Nanoseconds (NS : Integer) return Time_Span;
58756 function Microseconds (US : Integer) return Time_Span;
58757 function Milliseconds (MS : Integer) return Time_Span;
58758 function Seconds (S : Integer) return Time_Span;
58759 function Minutes (M : Integer) return Time_Span;
58760
58761 15
58762 type Seconds_Count is range implementation-defined;
58763
58764 16
58765 procedure Split(T : in Time; SC : out Seconds_Count; TS : out Time_Span);
58766 function Time_Of(SC : Seconds_Count; TS : Time_Span) return Time;
58767
58768 17
58769 private
58770 ... -- not specified by the language
58771 end Ada.Real_Time;
58772
58773 18
58774 In this Annex, real time is defined to be the physical time as observed
58775 in the external environment. The type Time is a time type as defined by
58776 *note 9.6::; values of this type may be used in a delay_until_statement.
58777 Values of this type represent segments of an ideal time line. The set
58778 of values of the type Time corresponds one-to-one with an
58779 implementation-defined range of mathematical integers.
58780
58781 19
58782 The Time value I represents the half-open real time interval that starts
58783 with E+I*Time_Unit and is limited by E+(I+1)*Time_Unit, where Time_Unit
58784 is an implementation-defined real number and E is an unspecified origin
58785 point, the epoch, that is the same for all values of the type Time. It
58786 is not specified by the language whether the time values are
58787 synchronized with any standard time reference. For example, E can
58788 correspond to the time of system initialization or it can correspond to
58789 the epoch of some time standard.
58790
58791 20
58792 Values of the type Time_Span represent length of real time duration.
58793 The set of values of this type corresponds one-to-one with an
58794 implementation-defined range of mathematical integers. The Time_Span
58795 value corresponding to the integer I represents the real-time duration
58796 I*Time_Unit.
58797
58798 21
58799 Time_First and Time_Last are the smallest and largest values of the Time
58800 type, respectively. Similarly, Time_Span_First and Time_Span_Last are
58801 the smallest and largest values of the Time_Span type, respectively.
58802
58803 22
58804 A value of type Seconds_Count represents an elapsed time, measured in
58805 seconds, since the epoch.
58806
58807 _Dynamic Semantics_
58808
58809 23
58810 Time_Unit is the smallest amount of real time representable by the Time
58811 type; it is expressed in seconds. Time_Span_Unit is the difference
58812 between two successive values of the Time type. It is also the smallest
58813 positive value of type Time_Span. Time_Unit and Time_Span_Unit
58814 represent the same real time duration. A clock tick is a real time
58815 interval during which the clock value (as observed by calling the Clock
58816 function) remains constant. Tick is the average length of such
58817 intervals.
58818
58819 24/2
58820 The function To_Duration converts the value TS to a value of type
58821 Duration. Similarly, the function To_Time_Span converts the value D to
58822 a value of type Time_Span. For To_Duration, the result is rounded to
58823 the nearest value of type Duration (away from zero if exactly halfway
58824 between two values). If the result is outside the range of Duration,
58825 Constraint_Error is raised. For To_Time_Span, the value of D is first
58826 rounded to the nearest integral multiple of Time_Unit, away from zero if
58827 exactly halfway between two multiples. If the rounded value is outside
58828 the range of Time_Span, Constraint_Error is raised. Otherwise, the
58829 value is converted to the type Time_Span.
58830
58831 25
58832 To_Duration(Time_Span_Zero) returns 0.0, and To_Time_Span(0.0) returns
58833 Time_Span_Zero.
58834
58835 26/2
58836 The functions Nanoseconds, Microseconds, Milliseconds, Seconds, and
58837 Minutes convert the input parameter to a value of the type Time_Span.
58838 NS, US, MS, S, and M are interpreted as a number of nanoseconds,
58839 microseconds, milliseconds, seconds, and minutes respectively. The
58840 input parameter is first converted to seconds and rounded to the nearest
58841 integral multiple of Time_Unit, away from zero if exactly halfway
58842 between two multiples. If the rounded value is outside the range of
58843 Time_Span, Constraint_Error is raised. Otherwise, the rounded value is
58844 converted to the type Time_Span.
58845
58846 27
58847 The effects of the operators on Time and Time_Span are as for the
58848 operators defined for integer types.
58849
58850 28
58851 The function Clock returns the amount of time since the epoch.
58852
58853 29
58854 The effects of the Split and Time_Of operations are defined as follows,
58855 treating values of type Time, Time_Span, and Seconds_Count as
58856 mathematical integers. The effect of Split(T,SC,TS) is to set SC and TS
58857 to values such that T*Time_Unit = SC*1.0 + TS*Time_Unit, and 0.0 <=
58858 TS*Time_Unit < 1.0. The value returned by Time_Of(SC,TS) is the value T
58859 such that T*Time_Unit = SC*1.0 + TS*Time_Unit.
58860
58861 _Implementation Requirements_
58862
58863 30
58864 The range of Time values shall be sufficient to uniquely represent the
58865 range of real times from program start-up to 50 years later. Tick shall
58866 be no greater than 1 millisecond. Time_Unit shall be less than or equal
58867 to 20 microseconds.
58868
58869 31
58870 Time_Span_First shall be no greater than -3600 seconds, and
58871 Time_Span_Last shall be no less than 3600 seconds.
58872
58873 32
58874 A clock jump is the difference between two successive distinct values of
58875 the clock (as observed by calling the Clock function). There shall be
58876 no backward clock jumps.
58877
58878 _Documentation Requirements_
58879
58880 33
58881 The implementation shall document the values of Time_First, Time_Last,
58882 Time_Span_First, Time_Span_Last, Time_Span_Unit, and Tick.
58883
58884 34
58885 The implementation shall document the properties of the underlying time
58886 base used for the clock and for type Time, such as the range of values
58887 supported and any relevant aspects of the underlying hardware or
58888 operating system facilities used.
58889
58890 35
58891 The implementation shall document whether or not there is any
58892 synchronization with external time references, and if such
58893 synchronization exists, the sources of synchronization information, the
58894 frequency of synchronization, and the synchronization method applied.
58895
58896 36/3
58897 The implementation shall document any aspects of the external
58898 environment that could interfere with the clock behavior as defined in
58899 this subclause.
58900
58901 _Metrics_
58902
58903 37/3
58904 For the purpose of the metrics defined in this subclause, real time is
58905 defined to be the International Atomic Time (TAI).
58906
58907 38
58908 The implementation shall document the following metrics:
58909
58910 39
58911 * An upper bound on the real-time duration of a clock tick. This is
58912 a value D such that if t1 and t2 are any real times such that t1 <
58913 t2 and Clockt1 = Clockt2 then t2 - t1 <= D.
58914
58915 40
58916 * An upper bound on the size of a clock jump.
58917
58918 41
58919 * An upper bound on the drift rate of Clock with respect to real
58920 time. This is a real number D such that
58921
58922 42
58923 E*(1-D) <= (Clockt+E - Clockt) <= E*(1+D)
58924 provided that: Clockt + E*(1+D) <= Time_Last.
58925
58926 43
58927 * where Clockt is the value of Clock at time t, and E is a real time
58928 duration not less than 24 hours. The value of E used for this
58929 metric shall be reported.
58930
58931 44
58932 * An upper bound on the execution time of a call to the Clock
58933 function, in processor clock cycles.
58934
58935 45
58936 * Upper bounds on the execution times of the operators of the types
58937 Time and Time_Span, in processor clock cycles.
58938
58939 _Implementation Permissions_
58940
58941 46
58942 Implementations targeted to machines with word size smaller than 32 bits
58943 need not support the full range and granularity of the Time and
58944 Time_Span types.
58945
58946 _Implementation Advice_
58947
58948 47
58949 When appropriate, implementations should provide configuration
58950 mechanisms to change the value of Tick.
58951
58952 48
58953 It is recommended that Calendar.Clock and Real_Time.Clock be implemented
58954 as transformations of the same time base.
58955
58956 49
58957 It is recommended that the "best" time base which exists in the
58958 underlying system be available to the application through Clock. "Best"
58959 may mean highest accuracy or largest range.
58960
58961 NOTES
58962
58963 50/3
58964 35 The rules in this subclause do not imply that the
58965 implementation can protect the user from operator or installation
58966 errors which could result in the clock being set incorrectly.
58967
58968 51
58969 36 Time_Unit is the granularity of the Time type. In contrast,
58970 Tick represents the granularity of Real_Time.Clock. There is no
58971 requirement that these be the same.
58972
58973 \1f
58974 File: arm2012.info, Node: D.9, Next: D.10, Prev: D.8, Up: Annex D
58975
58976 D.9 Delay Accuracy
58977 ==================
58978
58979 1/3
58980 This subclause specifies performance requirements for the
58981 delay_statement. The rules apply both to delay_relative_statement
58982 (*note 9.6: S0229.) and to delay_until_statement (*note 9.6: S0228.).
58983 Similarly, they apply equally to a simple delay_statement (*note 9.6:
58984 S0227.) and to one which appears in a delay_alternative (*note 9.7.1:
58985 S0235.).
58986
58987 _Dynamic Semantics_
58988
58989 2
58990 The effect of the delay_statement for Real_Time.Time is defined in terms
58991 of Real_Time.Clock:
58992
58993 3
58994 * If C1 is a value of Clock read before a task executes a
58995 delay_relative_statement with duration D, and C2 is a value of
58996 Clock read after the task resumes execution following that
58997 delay_statement, then C2 - C1 >= D.
58998
58999 4
59000 * If C is a value of Clock read after a task resumes execution
59001 following a delay_until_statement with Real_Time.Time value T, then
59002 C >= T.
59003
59004 5
59005 A simple delay_statement with a negative or zero value for the
59006 expiration time does not cause the calling task to be blocked; it is
59007 nevertheless a potentially blocking operation (see *note 9.5.1::).
59008
59009 6/3
59010 When a delay_statement appears in a delay_alternative of a
59011 timed_entry_call the selection of the entry call is attempted,
59012 regardless of the specified expiration time. When a delay_statement
59013 appears in a select_alternative, and a call is queued on one of the open
59014 entries, the selection of that entry call proceeds, regardless of the
59015 value of the delay expression.
59016
59017 _Documentation Requirements_
59018
59019 7
59020 The implementation shall document the minimum value of the delay
59021 expression of a delay_relative_statement that causes the task to
59022 actually be blocked.
59023
59024 8
59025 The implementation shall document the minimum difference between the
59026 value of the delay expression of a delay_until_statement and the value
59027 of Real_Time.Clock, that causes the task to actually be blocked.
59028
59029 _Metrics_
59030
59031 9
59032 The implementation shall document the following metrics:
59033
59034 10
59035 * An upper bound on the execution time, in processor clock cycles, of
59036 a delay_relative_statement whose requested value of the delay
59037 expression is less than or equal to zero.
59038
59039 11
59040 * An upper bound on the execution time, in processor clock cycles, of
59041 a delay_until_statement whose requested value of the delay
59042 expression is less than or equal to the value of Real_Time.Clock at
59043 the time of executing the statement. Similarly, for
59044 Calendar.Clock.
59045
59046 12
59047 * An upper bound on the lateness of a delay_relative_statement, for a
59048 positive value of the delay expression, in a situation where the
59049 task has sufficient priority to preempt the processor as soon as it
59050 becomes ready, and does not need to wait for any other execution
59051 resources. The upper bound is expressed as a function of the value
59052 of the delay expression. The lateness is obtained by subtracting
59053 the value of the delay expression from the actual duration. The
59054 actual duration is measured from a point immediately before a task
59055 executes the delay_statement to a point immediately after the task
59056 resumes execution following this statement.
59057
59058 13
59059 * An upper bound on the lateness of a delay_until_statement, in a
59060 situation where the value of the requested expiration time is after
59061 the time the task begins executing the statement, the task has
59062 sufficient priority to preempt the processor as soon as it becomes
59063 ready, and it does not need to wait for any other execution
59064 resources. The upper bound is expressed as a function of the
59065 difference between the requested expiration time and the clock
59066 value at the time the statement begins execution. The lateness of
59067 a delay_until_statement is obtained by subtracting the requested
59068 expiration time from the real time that the task resumes execution
59069 following this statement.
59070
59071 \1f
59072 File: arm2012.info, Node: D.10, Next: D.11, Prev: D.9, Up: Annex D
59073
59074 D.10 Synchronous Task Control
59075 =============================
59076
59077 1/3
59078 This subclause describes a language-defined private semaphore
59079 (suspension object), which can be used for two-stage suspend operations
59080 and as a simple building block for implementing higher-level queues.
59081
59082 _Static Semantics_
59083
59084 2
59085 The following language-defined package exists:
59086
59087 3/2
59088 package Ada.Synchronous_Task_Control is
59089 pragma Preelaborate(Synchronous_Task_Control);
59090
59091 4
59092 type Suspension_Object is limited private;
59093 procedure Set_True(S : in out Suspension_Object);
59094 procedure Set_False(S : in out Suspension_Object);
59095 function Current_State(S : Suspension_Object) return Boolean;
59096 procedure Suspend_Until_True(S : in out Suspension_Object);
59097 private
59098 ... -- not specified by the language
59099 end Ada.Synchronous_Task_Control;
59100
59101 5
59102 The type Suspension_Object is a by-reference type.
59103
59104 5.1/3
59105 The following language-defined package exists:
59106
59107 5.2/3
59108 package Ada.Synchronous_Task_Control.EDF is
59109 procedure Suspend_Until_True_And_Set_Deadline
59110 (S : in out Suspension_Object;
59111 TS : in Ada.Real_Time.Time_Span);
59112 end Ada.Synchronous_Task_Control.EDF;
59113
59114 _Dynamic Semantics_
59115
59116 6/2
59117 An object of the type Suspension_Object has two visible states: True and
59118 False. Upon initialization, its value is set to False.
59119
59120 7/2
59121 The operations Set_True and Set_False are atomic with respect to each
59122 other and with respect to Suspend_Until_True; they set the state to True
59123 and False respectively.
59124
59125 8
59126 Current_State returns the current state of the object.
59127
59128 9/2
59129 The procedure Suspend_Until_True blocks the calling task until the state
59130 of the object S is True; at that point the task becomes ready and the
59131 state of the object becomes False.
59132
59133 10
59134 Program_Error is raised upon calling Suspend_Until_True if another task
59135 is already waiting on that suspension object. Suspend_Until_True is a
59136 potentially blocking operation (see *note 9.5.1::).
59137
59138 10.1/3
59139 The procedure Suspend_Until_True_And_Set_Deadline blocks the calling
59140 task until the state of the object S is True; at that point the task
59141 becomes ready with a deadline of Ada.Real_Time.Clock + TS, and the state
59142 of the object becomes False. Program_Error is raised upon calling
59143 Suspend_Until_True_And_Set_Deadline if another task is already waiting
59144 on that suspension object. Suspend_Until_True_And_Set_Deadline is a
59145 potentially blocking operation.
59146
59147 _Implementation Requirements_
59148
59149 11
59150 The implementation is required to allow the calling of Set_False and
59151 Set_True during any protected action, even one that has its ceiling
59152 priority in the Interrupt_Priority range.
59153
59154 NOTES
59155
59156 12/3
59157 37 More complex schemes, such as setting the deadline relative to
59158 when Set_True is called, can be programmed using a protected
59159 object.
59160
59161 * Menu:
59162
59163 * D.10.1 :: Synchronous Barriers
59164
59165 \1f
59166 File: arm2012.info, Node: D.10.1, Up: D.10
59167
59168 D.10.1 Synchronous Barriers
59169 ---------------------------
59170
59171 1/3
59172 This subclause introduces a language-defined package to synchronously
59173 release a group of tasks after the number of blocked tasks reaches a
59174 specified count value.
59175
59176 _Static Semantics_
59177
59178 2/3
59179 The following language-defined library package exists:
59180
59181 3/3
59182 package Ada.Synchronous_Barriers is
59183 pragma Preelaborate(Synchronous_Barriers);
59184
59185 4/3
59186 subtype Barrier_Limit is Positive range 1 .. implementation-defined;
59187
59188 5/3
59189 type Synchronous_Barrier (Release_Threshold : Barrier_Limit) is limited private;
59190
59191 6/3
59192 procedure Wait_For_Release (The_Barrier : in out Synchronous_Barrier;
59193 Notified : out Boolean);
59194
59195 7/3
59196 private
59197 -- not specified by the language
59198 end Ada.Synchronous_Barriers;
59199
59200 8/3
59201 Type Synchronous_Barrier needs finalization (see *note 7.6::).
59202
59203 _Dynamic Semantics_
59204
59205 9/3
59206 Each call to Wait_For_Release blocks the calling task until the number
59207 of blocked tasks associated with the Synchronous_Barrier object is equal
59208 to Release_Threshold, at which time all blocked tasks are released.
59209 Notified is set to True for one of the released tasks, and set to False
59210 for all other released tasks.
59211
59212 10/3
59213 The mechanism for determining which task sets Notified to True is
59214 implementation defined.
59215
59216 11/3
59217 Once all tasks have been released, a Synchronous_Barrier object may be
59218 reused to block another Release_Threshold number of tasks.
59219
59220 12/3
59221 As the first step of the finalization of a Synchronous_Barrier, each
59222 blocked task is unblocked and Program_Error is raised at the place of
59223 the call to Wait_For_Release.
59224
59225 13/3
59226 It is implementation defined whether an abnormal task which is waiting
59227 on a Synchronous_Barrier object is aborted immediately or aborted when
59228 the tasks waiting on the object are released.
59229
59230 14/3
59231 Wait_For_Release is a potentially blocking operation (see *note
59232 9.5.1::).
59233
59234 _Bounded (Run-Time) Errors_
59235
59236 15/3
59237 It is a bounded error to call Wait_For_Release on a Synchronous_Barrier
59238 object after that object is finalized. If the error is detected,
59239 Program_Error is raised. Otherwise, the call proceeds normally, which
59240 may leave a task blocked forever.
59241
59242 \1f
59243 File: arm2012.info, Node: D.11, Next: D.12, Prev: D.10, Up: Annex D
59244
59245 D.11 Asynchronous Task Control
59246 ==============================
59247
59248 1/3
59249 This subclause introduces a language-defined package to do asynchronous
59250 suspend/resume on tasks. It uses a conceptual held priority value to
59251 represent the task's held state.
59252
59253 _Static Semantics_
59254
59255 2
59256 The following language-defined library package exists:
59257
59258 3/2
59259 with Ada.Task_Identification;
59260 package Ada.Asynchronous_Task_Control is
59261 pragma Preelaborate(Asynchronous_Task_Control);
59262 procedure Hold(T : in Ada.Task_Identification.Task_Id);
59263 procedure Continue(T : in Ada.Task_Identification.Task_Id);
59264 function Is_Held(T : Ada.Task_Identification.Task_Id)
59265 return Boolean;
59266 end Ada.Asynchronous_Task_Control;
59267
59268 _Dynamic Semantics_
59269
59270 4/2
59271 After the Hold operation has been applied to a task, the task becomes
59272 held. For each processor there is a conceptual idle task, which is
59273 always ready. The base priority of the idle task is below
59274 System.Any_Priority'First. The held priority is a constant of the type
59275 Integer whose value is below the base priority of the idle task.
59276
59277 4.1/2
59278 For any priority below System.Any_Priority'First, the task dispatching
59279 policy is FIFO_Within_Priorities.
59280
59281 5/2
59282 The Hold operation sets the state of T to held. For a held task, the
59283 active priority is reevaluated as if the base priority of the task were
59284 the held priority.
59285
59286 6/2
59287 The Continue operation resets the state of T to not-held; its active
59288 priority is then reevaluated as determined by the task dispatching
59289 policy associated with its base priority.
59290
59291 7
59292 The Is_Held function returns True if and only if T is in the held state.
59293
59294 8
59295 As part of these operations, a check is made that the task identified by
59296 T is not terminated. Tasking_Error is raised if the check fails.
59297 Program_Error is raised if the value of T is Null_Task_Id.
59298
59299 _Erroneous Execution_
59300
59301 9
59302 If any operation in this package is called with a parameter T that
59303 specifies a task object that no longer exists, the execution of the
59304 program is erroneous.
59305
59306 _Implementation Permissions_
59307
59308 10
59309 An implementation need not support Asynchronous_Task_Control if it is
59310 infeasible to support it in the target environment.
59311
59312 NOTES
59313
59314 11
59315 38 It is a consequence of the priority rules that held tasks
59316 cannot be dispatched on any processor in a partition (unless they
59317 are inheriting priorities) since their priorities are defined to be
59318 below the priority of any idle task.
59319
59320 12
59321 39 The effect of calling Get_Priority and Set_Priority on a Held
59322 task is the same as on any other task.
59323
59324 13
59325 40 Calling Hold on a held task or Continue on a non-held task has
59326 no effect.
59327
59328 14
59329 41 The rules affecting queuing are derived from the above rules,
59330 in addition to the normal priority rules:
59331
59332 15
59333 * When a held task is on the ready queue, its priority is so low
59334 as to never reach the top of the queue as long as there are
59335 other tasks on that queue.
59336
59337 16
59338 * If a task is executing in a protected action, inside a
59339 rendezvous, or is inheriting priorities from other sources
59340 (e.g. when activated), it continues to execute until it is no
59341 longer executing the corresponding construct.
59342
59343 17
59344 * If a task becomes held while waiting (as a caller) for a
59345 rendezvous to complete, the active priority of the accepting
59346 task is not affected.
59347
59348 18/1
59349 * If a task becomes held while waiting in a selective_accept,
59350 and an entry call is issued to one of the open entries, the
59351 corresponding accept_alternative (*note 9.7.1: S0234.)
59352 executes. When the rendezvous completes, the active priority
59353 of the accepting task is lowered to the held priority (unless
59354 it is still inheriting from other sources), and the task does
59355 not execute until another Continue.
59356
59357 19
59358 * The same holds if the held task is the only task on a
59359 protected entry queue whose barrier becomes open. The
59360 corresponding entry body executes.
59361
59362 \1f
59363 File: arm2012.info, Node: D.12, Next: D.13, Prev: D.11, Up: Annex D
59364
59365 D.12 Other Optimizations and Determinism Rules
59366 ==============================================
59367
59368 1/3
59369 This subclause describes various requirements for improving the response
59370 and determinism in a real-time system.
59371
59372 _Implementation Requirements_
59373
59374 2
59375 If the implementation blocks interrupts (see *note C.3::) not as a
59376 result of direct user action (e.g. an execution of a protected action)
59377 there shall be an upper bound on the duration of this blocking.
59378
59379 3
59380 The implementation shall recognize entry-less protected types. The
59381 overhead of acquiring the execution resource of an object of such a type
59382 (see *note 9.5.1::) shall be minimized. In particular, there should not
59383 be any overhead due to evaluating entry_barrier conditions.
59384
59385 4
59386 Unchecked_Deallocation shall be supported for terminated tasks that are
59387 designated by access types, and shall have the effect of releasing all
59388 the storage associated with the task. This includes any run-time system
59389 or heap storage that has been implicitly allocated for the task by the
59390 implementation.
59391
59392 _Documentation Requirements_
59393
59394 5
59395 The implementation shall document the upper bound on the duration of
59396 interrupt blocking caused by the implementation. If this is different
59397 for different interrupts or interrupt priority levels, it should be
59398 documented for each case.
59399
59400 _Metrics_
59401
59402 6
59403 The implementation shall document the following metric:
59404
59405 7
59406 * The overhead associated with obtaining a mutual-exclusive access to
59407 an entry-less protected object. This shall be measured in the
59408 following way:
59409
59410 8
59411 For a protected object of the form:
59412
59413 9
59414 protected Lock is
59415 procedure Set;
59416 function Read return Boolean;
59417 private
59418 Flag : Boolean := False;
59419 end Lock;
59420
59421 10
59422 protected body Lock is
59423 procedure Set is
59424 begin
59425 Flag := True;
59426 end Set;
59427 function Read return Boolean
59428 Begin
59429 return Flag;
59430 end Read;
59431 end Lock;
59432
59433 11
59434 The execution time, in processor clock cycles, of a call to Set.
59435 This shall be measured between the point just before issuing the
59436 call, and the point just after the call completes. The function
59437 Read shall be called later to verify that Set was indeed called
59438 (and not optimized away). The calling task shall have sufficiently
59439 high priority as to not be preempted during the measurement period.
59440 The protected object shall have sufficiently high ceiling priority
59441 to allow the task to call Set.
59442
59443 12
59444 For a multiprocessor, if supported, the metric shall be reported
59445 for the case where no contention (on the execution resource) exists
59446 from tasks executing on other processors.
59447
59448 \1f
59449 File: arm2012.info, Node: D.13, Next: D.14, Prev: D.12, Up: Annex D
59450
59451 D.13 The Ravenscar Profile
59452 ==========================
59453
59454 1/3
59455 This subclause defines the Ravenscar profile.
59456
59457 Paragraphs 2 and 3 were moved to *note 13.12::, "*note 13.12:: Pragma
59458 Restrictions and Pragma Profile".
59459
59460 _Legality Rules_
59461
59462 4/3
59463 The profile_identifier Ravenscar is a usage profile (see *note 13.12::).
59464 For usage profile Ravenscar, there shall be no
59465 profile_pragma_argument_association (*note 2.8: S0020.)s.
59466
59467 _Static Semantics_
59468
59469 5/3
59470 The usage profile Ravenscar is equivalent to the following set of
59471 pragmas:
59472
59473 6/3
59474 pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
59475 pragma Locking_Policy (Ceiling_Locking);
59476 pragma Detect_Blocking;
59477 pragma Restrictions (
59478 No_Abort_Statements,
59479 No_Dynamic_Attachment,
59480 No_Dynamic_Priorities,
59481 No_Implicit_Heap_Allocations,
59482 No_Local_Protected_Objects,
59483 No_Local_Timing_Events,
59484 No_Protected_Type_Allocators,
59485 No_Relative_Delay,
59486 No_Requeue_Statements,
59487 No_Select_Statements,
59488 No_Specific_Termination_Handlers,
59489 No_Task_Allocators,
59490 No_Task_Hierarchy,
59491 No_Task_Termination,
59492 Simple_Barriers,
59493 Max_Entry_Queue_Length => 1,
59494 Max_Protected_Entries => 1,
59495 Max_Task_Entries => 0,
59496 No_Dependence => Ada.Asynchronous_Task_Control,
59497 No_Dependence => Ada.Calendar,
59498 No_Dependence => Ada.Execution_Time.Group_Budgets,
59499 No_Dependence => Ada.Execution_Time.Timers,
59500 No_Dependence => Ada.Task_Attributes,
59501 No_Dependence => System.Multiprocessors.Dispatching_Domains);
59502
59503 Paragraph 7 was deleted.
59504
59505 _Implementation Requirements_
59506
59507 8/3
59508 A task shall only be on the ready queues of one processor, and the
59509 processor to which a task belongs shall be defined statically. Whenever
59510 a task running on a processor reaches a task dispatching point, it goes
59511 back to the ready queues of the same processor. A task with a CPU value
59512 of Not_A_Specific_CPU will execute on an implementation defined
59513 processor. A task without a CPU aspect will activate and execute on the
59514 same processor as its activating task.
59515
59516 _Implementation Advice_
59517
59518 9/3
59519 On a multiprocessor system, an implementation should support a fully
59520 partitioned approach. Each processor should have separate and disjoint
59521 ready queues.
59522
59523 NOTES
59524
59525 10/3
59526 42 The effect of the Max_Entry_Queue_Length => 1 restriction
59527 applies only to protected entry queues due to the accompanying
59528 restriction of Max_Task_Entries => 0.
59529
59530 \1f
59531 File: arm2012.info, Node: D.14, Next: D.15, Prev: D.13, Up: Annex D
59532
59533 D.14 Execution Time
59534 ===================
59535
59536 1/3
59537 This subclause describes a language-defined package to measure execution
59538 time.
59539
59540 _Static Semantics_
59541
59542 2/2
59543 The following language-defined library package exists:
59544
59545 3/2
59546 with Ada.Task_Identification;
59547 with Ada.Real_Time; use Ada.Real_Time;
59548 package Ada.Execution_Time is
59549
59550 4/2
59551 type CPU_Time is private;
59552 CPU_Time_First : constant CPU_Time;
59553 CPU_Time_Last : constant CPU_Time;
59554 CPU_Time_Unit : constant := implementation-defined-real-number;
59555 CPU_Tick : constant Time_Span;
59556
59557 5/2
59558 function Clock
59559 (T : Ada.Task_Identification.Task_Id
59560 := Ada.Task_Identification.Current_Task)
59561 return CPU_Time;
59562
59563 6/2
59564 function "+" (Left : CPU_Time; Right : Time_Span) return CPU_Time;
59565 function "+" (Left : Time_Span; Right : CPU_Time) return CPU_Time;
59566 function "-" (Left : CPU_Time; Right : Time_Span) return CPU_Time;
59567 function "-" (Left : CPU_Time; Right : CPU_Time) return Time_Span;
59568
59569 7/2
59570 function "<" (Left, Right : CPU_Time) return Boolean;
59571 function "<=" (Left, Right : CPU_Time) return Boolean;
59572 function ">" (Left, Right : CPU_Time) return Boolean;
59573 function ">=" (Left, Right : CPU_Time) return Boolean;
59574
59575 8/2
59576 procedure Split
59577 (T : in CPU_Time; SC : out Seconds_Count; TS : out Time_Span);
59578
59579 9/2
59580 function Time_Of (SC : Seconds_Count;
59581 TS : Time_Span := Time_Span_Zero) return CPU_Time;
59582
59583 9.1/3
59584 Interrupt_Clocks_Supported : constant Boolean := implementation-defined;
59585
59586 9.2/3
59587 Separate_Interrupt_Clocks_Supported : constant Boolean :=
59588 implementation-defined;
59589
59590 9.3/3
59591 function Clock_For_Interrupts return CPU_Time;
59592
59593 10/2
59594 private
59595 ... -- not specified by the language
59596 end Ada.Execution_Time;
59597
59598 11/3
59599 The execution time or CPU time of a given task is defined as the time
59600 spent by the system executing that task, including the time spent
59601 executing run-time or system services on its behalf. The mechanism used
59602 to measure execution time is implementation defined. The Boolean
59603 constant Interrupt_Clocks_Supported is set to True if the implementation
59604 separately accounts for the execution time of interrupt handlers. If it
59605 is set to False it is implementation defined which task, if any, is
59606 charged the execution time that is consumed by interrupt handlers. The
59607 Boolean constant Separate_Interrupt_Clocks_Supported is set to True if
59608 the implementation separately accounts for the execution time of
59609 individual interrupt handlers (see *note D.14.3::).
59610
59611 12/2
59612 The type CPU_Time represents the execution time of a task. The set of
59613 values of this type corresponds one-to-one with an
59614 implementation-defined range of mathematical integers.
59615
59616 13/2
59617 The CPU_Time value I represents the half-open execution-time interval
59618 that starts with I*CPU_Time_Unit and is limited by (I+1)*CPU_Time_Unit,
59619 where CPU_Time_Unit is an implementation-defined real number. For each
59620 task, the execution time value is set to zero at the creation of the
59621 task.
59622
59623 14/2
59624 CPU_Time_First and CPU_Time_Last are the smallest and largest values of
59625 the CPU_Time type, respectively.
59626
59627 14.1/3
59628 The execution time value for the function Clock_For_Interrupts is
59629 initialized to zero.
59630
59631 _Dynamic Semantics_
59632
59633 15/2
59634 CPU_Time_Unit is the smallest amount of execution time representable by
59635 the CPU_Time type; it is expressed in seconds. A CPU clock tick is an
59636 execution time interval during which the clock value (as observed by
59637 calling the Clock function) remains constant. CPU_Tick is the average
59638 length of such intervals.
59639
59640 16/2
59641 The effects of the operators on CPU_Time and Time_Span are as for the
59642 operators defined for integer types.
59643
59644 17/2
59645 The function Clock returns the current execution time of the task
59646 identified by T; Tasking_Error is raised if that task has terminated;
59647 Program_Error is raised if the value of T is
59648 Task_Identification.Null_Task_Id.
59649
59650 18/2
59651 The effects of the Split and Time_Of operations are defined as follows,
59652 treating values of type CPU_Time, Time_Span, and Seconds_Count as
59653 mathematical integers. The effect of Split (T, SC, TS) is to set SC and
59654 TS to values such that T*CPU_Time_Unit = SC*1.0 + TS*CPU_Time_Unit, and
59655 0.0 <= TS*CPU_Time_Unit < 1.0. The value returned by Time_Of(SC,TS) is
59656 the execution-time value T such that T*CPU_Time_Unit=SC*1.0 +
59657 TS*CPU_Time_Unit.
59658
59659 18.1/3
59660 The function Clock_For_Interrupts returns the total cumulative time
59661 spent executing within all interrupt handlers. This time is not
59662 allocated to any task execution time clock. If
59663 Interrupt_Clocks_Supported is set to False the function raises
59664 Program_Error.
59665
59666 _Erroneous Execution_
59667
59668 19/2
59669 For a call of Clock, if the task identified by T no longer exists, the
59670 execution of the program is erroneous.
59671
59672 _Implementation Requirements_
59673
59674 20/2
59675 The range of CPU_Time values shall be sufficient to uniquely represent
59676 the range of execution times from the task start-up to 50 years of
59677 execution time later. CPU_Tick shall be no greater than 1 millisecond.
59678
59679 _Documentation Requirements_
59680
59681 21/2
59682 The implementation shall document the values of CPU_Time_First,
59683 CPU_Time_Last, CPU_Time_Unit, and CPU_Tick.
59684
59685 22/2
59686 The implementation shall document the properties of the underlying
59687 mechanism used to measure execution times, such as the range of values
59688 supported and any relevant aspects of the underlying hardware or
59689 operating system facilities used.
59690
59691 _Metrics_
59692
59693 23/2
59694 The implementation shall document the following metrics:
59695
59696 24/2
59697 * An upper bound on the execution-time duration of a clock tick.
59698 This is a value D such that if t1 and t2 are any execution times of
59699 a given task such that t1 < t2 and Clockt1 = Clockt2 then t2 - t1
59700 <= D.
59701
59702 25/2
59703 * An upper bound on the size of a clock jump. A clock jump is the
59704 difference between two successive distinct values of an
59705 execution-time clock (as observed by calling the Clock function
59706 with the same Task_Id).
59707
59708 26/2
59709 * An upper bound on the execution time of a call to the Clock
59710 function, in processor clock cycles.
59711
59712 27/2
59713 * Upper bounds on the execution times of the operators of the type
59714 CPU_Time, in processor clock cycles.
59715
59716 _Implementation Permissions_
59717
59718 28/2
59719 Implementations targeted to machines with word size smaller than 32 bits
59720 need not support the full range and granularity of the CPU_Time type.
59721
59722 _Implementation Advice_
59723
59724 29/2
59725 When appropriate, implementations should provide configuration
59726 mechanisms to change the value of CPU_Tick.
59727
59728 * Menu:
59729
59730 * D.14.1 :: Execution Time Timers
59731 * D.14.2 :: Group Execution Time Budgets
59732 * D.14.3 :: Execution Time of Interrupt Handlers
59733
59734 \1f
59735 File: arm2012.info, Node: D.14.1, Next: D.14.2, Up: D.14
59736
59737 D.14.1 Execution Time Timers
59738 ----------------------------
59739
59740 1/3
59741 This subclause describes a language-defined package that provides a
59742 facility for calling a handler when a task has used a defined amount of
59743 CPU time.
59744
59745 _Static Semantics_
59746
59747 2/2
59748 The following language-defined library package exists:
59749
59750 3/2
59751 with System;
59752 package Ada.Execution_Time.Timers is
59753
59754 4/2
59755 type Timer (T : not null access constant
59756 Ada.Task_Identification.Task_Id) is
59757 tagged limited private;
59758
59759 5/2
59760 type Timer_Handler is
59761 access protected procedure (TM : in out Timer);
59762
59763 6/2
59764 Min_Handler_Ceiling : constant System.Any_Priority :=
59765 implementation-defined;
59766
59767 7/2
59768 procedure Set_Handler (TM : in out Timer;
59769 In_Time : in Time_Span;
59770 Handler : in Timer_Handler);
59771 procedure Set_Handler (TM : in out Timer;
59772 At_Time : in CPU_Time;
59773 Handler : in Timer_Handler);
59774 function Current_Handler (TM : Timer) return Timer_Handler;
59775 procedure Cancel_Handler (TM : in out Timer;
59776 Cancelled : out Boolean);
59777
59778 8/2
59779 function Time_Remaining (TM : Timer) return Time_Span;
59780
59781 9/2
59782 Timer_Resource_Error : exception;
59783
59784 10/2
59785 private
59786 ... -- not specified by the language
59787 end Ada.Execution_Time.Timers;
59788
59789 11/2
59790 The type Timer represents an execution-time event for a single task and
59791 is capable of detecting execution-time overruns. The access
59792 discriminant T identifies the task concerned. The type Timer needs
59793 finalization (see *note 7.6::).
59794
59795 12/2
59796 An object of type Timer is said to be set if it is associated with a
59797 nonnull value of type Timer_Handler and cleared otherwise. All Timer
59798 objects are initially cleared.
59799
59800 13/2
59801 The type Timer_Handler identifies a protected procedure to be executed
59802 by the implementation when the timer expires. Such a protected
59803 procedure is called a handler.
59804
59805 _Dynamic Semantics_
59806
59807 14/2
59808 When a Timer object is created, or upon the first call of a Set_Handler
59809 procedure with the timer as parameter, the resources required to operate
59810 an execution-time timer based on the associated execution-time clock are
59811 allocated and initialized. If this operation would exceed the available
59812 resources, Timer_Resource_Error is raised.
59813
59814 15/3
59815 The procedures Set_Handler associate the handler Handler with the timer
59816 TM: if Handler is null, the timer is cleared; otherwise, it is set. The
59817 first procedure Set_Handler loads the timer TM with an interval
59818 specified by the Time_Span parameter. In this mode, the timer TM
59819 expires when the execution time of the task identified by TM.T.all has
59820 increased by In_Time; if In_Time is less than or equal to zero, the
59821 timer expires immediately. The second procedure Set_Handler loads the
59822 timer TM with the absolute value specified by At_Time. In this mode,
59823 the timer TM expires when the execution time of the task identified by
59824 TM.T.all reaches At_Time; if the value of At_Time has already been
59825 reached when Set_Handler is called, the timer expires immediately.
59826
59827 16/2
59828 A call of a procedure Set_Handler for a timer that is already set
59829 replaces the handler and the (absolute or relative) execution time; if
59830 Handler is not null, the timer remains set.
59831
59832 17/2
59833 When a timer expires, the associated handler is executed, passing the
59834 timer as parameter. The initial action of the execution of the handler
59835 is to clear the event.
59836
59837 18/3
59838 The function Current_Handler returns the handler associated with the
59839 timer TM if that timer is set; otherwise, it returns null.
59840
59841 19/3
59842 The procedure Cancel_Handler clears the timer if it is set. Cancelled
59843 is assigned True if the timer was set prior to it being cleared;
59844 otherwise, it is assigned False.
59845
59846 20/3
59847 The function Time_Remaining returns the execution time interval that
59848 remains until the timer TM would expire, if that timer is set;
59849 otherwise, it returns Time_Span_Zero.
59850
59851 21/2
59852 The constant Min_Handler_Ceiling is the minimum ceiling priority
59853 required for a protected object with a handler to ensure that no ceiling
59854 violation will occur when that handler is invoked.
59855
59856 22/2
59857 As part of the finalization of an object of type Timer, the timer is
59858 cleared.
59859
59860 23/2
59861 For all the subprograms defined in this package, Tasking_Error is raised
59862 if the task identified by TM.T.all has terminated, and Program_Error is
59863 raised if the value of TM.T.all is Task_Identification.Null_Task_Id.
59864
59865 24/2
59866 An exception propagated from a handler invoked as part of the expiration
59867 of a timer has no effect.
59868
59869 _Erroneous Execution_
59870
59871 25/2
59872 For a call of any of the subprograms defined in this package, if the
59873 task identified by TM.T.all no longer exists, the execution of the
59874 program is erroneous.
59875
59876 _Implementation Requirements_
59877
59878 26/2
59879 For a given Timer object, the implementation shall perform the
59880 operations declared in this package atomically with respect to any of
59881 these operations on the same Timer object. The replacement of a handler
59882 by a call of Set_Handler shall be performed atomically with respect to
59883 the execution of the handler.
59884
59885 27/2
59886 When an object of type Timer is finalized, the system resources used by
59887 the timer shall be deallocated.
59888
59889 _Implementation Permissions_
59890
59891 28/3
59892 Implementations may limit the number of timers that can be defined for
59893 each task. If this limit is exceeded, then Timer_Resource_Error is
59894 raised.
59895
59896 NOTES
59897
59898 29/2
59899 43 A Timer_Handler can be associated with several Timer objects.
59900
59901 \1f
59902 File: arm2012.info, Node: D.14.2, Next: D.14.3, Prev: D.14.1, Up: D.14
59903
59904 D.14.2 Group Execution Time Budgets
59905 -----------------------------------
59906
59907 1/3
59908 This subclause describes a language-defined package to assign execution
59909 time budgets to groups of tasks.
59910
59911 _Static Semantics_
59912
59913 2/2
59914 The following language-defined library package exists:
59915
59916 3/3
59917 with System;
59918 with System.Multiprocessors;
59919 package Ada.Execution_Time.Group_Budgets is
59920
59921 4/3
59922 type Group_Budget(CPU : System.Multiprocessors.CPU :=
59923 System.Multiprocessors.CPU'First)
59924 is tagged limited private;
59925
59926 5/2
59927 type Group_Budget_Handler is access
59928 protected procedure (GB : in out Group_Budget);
59929
59930 6/2
59931 type Task_Array is array (Positive range <>) of
59932 Ada.Task_Identification.Task_Id;
59933
59934 7/2
59935 Min_Handler_Ceiling : constant System.Any_Priority :=
59936 implementation-defined;
59937
59938 8/2
59939 procedure Add_Task (GB : in out Group_Budget;
59940 T : in Ada.Task_Identification.Task_Id);
59941 procedure Remove_Task (GB: in out Group_Budget;
59942 T : in Ada.Task_Identification.Task_Id);
59943 function Is_Member (GB : Group_Budget;
59944 T : Ada.Task_Identification.Task_Id) return Boolean;
59945 function Is_A_Group_Member
59946 (T : Ada.Task_Identification.Task_Id) return Boolean;
59947 function Members (GB : Group_Budget) return Task_Array;
59948
59949 9/2
59950 procedure Replenish (GB : in out Group_Budget; To : in Time_Span);
59951 procedure Add (GB : in out Group_Budget; Interval : in Time_Span);
59952 function Budget_Has_Expired (GB : Group_Budget) return Boolean;
59953 function Budget_Remaining (GB : Group_Budget) return Time_Span;
59954
59955 10/2
59956 procedure Set_Handler (GB : in out Group_Budget;
59957 Handler : in Group_Budget_Handler);
59958 function Current_Handler (GB : Group_Budget)
59959 return Group_Budget_Handler;
59960 procedure Cancel_Handler (GB : in out Group_Budget;
59961 Cancelled : out Boolean);
59962
59963 11/2
59964 Group_Budget_Error : exception;
59965
59966 12/2
59967 private
59968 -- not specified by the language
59969 end Ada.Execution_Time.Group_Budgets;
59970
59971 13/2
59972 The type Group_Budget represents an execution time budget to be used by
59973 a group of tasks. The type Group_Budget needs finalization (see *note
59974 7.6::). A task can belong to at most one group. Tasks of any priority
59975 can be added to a group.
59976
59977 14/2
59978 An object of type Group_Budget has an associated nonnegative value of
59979 type Time_Span known as its budget, which is initially Time_Span_Zero.
59980 The type Group_Budget_Handler identifies a protected procedure to be
59981 executed by the implementation when the budget is exhausted, that is,
59982 reaches zero. Such a protected procedure is called a handler.
59983
59984 15/2
59985 An object of type Group_Budget also includes a handler, which is a value
59986 of type Group_Budget_Handler. The handler of the object is said to be
59987 set if it is not null and cleared otherwise. The handler of all
59988 Group_Budget objects is initially cleared.
59989
59990 _Dynamic Semantics_
59991
59992 16/2
59993 The procedure Add_Task adds the task identified by T to the group GB; if
59994 that task is already a member of some other group, Group_Budget_Error is
59995 raised.
59996
59997 17/2
59998 The procedure Remove_Task removes the task identified by T from the
59999 group GB; if that task is not a member of the group GB,
60000 Group_Budget_Error is raised. After successful execution of this
60001 procedure, the task is no longer a member of any group.
60002
60003 18/3
60004 The function Is_Member returns True if the task identified by T is a
60005 member of the group GB; otherwise, it returns False.
60006
60007 19/3
60008 The function Is_A_Group_Member returns True if the task identified by T
60009 is a member of some group; otherwise, it returns False.
60010
60011 20/2
60012 The function Members returns an array of values of type
60013 Task_Identification.Task_Id identifying the members of the group GB. The
60014 order of the components of the array is unspecified.
60015
60016 21/3
60017 The procedure Replenish loads the group budget GB with To as the
60018 Time_Span value. The exception Group_Budget_Error is raised if the
60019 Time_Span value To is nonpositive. Any execution on CPU of any member
60020 of the group of tasks results in the budget counting down, unless
60021 exhausted. When the budget becomes exhausted (reaches Time_Span_Zero),
60022 the associated handler is executed if the handler of group budget GB is
60023 set. Nevertheless, the tasks continue to execute.
60024
60025 22/2
60026 The procedure Add modifies the budget of the group GB. A positive value
60027 for Interval increases the budget. A negative value for Interval
60028 reduces the budget, but never below Time_Span_Zero. A zero value for
60029 Interval has no effect. A call of procedure Add that results in the
60030 value of the budget going to Time_Span_Zero causes the associated
60031 handler to be executed if the handler of the group budget GB is set.
60032
60033 23/3
60034 The function Budget_Has_Expired returns True if the budget of group GB
60035 is exhausted (equal to Time_Span_Zero); otherwise, it returns False.
60036
60037 24/2
60038 The function Budget_Remaining returns the remaining budget for the group
60039 GB. If the budget is exhausted it returns Time_Span_Zero. This is the
60040 minimum value for a budget.
60041
60042 25/3
60043 The procedure Set_Handler associates the handler Handler with the
60044 Group_Budget GB: if Handler is null, the handler of Group_Budget is
60045 cleared; otherwise, it is set.
60046
60047 26/2
60048 A call of Set_Handler for a Group_Budget that already has a handler set
60049 replaces the handler; if Handler is not null, the handler for
60050 Group_Budget remains set.
60051
60052 27/3
60053 The function Current_Handler returns the handler associated with the
60054 group budget GB if the handler for that group budget is set; otherwise,
60055 it returns null.
60056
60057 28/3
60058 The procedure Cancel_Handler clears the handler for the group budget if
60059 it is set. Cancelled is assigned True if the handler for the group
60060 budget was set prior to it being cleared; otherwise, it is assigned
60061 False.
60062
60063 29/2
60064 The constant Min_Handler_Ceiling is the minimum ceiling priority
60065 required for a protected object with a handler to ensure that no ceiling
60066 violation will occur when that handler is invoked.
60067
60068 30/2
60069 The precision of the accounting of task execution time to a Group_Budget
60070 is the same as that defined for execution-time clocks from the parent
60071 package.
60072
60073 31/2
60074 As part of the finalization of an object of type Group_Budget all member
60075 tasks are removed from the group identified by that object.
60076
60077 32/3
60078 If a task is a member of a Group_Budget when it terminates, then as part
60079 of the finalization of the task it is removed from the group.
60080
60081 33/2
60082 For all the operations defined in this package, Tasking_Error is raised
60083 if the task identified by T has terminated, and Program_Error is raised
60084 if the value of T is Task_Identification.Null_Task_Id.
60085
60086 34/2
60087 An exception propagated from a handler invoked when the budget of a
60088 group of tasks becomes exhausted has no effect.
60089
60090 _Erroneous Execution_
60091
60092 35/2
60093 For a call of any of the subprograms defined in this package, if the
60094 task identified by T no longer exists, the execution of the program is
60095 erroneous.
60096
60097 _Implementation Requirements_
60098
60099 36/2
60100 For a given Group_Budget object, the implementation shall perform the
60101 operations declared in this package atomically with respect to any of
60102 these operations on the same Group_Budget object. The replacement of a
60103 handler, by a call of Set_Handler, shall be performed atomically with
60104 respect to the execution of the handler.
60105
60106 NOTES
60107
60108 37/2
60109 44 Clearing or setting of the handler of a group budget does not
60110 change the current value of the budget. Exhaustion or loading of a
60111 budget does not change whether the handler of the group budget is
60112 set or cleared.
60113
60114 38/2
60115 45 A Group_Budget_Handler can be associated with several
60116 Group_Budget objects.
60117
60118 \1f
60119 File: arm2012.info, Node: D.14.3, Prev: D.14.2, Up: D.14
60120
60121 D.14.3 Execution Time of Interrupt Handlers
60122 -------------------------------------------
60123
60124 1/3
60125 This subclause describes a language-defined package to measure the
60126 execution time of interrupt handlers.
60127
60128 _Static Semantics_
60129
60130 2/3
60131 The following language-defined library package exists:
60132
60133 3/3
60134 with Ada.Interrupts;
60135 package Ada.Execution_Time.Interrupts is
60136 function Clock (Interrupt : Ada.Interrupts.Interrupt_Id)
60137 return CPU_Time;
60138 function Supported (Interrupt : Ada.Interrupts.Interrupt_Id)
60139 return Boolean;
60140 end Ada.Execution_Time.Interrupts;
60141
60142 4/3
60143 The execution time or CPU time of a given interrupt Interrupt is defined
60144 as the time spent by the system executing interrupt handlers identified
60145 by Interrupt, including the time spent executing run-time or system
60146 services on its behalf. The mechanism used to measure execution time is
60147 implementation defined. Time spent executing interrupt handlers is
60148 distinct from time spent executing any task.
60149
60150 5/3
60151 For each interrupt, the execution time value is initially set to zero.
60152
60153 _Dynamic Semantics_
60154
60155 6/3
60156 The function Clock returns the current cumulative execution time of the
60157 interrupt identified by Interrupt. If
60158 Separate_Interrupt_Clocks_Supported is set to False the function raises
60159 Program_Error.
60160
60161 7/3
60162 The function Supported returns True if the implementation is monitoring
60163 the execution time of the interrupt identified by Interrupt; otherwise,
60164 it returns False. For any Interrupt_Id Interrupt for which
60165 Supported(Interrupt) returns False, the function Clock(Interrupt) will
60166 return a value equal to Ada.Execution_Time.Time_Of(0).
60167
60168 \1f
60169 File: arm2012.info, Node: D.15, Next: D.16, Prev: D.14, Up: Annex D
60170
60171 D.15 Timing Events
60172 ==================
60173
60174 1/3
60175 This subclause describes a language-defined package to allow
60176 user-defined protected procedures to be executed at a specified time
60177 without the need for a task or a delay statement.
60178
60179 _Static Semantics_
60180
60181 2/2
60182 The following language-defined library package exists:
60183
60184 3/2
60185 package Ada.Real_Time.Timing_Events is
60186
60187 4/2
60188 type Timing_Event is tagged limited private;
60189 type Timing_Event_Handler
60190 is access protected procedure (Event : in out Timing_Event);
60191
60192 5/2
60193 procedure Set_Handler (Event : in out Timing_Event;
60194 At_Time : in Time;
60195 Handler : in Timing_Event_Handler);
60196 procedure Set_Handler (Event : in out Timing_Event;
60197 In_Time : in Time_Span;
60198 Handler : in Timing_Event_Handler);
60199 function Current_Handler (Event : Timing_Event)
60200 return Timing_Event_Handler;
60201 procedure Cancel_Handler (Event : in out Timing_Event;
60202 Cancelled : out Boolean);
60203
60204 6/2
60205 function Time_Of_Event (Event : Timing_Event) return Time;
60206
60207 7/2
60208 private
60209 ... -- not specified by the language
60210 end Ada.Real_Time.Timing_Events;
60211
60212 8/2
60213 The type Timing_Event represents a time in the future when an event is
60214 to occur. The type Timing_Event needs finalization (see *note 7.6::).
60215
60216 9/2
60217 An object of type Timing_Event is said to be set if it is associated
60218 with a nonnull value of type Timing_Event_Handler and cleared otherwise.
60219 All Timing_Event objects are initially cleared.
60220
60221 10/2
60222 The type Timing_Event_Handler identifies a protected procedure to be
60223 executed by the implementation when the timing event occurs. Such a
60224 protected procedure is called a handler.
60225
60226 _Dynamic Semantics_
60227
60228 11/3
60229 The procedures Set_Handler associate the handler Handler with the event
60230 Event: if Handler is null, the event is cleared; otherwise, it is set.
60231 The first procedure Set_Handler sets the execution time for the event to
60232 be At_Time. The second procedure Set_Handler sets the execution time
60233 for the event to be Real_Time.Clock + In_Time.
60234
60235 12/2
60236 A call of a procedure Set_Handler for an event that is already set
60237 replaces the handler and the time of execution; if Handler is not null,
60238 the event remains set.
60239
60240 13/2
60241 As soon as possible after the time set for the event, the handler is
60242 executed, passing the event as parameter. The handler is only executed
60243 if the timing event is in the set state at the time of execution. The
60244 initial action of the execution of the handler is to clear the event.
60245
60246 14/2
60247 If the Ceiling_Locking policy (see *note D.3::) is in effect when a
60248 procedure Set_Handler is called, a check is made that the ceiling
60249 priority of Handler.all is Interrupt_Priority'Last. If the check fails,
60250 Program_Error is raised.
60251
60252 15/3
60253 If a procedure Set_Handler is called with zero or negative In_Time or
60254 with At_Time indicating a time in the past, then the handler is executed
60255 as soon as possible after the completion of the call of Set_Handler.
60256
60257 16/3
60258 The function Current_Handler returns the handler associated with the
60259 event Event if that event is set; otherwise, it returns null.
60260
60261 17/3
60262 The procedure Cancel_Handler clears the event if it is set. Cancelled
60263 is assigned True if the event was set prior to it being cleared;
60264 otherwise, it is assigned False.
60265
60266 18/3
60267 The function Time_Of_Event returns the time of the event if the event is
60268 set; otherwise, it returns Real_Time.Time_First.
60269
60270 19/2
60271 As part of the finalization of an object of type Timing_Event, the
60272 Timing_Event is cleared.
60273
60274 20/2
60275 If several timing events are set for the same time, they are executed in
60276 FIFO order of being set.
60277
60278 21/2
60279 An exception propagated from a handler invoked by a timing event has no
60280 effect.
60281
60282 _Implementation Requirements_
60283
60284 22/2
60285 For a given Timing_Event object, the implementation shall perform the
60286 operations declared in this package atomically with respect to any of
60287 these operations on the same Timing_Event object. The replacement of a
60288 handler by a call of Set_Handler shall be performed atomically with
60289 respect to the execution of the handler.
60290
60291 _Metrics_
60292
60293 23/2
60294 The implementation shall document the following metric:
60295
60296 24/3
60297 * An upper bound on the lateness of the execution of a handler. That
60298 is, the maximum time between the time specified for the event and
60299 when a handler is actually invoked assuming no other handler or
60300 task is executing during this interval.
60301
60302 _Implementation Advice_
60303
60304 25/2
60305 The protected handler procedure should be executed directly by the
60306 real-time clock interrupt mechanism.
60307
60308 NOTES
60309
60310 26/2
60311 46 Since a call of Set_Handler is not a potentially blocking
60312 operation, it can be called from within a handler.
60313
60314 27/2
60315 47 A Timing_Event_Handler can be associated with several
60316 Timing_Event objects.
60317
60318 \1f
60319 File: arm2012.info, Node: D.16, Prev: D.15, Up: Annex D
60320
60321 D.16 Multiprocessor Implementation
60322 ==================================
60323
60324 1/3
60325 This subclause allows implementations on multiprocessor platforms to be
60326 configured.
60327
60328 _Static Semantics_
60329
60330 2/3
60331 The following language-defined library package exists:
60332
60333 3/3
60334 package System.Multiprocessors is
60335 pragma Preelaborate(Multiprocessors);
60336
60337 4/3
60338 type CPU_Range is range 0 .. implementation-defined;
60339 Not_A_Specific_CPU : constant CPU_Range := 0;
60340 subtype CPU is CPU_Range range 1 .. CPU_Range'Last;
60341
60342 5/3
60343 function Number_Of_CPUs return CPU;
60344 end System.Multiprocessors;
60345
60346 6/3
60347 A call of Number_Of_CPUs returns the number of processors available to
60348 the program. Within a given partition, each call on Number_Of_CPUs will
60349 return the same value.
60350
60351 7/3
60352 For a task type (including the anonymous type of a
60353 single_task_declaration) or subprogram, the following language-defined
60354 representation aspect may be specified:
60355
60356 8/3
60357 CPU
60358 The aspect CPU is an expression, which shall be of type
60359 System.Multiprocessors.CPU_Range.
60360
60361 _Legality Rules_
60362
60363 9/3
60364 If the CPU aspect is specified for a subprogram, the expression shall be
60365 static.
60366
60367 10/3
60368 The CPU aspect shall not be specified on a task interface type.
60369
60370 _Dynamic Semantics_
60371
60372 11/3
60373 The expression specified for the CPU aspect of a task is evaluated for
60374 each task object (see *note 9.1::). The CPU value is then associated
60375 with the task object whose task declaration specifies the aspect.
60376
60377 12/3
60378 The CPU aspect has no effect if it is specified for a subprogram other
60379 than the main subprogram; the CPU value is not associated with any task.
60380
60381 13/3
60382 The CPU value is associated with the environment task if the CPU aspect
60383 is specified for the main subprogram. If the CPU aspect is not
60384 specified for the main subprogram it is implementation defined on which
60385 processor the environment task executes.
60386
60387 14/3
60388 The CPU value determines the processor on which the task will activate
60389 and execute; the task is said to be assigned to that processor. If the
60390 CPU value is Not_A_Specific_CPU, then the task is not assigned to a
60391 processor. A task without a CPU aspect specified will activate and
60392 execute on the same processor as its activating task if the activating
60393 task is assigned a processor. If the CPU value is not in the range of
60394 System.Multiprocessors.CPU_Range or is greater than Number_Of_CPUs the
60395 task is defined to have failed, and it becomes a completed task (see
60396 *note 9.2::).
60397
60398 * Menu:
60399
60400 * D.16.1 :: Multiprocessor Dispatching Domains
60401
60402 \1f
60403 File: arm2012.info, Node: D.16.1, Up: D.16
60404
60405 D.16.1 Multiprocessor Dispatching Domains
60406 -----------------------------------------
60407
60408 1/3
60409 This subclause allows implementations on multiprocessor platforms to be
60410 partitioned into distinct dispatching domains during program startup.
60411
60412 _Static Semantics_
60413
60414 2/3
60415 The following language-defined library package exists:
60416
60417 3/3
60418 with Ada.Real_Time;
60419 with Ada.Task_Identification;
60420 package System.Multiprocessors.Dispatching_Domains is
60421
60422 4/3
60423 Dispatching_Domain_Error : exception;
60424
60425 5/3
60426 type Dispatching_Domain (<>) is limited private;
60427
60428 6/3
60429 System_Dispatching_Domain : constant Dispatching_Domain;
60430
60431 7/3
60432 function Create (First, Last : CPU) return Dispatching_Domain;
60433
60434 8/3
60435 function Get_First_CPU (Domain : Dispatching_Domain) return CPU;
60436
60437 9/3
60438 function Get_Last_CPU (Domain : Dispatching_Domain) return CPU;
60439
60440 10/3
60441 function Get_Dispatching_Domain
60442 (T : Ada.Task_Identification.Task_Id :=
60443 Ada.Task_Identification.Current_Task)
60444 return Dispatching_Domain;
60445
60446 11/3
60447 procedure Assign_Task
60448 (Domain : in out Dispatching_Domain;
60449 CPU : in CPU_Range := Not_A_Specific_CPU;
60450 T : in Ada.Task_Identification.Task_Id :=
60451 Ada.Task_Identification.Current_Task);
60452
60453 12/3
60454 procedure Set_CPU
60455 (CPU : in CPU_Range;
60456 T : in Ada.Task_Identification.Task_Id :=
60457 Ada.Task_Identification.Current_Task);
60458
60459 13/3
60460 function Get_CPU
60461 (T : Ada.Task_Identification.Task_Id :=
60462 Ada.Task_Identification.Current_Task)
60463 return CPU_Range;
60464
60465 14/3
60466 procedure Delay_Until_And_Set_CPU
60467 (Delay_Until_Time : in Ada.Real_Time.Time; CPU : in CPU_Range);
60468
60469 15/3
60470 private
60471 ... -- not specified by the language
60472 end System.Multiprocessors.Dispatching_Domains;
60473
60474 16/3
60475 The type Dispatching_Domain represents a series of processors on which a
60476 task may execute. Each processor is contained within exactly one
60477 Dispatching_Domain. System_Dispatching_Domain contains the processor or
60478 processors on which the environment task executes. At program start-up
60479 all processors are contained within System_Dispatching_Domain.
60480
60481 17/3
60482 For a task type (including the anonymous type of a
60483 single_task_declaration), the following language-defined representation
60484 aspect may be specified:
60485
60486 18/3
60487 Dispatching_Domain
60488 The value of aspect Dispatching_Domain is an expression,
60489 which shall be of type
60490 Dispatching_Domains.Dispatching_Domain. This aspect is
60491 the domain to which the task (or all objects of the task
60492 type) are assigned.
60493
60494 _Legality Rules_
60495
60496 19/3
60497 The Dispatching_Domain aspect shall not be specified for a task
60498 interface.
60499
60500 _Dynamic Semantics_
60501
60502 20/3
60503 The expression specified for the Dispatching_Domain aspect of a task is
60504 evaluated for each task object (see *note 9.1::). The
60505 Dispatching_Domain value is then associated with the task object whose
60506 task declaration specifies the aspect.
60507
60508 21/3
60509 If a task is not explicitly assigned to any domain, it is assigned to
60510 that of the activating task. A task always executes on some CPU in its
60511 domain.
60512
60513 22/3
60514 If both Dispatching_Domain and CPU are specified for a task, and the CPU
60515 value is not contained within the range of processors for the domain
60516 (and is not Not_A_Specific_CPU), the activation of the task is defined
60517 to have failed, and it becomes a completed task (see *note 9.2::).
60518
60519 23/3
60520 The function Create creates and returns a Dispatching_Domain containing
60521 all the processors in the range First .. Last. These processors are
60522 removed from System_Dispatching_Domain. A call of Create will raise
60523 Dispatching_Domain_Error if any designated processor is not currently in
60524 System_Dispatching_Domain, or if the system cannot support a distinct
60525 domain over the processors identified, or if a processor has a task
60526 assigned to it, or if the allocation would leave
60527 System_Dispatching_Domain empty. A call of Create will raise
60528 Dispatching_Domain_Error if the calling task is not the environment
60529 task, or if Create is called after the call to the main subprogram.
60530
60531 24/3
60532 The function Get_First_CPU returns the first CPU in Domain; Get_Last_CPU
60533 returns the last one.
60534
60535 25/3
60536 The function Get_Dispatching_Domain returns the Dispatching_Domain on
60537 which the task is assigned.
60538
60539 26/3
60540 A call of the procedure Assign_Task assigns task T to the CPU within
60541 Dispatching_Domain Domain. Task T can now execute only on CPU unless
60542 CPU designates Not_A_Specific_CPU, in which case it can execute on any
60543 processor within Domain. The exception Dispatching_Domain_Error is
60544 propagated if T is already assigned to a Dispatching_Domain other than
60545 System_Dispatching_Domain, or if CPU is not one of the processors of
60546 Domain (and is not Not_A_Specific_CPU). A call of Assign_Task is a task
60547 dispatching point for task T unless T is inside of a protected action,
60548 in which case the effect on task T is delayed until its next task
60549 dispatching point. If T is the Current_Task the effect is immediate if
60550 T is not inside a protected action, otherwise the effect is as soon as
60551 practical. Assigning a task to System_Dispatching_Domain that is
60552 already assigned to that domain has no effect.
60553
60554 27/3
60555 A call of procedure Set_CPU assigns task T to the CPU. Task T can now
60556 execute only on CPU, unless CPU designates Not_A_Specific_CPU, in which
60557 case it can execute on any processor within its Dispatching_Domain. The
60558 exception Dispatching_Domain_Error is propagated if CPU is not one of
60559 the processors of the Dispatching_Domain on which T is assigned (and is
60560 not Not_A_Specific_CPU). A call of Set_CPU is a task dispatching point
60561 for task T unless T is inside of a protected action, in which case the
60562 effect on task T is delayed until its next task dispatching point. If T
60563 is the Current_Task the effect is immediate if T is not inside a
60564 protected action, otherwise the effect is as soon as practical.
60565
60566 28/3
60567 The function Get_CPU returns the processor assigned to task T, or
60568 Not_A_Specific_CPU if the task is not assigned to a processor.
60569
60570 29/3
60571 A call of Delay_Until_And_Set_CPU delays the calling task for the
60572 designated time and then assigns the task to the specified processor
60573 when the delay expires. The exception Dispatching_Domain_Error is
60574 propagated if P is not one of the processors of the calling task's
60575 Dispatching_Domain (and is not Not_A_Specific_CPU).
60576
60577 _Implementation Requirements_
60578
60579 30/3
60580 The implementation shall perform the operations Assign_Task, Set_CPU,
60581 Get_CPU and Delay_Until_And_Set_CPU atomically with respect to any of
60582 these operations on the same dispatching_domain, processor or task.
60583
60584 _Implementation Advice_
60585
60586 31/3
60587 Each dispatching domain should have separate and disjoint ready queues.
60588
60589 _Documentation Requirements_
60590
60591 32/3
60592 The implementation shall document the processor(s) on which the clock
60593 interrupt is handled and hence where delay queue and ready queue
60594 manipulations occur. For any Interrupt_Id whose handler can execute on
60595 more than one processor the implementation shall also document this set
60596 of processors.
60597
60598 _Implementation Permissions_
60599
60600 33/3
60601 An implementation may limit the number of dispatching domains that can
60602 be created and raise Dispatching_Domain_Error if an attempt is made to
60603 exceed this number.
60604
60605 \1f
60606 File: arm2012.info, Node: Annex E, Next: Annex F, Prev: Annex D, Up: Top
60607
60608 Annex E Distributed Systems
60609 ***************************
60610
60611 1
60612 This Annex defines facilities for supporting the implementation of
60613 distributed systems using multiple partitions working cooperatively as
60614 part of a single Ada program.
60615
60616 _Post-Compilation Rules_
60617
60618 2
60619 A distributed system is an interconnection of one or more processing
60620 nodes (a system resource that has both computational and storage
60621 capabilities), and zero or more storage nodes (a system resource that
60622 has only storage capabilities, with the storage addressable by one or
60623 more processing nodes).
60624
60625 3
60626 A distributed program comprises one or more partitions that execute
60627 independently (except when they communicate) in a distributed system.
60628
60629 4
60630 The process of mapping the partitions of a program to the nodes in a
60631 distributed system is called configuring the partitions of the program.
60632
60633 _Implementation Requirements_
60634
60635 5
60636 The implementation shall provide means for explicitly assigning library
60637 units to a partition and for the configuring and execution of a program
60638 consisting of multiple partitions on a distributed system; the means are
60639 implementation defined.
60640
60641 _Implementation Permissions_
60642
60643 6
60644 An implementation may require that the set of processing nodes of a
60645 distributed system be homogeneous.
60646
60647 NOTES
60648
60649 7
60650 1 The partitions comprising a program may be executed on
60651 differently configured distributed systems or on a nondistributed
60652 system without requiring recompilation. A distributed program may
60653 be partitioned differently from the same set of library units
60654 without recompilation. The resulting execution is semantically
60655 equivalent.
60656
60657 8
60658 2 A distributed program retains the same type safety as the
60659 equivalent single partition program.
60660
60661 * Menu:
60662
60663 * E.1 :: Partitions
60664 * E.2 :: Categorization of Library Units
60665 * E.3 :: Consistency of a Distributed System
60666 * E.4 :: Remote Subprogram Calls
60667 * E.5 :: Partition Communication Subsystem
60668
60669 \1f
60670 File: arm2012.info, Node: E.1, Next: E.2, Up: Annex E
60671
60672 E.1 Partitions
60673 ==============
60674
60675 1
60676 The partitions of a distributed program are classified as either active
60677 or passive.
60678
60679 _Post-Compilation Rules_
60680
60681 2
60682 An active partition is a partition as defined in *note 10.2::. A
60683 passive partition is a partition that has no thread of control of its
60684 own, whose library units are all preelaborated, and whose data and
60685 subprograms are accessible to one or more active partitions.
60686
60687 3
60688 A passive partition shall include only library_items that either are
60689 declared pure or are shared passive (see *note 10.2.1:: and *note
60690 E.2.1::).
60691
60692 4
60693 An active partition shall be configured on a processing node. A passive
60694 partition shall be configured either on a storage node or on a
60695 processing node.
60696
60697 5
60698 The configuration of the partitions of a program onto a distributed
60699 system shall be consistent with the possibility for data references or
60700 calls between the partitions implied by their semantic dependences. Any
60701 reference to data or call of a subprogram across partitions is called a
60702 remote access.
60703
60704 _Dynamic Semantics_
60705
60706 6
60707 A library_item is elaborated as part of the elaboration of each
60708 partition that includes it. If a normal library unit (see *note E.2::)
60709 has state, then a separate copy of the state exists in each active
60710 partition that elaborates it. The state evolves independently in each
60711 such partition.
60712
60713 7
60714 An active partition terminates when its environment task terminates. A
60715 partition becomes inaccessible if it terminates or if it is aborted. An
60716 active partition is aborted when its environment task is aborted. In
60717 addition, if a partition fails during its elaboration, it becomes
60718 inaccessible to other partitions. Other implementation-defined events
60719 can also result in a partition becoming inaccessible.
60720
60721 8/1
60722 For a prefix D that denotes a library-level declaration, excepting a
60723 declaration of or within a declared-pure library unit, the following
60724 attribute is defined:
60725
60726 9
60727 D'Partition_Id
60728 Denotes a value of the type universal_integer that
60729 identifies the partition in which D was elaborated. If D
60730 denotes the declaration of a remote call interface
60731 library unit (see *note E.2.3::) the given partition is
60732 the one where the body of D was elaborated.
60733
60734 _Bounded (Run-Time) Errors_
60735
60736 10/2
60737 It is a bounded error for there to be cyclic elaboration dependences
60738 between the active partitions of a single distributed program. The
60739 possible effects, in each of the partitions involved, are deadlock
60740 during elaboration, or the raising of Communication_Error or
60741 Program_Error.
60742
60743 _Implementation Permissions_
60744
60745 11
60746 An implementation may allow multiple active or passive partitions to be
60747 configured on a single processing node, and multiple passive partitions
60748 to be configured on a single storage node. In these cases, the
60749 scheduling policies, treatment of priorities, and management of shared
60750 resources between these partitions are implementation defined.
60751
60752 12
60753 An implementation may allow separate copies of an active partition to be
60754 configured on different processing nodes, and to provide appropriate
60755 interactions between the copies to present a consistent state of the
60756 partition to other active partitions.
60757
60758 13
60759 In an implementation, the partitions of a distributed program need not
60760 be loaded and elaborated all at the same time; they may be loaded and
60761 elaborated one at a time over an extended period of time. An
60762 implementation may provide facilities to abort and reload a partition
60763 during the execution of a distributed program.
60764
60765 14
60766 An implementation may allow the state of some of the partitions of a
60767 distributed program to persist while other partitions of the program
60768 terminate and are later reinvoked.
60769
60770 NOTES
60771
60772 15
60773 3 Library units are grouped into partitions after compile time,
60774 but before run time. At compile time, only the relevant library
60775 unit properties are identified using categorization pragmas.
60776
60777 16
60778 4 The value returned by the Partition_Id attribute can be used as
60779 a parameter to implementation-provided subprograms in order to
60780 query information about the partition.
60781
60782 \1f
60783 File: arm2012.info, Node: E.2, Next: E.3, Prev: E.1, Up: Annex E
60784
60785 E.2 Categorization of Library Units
60786 ===================================
60787
60788 1
60789 Library units can be categorized according to the role they play in a
60790 distributed program. Certain restrictions are associated with each
60791 category to ensure that the semantics of a distributed program remain
60792 close to the semantics for a nondistributed program.
60793
60794 2/3
60795 A categorization pragma is a library unit pragma (see *note 10.1.5::)
60796 that specifies a corresponding categorization aspect. A categorization
60797 aspect restricts the declarations, child units, or semantic dependences
60798 of the library unit to which it applies. A categorized library unit is
60799 a library unit that has a categorization aspect that is True.
60800
60801 3/3
60802 The pragmas Shared_Passive, Remote_Types, and Remote_Call_Interface are
60803 categorization pragmas, and the associated aspects are categorization
60804 aspects. In addition, for the purposes of this Annex, the aspect Pure
60805 (see *note 10.2.1::) is considered a categorization aspect and the
60806 pragma Pure is considered a categorization pragma.
60807
60808 4/3
60809 A library package or generic library package is called a shared passive
60810 library unit if the Shared_Passive aspect of the unit is True. A
60811 library package or generic library package is called a remote types
60812 library unit if the Remote_Types aspect of the unit is True. A library
60813 unit is called a remote call interface if the Remote_Call_Interface
60814 aspect of the unit is True. A normal library unit is one for which no
60815 categorization aspect is True.
60816
60817 5/3
60818 The various categories of library units and the associated restrictions
60819 are described in this and the following subclauses. The categories are
60820 related hierarchically in that the library units of one category can
60821 depend semantically only on library units of that category or an earlier
60822 one in the hierarchy, except that the body of a remote types or remote
60823 call interface library unit is unrestricted, the declaration of a remote
60824 types or remote call interface library unit may depend on preelaborated
60825 normal library units that are mentioned only in private with clauses,
60826 and all categories can depend on limited views.
60827
60828 6/3
60829 The overall hierarchy (including declared pure) is as follows, with a
60830 lower-numbered category being "earlier in the hierarchy" in the sense of
60831 the previous paragraph:
60832
60833 6.1/3
60834 1. Declared Pure
60835
60836 6.2/3
60837 2. Shared Passive
60838
60839 6.3/3
60840 3. Remote Types
60841
60842 6.4/3
60843 4. Remote Call Interface
60844
60845 6.5/3
60846 5. Normal (no restrictions)
60847
60848 Paragraphs 7 through 11 were deleted.
60849
60850 12
60851 Declared pure and shared passive library units are preelaborated. The
60852 declaration of a remote types or remote call interface library unit is
60853 required to be preelaborable.
60854
60855 Paragraph 13 was deleted.
60856
60857 _Implementation Permissions_
60858
60859 14
60860 Implementations are allowed to define other categorization pragmas.
60861
60862 * Menu:
60863
60864 * E.2.1 :: Shared Passive Library Units
60865 * E.2.2 :: Remote Types Library Units
60866 * E.2.3 :: Remote Call Interface Library Units
60867
60868 \1f
60869 File: arm2012.info, Node: E.2.1, Next: E.2.2, Up: E.2
60870
60871 E.2.1 Shared Passive Library Units
60872 ----------------------------------
60873
60874 1
60875 A shared passive library unit is used for managing global data shared
60876 between active partitions. The restrictions on shared passive library
60877 units prevent the data or tasks of one active partition from being
60878 accessible to another active partition through references implicit in
60879 objects declared in the shared passive library unit.
60880
60881 _Syntax_
60882
60883 2
60884 The form of a pragma Shared_Passive is as follows:
60885
60886 3
60887 pragma Shared_Passive[(library_unit_name)];
60888
60889 _Legality Rules_
60890
60891 4/3
60892 A pragma Shared_Passive is used to specify that a library unit is a
60893 shared passive library unit, namely that the Shared_Passive aspect of
60894 the library unit is True. The following restrictions apply to such a
60895 library unit:
60896
60897 5
60898 * it shall be preelaborable (see *note 10.2.1::);
60899
60900 6/3
60901 * it shall depend semantically only upon declared pure or shared
60902 passive library_items;
60903
60904 7/1
60905 * it shall not contain a library-level declaration of an access type
60906 that designates a class-wide type, task type, or protected type
60907 with entry_declarations.
60908
60909 8
60910 Notwithstanding the definition of accessibility given in *note 3.10.2::,
60911 the declaration of a library unit P1 is not accessible from within the
60912 declarative region of a shared passive library unit P2, unless the
60913 shared passive library unit P2 depends semantically on P1.
60914
60915 _Static Semantics_
60916
60917 9
60918 A shared passive library unit is preelaborated.
60919
60920 _Post-Compilation Rules_
60921
60922 10
60923 A shared passive library unit shall be assigned to at most one partition
60924 within a given program.
60925
60926 11
60927 Notwithstanding the rule given in *note 10.2::, a compilation unit in a
60928 given partition does not need (in the sense of *note 10.2::) the shared
60929 passive library units on which it depends semantically to be included in
60930 that same partition; they will typically reside in separate passive
60931 partitions.
60932
60933 \1f
60934 File: arm2012.info, Node: E.2.2, Next: E.2.3, Prev: E.2.1, Up: E.2
60935
60936 E.2.2 Remote Types Library Units
60937 --------------------------------
60938
60939 1
60940 A remote types library unit supports the definition of types intended
60941 for use in communication between active partitions.
60942
60943 _Syntax_
60944
60945 2
60946 The form of a pragma Remote_Types is as follows:
60947
60948 3
60949 pragma Remote_Types[(library_unit_name)];
60950
60951 _Legality Rules_
60952
60953 4/3
60954 A pragma Remote_Types is used to specify that a library unit is a remote
60955 types library unit, namely that the Remote_Types aspect of the library
60956 unit is True. The following restrictions apply to the declaration of
60957 such a library unit:
60958
60959 5
60960 * it shall be preelaborable;
60961
60962 6/3
60963 * it shall depend semantically only on declared pure library_items,
60964 shared passive library units, other remote types library units, or
60965 preelaborated normal library units that are mentioned only in
60966 private with clauses;
60967
60968 7
60969 * it shall not contain the declaration of any variable within the
60970 visible part of the library unit;
60971
60972 8/2
60973 * the full view of each type declared in the visible part of the
60974 library unit that has any available stream attributes shall support
60975 external streaming (see *note 13.13.2::).
60976
60977 9/3
60978 A named access type declared in the visible part of a remote types or
60979 remote call interface library unit is called a remote access type. Such
60980 a type shall be:
60981
60982 9.1/1
60983 * an access-to-subprogram type, or
60984
60985 9.2/3
60986 * a general access type that designates a class-wide limited private
60987 type, a class-wide limited interface type, or a class-wide private
60988 extension all of whose ancestors are either private extensions,
60989 limited interface types, or limited private types.
60990
60991 9.3/1
60992 A type that is derived from a remote access type is also a remote access
60993 type.
60994
60995 10
60996 The following restrictions apply to the use of a remote
60997 access-to-subprogram type:
60998
60999 11/2
61000 * A value of a remote access-to-subprogram type shall be converted
61001 only to or from another (subtype-conformant) remote
61002 access-to-subprogram type;
61003
61004 12
61005 * The prefix of an Access attribute_reference that yields a value of
61006 a remote access-to-subprogram type shall statically denote a
61007 (subtype-conformant) remote subprogram.
61008
61009 13
61010 The following restrictions apply to the use of a remote
61011 access-to-class-wide type:
61012
61013 14/3
61014 * The primitive subprograms of the corresponding specific type shall
61015 only have access parameters if they are controlling formal
61016 parameters. The primitive functions of the corresponding specific
61017 type shall only have an access result if it is a controlling access
61018 result. Each noncontrolling formal parameter and noncontrolling
61019 result type shall support external streaming (see *note 13.13.2::);
61020
61021 14.1/3
61022 * The corresponding specific type shall not have a primitive
61023 procedure with the Synchronization aspect specified unless the
61024 synchronization_kind is Optional (see *note 9.5::);
61025
61026 15
61027 * A value of a remote access-to-class-wide type shall be explicitly
61028 converted only to another remote access-to-class-wide type;
61029
61030 16
61031 * A value of a remote access-to-class-wide type shall be dereferenced
61032 (or implicitly converted to an anonymous access type) only as part
61033 of a dispatching call where the value designates a controlling
61034 operand of the call (see *note E.4::, "*note E.4:: Remote
61035 Subprogram Calls");
61036
61037 16.1/3
61038 * A controlling access result value for a primitive function with any
61039 controlling operands of the corresponding specific type shall
61040 either be explicitly converted to a remote access-to-class-wide
61041 type or be part of a dispatching call where the value designates a
61042 controlling operand of the call;
61043
61044 17/2
61045 * The Storage_Pool attribute is not defined for a remote
61046 access-to-class-wide type; the expected type for an allocator shall
61047 not be a remote access-to-class-wide type. A remote
61048 access-to-class-wide type shall not be an actual parameter for a
61049 generic formal access type. The Storage_Size attribute of a remote
61050 access-to-class-wide type yields 0; it is not allowed in an
61051 attribute_definition_clause.
61052
61053 NOTES
61054
61055 18
61056 5 A remote types library unit need not be pure, and the types it
61057 defines may include levels of indirection implemented by using
61058 access types. User-specified Read and Write attributes (see *note
61059 13.13.2::) provide for sending values of such a type between active
61060 partitions, with Write marshalling the representation, and Read
61061 unmarshalling any levels of indirection.
61062
61063 19/3
61064 6 The value of a remote access-to-class-wide limited interface can
61065 designate an object of a nonlimited type derived from the
61066 interface.
61067
61068 20/3
61069 7 A remote access type may designate a class-wide synchronized,
61070 protected, or task interface type.
61071
61072 \1f
61073 File: arm2012.info, Node: E.2.3, Prev: E.2.2, Up: E.2
61074
61075 E.2.3 Remote Call Interface Library Units
61076 -----------------------------------------
61077
61078 1
61079 A remote call interface library unit can be used as an interface for
61080 remote procedure calls (RPCs) (or remote function calls) between active
61081 partitions.
61082
61083 _Syntax_
61084
61085 2
61086 The form of a pragma Remote_Call_Interface is as follows:
61087
61088 3
61089 pragma Remote_Call_Interface[(library_unit_name)];
61090
61091 4
61092 The form of a pragma All_Calls_Remote is as follows:
61093
61094 5
61095 pragma All_Calls_Remote[(library_unit_name)];
61096
61097 6
61098 A pragma All_Calls_Remote is a library unit pragma.
61099
61100 _Legality Rules_
61101
61102 7/3
61103 A pragma Remote_Call_Interface is used to specify that a library unit is
61104 a remote call interface (RCI), namely that the Remote_Call_Interface
61105 aspect of the library unit is True. A subprogram declared in the
61106 visible part of such a library unit, or declared by such a library unit,
61107 is called a remote subprogram.
61108
61109 8/3
61110 The declaration of an RCI library unit shall be preelaborable (see *note
61111 10.2.1::), and shall depend semantically only upon declared pure
61112 library_items, shared passive library units, remote types library units,
61113 other remote call interface library units, or preelaborated normal
61114 library units that are mentioned only in private with clauses.
61115
61116 9/1
61117 In addition, the following restrictions apply to an RCI library unit:
61118
61119 10/1
61120 * its visible part shall not contain the declaration of a variable;
61121
61122 11/1
61123 * its visible part shall not contain the declaration of a limited
61124 type;
61125
61126 12/1
61127 * its visible part shall not contain a nested generic_declaration;
61128
61129 13/3
61130 * it shall not be, nor shall its visible part contain, the
61131 declaration of a subprogram for which aspect Inline is True;
61132
61133 14/3
61134 * it shall not be, nor shall its visible part contain, a subprogram
61135 (or access-to-subprogram) declaration whose profile has a parameter
61136 or result of a type that does not support external streaming (see
61137 *note 13.13.2::);
61138
61139 15
61140 * any public child of the library unit shall be a remote call
61141 interface library unit.
61142
61143 16/3
61144 A pragma All_Calls_Remote sets the All_Calls_Remote representation
61145 aspect of the library unit to which the pragma applies to the value
61146 True. If the All_Calls_Remote aspect of a library unit is True, the
61147 library unit shall be a remote call interface.
61148
61149 _Post-Compilation Rules_
61150
61151 17
61152 A remote call interface library unit shall be assigned to at most one
61153 partition of a given program. A remote call interface library unit
61154 whose parent is also an RCI library unit shall be assigned only to the
61155 same partition as its parent.
61156
61157 18
61158 Notwithstanding the rule given in *note 10.2::, a compilation unit in a
61159 given partition that semantically depends on the declaration of an RCI
61160 library unit, needs (in the sense of *note 10.2::) only the declaration
61161 of the RCI library unit, not the body, to be included in that same
61162 partition. Therefore, the body of an RCI library unit is included only
61163 in the partition to which the RCI library unit is explicitly assigned.
61164
61165 _Implementation Requirements_
61166
61167 19/3
61168 If aspect All_Calls_Remote is True for a given RCI library unit, then
61169 the implementation shall route any call to a subprogram of the RCI unit
61170 from outside the declarative region of the unit through the Partition
61171 Communication Subsystem (PCS); see *note E.5::. Calls to such
61172 subprograms from within the declarative region of the unit are defined
61173 to be local and shall not go through the PCS.
61174
61175 _Implementation Permissions_
61176
61177 20/3
61178 An implementation need not support the Remote_Call_Interface pragma or
61179 aspect nor the All_Calls_Remote pragma. Explicit message-based
61180 communication between active partitions can be supported as an
61181 alternative to RPC.
61182
61183 \1f
61184 File: arm2012.info, Node: E.3, Next: E.4, Prev: E.2, Up: Annex E
61185
61186 E.3 Consistency of a Distributed System
61187 =======================================
61188
61189 1/3
61190 This subclause defines attributes and rules associated with verifying
61191 the consistency of a distributed program.
61192
61193 _Static Semantics_
61194
61195 2/1
61196 For a prefix P that statically denotes a program unit, the following
61197 attributes are defined:
61198
61199 3
61200 P'Version
61201 Yields a value of the predefined type String that
61202 identifies the version of the compilation unit that
61203 contains the declaration of the program unit.
61204
61205 4
61206 P'Body_Version
61207 Yields a value of the predefined type String that
61208 identifies the version of the compilation unit that
61209 contains the body (but not any subunits) of the program
61210 unit.
61211
61212 5/1
61213 The version of a compilation unit changes whenever the compilation unit
61214 changes in a semantically significant way. This International Standard
61215 does not define the exact meaning of "semantically significant". It is
61216 unspecified whether there are other events (such as recompilation) that
61217 result in the version of a compilation unit changing.
61218
61219 5.1/1
61220 If P is not a library unit, and P has no completion, then P'Body_Version
61221 returns the Body_Version of the innermost program unit enclosing the
61222 declaration of P. If P is a library unit, and P has no completion, then
61223 P'Body_Version returns a value that is different from Body_Version of
61224 any version of P that has a completion.
61225
61226 _Bounded (Run-Time) Errors_
61227
61228 6
61229 In a distributed program, a library unit is consistent if the same
61230 version of its declaration is used throughout. It is a bounded error to
61231 elaborate a partition of a distributed program that contains a
61232 compilation unit that depends on a different version of the declaration
61233 of a shared passive or RCI library unit than that included in the
61234 partition to which the shared passive or RCI library unit was assigned.
61235 As a result of this error, Program_Error can be raised in one or both
61236 partitions during elaboration; in any case, the partitions become
61237 inaccessible to one another.
61238
61239 \1f
61240 File: arm2012.info, Node: E.4, Next: E.5, Prev: E.3, Up: Annex E
61241
61242 E.4 Remote Subprogram Calls
61243 ===========================
61244
61245 1
61246 A remote subprogram call is a subprogram call that invokes the execution
61247 of a subprogram in another partition. The partition that originates the
61248 remote subprogram call is the calling partition, and the partition that
61249 executes the corresponding subprogram body is the called partition.
61250 Some remote procedure calls are allowed to return prior to the
61251 completion of subprogram execution. These are called asynchronous
61252 remote procedure calls.
61253
61254 2
61255 There are three different ways of performing a remote subprogram call:
61256
61257 3
61258 * As a direct call on a (remote) subprogram explicitly declared in a
61259 remote call interface;
61260
61261 4
61262 * As an indirect call through a value of a remote
61263 access-to-subprogram type;
61264
61265 5
61266 * As a dispatching call with a controlling operand designated by a
61267 value of a remote access-to-class-wide type.
61268
61269 6
61270 The first way of calling corresponds to a static binding between the
61271 calling and the called partition. The latter two ways correspond to a
61272 dynamic binding between the calling and the called partition.
61273
61274 7/3
61275 Remote types library units (see *note E.2.2::) and remote call interface
61276 library units (see *note E.2.3::) define the remote subprograms or
61277 remote access types used for remote subprogram calls.
61278
61279 _Legality Rules_
61280
61281 8
61282 In a dispatching call with two or more controlling operands, if one
61283 controlling operand is designated by a value of a remote
61284 access-to-class-wide type, then all shall be.
61285
61286 _Dynamic Semantics_
61287
61288 9
61289 For the execution of a remote subprogram call, subprogram parameters
61290 (and later the results, if any) are passed using a stream-oriented
61291 representation (see *note 13.13.1::) which is suitable for transmission
61292 between partitions. This action is called marshalling. Unmarshalling
61293 is the reverse action of reconstructing the parameters or results from
61294 the stream-oriented representation. Marshalling is performed initially
61295 as part of the remote subprogram call in the calling partition;
61296 unmarshalling is done in the called partition. After the remote
61297 subprogram completes, marshalling is performed in the called partition,
61298 and finally unmarshalling is done in the calling partition.
61299
61300 10
61301 A calling stub is the sequence of code that replaces the subprogram body
61302 of a remotely called subprogram in the calling partition. A receiving
61303 stub is the sequence of code (the "wrapper") that receives a remote
61304 subprogram call on the called partition and invokes the appropriate
61305 subprogram body.
61306
61307 11
61308 Remote subprogram calls are executed at most once, that is, if the
61309 subprogram call returns normally, then the called subprogram's body was
61310 executed exactly once.
61311
61312 12
61313 The task executing a remote subprogram call blocks until the subprogram
61314 in the called partition returns, unless the call is asynchronous. For
61315 an asynchronous remote procedure call, the calling task can become ready
61316 before the procedure in the called partition returns.
61317
61318 13
61319 If a construct containing a remote call is aborted, the remote
61320 subprogram call is cancelled. Whether the execution of the remote
61321 subprogram is immediately aborted as a result of the cancellation is
61322 implementation defined.
61323
61324 14
61325 If a remote subprogram call is received by a called partition before the
61326 partition has completed its elaboration, the call is kept pending until
61327 the called partition completes its elaboration (unless the call is
61328 cancelled by the calling partition prior to that).
61329
61330 15
61331 If an exception is propagated by a remotely called subprogram, and the
61332 call is not an asynchronous call, the corresponding exception is
61333 reraised at the point of the remote subprogram call. For an
61334 asynchronous call, if the remote procedure call returns prior to the
61335 completion of the remotely called subprogram, any exception is lost.
61336
61337 16
61338 The exception Communication_Error (see *note E.5::) is raised if a
61339 remote call cannot be completed due to difficulties in communicating
61340 with the called partition.
61341
61342 17
61343 All forms of remote subprogram calls are potentially blocking operations
61344 (see *note 9.5.1::).
61345
61346 18/1
61347 In a remote subprogram call with a formal parameter of a class-wide
61348 type, a check is made that the tag of the actual parameter identifies a
61349 tagged type declared in a declared-pure or shared passive library unit,
61350 or in the visible part of a remote types or remote call interface
61351 library unit. Program_Error is raised if this check fails. In a remote
61352 function call which returns a class-wide type, the same check is made on
61353 the function result.
61354
61355 19
61356 In a dispatching call with two or more controlling operands that are
61357 designated by values of a remote access-to-class-wide type, a check is
61358 made (in addition to the normal Tag_Check -- see *note 11.5::) that all
61359 the remote access-to-class-wide values originated from Access
61360 attribute_references that were evaluated by tasks of the same active
61361 partition. Constraint_Error is raised if this check fails.
61362
61363 _Implementation Requirements_
61364
61365 20
61366 The implementation of remote subprogram calls shall conform to the PCS
61367 interface as defined by the specification of the language-defined
61368 package System.RPC (see *note E.5::). The calling stub shall use the
61369 Do_RPC procedure unless the remote procedure call is asynchronous in
61370 which case Do_APC shall be used. On the receiving side, the
61371 corresponding receiving stub shall be invoked by the RPC-receiver.
61372
61373 20.1/1
61374 With respect to shared variables in shared passive library units, the
61375 execution of the corresponding subprogram body of a synchronous remote
61376 procedure call is considered to be part of the execution of the calling
61377 task. The execution of the corresponding subprogram body of an
61378 asynchronous remote procedure call proceeds in parallel with the calling
61379 task and does not signal the next action of the calling task (see *note
61380 9.10::).
61381
61382 NOTES
61383
61384 21
61385 8 A given active partition can both make and receive remote
61386 subprogram calls. Thus, an active partition can act as both a
61387 client and a server.
61388
61389 22
61390 9 If a given exception is propagated by a remote subprogram call,
61391 but the exception does not exist in the calling partition, the
61392 exception can be handled by an others choice or be propagated to
61393 and handled by a third partition.
61394
61395 * Menu:
61396
61397 * E.4.1 :: Asynchronous Remote Calls
61398 * E.4.2 :: Example of Use of a Remote Access-to-Class-Wide Type
61399
61400 \1f
61401 File: arm2012.info, Node: E.4.1, Next: E.4.2, Up: E.4
61402
61403 E.4.1 Asynchronous Remote Calls
61404 -------------------------------
61405
61406 1/3
61407 This subclause introduces the aspect Asynchronous which can be specified
61408 to allow a remote subprogram call to return prior to completion of the
61409 execution of the corresponding remote subprogram body.
61410
61411 Paragraphs 2 through 7 were deleted.
61412
61413 _Static Semantics_
61414
61415 8/3
61416 For a remote procedure, the following language-defined representation
61417 aspect may be specified:
61418
61419 8.1/3
61420 Asynchronous
61421 The type of aspect Asynchronous is Boolean. If directly
61422 specified, the aspect_definition shall be a static
61423 expression. If not specified, the aspect is False.
61424
61425 8.2/3
61426 For a remote access type, the following language-defined representation
61427 aspect may be specified:
61428
61429 8.3/3
61430 Asynchronous
61431 The type of aspect Asynchronous is Boolean. If directly
61432 specified, the aspect_definition shall be a static
61433 expression. If not specified (including by inheritance),
61434 the aspect is False.
61435
61436 _Legality Rules_
61437
61438 8.4/3
61439 If aspect Asynchronous is specified for a remote procedure, the formal
61440 parameters of the procedure shall all be of mode in.
61441
61442 8.5/3
61443 If aspect Asynchronous is specified for a remote access type, the type
61444 shall be a remote access-to-class-wide type, or the type shall be a
61445 remote access-to-procedure type with the formal parameters of the
61446 designated profile of the type all of mode in.
61447
61448 _Dynamic Semantics_
61449
61450 9/3
61451 A remote call is asynchronous if it is a call to a procedure, or a call
61452 through a value of an access-to-procedure type, for which aspect
61453 Asynchronous is True. In addition, if aspect Asynchronous is True for a
61454 remote access-to-class-wide type, then a dispatching call on a procedure
61455 with a controlling operand designated by a value of the type is
61456 asynchronous if the formal parameters of the procedure are all of mode
61457 in.
61458
61459 _Implementation Requirements_
61460
61461 10
61462 Asynchronous remote procedure calls shall be implemented such that the
61463 corresponding body executes at most once as a result of the call.
61464
61465 \1f
61466 File: arm2012.info, Node: E.4.2, Prev: E.4.1, Up: E.4
61467
61468 E.4.2 Example of Use of a Remote Access-to-Class-Wide Type
61469 ----------------------------------------------------------
61470
61471 _Examples_
61472
61473 1
61474 Example of using a remote access-to-class-wide type to achieve dynamic
61475 binding across active partitions:
61476
61477 2
61478 package Tapes is
61479 pragma Pure(Tapes);
61480 type Tape is abstract tagged limited private;
61481 -- Primitive dispatching operations where
61482 -- Tape is controlling operand
61483 procedure Copy (From, To : access Tape; Num_Recs : in Natural) is abstract;
61484 procedure Rewind (T : access Tape) is abstract;
61485 -- More operations
61486 private
61487 type Tape is ...
61488 end Tapes;
61489
61490 3
61491 with Tapes;
61492 package Name_Server is
61493 pragma Remote_Call_Interface;
61494 -- Dynamic binding to remote operations is achieved
61495 -- using the access-to-limited-class-wide type Tape_Ptr
61496 type Tape_Ptr is access all Tapes.Tape'Class;
61497 -- The following statically bound remote operations
61498 -- allow for a name-server capability in this example
61499 function Find (Name : String) return Tape_Ptr;
61500 procedure Register (Name : in String; T : in Tape_Ptr);
61501 procedure Remove (T : in Tape_Ptr);
61502 -- More operations
61503 end Name_Server;
61504
61505 4
61506 package Tape_Driver is
61507 -- Declarations are not shown, they are irrelevant here
61508 end Tape_Driver;
61509
61510 5
61511 with Tapes, Name_Server;
61512 package body Tape_Driver is
61513 type New_Tape is new Tapes.Tape with ...
61514 procedure Copy
61515 (From, To : access New_Tape; Num_Recs: in Natural) is
61516 begin
61517 . . .
61518 end Copy;
61519 procedure Rewind (T : access New_Tape) is
61520 begin
61521 . . .
61522 end Rewind;
61523 -- Objects remotely accessible through use
61524 -- of Name_Server operations
61525 Tape1, Tape2 : aliased New_Tape;
61526 begin
61527 Name_Server.Register ("NINE-TRACK", Tape1'Access);
61528 Name_Server.Register ("SEVEN-TRACK", Tape2'Access);
61529 end Tape_Driver;
61530
61531 6
61532 with Tapes, Name_Server;
61533 -- Tape_Driver is not needed and thus not mentioned in the with_clause
61534 procedure Tape_Client is
61535 T1, T2 : Name_Server.Tape_Ptr;
61536 begin
61537 T1 := Name_Server.Find ("NINE-TRACK");
61538 T2 := Name_Server.Find ("SEVEN-TRACK");
61539 Tapes.Rewind (T1);
61540 Tapes.Rewind (T2);
61541 Tapes.Copy (T1, T2, 3);
61542 end Tape_Client;
61543
61544 7
61545 Notes on the example:
61546
61547 8/1
61548 This paragraph was deleted.
61549
61550 9
61551 * The package Tapes provides the necessary declarations of the type
61552 and its primitive operations.
61553
61554 10
61555 * Name_Server is a remote call interface package and is elaborated in
61556 a separate active partition to provide the necessary naming
61557 services (such as Register and Find) to the entire distributed
61558 program through remote subprogram calls.
61559
61560 11
61561 * Tape_Driver is a normal package that is elaborated in a partition
61562 configured on the processing node that is connected to the tape
61563 device(s). The abstract operations are overridden to support the
61564 locally declared tape devices (Tape1, Tape2). The package is not
61565 visible to its clients, but it exports the tape devices (as remote
61566 objects) through the services of the Name_Server. This allows for
61567 tape devices to be dynamically added, removed or replaced without
61568 requiring the modification of the clients' code.
61569
61570 12
61571 * The Tape_Client procedure references only declarations in the Tapes
61572 and Name_Server packages. Before using a tape for the first time,
61573 it needs to query the Name_Server for a system-wide identity for
61574 that tape. From then on, it can use that identity to access the
61575 tape device.
61576
61577 13
61578 * Values of remote access type Tape_Ptr include the necessary
61579 information to complete the remote dispatching operations that
61580 result from dereferencing the controlling operands T1 and T2.
61581
61582 \1f
61583 File: arm2012.info, Node: E.5, Prev: E.4, Up: Annex E
61584
61585 E.5 Partition Communication Subsystem
61586 =====================================
61587
61588 1/2
61589 The Partition Communication Subsystem (PCS) provides facilities for
61590 supporting communication between the active partitions of a distributed
61591 program. The package System.RPC is a language-defined interface to the
61592 PCS.
61593
61594 _Static Semantics_
61595
61596 2
61597 The following language-defined library package exists:
61598
61599 3
61600 with Ada.Streams; -- see *note 13.13.1::
61601 package System.RPC is
61602
61603 4
61604 type Partition_Id is range 0 .. implementation-defined;
61605
61606 5
61607 Communication_Error : exception;
61608
61609 6
61610 type Params_Stream_Type (
61611 Initial_Size : Ada.Streams.Stream_Element_Count) is new
61612 Ada.Streams.Root_Stream_Type with private;
61613
61614 7
61615 procedure Read(
61616 Stream : in out Params_Stream_Type;
61617 Item : out Ada.Streams.Stream_Element_Array;
61618 Last : out Ada.Streams.Stream_Element_Offset);
61619
61620 8
61621 procedure Write(
61622 Stream : in out Params_Stream_Type;
61623 Item : in Ada.Streams.Stream_Element_Array);
61624
61625 9
61626 -- Synchronous call
61627 procedure Do_RPC(
61628 Partition : in Partition_Id;
61629 Params : access Params_Stream_Type;
61630 Result : access Params_Stream_Type);
61631
61632 10
61633 -- Asynchronous call
61634 procedure Do_APC(
61635 Partition : in Partition_Id;
61636 Params : access Params_Stream_Type);
61637
61638 11
61639 -- The handler for incoming RPCs
61640 type RPC_Receiver is access procedure(
61641 Params : access Params_Stream_Type;
61642 Result : access Params_Stream_Type);
61643
61644 12
61645 procedure Establish_RPC_Receiver(
61646 Partition : in Partition_Id;
61647 Receiver : in RPC_Receiver);
61648
61649 13
61650 private
61651 ... -- not specified by the language
61652 end System.RPC;
61653
61654 14
61655 A value of the type Partition_Id is used to identify a partition.
61656
61657 15
61658 An object of the type Params_Stream_Type is used for identifying the
61659 particular remote subprogram that is being called, as well as
61660 marshalling and unmarshalling the parameters or result of a remote
61661 subprogram call, as part of sending them between partitions.
61662
61663 16
61664 The Read and Write procedures override the corresponding abstract
61665 operations for the type Params_Stream_Type.
61666
61667 _Dynamic Semantics_
61668
61669 17
61670 The Do_RPC and Do_APC procedures send a message to the active partition
61671 identified by the Partition parameter.
61672
61673 18
61674 After sending the message, Do_RPC blocks the calling task until a reply
61675 message comes back from the called partition or some error is detected
61676 by the underlying communication system in which case Communication_Error
61677 is raised at the point of the call to Do_RPC.
61678
61679 19
61680 Do_APC operates in the same way as Do_RPC except that it is allowed to
61681 return immediately after sending the message.
61682
61683 20
61684 Upon normal return, the stream designated by the Result parameter of
61685 Do_RPC contains the reply message.
61686
61687 21
61688 The procedure System.RPC.Establish_RPC_Receiver is called once,
61689 immediately after elaborating the library units of an active partition
61690 (that is, right after the elaboration of the partition) if the partition
61691 includes an RCI library unit, but prior to invoking the main subprogram,
61692 if any. The Partition parameter is the Partition_Id of the active
61693 partition being elaborated. The Receiver parameter designates an
61694 implementation-provided procedure called the RPC-receiver which will
61695 handle all RPCs received by the partition from the PCS.
61696 Establish_RPC_Receiver saves a reference to the RPC-receiver; when a
61697 message is received at the called partition, the RPC-receiver is called
61698 with the Params stream containing the message. When the RPC-receiver
61699 returns, the contents of the stream designated by Result is placed in a
61700 message and sent back to the calling partition.
61701
61702 22
61703 If a call on Do_RPC is aborted, a cancellation message is sent to the
61704 called partition, to request that the execution of the remotely called
61705 subprogram be aborted.
61706
61707 23
61708 The subprograms declared in System.RPC are potentially blocking
61709 operations.
61710
61711 _Implementation Requirements_
61712
61713 24
61714 The implementation of the RPC-receiver shall be reentrant, thereby
61715 allowing concurrent calls on it from the PCS to service concurrent
61716 remote subprogram calls into the partition.
61717
61718 24.1/1
61719 An implementation shall not restrict the replacement of the body of
61720 System.RPC. An implementation shall not restrict children of System.RPC.
61721 The related implementation permissions in the introduction to Annex A do
61722 not apply.
61723
61724 24.2/1
61725 If the implementation of System.RPC is provided by the user, an
61726 implementation shall support remote subprogram calls as specified.
61727
61728 _Documentation Requirements_
61729
61730 25
61731 The implementation of the PCS shall document whether the RPC-receiver is
61732 invoked from concurrent tasks. If there is an upper limit on the number
61733 of such tasks, this limit shall be documented as well, together with the
61734 mechanisms to configure it (if this is supported).
61735
61736 _Implementation Permissions_
61737
61738 26
61739 The PCS is allowed to contain implementation-defined interfaces for
61740 explicit message passing, broadcasting, etc. Similarly, it is allowed
61741 to provide additional interfaces to query the state of some remote
61742 partition (given its partition ID) or of the PCS itself, to set timeouts
61743 and retry parameters, to get more detailed error status, etc. These
61744 additional interfaces should be provided in child packages of
61745 System.RPC.
61746
61747 27
61748 A body for the package System.RPC need not be supplied by the
61749 implementation.
61750
61751 27.1/3
61752 An alternative declaration is allowed for package System.RPC as long as
61753 it provides a set of operations that is substantially equivalent to the
61754 specification defined in this subclause.
61755
61756 _Implementation Advice_
61757
61758 28
61759 Whenever possible, the PCS on the called partition should allow for
61760 multiple tasks to call the RPC-receiver with different messages and
61761 should allow them to block until the corresponding subprogram body
61762 returns.
61763
61764 29
61765 The Write operation on a stream of type Params_Stream_Type should raise
61766 Storage_Error if it runs out of space trying to write the Item into the
61767 stream.
61768
61769 NOTES
61770
61771 30
61772 10 The package System.RPC is not designed for direct calls by user
61773 programs. It is instead designed for use in the implementation of
61774 remote subprograms calls, being called by the calling stubs
61775 generated for a remote call interface library unit to initiate a
61776 remote call, and in turn calling back to an RPC-receiver that
61777 dispatches to the receiving stubs generated for the body of a
61778 remote call interface, to handle a remote call received from
61779 elsewhere.
61780
61781 \1f
61782 File: arm2012.info, Node: Annex F, Next: Annex G, Prev: Annex E, Up: Top
61783
61784 Annex F Information Systems
61785 ***************************
61786
61787 1
61788 This Annex provides a set of facilities relevant to Information Systems
61789 programming. These fall into several categories:
61790
61791 2
61792 * an attribute definition clause specifying Machine_Radix for a
61793 decimal subtype;
61794
61795 3
61796 * the package Decimal, which declares a set of constants defining the
61797 implementation's capacity for decimal types, and a generic
61798 procedure for decimal division; and
61799
61800 4/2
61801 * the child packages Text_IO.Editing, Wide_Text_IO.Editing, and
61802 Wide_Wide_Text_IO.Editing, which support formatted and localized
61803 output of decimal data, based on "picture String" values.
61804
61805 5/2
61806 See also: *note 3.5.9::, "*note 3.5.9:: Fixed Point Types"; *note
61807 3.5.10::, "*note 3.5.10:: Operations of Fixed Point Types"; *note 4.6::,
61808 "*note 4.6:: Type Conversions"; *note 13.3::, "*note 13.3:: Operational
61809 and Representation Attributes"; *note A.10.9::, "*note A.10.9::
61810 Input-Output for Real Types"; *note B.3::, "*note B.3:: Interfacing with
61811 C and C++"; *note B.4::, "*note B.4:: Interfacing with COBOL"; *note
61812 Annex G::, "*note Annex G:: Numerics".
61813
61814 6
61815 The character and string handling packages in *note Annex A::, "*note
61816 Annex A:: Predefined Language Environment" are also relevant for
61817 Information Systems.
61818
61819 _Implementation Advice_
61820
61821 7/3
61822 If COBOL (respectively, C) is widely supported in the target
61823 environment, implementations supporting the Information Systems Annex
61824 should provide the child package Interfaces.COBOL (respectively,
61825 Interfaces.C) specified in *note Annex B:: and should support a
61826 convention_identifier of COBOL (respectively, C) for the Convention
61827 aspect (see *note Annex B::), thus allowing Ada programs to interface
61828 with programs written in that language.
61829
61830 * Menu:
61831
61832 * F.1 :: Machine_Radix Attribute Definition Clause
61833 * F.2 :: The Package Decimal
61834 * F.3 :: Edited Output for Decimal Types
61835
61836 \1f
61837 File: arm2012.info, Node: F.1, Next: F.2, Up: Annex F
61838
61839 F.1 Machine_Radix Attribute Definition Clause
61840 =============================================
61841
61842 _Static Semantics_
61843
61844 1
61845 Machine_Radix may be specified for a decimal first subtype (see *note
61846 3.5.9::) via an attribute_definition_clause; the expression of such a
61847 clause shall be static, and its value shall be 2 or 10. A value of 2
61848 implies a binary base range; a value of 10 implies a decimal base range.
61849
61850 _Implementation Advice_
61851
61852 2
61853 Packed decimal should be used as the internal representation for objects
61854 of subtype S when S'Machine_Radix = 10.
61855
61856 _Examples_
61857
61858 3
61859 Example of Machine_Radix attribute definition clause:
61860
61861 4
61862 type Money is delta 0.01 digits 15;
61863 for Money'Machine_Radix use 10;
61864
61865 \1f
61866 File: arm2012.info, Node: F.2, Next: F.3, Prev: F.1, Up: Annex F
61867
61868 F.2 The Package Decimal
61869 =======================
61870
61871 _Static Semantics_
61872
61873 1
61874 The library package Decimal has the following declaration:
61875
61876 2
61877 package Ada.Decimal is
61878 pragma Pure(Decimal);
61879
61880 3
61881 Max_Scale : constant := implementation-defined;
61882 Min_Scale : constant := implementation-defined;
61883
61884 4
61885 Min_Delta : constant := 10.0**(-Max_Scale);
61886 Max_Delta : constant := 10.0**(-Min_Scale);
61887
61888 5
61889 Max_Decimal_Digits : constant := implementation-defined;
61890
61891 6/3
61892 generic
61893 type Dividend_Type is delta <> digits <>;
61894 type Divisor_Type is delta <> digits <>;
61895 type Quotient_Type is delta <> digits <>;
61896 type Remainder_Type is delta <> digits <>;
61897 procedure Divide (Dividend : in Dividend_Type;
61898 Divisor : in Divisor_Type;
61899 Quotient : out Quotient_Type;
61900 Remainder : out Remainder_Type)
61901 with Convention => Intrinsic;
61902
61903 7
61904 end Ada.Decimal;
61905
61906 8
61907 Max_Scale is the largest N such that 10.0**(-N) is allowed as a decimal
61908 type's delta. Its type is universal_integer.
61909
61910 9
61911 Min_Scale is the smallest N such that 10.0**(-N) is allowed as a decimal
61912 type's delta. Its type is universal_integer.
61913
61914 10
61915 Min_Delta is the smallest value allowed for delta in a
61916 decimal_fixed_point_definition. Its type is universal_real.
61917
61918 11
61919 Max_Delta is the largest value allowed for delta in a
61920 decimal_fixed_point_definition. Its type is universal_real.
61921
61922 12
61923 Max_Decimal_Digits is the largest value allowed for digits in a
61924 decimal_fixed_point_definition. Its type is universal_integer.
61925
61926 _Static Semantics_
61927
61928 13
61929 The effect of Divide is as follows. The value of Quotient is
61930 Quotient_Type(Dividend/Divisor). The value of Remainder is
61931 Remainder_Type(Intermediate), where Intermediate is the difference
61932 between Dividend and the product of Divisor and Quotient; this result is
61933 computed exactly.
61934
61935 _Implementation Requirements_
61936
61937 14
61938 Decimal.Max_Decimal_Digits shall be at least 18.
61939
61940 15
61941 Decimal.Max_Scale shall be at least 18.
61942
61943 16
61944 Decimal.Min_Scale shall be at most 0.
61945
61946 NOTES
61947
61948 17
61949 1 The effect of division yielding a quotient with control over
61950 rounding versus truncation is obtained by applying either the
61951 function attribute Quotient_Type'Round or the conversion
61952 Quotient_Type to the expression Dividend/Divisor.
61953
61954 \1f
61955 File: arm2012.info, Node: F.3, Prev: F.2, Up: Annex F
61956
61957 F.3 Edited Output for Decimal Types
61958 ===================================
61959
61960 1/2
61961 The child packages Text_IO.Editing, Wide_Text_IO.Editing, and
61962 Wide_Wide_Text_IO.Editing provide localizable formatted text output,
61963 known as edited output, for decimal types. An edited output string is a
61964 function of a numeric value, program-specifiable locale elements, and a
61965 format control value. The numeric value is of some decimal type. The
61966 locale elements are:
61967
61968 2
61969 * the currency string;
61970
61971 3
61972 * the digits group separator character;
61973
61974 4
61975 * the radix mark character; and
61976
61977 5
61978 * the fill character that replaces leading zeros of the numeric
61979 value.
61980
61981 6/2
61982 For Text_IO.Editing the edited output and currency strings are of type
61983 String, and the locale characters are of type Character. For
61984 Wide_Text_IO.Editing their types are Wide_String and Wide_Character,
61985 respectively. For Wide_Wide_Text_IO.Editing their types are
61986 Wide_Wide_String and Wide_Wide_Character, respectively.
61987
61988 7
61989 Each of the locale elements has a default value that can be replaced or
61990 explicitly overridden.
61991
61992 8
61993 A format-control value is of the private type Picture; it determines the
61994 composition of the edited output string and controls the form and
61995 placement of the sign, the position of the locale elements and the
61996 decimal digits, the presence or absence of a radix mark, suppression of
61997 leading zeros, and insertion of particular character values.
61998
61999 9
62000 A Picture object is composed from a String value, known as a picture
62001 String, that serves as a template for the edited output string, and a
62002 Boolean value that controls whether a string of all space characters is
62003 produced when the number's value is zero. A picture String comprises a
62004 sequence of one- or two-Character symbols, each serving as a placeholder
62005 for a character or string at a corresponding position in the edited
62006 output string. The picture String symbols fall into several categories
62007 based on their effect on the edited output string:
62008
62009 10
62010 Decimal Digit: '9'
62011 Radix Control: '.' 'V'
62012 Sign Control: '+' '-' '<' '>' "CR" "DB"
62013 Currency Control: '$' '#'
62014 Zero Suppression: 'Z' '*'
62015 Simple Insertion: '_' 'B' '0' '/'
62016
62017 11
62018 The entries are not case-sensitive. Mixed- or lower-case forms for "CR"
62019 and "DB", and lower-case forms for 'V', 'Z', and 'B', have the same
62020 effect as the upper-case symbols shown.
62021
62022 12
62023 An occurrence of a '9' Character in the picture String represents a
62024 decimal digit position in the edited output string.
62025
62026 13
62027 A radix control Character in the picture String indicates the position
62028 of the radix mark in the edited output string: an actual character
62029 position for '.', or an assumed position for 'V'.
62030
62031 14
62032 A sign control Character in the picture String affects the form of the
62033 sign in the edited output string. The '<' and '>' Character values
62034 indicate parentheses for negative values. A Character '+', '-', or '<'
62035 appears either singly, signifying a fixed-position sign in the edited
62036 output, or repeated, signifying a floating-position sign that is
62037 preceded by zero or more space characters and that replaces a leading 0.
62038
62039 15
62040 A currency control Character in the picture String indicates an
62041 occurrence of the currency string in the edited output string. The '$'
62042 Character represents the complete currency string; the '#' Character
62043 represents one character of the currency string. A '$' Character
62044 appears either singly, indicating a fixed-position currency string in
62045 the edited output, or repeated, indicating a floating-position currency
62046 string that occurs in place of a leading 0. A sequence of '#' Character
62047 values indicates either a fixed- or floating-position currency string,
62048 depending on context.
62049
62050 16
62051 A zero suppression Character in the picture String allows a leading zero
62052 to be replaced by either the space character (for 'Z') or the fill
62053 character (for '*').
62054
62055 17
62056 A simple insertion Character in the picture String represents, in
62057 general, either itself (if '/' or '0'), the space character (if 'B'), or
62058 the digits group separator character (if '_'). In some contexts it is
62059 treated as part of a floating sign, floating currency, or zero
62060 suppression string.
62061
62062 18/2
62063 An example of a picture String is "<###Z_ZZ9.99>". If the currency
62064 string is "kr", the separator character is ',', and the radix mark is
62065 '.' then the edited output string values for the decimal values 32.10
62066 and -5432.10 are "bbkrbbb32.10b" and "(bkr5,432.10)", respectively,
62067 where 'b' indicates the space character.
62068
62069 19/2
62070 The generic packages Text_IO.Decimal_IO, Wide_Text_IO.Decimal_IO, and
62071 Wide_Wide_Text_IO.Decimal_IO (see *note A.10.9::, "*note A.10.9::
62072 Input-Output for Real Types") provide text input and nonedited text
62073 output for decimal types.
62074
62075 NOTES
62076
62077 20/2
62078 2 A picture String is of type Standard.String, for all of
62079 Text_IO.Editing, Wide_Text_IO.Editing, and
62080 Wide_Wide_Text_IO.Editing.
62081
62082 * Menu:
62083
62084 * F.3.1 :: Picture String Formation
62085 * F.3.2 :: Edited Output Generation
62086 * F.3.3 :: The Package Text_IO.Editing
62087 * F.3.4 :: The Package Wide_Text_IO.Editing
62088 * F.3.5 :: The Package Wide_Wide_Text_IO.Editing
62089
62090 \1f
62091 File: arm2012.info, Node: F.3.1, Next: F.3.2, Up: F.3
62092
62093 F.3.1 Picture String Formation
62094 ------------------------------
62095
62096 1/3
62097 A well-formed picture String, or simply picture String, is a String
62098 value that conforms to the syntactic rules, composition constraints, and
62099 character replication conventions specified in this subclause.
62100
62101 _Dynamic Semantics_
62102
62103 2/1
62104 This paragraph was deleted.
62105
62106 3
62107 picture_string ::=
62108 fixed_$_picture_string
62109 | fixed_#_picture_string
62110 | floating_currency_picture_string
62111 | non_currency_picture_string
62112
62113 4
62114 fixed_$_picture_string ::=
62115 [fixed_LHS_sign] fixed_$_char {direct_insertion} [zero_suppression]
62116 number [RHS_sign]
62117
62118 | [fixed_LHS_sign {direct_insertion}] [zero_suppression]
62119 number fixed_$_char {direct_insertion} [RHS_sign]
62120
62121 | floating_LHS_sign number fixed_$_char {direct_insertion} [RHS_sign]
62122
62123 | [fixed_LHS_sign] fixed_$_char {direct_insertion}
62124 all_zero_suppression_number {direct_insertion} [RHS_sign]
62125
62126 | [fixed_LHS_sign {direct_insertion}] all_zero_suppression_number {direct_insertion}
62127 fixed_$_char {direct_insertion} [RHS_sign]
62128
62129 | all_sign_number {direct_insertion} fixed_$_char {direct_insertion} [RHS_sign]
62130
62131 5
62132 fixed_#_picture_string ::=
62133 [fixed_LHS_sign] single_#_currency {direct_insertion}
62134 [zero_suppression] number [RHS_sign]
62135
62136 | [fixed_LHS_sign] multiple_#_currency {direct_insertion}
62137 zero_suppression number [RHS_sign]
62138
62139 | [fixed_LHS_sign {direct_insertion}] [zero_suppression]
62140 number fixed_#_currency {direct_insertion} [RHS_sign]
62141
62142 | floating_LHS_sign number fixed_#_currency {direct_insertion} [RHS_sign]
62143
62144 | [fixed_LHS_sign] single_#_currency {direct_insertion}
62145 all_zero_suppression_number {direct_insertion} [RHS_sign]
62146
62147 | [fixed_LHS_sign] multiple_#_currency {direct_insertion}
62148 all_zero_suppression_number {direct_insertion} [RHS_sign]
62149
62150 | [fixed_LHS_sign {direct_insertion}] all_zero_suppression_number {direct_insertion}
62151 fixed_#_currency {direct_insertion} [RHS_sign]
62152
62153 | all_sign_number {direct_insertion} fixed_#_currency {direct_insertion} [RHS_sign]
62154
62155 6
62156 floating_currency_picture_string ::=
62157 [fixed_LHS_sign] {direct_insertion} floating_$_currency number [RHS_sign]
62158 | [fixed_LHS_sign] {direct_insertion} floating_#_currency number [RHS_sign]
62159 | [fixed_LHS_sign] {direct_insertion} all_currency_number {direct_insertion} [RHS_sign]
62160
62161 7
62162 non_currency_picture_string ::=
62163 [fixed_LHS_sign {direct_insertion}] zero_suppression number [RHS_sign]
62164 | [floating_LHS_sign] number [RHS_sign]
62165 | [fixed_LHS_sign {direct_insertion}] all_zero_suppression_number {direct_insertion}
62166 [RHS_sign]
62167 | all_sign_number {direct_insertion}
62168 | fixed_LHS_sign direct_insertion {direct_insertion} number [RHS_sign]
62169
62170 8
62171 fixed_LHS_sign ::= LHS_Sign
62172
62173 9
62174 LHS_Sign ::= + | - | <
62175
62176 10
62177 fixed_$_char ::= $
62178
62179 11
62180 direct_insertion ::= simple_insertion
62181
62182 12
62183 simple_insertion ::= _ | B | 0 | /
62184
62185 13
62186 zero_suppression ::= Z {Z | context_sensitive_insertion} | fill_string
62187
62188 14
62189 context_sensitive_insertion ::= simple_insertion
62190
62191 15
62192 fill_string ::= * {* | context_sensitive_insertion}
62193
62194 16
62195 number ::=
62196 fore_digits [radix [aft_digits] {direct_insertion}]
62197 | radix aft_digits {direct_insertion}
62198
62199 17
62200 fore_digits ::= 9 {9 | direct_insertion}
62201
62202 18
62203 aft_digits ::= {9 | direct_insertion} 9
62204
62205 19
62206 radix ::= . | V
62207
62208 20
62209 RHS_sign ::= + | - | > | CR | DB
62210
62211 21
62212 floating_LHS_sign ::=
62213 LHS_Sign {context_sensitive_insertion} LHS_Sign {LHS_Sign | context_sensitive_insertion}
62214
62215 22
62216 single_#_currency ::= #
62217
62218 23
62219 multiple_#_currency ::= ## {#}
62220
62221 24
62222 fixed_#_currency ::= single_#_currency | multiple_#_currency
62223
62224 25
62225 floating_$_currency ::=
62226 $ {context_sensitive_insertion} $ {$ | context_sensitive_insertion}
62227
62228 26
62229 floating_#_currency ::=
62230 # {context_sensitive_insertion} # {# | context_sensitive_insertion}
62231
62232 27
62233 all_sign_number ::= all_sign_fore [radix [all_sign_aft]] [>]
62234
62235 28
62236 all_sign_fore ::=
62237 sign_char {context_sensitive_insertion} sign_char {sign_char | context_sensitive_insertion}
62238
62239 29
62240 all_sign_aft ::= {all_sign_aft_char} sign_char
62241
62242 all_sign_aft_char ::= sign_char | context_sensitive_insertion
62243
62244 30
62245 sign_char ::= + | - | <
62246
62247 31
62248 all_currency_number ::= all_currency_fore [radix [all_currency_aft]]
62249
62250 32
62251 all_currency_fore ::=
62252 currency_char {context_sensitive_insertion}
62253 currency_char {currency_char | context_sensitive_insertion}
62254
62255 33
62256 all_currency_aft ::= {all_currency_aft_char} currency_char
62257
62258 all_currency_aft_char ::= currency_char | context_sensitive_insertion
62259
62260 34
62261 currency_char ::= $ | #
62262
62263 35
62264 all_zero_suppression_number ::= all_zero_suppression_fore [ radix [all_zero_suppression_aft]]
62265
62266 36
62267 all_zero_suppression_fore ::=
62268 zero_suppression_char {zero_suppression_char | context_sensitive_insertion}
62269
62270 37
62271 all_zero_suppression_aft ::= {all_zero_suppression_aft_char} zero_suppression_char
62272
62273 all_zero_suppression_aft_char ::= zero_suppression_char | context_sensitive_insertion
62274
62275 38
62276 zero_suppression_char ::= Z | *
62277
62278 39
62279 The following composition constraints apply to a picture String:
62280
62281 40
62282 * A floating_LHS_sign does not have occurrences of different LHS_Sign
62283 Character values.
62284
62285 41
62286 * If a picture String has '<' as fixed_LHS_sign, then it has '>' as
62287 RHS_sign.
62288
62289 42
62290 * If a picture String has '<' in a floating_LHS_sign or in an
62291 all_sign_number, then it has an occurrence of '>'.
62292
62293 43/1
62294 * If a picture String has '+' or '-' as fixed_LHS_sign, in a
62295 floating_LHS_sign, or in an all_sign_number, then it has no
62296 RHS_sign or '>' character.
62297
62298 44
62299 * An instance of all_sign_number does not have occurrences of
62300 different sign_char Character values.
62301
62302 45
62303 * An instance of all_currency_number does not have occurrences of
62304 different currency_char Character values.
62305
62306 46
62307 * An instance of all_zero_suppression_number does not have
62308 occurrences of different zero_suppression_char Character values,
62309 except for possible case differences between 'Z' and 'z'.
62310
62311 47
62312 A replicable Character is a Character that, by the above rules, can
62313 occur in two consecutive positions in a picture String.
62314
62315 48
62316 A Character replication is a String
62317
62318 49
62319 char & '(' & spaces & count_string & ')'
62320
62321 50
62322 where char is a replicable Character, spaces is a String (possibly
62323 empty) comprising only space Character values, and count_string is a
62324 String of one or more decimal digit Character values. A Character
62325 replication in a picture String has the same effect as (and is said to
62326 be equivalent to) a String comprising n consecutive occurrences of char,
62327 where n=Integer'Value(count_string).
62328
62329 51
62330 An expanded picture String is a picture String containing no Character
62331 replications.
62332
62333 NOTES
62334
62335 52
62336 3 Although a sign to the left of the number can float, a sign to
62337 the right of the number is in a fixed position.
62338
62339 \1f
62340 File: arm2012.info, Node: F.3.2, Next: F.3.3, Prev: F.3.1, Up: F.3
62341
62342 F.3.2 Edited Output Generation
62343 ------------------------------
62344
62345 _Dynamic Semantics_
62346
62347 1
62348 The contents of an edited output string are based on:
62349
62350 2
62351 * A value, Item, of some decimal type Num,
62352
62353 3
62354 * An expanded picture String Pic_String,
62355
62356 4
62357 * A Boolean value, Blank_When_Zero,
62358
62359 5
62360 * A Currency string,
62361
62362 6
62363 * A Fill character,
62364
62365 7
62366 * A Separator character, and
62367
62368 8
62369 * A Radix_Mark character.
62370
62371 9
62372 The combination of a True value for Blank_When_Zero and a '*' character
62373 in Pic_String is inconsistent; no edited output string is defined.
62374
62375 10
62376 A layout error is identified in the rules below if leading nonzero
62377 digits of Item, character values of the Currency string, or a negative
62378 sign would be truncated; in such cases no edited output string is
62379 defined.
62380
62381 11
62382 The edited output string has lower bound 1 and upper bound N where N =
62383 Pic_String'Length + Currency_Length_Adjustment - Radix_Adjustment, and
62384
62385 12
62386 * Currency_Length_Adjustment = Currency'Length - 1 if there is some
62387 occurrence of '$' in Pic_String, and 0 otherwise.
62388
62389 13
62390 * Radix_Adjustment = 1 if there is an occurrence of 'V' or 'v' in
62391 Pic_Str, and 0 otherwise.
62392
62393 14
62394 Let the magnitude of Item be expressed as a base-10 number
62395 Ip···I1.F1···Fq, called the displayed magnitude of Item, where:
62396
62397 15
62398 * q = Min(Max(Num'Scale, 0), n) where n is 0 if Pic_String has no
62399 radix and is otherwise the number of digit positions following
62400 radix in Pic_String, where a digit position corresponds to an
62401 occurrence of '9', a zero_suppression_char (for an
62402 all_zero_suppression_number), a currency_char (for an
62403 all_currency_number), or a sign_char (for an all_sign_number).
62404
62405 16
62406 * Ip /= 0 if p>0.
62407
62408 17
62409 If n < Num'Scale, then the above number is the result of rounding (away
62410 from 0 if exactly midway between values).
62411
62412 18
62413 If Blank_When_Zero = True and the displayed magnitude of Item is zero,
62414 then the edited output string comprises all space character values.
62415 Otherwise, the picture String is treated as a sequence of instances of
62416 syntactic categories based on the rules in *note F.3.1::, and the edited
62417 output string is the concatenation of string values derived from these
62418 categories according to the following mapping rules.
62419
62420 19
62421 Table F-1 shows the mapping from a sign control symbol to a
62422 corresponding character or string in the edited output. In the columns
62423 showing the edited output, a lower-case 'b' represents the space
62424 character. If there is no sign control symbol but the value of Item is
62425 negative, a layout error occurs and no edited output string is produced.
62426
62427 Table F-1: Edited Output for Sign Control Symbols
62428 Sign Control Symbol Edited Output for Edited Output for
62429 Nonnegative Number Negative Number
62430 '+' '+' '-'
62431 '-' 'b' '-'
62432 '<' 'b' '('
62433 '>' 'b' ')'
62434 "CR" "bb" "CR"
62435 "DB" "bb" "DB"
62436 20
62437 An instance of fixed_LHS_sign maps to a character as shown in Table F-1.
62438
62439 21
62440 An instance of fixed_$_char maps to Currency.
62441
62442 22
62443 An instance of direct_insertion maps to Separator if direct_insertion =
62444 '_', and to the direct_insertion Character otherwise.
62445
62446 23
62447 An instance of number maps to a string integer_part & radix_part &
62448 fraction_part where:
62449
62450 24
62451 * The string for integer_part is obtained as follows:
62452
62453 25
62454 1. Occurrences of '9' in fore_digits of number are replaced
62455 from right to left with the decimal digit character values for
62456 I1, ..., Ip, respectively.
62457
62458 26
62459 2. Each occurrence of '9' in fore_digits to the left of the
62460 leftmost '9' replaced according to rule 1 is replaced with
62461 '0'.
62462
62463 27
62464 3. If p exceeds the number of occurrences of '9' in
62465 fore_digits of number, then the excess leftmost digits are
62466 eligible for use in the mapping of an instance of
62467 zero_suppression, floating_LHS_sign, floating_$_currency, or
62468 floating_#_currency to the left of number; if there is no such
62469 instance, then a layout error occurs and no edited output
62470 string is produced.
62471
62472 28
62473 * The radix_part is:
62474
62475 29
62476 * "" if number does not include a radix, if radix = 'V', or
62477 if radix = 'v'
62478
62479 30
62480 * Radix_Mark if number includes '.' as radix
62481
62482 31
62483 * The string for fraction_part is obtained as follows:
62484
62485 32
62486 1. Occurrences of '9' in aft_digits of number are replaced
62487 from left to right with the decimal digit character values for
62488 F1, ... Fq.
62489
62490 33
62491 2. Each occurrence of '9' in aft_digits to the right of the
62492 rightmost '9' replaced according to rule 1 is replaced by '0'.
62493
62494 34
62495 An instance of zero_suppression maps to the string obtained as follows:
62496
62497 35
62498 1. The rightmost 'Z', 'z', or '*' Character values are replaced
62499 with the excess digits (if any) from the integer_part of the
62500 mapping of the number to the right of the zero_suppression
62501 instance,
62502
62503 36
62504 2. A context_sensitive_insertion Character is replaced as though
62505 it were a direct_insertion Character, if it occurs to the right of
62506 some 'Z', 'z', or '*' in zero_suppression that has been mapped to
62507 an excess digit,
62508
62509 37
62510 3. Each Character to the left of the leftmost Character replaced
62511 according to rule 1 above is replaced by:
62512
62513 38
62514 * the space character if the zero suppression Character is
62515 'Z' or 'z', or
62516
62517 39
62518 * the Fill character if the zero suppression Character is
62519 '*'.
62520
62521 40
62522 4. A layout error occurs if some excess digits remain after all
62523 'Z', 'z', and '*' Character values in zero_suppression have been
62524 replaced via rule 1; no edited output string is produced.
62525
62526 41
62527 An instance of RHS_sign maps to a character or string as shown in Table
62528 F-1.
62529
62530 42
62531 An instance of floating_LHS_sign maps to the string obtained as follows.
62532
62533 43
62534 1. Up to all but one of the rightmost LHS_Sign Character values
62535 are replaced by the excess digits (if any) from the integer_part of
62536 the mapping of the number to the right of the floating_LHS_sign
62537 instance.
62538
62539 44
62540 2. The next Character to the left is replaced with the character
62541 given by the entry in Table F-1 corresponding to the LHS_Sign
62542 Character.
62543
62544 45
62545 3. A context_sensitive_insertion Character is replaced as though
62546 it were a direct_insertion Character, if it occurs to the right of
62547 the leftmost LHS_Sign character replaced according to rule 1.
62548
62549 46
62550 4. Any other Character is replaced by the space character..
62551
62552 47
62553 5. A layout error occurs if some excess digits remain after
62554 replacement via rule 1; no edited output string is produced.
62555
62556 48
62557 An instance of fixed_#_currency maps to the Currency string with n space
62558 character values concatenated on the left (if the instance does not
62559 follow a radix) or on the right (if the instance does follow a radix),
62560 where n is the difference between the length of the fixed_#_currency
62561 instance and Currency'Length. A layout error occurs if Currency'Length
62562 exceeds the length of the fixed_#_currency instance; no edited output
62563 string is produced.
62564
62565 49
62566 An instance of floating_$_currency maps to the string obtained as
62567 follows:
62568
62569 50
62570 1. Up to all but one of the rightmost '$' Character values are
62571 replaced with the excess digits (if any) from the integer_part of
62572 the mapping of the number to the right of the floating_$_currency
62573 instance.
62574
62575 51
62576 2. The next Character to the left is replaced by the Currency
62577 string.
62578
62579 52
62580 3. A context_sensitive_insertion Character is replaced as though
62581 it were a direct_insertion Character, if it occurs to the right of
62582 the leftmost '$' Character replaced via rule 1.
62583
62584 53
62585 4. Each other Character is replaced by the space character.
62586
62587 54
62588 5. A layout error occurs if some excess digits remain after
62589 replacement by rule 1; no edited output string is produced.
62590
62591 55
62592 An instance of floating_#_currency maps to the string obtained as
62593 follows:
62594
62595 56
62596 1. Up to all but one of the rightmost '#' Character values are
62597 replaced with the excess digits (if any) from the integer_part of
62598 the mapping of the number to the right of the floating_#_currency
62599 instance.
62600
62601 57
62602 2. The substring whose last Character occurs at the position
62603 immediately preceding the leftmost Character replaced via rule 1,
62604 and whose length is Currency'Length, is replaced by the Currency
62605 string.
62606
62607 58
62608 3. A context_sensitive_insertion Character is replaced as though
62609 it were a direct_insertion Character, if it occurs to the right of
62610 the leftmost '#' replaced via rule 1.
62611
62612 59
62613 4. Any other Character is replaced by the space character.
62614
62615 60
62616 5. A layout error occurs if some excess digits remain after
62617 replacement rule 1, or if there is no substring with the required
62618 length for replacement rule 2; no edited output string is produced.
62619
62620 61
62621 An instance of all_zero_suppression_number maps to:
62622
62623 62
62624 * a string of all spaces if the displayed magnitude of Item is zero,
62625 the zero_suppression_char is 'Z' or 'z', and the instance of
62626 all_zero_suppression_number does not have a radix at its last
62627 character position;
62628
62629 63
62630 * a string containing the Fill character in each position except for
62631 the character (if any) corresponding to radix, if
62632 zero_suppression_char = '*' and the displayed magnitude of Item is
62633 zero;
62634
62635 64
62636 * otherwise, the same result as if each zero_suppression_char in
62637 all_zero_suppression_aft were '9', interpreting the instance of
62638 all_zero_suppression_number as either zero_suppression number (if a
62639 radix and all_zero_suppression_aft are present), or as
62640 zero_suppression otherwise.
62641
62642 65
62643 An instance of all_sign_number maps to:
62644
62645 66
62646 * a string of all spaces if the displayed magnitude of Item is zero
62647 and the instance of all_sign_number does not have a radix at its
62648 last character position;
62649
62650 67
62651 * otherwise, the same result as if each sign_char in
62652 all_sign_number_aft were '9', interpreting the instance of
62653 all_sign_number as either floating_LHS_sign number (if a radix and
62654 all_sign_number_aft are present), or as floating_LHS_sign
62655 otherwise.
62656
62657 68
62658 An instance of all_currency_number maps to:
62659
62660 69
62661 * a string of all spaces if the displayed magnitude of Item is zero
62662 and the instance of all_currency_number does not have a radix at
62663 its last character position;
62664
62665 70
62666 * otherwise, the same result as if each currency_char in
62667 all_currency_number_aft were '9', interpreting the instance of
62668 all_currency_number as floating_$_currency number or
62669 floating_#_currency number (if a radix and all_currency_number_aft
62670 are present), or as floating_$_currency or floating_#_currency
62671 otherwise.
62672
62673 _Examples_
62674
62675 71
62676 In the result string values shown below, 'b' represents the space
62677 character.
62678
62679 72
62680 Item: Picture and Result Strings:
62681
62682 73/3
62683 123456.78 Picture: "-###**_***_**9.99"
62684 Result: "bbb$***123,456.78"
62685 "bbFF***123.456,78" (currency = "FF",
62686 separator = '.',
62687 radix mark = ',')
62688
62689 74/1
62690 123456.78 Picture: "-$**_***_**9.99"
62691 Result: "b$***123,456.78"
62692 "bFF***123.456,78" (currency = "FF",
62693 separator = '.',
62694 radix mark = ',')
62695
62696 75
62697 0.0 Picture: "-$$$$$$.$$"
62698 Result: "bbbbbbbbbb"
62699
62700 76
62701 0.20 Picture: "-$$$$$$.$$"
62702 Result: "bbbbbb$.20"
62703
62704 77
62705 -1234.565 Picture: "<<<<_<<<.<<###>"
62706 Result: "bb(1,234.57DMb)" (currency = "DM")
62707
62708 78
62709 12345.67 Picture: "###_###_##9.99"
62710 Result: "bbCHF12,345.67" (currency = "CHF")
62711
62712 \1f
62713 File: arm2012.info, Node: F.3.3, Next: F.3.4, Prev: F.3.2, Up: F.3
62714
62715 F.3.3 The Package Text_IO.Editing
62716 ---------------------------------
62717
62718 1
62719 The package Text_IO.Editing provides a private type Picture with
62720 associated operations, and a generic package Decimal_Output. An object
62721 of type Picture is composed from a well-formed picture String (see *note
62722 F.3.1::) and a Boolean item indicating whether a zero numeric value will
62723 result in an edited output string of all space characters. The package
62724 Decimal_Output contains edited output subprograms implementing the
62725 effects defined in *note F.3.2::.
62726
62727 _Static Semantics_
62728
62729 2
62730 The library package Text_IO.Editing has the following declaration:
62731
62732 3
62733 package Ada.Text_IO.Editing is
62734
62735 4
62736 type Picture is private;
62737
62738 5
62739 function Valid (Pic_String : in String;
62740 Blank_When_Zero : in Boolean := False) return Boolean;
62741
62742 6
62743 function To_Picture (Pic_String : in String;
62744 Blank_When_Zero : in Boolean := False)
62745 return Picture;
62746
62747 7
62748 function Pic_String (Pic : in Picture) return String;
62749 function Blank_When_Zero (Pic : in Picture) return Boolean;
62750
62751 8
62752 Max_Picture_Length : constant := implementation_defined;
62753
62754 9
62755 Picture_Error : exception;
62756
62757 10
62758 Default_Currency : constant String := "$";
62759 Default_Fill : constant Character := '*';
62760 Default_Separator : constant Character := ',';
62761 Default_Radix_Mark : constant Character := '.';
62762
62763 11
62764 generic
62765 type Num is delta <> digits <>;
62766 Default_Currency : in String := Text_IO.Editing.Default_Currency;
62767 Default_Fill : in Character := Text_IO.Editing.Default_Fill;
62768 Default_Separator : in Character :=
62769 Text_IO.Editing.Default_Separator;
62770 Default_Radix_Mark : in Character :=
62771 Text_IO.Editing.Default_Radix_Mark;
62772 package Decimal_Output is
62773 function Length (Pic : in Picture;
62774 Currency : in String := Default_Currency)
62775 return Natural;
62776
62777 12
62778 function Valid (Item : in Num;
62779 Pic : in Picture;
62780 Currency : in String := Default_Currency)
62781 return Boolean;
62782
62783 13
62784 function Image (Item : in Num;
62785 Pic : in Picture;
62786 Currency : in String := Default_Currency;
62787 Fill : in Character := Default_Fill;
62788 Separator : in Character := Default_Separator;
62789 Radix_Mark : in Character := Default_Radix_Mark)
62790 return String;
62791
62792 14
62793 procedure Put (File : in File_Type;
62794 Item : in Num;
62795 Pic : in Picture;
62796 Currency : in String := Default_Currency;
62797 Fill : in Character := Default_Fill;
62798 Separator : in Character := Default_Separator;
62799 Radix_Mark : in Character := Default_Radix_Mark);
62800
62801 15
62802 procedure Put (Item : in Num;
62803 Pic : in Picture;
62804 Currency : in String := Default_Currency;
62805 Fill : in Character := Default_Fill;
62806 Separator : in Character := Default_Separator;
62807 Radix_Mark : in Character := Default_Radix_Mark);
62808
62809 16
62810 procedure Put (To : out String;
62811 Item : in Num;
62812 Pic : in Picture;
62813 Currency : in String := Default_Currency;
62814 Fill : in Character := Default_Fill;
62815 Separator : in Character := Default_Separator;
62816 Radix_Mark : in Character := Default_Radix_Mark);
62817 end Decimal_Output;
62818 private
62819 ... -- not specified by the language
62820 end Ada.Text_IO.Editing;
62821
62822 17
62823 The exception Constraint_Error is raised if the Image function or any of
62824 the Put procedures is invoked with a null string for Currency.
62825
62826 18
62827 function Valid (Pic_String : in String;
62828 Blank_When_Zero : in Boolean := False) return Boolean;
62829
62830 19
62831 Valid returns True if Pic_String is a well-formed picture
62832 String (see *note F.3.1::) the length of whose expansion does
62833 not exceed Max_Picture_Length, and if either Blank_When_Zero
62834 is False or Pic_String contains no '*'.
62835
62836 20
62837 function To_Picture (Pic_String : in String;
62838 Blank_When_Zero : in Boolean := False)
62839 return Picture;
62840
62841 21
62842 To_Picture returns a result Picture such that the application
62843 of the function Pic_String to this result yields an expanded
62844 picture String equivalent to Pic_String, and such that
62845 Blank_When_Zero applied to the result Picture is the same
62846 value as the parameter Blank_When_Zero. Picture_Error is
62847 raised if not Valid(Pic_String, Blank_When_Zero).
62848
62849 22
62850 function Pic_String (Pic : in Picture) return String;
62851
62852 function Blank_When_Zero (Pic : in Picture) return Boolean;
62853
62854 23
62855 If Pic is To_Picture(String_Item, Boolean_Item) for some
62856 String_Item and Boolean_Item, then:
62857
62858 24
62859 * Pic_String(Pic) returns an expanded picture String
62860 equivalent to String_Item and with any lower-case letter
62861 replaced with its corresponding upper-case form, and
62862
62863 25
62864 * Blank_When_Zero(Pic) returns Boolean_Item.
62865
62866 26
62867 If Pic_1 and Pic_2 are objects of type Picture, then
62868 "="(Pic_1, Pic_2) is True when
62869
62870 27
62871 * Pic_String(Pic_1) = Pic_String(Pic_2), and
62872
62873 28
62874 * Blank_When_Zero(Pic_1) = Blank_When_Zero(Pic_2).
62875
62876 29
62877 function Length (Pic : in Picture;
62878 Currency : in String := Default_Currency)
62879 return Natural;
62880
62881 30
62882 Length returns Pic_String(Pic)'Length +
62883 Currency_Length_Adjustment - Radix_Adjustment where
62884
62885 31
62886 * Currency_Length_Adjustment =
62887
62888 32
62889 * Currency'Length - 1 if there is some occurrence
62890 of '$' in Pic_String(Pic), and
62891
62892 33
62893 * 0 otherwise.
62894
62895 34
62896 * Radix_Adjustment =
62897
62898 35
62899 * 1 if there is an occurrence of 'V' or 'v' in
62900 Pic_Str(Pic), and
62901
62902 36
62903 * 0 otherwise.
62904
62905 37
62906 function Valid (Item : in Num;
62907 Pic : in Picture;
62908 Currency : in String := Default_Currency)
62909 return Boolean;
62910
62911 38
62912 Valid returns True if Image(Item, Pic, Currency) does not
62913 raise Layout_Error, and returns False otherwise.
62914
62915 39
62916 function Image (Item : in Num;
62917 Pic : in Picture;
62918 Currency : in String := Default_Currency;
62919 Fill : in Character := Default_Fill;
62920 Separator : in Character := Default_Separator;
62921 Radix_Mark : in Character := Default_Radix_Mark)
62922 return String;
62923
62924 40
62925 Image returns the edited output String as defined in *note
62926 F.3.2:: for Item, Pic_String(Pic), Blank_When_Zero(Pic),
62927 Currency, Fill, Separator, and Radix_Mark. If these rules
62928 identify a layout error, then Image raises the exception
62929 Layout_Error.
62930
62931 41
62932 procedure Put (File : in File_Type;
62933 Item : in Num;
62934 Pic : in Picture;
62935 Currency : in String := Default_Currency;
62936 Fill : in Character := Default_Fill;
62937 Separator : in Character := Default_Separator;
62938 Radix_Mark : in Character := Default_Radix_Mark);
62939
62940 procedure Put (Item : in Num;
62941 Pic : in Picture;
62942 Currency : in String := Default_Currency;
62943 Fill : in Character := Default_Fill;
62944 Separator : in Character := Default_Separator;
62945 Radix_Mark : in Character := Default_Radix_Mark);
62946
62947 42
62948 Each of these Put procedures outputs Image(Item, Pic,
62949 Currency, Fill, Separator, Radix_Mark) consistent with the
62950 conventions for Put for other real types in case of bounded
62951 line length (see *note A.10.6::, "*note A.10.6:: Get and Put
62952 Procedures").
62953
62954 43
62955 procedure Put (To : out String;
62956 Item : in Num;
62957 Pic : in Picture;
62958 Currency : in String := Default_Currency;
62959 Fill : in Character := Default_Fill;
62960 Separator : in Character := Default_Separator;
62961 Radix_Mark : in Character := Default_Radix_Mark);
62962
62963 44/3
62964 Put copies Image(Item, Pic, Currency, Fill, Separator,
62965 Radix_Mark) to the given string, right justified. Otherwise,
62966 unassigned Character values in To are assigned the space
62967 character. If To'Length is less than the length of the string
62968 resulting from Image, then Layout_Error is raised.
62969
62970 _Implementation Requirements_
62971
62972 45
62973 Max_Picture_Length shall be at least 30. The implementation shall
62974 support currency strings of length up to at least 10, both for
62975 Default_Currency in an instantiation of Decimal_Output, and for Currency
62976 in an invocation of Image or any of the Put procedures.
62977
62978 NOTES
62979
62980 46
62981 4 The rules for edited output are based on COBOL (ANSI X3.23:1985,
62982 endorsed by ISO as ISO 1989-1985), with the following differences:
62983
62984 47
62985 * The COBOL provisions for picture string localization and for
62986 'P' format are absent from Ada.
62987
62988 48
62989 * The following Ada facilities are not in COBOL:
62990
62991 49
62992 * currency symbol placement after the number,
62993
62994 50
62995 * localization of edited output string for
62996 multi-character currency string values, including
62997 support for both length-preserving and
62998 length-expanding currency symbols in picture strings
62999
63000 51
63001 * localization of the radix mark, digits separator,
63002 and fill character, and
63003
63004 52
63005 * parenthesization of negative values.
63006
63007 52.1
63008 The value of 30 for Max_Picture_Length is the same limit as in
63009 COBOL.
63010
63011 \1f
63012 File: arm2012.info, Node: F.3.4, Next: F.3.5, Prev: F.3.3, Up: F.3
63013
63014 F.3.4 The Package Wide_Text_IO.Editing
63015 --------------------------------------
63016
63017 _Static Semantics_
63018
63019 1
63020 The child package Wide_Text_IO.Editing has the same contents as
63021 Text_IO.Editing, except that:
63022
63023 2
63024 * each occurrence of Character is replaced by Wide_Character,
63025
63026 3
63027 * each occurrence of Text_IO is replaced by Wide_Text_IO,
63028
63029 4
63030 * the subtype of Default_Currency is Wide_String rather than String,
63031 and
63032
63033 5
63034 * each occurrence of String in the generic package Decimal_Output is
63035 replaced by Wide_String.
63036
63037 NOTES
63038
63039 6
63040 5 Each of the functions Wide_Text_IO.Editing.Valid, To_Picture,
63041 and Pic_String has String (versus Wide_String) as its parameter or
63042 result subtype, since a picture String is not localizable.
63043
63044 \1f
63045 File: arm2012.info, Node: F.3.5, Prev: F.3.4, Up: F.3
63046
63047 F.3.5 The Package Wide_Wide_Text_IO.Editing
63048 -------------------------------------------
63049
63050 _Static Semantics_
63051
63052 1/2
63053 The child package Wide_Wide_Text_IO.Editing has the same contents as
63054 Text_IO.Editing, except that:
63055
63056 2/2
63057 * each occurrence of Character is replaced by Wide_Wide_Character,
63058
63059 3/2
63060 * each occurrence of Text_IO is replaced by Wide_Wide_Text_IO,
63061
63062 4/2
63063 * the subtype of Default_Currency is Wide_Wide_String rather than
63064 String, and
63065
63066 5/2
63067 * each occurrence of String in the generic package Decimal_Output is
63068 replaced by Wide_Wide_String.
63069
63070 NOTES
63071
63072 6/2
63073 6 Each of the functions Wide_Wide_Text_IO.Editing.Valid,
63074 To_Picture, and Pic_String has String (versus Wide_Wide_String) as
63075 its parameter or result subtype, since a picture String is not
63076 localizable.
63077
63078 \1f
63079 File: arm2012.info, Node: Annex G, Next: Annex H, Prev: Annex F, Up: Top
63080
63081 Annex G Numerics
63082 ****************
63083
63084 1
63085 The Numerics Annex specifies
63086
63087 2
63088 * features for complex arithmetic, including complex I/O;
63089
63090 3
63091 * a mode ("strict mode"), in which the predefined arithmetic
63092 operations of floating point and fixed point types and the
63093 functions and operations of various predefined packages have to
63094 provide guaranteed accuracy or conform to other numeric performance
63095 requirements, which the Numerics Annex also specifies;
63096
63097 4
63098 * a mode ("relaxed mode"), in which no accuracy or other numeric
63099 performance requirements need be satisfied, as for implementations
63100 not conforming to the Numerics Annex;
63101
63102 5/2
63103 * models of floating point and fixed point arithmetic on which the
63104 accuracy requirements of strict mode are based;
63105
63106 6/2
63107 * the definitions of the model-oriented attributes of floating point
63108 types that apply in the strict mode; and
63109
63110 6.1/2
63111 * features for the manipulation of real and complex vectors and
63112 matrices.
63113
63114 _Implementation Advice_
63115
63116 7/3
63117 If Fortran (respectively, C) is widely supported in the target
63118 environment, implementations supporting the Numerics Annex should
63119 provide the child package Interfaces.Fortran (respectively,
63120 Interfaces.C) specified in *note Annex B:: and should support a
63121 convention_identifier of Fortran (respectively, C) for the Convention
63122 aspect (see *note Annex B::), thus allowing Ada programs to interface
63123 with programs written in that language.
63124
63125 * Menu:
63126
63127 * G.1 :: Complex Arithmetic
63128 * G.2 :: Numeric Performance Requirements
63129 * G.3 :: Vector and Matrix Manipulation
63130
63131 \1f
63132 File: arm2012.info, Node: G.1, Next: G.2, Up: Annex G
63133
63134 G.1 Complex Arithmetic
63135 ======================
63136
63137 1
63138 Types and arithmetic operations for complex arithmetic are provided in
63139 Generic_Complex_Types, which is defined in *note G.1.1::.
63140 Implementation-defined approximations to the complex analogs of the
63141 mathematical functions known as the "elementary functions" are provided
63142 by the subprograms in Generic_Complex_Elementary_Functions, which is
63143 defined in *note G.1.2::. Both of these library units are generic
63144 children of the predefined package Numerics (see *note A.5::).
63145 Nongeneric equivalents of these generic packages for each of the
63146 predefined floating point types are also provided as children of
63147 Numerics.
63148
63149 * Menu:
63150
63151 * G.1.1 :: Complex Types
63152 * G.1.2 :: Complex Elementary Functions
63153 * G.1.3 :: Complex Input-Output
63154 * G.1.4 :: The Package Wide_Text_IO.Complex_IO
63155 * G.1.5 :: The Package Wide_Wide_Text_IO.Complex_IO
63156
63157 \1f
63158 File: arm2012.info, Node: G.1.1, Next: G.1.2, Up: G.1
63159
63160 G.1.1 Complex Types
63161 -------------------
63162
63163 _Static Semantics_
63164
63165 1
63166 The generic library package Numerics.Generic_Complex_Types has the
63167 following declaration:
63168
63169 2/1
63170 generic
63171 type Real is digits <>;
63172 package Ada.Numerics.Generic_Complex_Types is
63173 pragma Pure(Generic_Complex_Types);
63174
63175 3
63176 type Complex is
63177 record
63178 Re, Im : Real'Base;
63179 end record;
63180
63181 4/2
63182 type Imaginary is private;
63183 pragma Preelaborable_Initialization(Imaginary);
63184
63185 5
63186 i : constant Imaginary;
63187 j : constant Imaginary;
63188
63189 6
63190 function Re (X : Complex) return Real'Base;
63191 function Im (X : Complex) return Real'Base;
63192 function Im (X : Imaginary) return Real'Base;
63193
63194 7
63195 procedure Set_Re (X : in out Complex;
63196 Re : in Real'Base);
63197 procedure Set_Im (X : in out Complex;
63198 Im : in Real'Base);
63199 procedure Set_Im (X : out Imaginary;
63200 Im : in Real'Base);
63201
63202 8
63203 function Compose_From_Cartesian (Re, Im : Real'Base) return Complex;
63204 function Compose_From_Cartesian (Re : Real'Base) return Complex;
63205 function Compose_From_Cartesian (Im : Imaginary) return Complex;
63206
63207 9
63208 function Modulus (X : Complex) return Real'Base;
63209 function "abs" (Right : Complex) return Real'Base renames Modulus;
63210
63211 10
63212 function Argument (X : Complex) return Real'Base;
63213 function Argument (X : Complex;
63214 Cycle : Real'Base) return Real'Base;
63215
63216 11
63217 function Compose_From_Polar (Modulus, Argument : Real'Base)
63218 return Complex;
63219 function Compose_From_Polar (Modulus, Argument, Cycle : Real'Base)
63220 return Complex;
63221
63222 12
63223 function "+" (Right : Complex) return Complex;
63224 function "-" (Right : Complex) return Complex;
63225 function Conjugate (X : Complex) return Complex;
63226
63227 13
63228 function "+" (Left, Right : Complex) return Complex;
63229 function "-" (Left, Right : Complex) return Complex;
63230 function "*" (Left, Right : Complex) return Complex;
63231 function "/" (Left, Right : Complex) return Complex;
63232
63233 14
63234 function "**" (Left : Complex; Right : Integer) return Complex;
63235
63236 15
63237 function "+" (Right : Imaginary) return Imaginary;
63238 function "-" (Right : Imaginary) return Imaginary;
63239 function Conjugate (X : Imaginary) return Imaginary renames "-";
63240 function "abs" (Right : Imaginary) return Real'Base;
63241
63242 16
63243 function "+" (Left, Right : Imaginary) return Imaginary;
63244 function "-" (Left, Right : Imaginary) return Imaginary;
63245 function "*" (Left, Right : Imaginary) return Real'Base;
63246 function "/" (Left, Right : Imaginary) return Real'Base;
63247
63248 17
63249 function "**" (Left : Imaginary; Right : Integer) return Complex;
63250
63251 18
63252 function "<" (Left, Right : Imaginary) return Boolean;
63253 function "<=" (Left, Right : Imaginary) return Boolean;
63254 function ">" (Left, Right : Imaginary) return Boolean;
63255 function ">=" (Left, Right : Imaginary) return Boolean;
63256
63257 19
63258 function "+" (Left : Complex; Right : Real'Base) return Complex;
63259 function "+" (Left : Real'Base; Right : Complex) return Complex;
63260 function "-" (Left : Complex; Right : Real'Base) return Complex;
63261 function "-" (Left : Real'Base; Right : Complex) return Complex;
63262 function "*" (Left : Complex; Right : Real'Base) return Complex;
63263 function "*" (Left : Real'Base; Right : Complex) return Complex;
63264 function "/" (Left : Complex; Right : Real'Base) return Complex;
63265 function "/" (Left : Real'Base; Right : Complex) return Complex;
63266
63267 20
63268 function "+" (Left : Complex; Right : Imaginary) return Complex;
63269 function "+" (Left : Imaginary; Right : Complex) return Complex;
63270 function "-" (Left : Complex; Right : Imaginary) return Complex;
63271 function "-" (Left : Imaginary; Right : Complex) return Complex;
63272 function "*" (Left : Complex; Right : Imaginary) return Complex;
63273 function "*" (Left : Imaginary; Right : Complex) return Complex;
63274 function "/" (Left : Complex; Right : Imaginary) return Complex;
63275 function "/" (Left : Imaginary; Right : Complex) return Complex;
63276
63277 21
63278 function "+" (Left : Imaginary; Right : Real'Base) return Complex;
63279 function "+" (Left : Real'Base; Right : Imaginary) return Complex;
63280 function "-" (Left : Imaginary; Right : Real'Base) return Complex;
63281 function "-" (Left : Real'Base; Right : Imaginary) return Complex;
63282 function "*" (Left : Imaginary; Right : Real'Base) return Imaginary;
63283 function "*" (Left : Real'Base; Right : Imaginary) return Imaginary;
63284 function "/" (Left : Imaginary; Right : Real'Base) return Imaginary;
63285 function "/" (Left : Real'Base; Right : Imaginary) return Imaginary;
63286
63287 22
63288 private
63289
63290 23
63291 type Imaginary is new Real'Base;
63292 i : constant Imaginary := 1.0;
63293 j : constant Imaginary := 1.0;
63294
63295 24
63296 end Ada.Numerics.Generic_Complex_Types;
63297
63298 25/1
63299 The library package Numerics.Complex_Types is declared pure and defines
63300 the same types, constants, and subprograms as
63301 Numerics.Generic_Complex_Types, except that the predefined type Float is
63302 systematically substituted for Real'Base throughout. Nongeneric
63303 equivalents of Numerics.Generic_Complex_Types for each of the other
63304 predefined floating point types are defined similarly, with the names
63305 Numerics.Short_Complex_Types, Numerics.Long_Complex_Types, etc.
63306
63307 26/2
63308 Complex is a visible type with Cartesian components.
63309
63310 27
63311 Imaginary is a private type; its full type is derived from Real'Base.
63312
63313 28
63314 The arithmetic operations and the Re, Im, Modulus, Argument, and
63315 Conjugate functions have their usual mathematical meanings. When
63316 applied to a parameter of pure-imaginary type, the "imaginary-part"
63317 function Im yields the value of its parameter, as the corresponding real
63318 value. The remaining subprograms have the following meanings:
63319
63320 29
63321 * The Set_Re and Set_Im procedures replace the designated component
63322 of a complex parameter with the given real value; applied to a
63323 parameter of pure-imaginary type, the Set_Im procedure replaces the
63324 value of that parameter with the imaginary value corresponding to
63325 the given real value.
63326
63327 30
63328 * The Compose_From_Cartesian function constructs a complex value from
63329 the given real and imaginary components. If only one component is
63330 given, the other component is implicitly zero.
63331
63332 31
63333 * The Compose_From_Polar function constructs a complex value from the
63334 given modulus (radius) and argument (angle). When the value of the
63335 parameter Modulus is positive (resp., negative), the result is the
63336 complex value represented by the point in the complex plane lying
63337 at a distance from the origin given by the absolute value of
63338 Modulus and forming an angle measured counterclockwise from the
63339 positive (resp., negative) real axis given by the value of the
63340 parameter Argument.
63341
63342 32
63343 When the Cycle parameter is specified, the result of the Argument
63344 function and the parameter Argument of the Compose_From_Polar function
63345 are measured in units such that a full cycle of revolution has the given
63346 value; otherwise, they are measured in radians.
63347
63348 33
63349 The computed results of the mathematically multivalued functions are
63350 rendered single-valued by the following conventions, which are meant to
63351 imply the principal branch:
63352
63353 34
63354 * The result of the Modulus function is nonnegative.
63355
63356 35
63357 * The result of the Argument function is in the quadrant containing
63358 the point in the complex plane represented by the parameter X. This
63359 may be any quadrant (I through IV); thus, the range of the Argument
63360 function is approximately -PI to PI (-Cycle/2.0 to Cycle/2.0, if
63361 the parameter Cycle is specified). When the point represented by
63362 the parameter X lies on the negative real axis, the result
63363 approximates
63364
63365 36
63366 * PI (resp., -PI) when the sign of the imaginary component
63367 of X is positive (resp., negative), if Real'Signed_Zeros
63368 is True;
63369
63370 37
63371 * PI, if Real'Signed_Zeros is False.
63372
63373 38
63374 * Because a result lying on or near one of the axes may not be
63375 exactly representable, the approximation inherent in computing the
63376 result may place it in an adjacent quadrant, close to but on the
63377 wrong side of the axis.
63378
63379 _Dynamic Semantics_
63380
63381 39
63382 The exception Numerics.Argument_Error is raised by the Argument and
63383 Compose_From_Polar functions with specified cycle, signaling a parameter
63384 value outside the domain of the corresponding mathematical function,
63385 when the value of the parameter Cycle is zero or negative.
63386
63387 40
63388 The exception Constraint_Error is raised by the division operator when
63389 the value of the right operand is zero, and by the exponentiation
63390 operator when the value of the left operand is zero and the value of the
63391 exponent is negative, provided that Real'Machine_Overflows is True; when
63392 Real'Machine_Overflows is False, the result is unspecified.
63393 Constraint_Error can also be raised when a finite result overflows (see
63394 *note G.2.6::).
63395
63396 _Implementation Requirements_
63397
63398 41
63399 In the implementation of Numerics.Generic_Complex_Types, the range of
63400 intermediate values allowed during the calculation of a final result
63401 shall not be affected by any range constraint of the subtype Real.
63402
63403 42
63404 In the following cases, evaluation of a complex arithmetic operation
63405 shall yield the prescribed result, provided that the preceding rules do
63406 not call for an exception to be raised:
63407
63408 43
63409 * The results of the Re, Im, and Compose_From_Cartesian functions are
63410 exact.
63411
63412 44
63413 * The real (resp., imaginary) component of the result of a binary
63414 addition operator that yields a result of complex type is exact
63415 when either of its operands is of pure-imaginary (resp., real)
63416 type.
63417
63418 45
63419 * The real (resp., imaginary) component of the result of a binary
63420 subtraction operator that yields a result of complex type is exact
63421 when its right operand is of pure-imaginary (resp., real) type.
63422
63423 46
63424 * The real component of the result of the Conjugate function for the
63425 complex type is exact.
63426
63427 47
63428 * When the point in the complex plane represented by the parameter X
63429 lies on the nonnegative real axis, the Argument function yields a
63430 result of zero.
63431
63432 48
63433 * When the value of the parameter Modulus is zero, the
63434 Compose_From_Polar function yields a result of zero.
63435
63436 49
63437 * When the value of the parameter Argument is equal to a multiple of
63438 the quarter cycle, the result of the Compose_From_Polar function
63439 with specified cycle lies on one of the axes. In this case, one of
63440 its components is zero, and the other has the magnitude of the
63441 parameter Modulus.
63442
63443 50
63444 * Exponentiation by a zero exponent yields the value one.
63445 Exponentiation by a unit exponent yields the value of the left
63446 operand. Exponentiation of the value one yields the value one.
63447 Exponentiation of the value zero yields the value zero, provided
63448 that the exponent is nonzero. When the left operand is of
63449 pure-imaginary type, one component of the result of the
63450 exponentiation operator is zero.
63451
63452 51
63453 When the result, or a result component, of any operator of
63454 Numerics.Generic_Complex_Types has a mathematical definition in terms of
63455 a single arithmetic or relational operation, that result or result
63456 component exhibits the accuracy of the corresponding operation of the
63457 type Real.
63458
63459 52
63460 Other accuracy requirements for the Modulus, Argument, and
63461 Compose_From_Polar functions, and accuracy requirements for the
63462 multiplication of a pair of complex operands or for division by a
63463 complex operand, all of which apply only in the strict mode, are given
63464 in *note G.2.6::.
63465
63466 53
63467 The sign of a zero result or zero result component yielded by a complex
63468 arithmetic operation or function is implementation defined when
63469 Real'Signed_Zeros is True.
63470
63471 _Implementation Permissions_
63472
63473 54
63474 The nongeneric equivalent packages may, but need not, be actual
63475 instantiations of the generic package for the appropriate predefined
63476 type.
63477
63478 55/2
63479 Implementations may obtain the result of exponentiation of a complex or
63480 pure-imaginary operand by repeated complex multiplication, with
63481 arbitrary association of the factors and with a possible final complex
63482 reciprocation (when the exponent is negative). Implementations are also
63483 permitted to obtain the result of exponentiation of a complex operand,
63484 but not of a pure-imaginary operand, by converting the left operand to a
63485 polar representation; exponentiating the modulus by the given exponent;
63486 multiplying the argument by the given exponent; and reconverting to a
63487 Cartesian representation. Because of this implementation freedom, no
63488 accuracy requirement is imposed on complex exponentiation (except for
63489 the prescribed results given above, which apply regardless of the
63490 implementation method chosen).
63491
63492 _Implementation Advice_
63493
63494 56
63495 Because the usual mathematical meaning of multiplication of a complex
63496 operand and a real operand is that of the scaling of both components of
63497 the former by the latter, an implementation should not perform this
63498 operation by first promoting the real operand to complex type and then
63499 performing a full complex multiplication. In systems that, in the
63500 future, support an Ada binding to IEC 559:1989, the latter technique
63501 will not generate the required result when one of the components of the
63502 complex operand is infinite. (Explicit multiplication of the infinite
63503 component by the zero component obtained during promotion yields a NaN
63504 that propagates into the final result.) Analogous advice applies in the
63505 case of multiplication of a complex operand and a pure-imaginary
63506 operand, and in the case of division of a complex operand by a real or
63507 pure-imaginary operand.
63508
63509 57
63510 Likewise, because the usual mathematical meaning of addition of a
63511 complex operand and a real operand is that the imaginary operand remains
63512 unchanged, an implementation should not perform this operation by first
63513 promoting the real operand to complex type and then performing a full
63514 complex addition. In implementations in which the Signed_Zeros
63515 attribute of the component type is True (and which therefore conform to
63516 IEC 559:1989 in regard to the handling of the sign of zero in predefined
63517 arithmetic operations), the latter technique will not generate the
63518 required result when the imaginary component of the complex operand is a
63519 negatively signed zero. (Explicit addition of the negative zero to the
63520 zero obtained during promotion yields a positive zero.) Analogous
63521 advice applies in the case of addition of a complex operand and a
63522 pure-imaginary operand, and in the case of subtraction of a complex
63523 operand and a real or pure-imaginary operand.
63524
63525 58
63526 Implementations in which Real'Signed_Zeros is True should attempt to
63527 provide a rational treatment of the signs of zero results and result
63528 components. As one example, the result of the Argument function should
63529 have the sign of the imaginary component of the parameter X when the
63530 point represented by that parameter lies on the positive real axis; as
63531 another, the sign of the imaginary component of the Compose_From_Polar
63532 function should be the same as (resp., the opposite of) that of the
63533 Argument parameter when that parameter has a value of zero and the
63534 Modulus parameter has a nonnegative (resp., negative) value.
63535
63536 \1f
63537 File: arm2012.info, Node: G.1.2, Next: G.1.3, Prev: G.1.1, Up: G.1
63538
63539 G.1.2 Complex Elementary Functions
63540 ----------------------------------
63541
63542 _Static Semantics_
63543
63544 1
63545 The generic library package
63546 Numerics.Generic_Complex_Elementary_Functions has the following
63547 declaration:
63548
63549 2/2
63550 with Ada.Numerics.Generic_Complex_Types;
63551 generic
63552 with package Complex_Types is
63553 new Ada.Numerics.Generic_Complex_Types (<>);
63554 use Complex_Types;
63555 package Ada.Numerics.Generic_Complex_Elementary_Functions is
63556 pragma Pure(Generic_Complex_Elementary_Functions);
63557
63558 3
63559 function Sqrt (X : Complex) return Complex;
63560 function Log (X : Complex) return Complex;
63561 function Exp (X : Complex) return Complex;
63562 function Exp (X : Imaginary) return Complex;
63563 function "**" (Left : Complex; Right : Complex) return Complex;
63564 function "**" (Left : Complex; Right : Real'Base) return Complex;
63565 function "**" (Left : Real'Base; Right : Complex) return Complex;
63566
63567 4
63568 function Sin (X : Complex) return Complex;
63569 function Cos (X : Complex) return Complex;
63570 function Tan (X : Complex) return Complex;
63571 function Cot (X : Complex) return Complex;
63572
63573 5
63574 function Arcsin (X : Complex) return Complex;
63575 function Arccos (X : Complex) return Complex;
63576 function Arctan (X : Complex) return Complex;
63577 function Arccot (X : Complex) return Complex;
63578
63579 6
63580 function Sinh (X : Complex) return Complex;
63581 function Cosh (X : Complex) return Complex;
63582 function Tanh (X : Complex) return Complex;
63583 function Coth (X : Complex) return Complex;
63584
63585 7
63586 function Arcsinh (X : Complex) return Complex;
63587 function Arccosh (X : Complex) return Complex;
63588 function Arctanh (X : Complex) return Complex;
63589 function Arccoth (X : Complex) return Complex;
63590
63591 8
63592 end Ada.Numerics.Generic_Complex_Elementary_Functions;
63593
63594 9/1
63595 The library package Numerics.Complex_Elementary_Functions is declared
63596 pure and defines the same subprograms as
63597 Numerics.Generic_Complex_Elementary_Functions, except that the
63598 predefined type Float is systematically substituted for Real'Base, and
63599 the Complex and Imaginary types exported by Numerics.Complex_Types are
63600 systematically substituted for Complex and Imaginary, throughout.
63601 Nongeneric equivalents of Numerics.Generic_Complex_Elementary_Functions
63602 corresponding to each of the other predefined floating point types are
63603 defined similarly, with the names
63604 Numerics.Short_Complex_Elementary_Functions,
63605 Numerics.Long_Complex_Elementary_Functions, etc.
63606
63607 10
63608 The overloading of the Exp function for the pure-imaginary type is
63609 provided to give the user an alternate way to compose a complex value
63610 from a given modulus and argument. In addition to
63611 Compose_From_Polar(Rho, Theta) (see *note G.1.1::), the programmer may
63612 write Rho * Exp(i * Theta).
63613
63614 11
63615 The imaginary (resp., real) component of the parameter X of the forward
63616 hyperbolic (resp., trigonometric) functions and of the Exp function (and
63617 the parameter X, itself, in the case of the overloading of the Exp
63618 function for the pure-imaginary type) represents an angle measured in
63619 radians, as does the imaginary (resp., real) component of the result of
63620 the Log and inverse hyperbolic (resp., trigonometric) functions.
63621
63622 12
63623 The functions have their usual mathematical meanings. However, the
63624 arbitrariness inherent in the placement of branch cuts, across which
63625 some of the complex elementary functions exhibit discontinuities, is
63626 eliminated by the following conventions:
63627
63628 13
63629 * The imaginary component of the result of the Sqrt and Log functions
63630 is discontinuous as the parameter X crosses the negative real axis.
63631
63632 14
63633 * The result of the exponentiation operator when the left operand is
63634 of complex type is discontinuous as that operand crosses the
63635 negative real axis.
63636
63637 15/2
63638 * The imaginary component of the result of the Arcsin, Arccos, and
63639 Arctanh functions is discontinuous as the parameter X crosses the
63640 real axis to the left of -1.0 or the right of 1.0.
63641
63642 16/2
63643 * The real component of the result of the Arctan and Arcsinh
63644 functions is discontinuous as the parameter X crosses the imaginary
63645 axis below -i or above i.
63646
63647 17/2
63648 * The real component of the result of the Arccot function is
63649 discontinuous as the parameter X crosses the imaginary axis below
63650 -i or above i.
63651
63652 18
63653 * The imaginary component of the Arccosh function is discontinuous as
63654 the parameter X crosses the real axis to the left of 1.0.
63655
63656 19
63657 * The imaginary component of the result of the Arccoth function is
63658 discontinuous as the parameter X crosses the real axis between -1.0
63659 and 1.0.
63660
63661 20/2
63662 The computed results of the mathematically multivalued functions are
63663 rendered single-valued by the following conventions, which are meant to
63664 imply that the principal branch is an analytic continuation of the
63665 corresponding real-valued function in
63666 Numerics.Generic_Elementary_Functions. (For Arctan and Arccot, the
63667 single-argument function in question is that obtained from the
63668 two-argument version by fixing the second argument to be its default
63669 value.)
63670
63671 21
63672 * The real component of the result of the Sqrt and Arccosh functions
63673 is nonnegative.
63674
63675 22
63676 * The same convention applies to the imaginary component of the
63677 result of the Log function as applies to the result of the
63678 natural-cycle version of the Argument function of
63679 Numerics.Generic_Complex_Types (see *note G.1.1::).
63680
63681 23
63682 * The range of the real (resp., imaginary) component of the result of
63683 the Arcsin and Arctan (resp., Arcsinh and Arctanh) functions is
63684 approximately -PI/2.0 to PI/2.0.
63685
63686 24
63687 * The real (resp., imaginary) component of the result of the Arccos
63688 and Arccot (resp., Arccoth) functions ranges from 0.0 to
63689 approximately PI.
63690
63691 25
63692 * The range of the imaginary component of the result of the Arccosh
63693 function is approximately -PI to PI.
63694
63695 26
63696 In addition, the exponentiation operator inherits the single-valuedness
63697 of the Log function.
63698
63699 _Dynamic Semantics_
63700
63701 27
63702 The exception Numerics.Argument_Error is raised by the exponentiation
63703 operator, signaling a parameter value outside the domain of the
63704 corresponding mathematical function, when the value of the left operand
63705 is zero and the real component of the exponent (or the exponent itself,
63706 when it is of real type) is zero.
63707
63708 28
63709 The exception Constraint_Error is raised, signaling a pole of the
63710 mathematical function (analogous to dividing by zero), in the following
63711 cases, provided that Complex_Types.Real'Machine_Overflows is True:
63712
63713 29
63714 * by the Log, Cot, and Coth functions, when the value of the
63715 parameter X is zero;
63716
63717 30
63718 * by the exponentiation operator, when the value of the left operand
63719 is zero and the real component of the exponent (or the exponent
63720 itself, when it is of real type) is negative;
63721
63722 31
63723 * by the Arctan and Arccot functions, when the value of the parameter
63724 X is ± i;
63725
63726 32
63727 * by the Arctanh and Arccoth functions, when the value of the
63728 parameter X is ± 1.0.
63729
63730 33
63731 Constraint_Error can also be raised when a finite result overflows (see
63732 *note G.2.6::); this may occur for parameter values sufficiently near
63733 poles, and, in the case of some of the functions, for parameter values
63734 having components of sufficiently large magnitude. When
63735 Complex_Types.Real'Machine_Overflows is False, the result at poles is
63736 unspecified.
63737
63738 _Implementation Requirements_
63739
63740 34
63741 In the implementation of Numerics.Generic_Complex_Elementary_Functions,
63742 the range of intermediate values allowed during the calculation of a
63743 final result shall not be affected by any range constraint of the
63744 subtype Complex_Types.Real.
63745
63746 35
63747 In the following cases, evaluation of a complex elementary function
63748 shall yield the prescribed result (or a result having the prescribed
63749 component), provided that the preceding rules do not call for an
63750 exception to be raised:
63751
63752 36
63753 * When the parameter X has the value zero, the Sqrt, Sin, Arcsin,
63754 Tan, Arctan, Sinh, Arcsinh, Tanh, and Arctanh functions yield a
63755 result of zero; the Exp, Cos, and Cosh functions yield a result of
63756 one; the Arccos and Arccot functions yield a real result; and the
63757 Arccoth function yields an imaginary result.
63758
63759 37
63760 * When the parameter X has the value one, the Sqrt function yields a
63761 result of one; the Log, Arccos, and Arccosh functions yield a
63762 result of zero; and the Arcsin function yields a real result.
63763
63764 38
63765 * When the parameter X has the value -1.0, the Sqrt function yields
63766 the result
63767
63768 39
63769 * i (resp., -i), when the sign of the imaginary component
63770 of X is positive (resp., negative), if
63771 Complex_Types.Real'Signed_Zeros is True;
63772
63773 40
63774 * i, if Complex_Types.Real'Signed_Zeros is False;
63775
63776 41/2
63777 * When the parameter X has the value -1.0, the Log function yields an
63778 imaginary result; and the Arcsin and Arccos functions yield a real
63779 result.
63780
63781 42
63782 * When the parameter X has the value ± i, the Log function yields an
63783 imaginary result.
63784
63785 43
63786 * Exponentiation by a zero exponent yields the value one.
63787 Exponentiation by a unit exponent yields the value of the left
63788 operand (as a complex value). Exponentiation of the value one
63789 yields the value one. Exponentiation of the value zero yields the
63790 value zero.
63791
63792 44
63793 Other accuracy requirements for the complex elementary functions, which
63794 apply only in the strict mode, are given in *note G.2.6::.
63795
63796 45
63797 The sign of a zero result or zero result component yielded by a complex
63798 elementary function is implementation defined when
63799 Complex_Types.Real'Signed_Zeros is True.
63800
63801 _Implementation Permissions_
63802
63803 46
63804 The nongeneric equivalent packages may, but need not, be actual
63805 instantiations of the generic package with the appropriate predefined
63806 nongeneric equivalent of Numerics.Generic_Complex_Types; if they are,
63807 then the latter shall have been obtained by actual instantiation of
63808 Numerics.Generic_Complex_Types.
63809
63810 47
63811 The exponentiation operator may be implemented in terms of the Exp and
63812 Log functions. Because this implementation yields poor accuracy in some
63813 parts of the domain, no accuracy requirement is imposed on complex
63814 exponentiation.
63815
63816 48
63817 The implementation of the Exp function of a complex parameter X is
63818 allowed to raise the exception Constraint_Error, signaling overflow,
63819 when the real component of X exceeds an unspecified threshold that is
63820 approximately log(Complex_Types.Real'Safe_Last). This permission
63821 recognizes the impracticality of avoiding overflow in the marginal case
63822 that the exponential of the real component of X exceeds the safe range
63823 of Complex_Types.Real but both components of the final result do not.
63824 Similarly, the Sin and Cos (resp., Sinh and Cosh) functions are allowed
63825 to raise the exception Constraint_Error, signaling overflow, when the
63826 absolute value of the imaginary (resp., real) component of the parameter
63827 X exceeds an unspecified threshold that is approximately
63828 log(Complex_Types.Real'Safe_Last) + log(2.0). This permission
63829 recognizes the impracticality of avoiding overflow in the marginal case
63830 that the hyperbolic sine or cosine of the imaginary (resp., real)
63831 component of X exceeds the safe range of Complex_Types.Real but both
63832 components of the final result do not.
63833
63834 _Implementation Advice_
63835
63836 49
63837 Implementations in which Complex_Types.Real'Signed_Zeros is True should
63838 attempt to provide a rational treatment of the signs of zero results and
63839 result components. For example, many of the complex elementary
63840 functions have components that are odd functions of one of the parameter
63841 components; in these cases, the result component should have the sign of
63842 the parameter component at the origin. Other complex elementary
63843 functions have zero components whose sign is opposite that of a
63844 parameter component at the origin, or is always positive or always
63845 negative.
63846
63847 \1f
63848 File: arm2012.info, Node: G.1.3, Next: G.1.4, Prev: G.1.2, Up: G.1
63849
63850 G.1.3 Complex Input-Output
63851 --------------------------
63852
63853 1
63854 The generic package Text_IO.Complex_IO defines procedures for the
63855 formatted input and output of complex values. The generic actual
63856 parameter in an instantiation of Text_IO.Complex_IO is an instance of
63857 Numerics.Generic_Complex_Types for some floating point subtype.
63858 Exceptional conditions are reported by raising the appropriate exception
63859 defined in Text_IO.
63860
63861 _Static Semantics_
63862
63863 2
63864 The generic library package Text_IO.Complex_IO has the following
63865 declaration:
63866
63867 3
63868 with Ada.Numerics.Generic_Complex_Types;
63869 generic
63870 with package Complex_Types is
63871 new Ada.Numerics.Generic_Complex_Types (<>);
63872 package Ada.Text_IO.Complex_IO is
63873
63874 4
63875 use Complex_Types;
63876
63877 5
63878 Default_Fore : Field := 2;
63879 Default_Aft : Field := Real'Digits - 1;
63880 Default_Exp : Field := 3;
63881
63882 6
63883 procedure Get (File : in File_Type;
63884 Item : out Complex;
63885 Width : in Field := 0);
63886 procedure Get (Item : out Complex;
63887 Width : in Field := 0);
63888
63889 7
63890 procedure Put (File : in File_Type;
63891 Item : in Complex;
63892 Fore : in Field := Default_Fore;
63893 Aft : in Field := Default_Aft;
63894 Exp : in Field := Default_Exp);
63895 procedure Put (Item : in Complex;
63896 Fore : in Field := Default_Fore;
63897 Aft : in Field := Default_Aft;
63898 Exp : in Field := Default_Exp);
63899
63900 8
63901 procedure Get (From : in String;
63902 Item : out Complex;
63903 Last : out Positive);
63904 procedure Put (To : out String;
63905 Item : in Complex;
63906 Aft : in Field := Default_Aft;
63907 Exp : in Field := Default_Exp);
63908
63909 9
63910 end Ada.Text_IO.Complex_IO;
63911
63912 9.1/2
63913 The library package Complex_Text_IO defines the same subprograms as
63914 Text_IO.Complex_IO, except that the predefined type Float is
63915 systematically substituted for Real, and the type
63916 Numerics.Complex_Types.Complex is systematically substituted for Complex
63917 throughout. Nongeneric equivalents of Text_IO.Complex_IO corresponding
63918 to each of the other predefined floating point types are defined
63919 similarly, with the names Short_Complex_Text_IO, Long_Complex_Text_IO,
63920 etc.
63921
63922 10
63923 The semantics of the Get and Put procedures are as follows:
63924
63925 11
63926 procedure Get (File : in File_Type;
63927 Item : out Complex;
63928 Width : in Field := 0);
63929 procedure Get (Item : out Complex;
63930 Width : in Field := 0);
63931
63932 12/1
63933 The input sequence is a pair of optionally signed real
63934 literals representing the real and imaginary components of a
63935 complex value. These components have the format defined for
63936 the corresponding Get procedure of an instance of
63937 Text_IO.Float_IO (see *note A.10.9::) for the base subtype of
63938 Complex_Types.Real. The pair of components may be separated
63939 by a comma or surrounded by a pair of parentheses or both.
63940 Blanks are freely allowed before each of the components and
63941 before the parentheses and comma, if either is used. If the
63942 value of the parameter Width is zero, then
63943
63944 13
63945 * line and page terminators are also allowed in these
63946 places;
63947
63948 14
63949 * the components shall be separated by at least one blank
63950 or line terminator if the comma is omitted; and
63951
63952 15
63953 * reading stops when the right parenthesis has been read,
63954 if the input sequence includes a left parenthesis, or
63955 when the imaginary component has been read, otherwise.
63956
63957 15.1
63958 If a nonzero value of Width is supplied, then
63959
63960 16
63961 * the components shall be separated by at least one blank
63962 if the comma is omitted; and
63963
63964 17
63965 * exactly Width characters are read, or the characters
63966 (possibly none) up to a line terminator, whichever comes
63967 first (blanks are included in the count).
63968
63969 18
63970 Returns, in the parameter Item, the value of type Complex that
63971 corresponds to the input sequence.
63972
63973 19
63974 The exception Text_IO.Data_Error is raised if the input
63975 sequence does not have the required syntax or if the
63976 components of the complex value obtained are not of the base
63977 subtype of Complex_Types.Real.
63978
63979 20
63980 procedure Put (File : in File_Type;
63981 Item : in Complex;
63982 Fore : in Field := Default_Fore;
63983 Aft : in Field := Default_Aft;
63984 Exp : in Field := Default_Exp);
63985 procedure Put (Item : in Complex;
63986 Fore : in Field := Default_Fore;
63987 Aft : in Field := Default_Aft;
63988 Exp : in Field := Default_Exp);
63989
63990 21
63991 Outputs the value of the parameter Item as a pair of decimal
63992 literals representing the real and imaginary components of the
63993 complex value, using the syntax of an aggregate. More
63994 specifically,
63995
63996 22
63997 * outputs a left parenthesis;
63998
63999 23
64000 * outputs the value of the real component of the parameter
64001 Item with the format defined by the corresponding Put
64002 procedure of an instance of Text_IO.Float_IO for the base
64003 subtype of Complex_Types.Real, using the given values of
64004 Fore, Aft, and Exp;
64005
64006 24
64007 * outputs a comma;
64008
64009 25
64010 * outputs the value of the imaginary component of the
64011 parameter Item with the format defined by the
64012 corresponding Put procedure of an instance of
64013 Text_IO.Float_IO for the base subtype of
64014 Complex_Types.Real, using the given values of Fore, Aft,
64015 and Exp;
64016
64017 26
64018 * outputs a right parenthesis.
64019
64020 27
64021 procedure Get (From : in String;
64022 Item : out Complex;
64023 Last : out Positive);
64024
64025 28/2
64026 Reads a complex value from the beginning of the given string,
64027 following the same rule as the Get procedure that reads a
64028 complex value from a file, but treating the end of the string
64029 as a file terminator. Returns, in the parameter Item, the
64030 value of type Complex that corresponds to the input sequence.
64031 Returns in Last the index value such that From(Last) is the
64032 last character read.
64033
64034 29
64035 The exception Text_IO.Data_Error is raised if the input
64036 sequence does not have the required syntax or if the
64037 components of the complex value obtained are not of the base
64038 subtype of Complex_Types.Real.
64039
64040 30
64041 procedure Put (To : out String;
64042 Item : in Complex;
64043 Aft : in Field := Default_Aft;
64044 Exp : in Field := Default_Exp);
64045
64046 31
64047 Outputs the value of the parameter Item to the given string as
64048 a pair of decimal literals representing the real and imaginary
64049 components of the complex value, using the syntax of an
64050 aggregate. More specifically,
64051
64052 32
64053 * a left parenthesis, the real component, and a comma are
64054 left justified in the given string, with the real
64055 component having the format defined by the Put procedure
64056 (for output to a file) of an instance of Text_IO.Float_IO
64057 for the base subtype of Complex_Types.Real, using a value
64058 of zero for Fore and the given values of Aft and Exp;
64059
64060 33
64061 * the imaginary component and a right parenthesis are right
64062 justified in the given string, with the imaginary
64063 component having the format defined by the Put procedure
64064 (for output to a file) of an instance of Text_IO.Float_IO
64065 for the base subtype of Complex_Types.Real, using a value
64066 for Fore that completely fills the remainder of the
64067 string, together with the given values of Aft and Exp.
64068
64069 34
64070 The exception Text_IO.Layout_Error is raised if the given
64071 string is too short to hold the formatted output.
64072
64073 _Implementation Permissions_
64074
64075 35
64076 Other exceptions declared (by renaming) in Text_IO may be raised by the
64077 preceding procedures in the appropriate circumstances, as for the
64078 corresponding procedures of Text_IO.Float_IO.
64079
64080 \1f
64081 File: arm2012.info, Node: G.1.4, Next: G.1.5, Prev: G.1.3, Up: G.1
64082
64083 G.1.4 The Package Wide_Text_IO.Complex_IO
64084 -----------------------------------------
64085
64086 _Static Semantics_
64087
64088 1
64089 Implementations shall also provide the generic library package
64090 Wide_Text_IO.Complex_IO. Its declaration is obtained from that of
64091 Text_IO.Complex_IO by systematically replacing Text_IO by Wide_Text_IO
64092 and String by Wide_String; the description of its behavior is obtained
64093 by additionally replacing references to particular characters (commas,
64094 parentheses, etc.) by those for the corresponding wide characters.
64095
64096 \1f
64097 File: arm2012.info, Node: G.1.5, Prev: G.1.4, Up: G.1
64098
64099 G.1.5 The Package Wide_Wide_Text_IO.Complex_IO
64100 ----------------------------------------------
64101
64102 _Static Semantics_
64103
64104 1/2
64105 Implementations shall also provide the generic library package
64106 Wide_Wide_Text_IO.Complex_IO. Its declaration is obtained from that of
64107 Text_IO.Complex_IO by systematically replacing Text_IO by
64108 Wide_Wide_Text_IO and String by Wide_Wide_String; the description of its
64109 behavior is obtained by additionally replacing references to particular
64110 characters (commas, parentheses, etc.) by those for the corresponding
64111 wide wide characters.
64112
64113 \1f
64114 File: arm2012.info, Node: G.2, Next: G.3, Prev: G.1, Up: Annex G
64115
64116 G.2 Numeric Performance Requirements
64117 ====================================
64118
64119 _Implementation Requirements_
64120
64121 1
64122 Implementations shall provide a user-selectable mode in which the
64123 accuracy and other numeric performance requirements detailed in the
64124 following subclauses are observed. This mode, referred to as the strict
64125 mode, may or may not be the default mode; it directly affects the
64126 results of the predefined arithmetic operations of real types and the
64127 results of the subprograms in children of the Numerics package, and
64128 indirectly affects the operations in other language defined packages.
64129 Implementations shall also provide the opposing mode, which is known as
64130 the relaxed mode.
64131
64132 _Implementation Permissions_
64133
64134 2
64135 Either mode may be the default mode.
64136
64137 3
64138 The two modes need not actually be different.
64139
64140 * Menu:
64141
64142 * G.2.1 :: Model of Floating Point Arithmetic
64143 * G.2.2 :: Model-Oriented Attributes of Floating Point Types
64144 * G.2.3 :: Model of Fixed Point Arithmetic
64145 * G.2.4 :: Accuracy Requirements for the Elementary Functions
64146 * G.2.5 :: Performance Requirements for Random Number Generation
64147 * G.2.6 :: Accuracy Requirements for Complex Arithmetic
64148
64149 \1f
64150 File: arm2012.info, Node: G.2.1, Next: G.2.2, Up: G.2
64151
64152 G.2.1 Model of Floating Point Arithmetic
64153 ----------------------------------------
64154
64155 1
64156 In the strict mode, the predefined operations of a floating point type
64157 shall satisfy the accuracy requirements specified here and shall avoid
64158 or signal overflow in the situations described. This behavior is
64159 presented in terms of a model of floating point arithmetic that builds
64160 on the concept of the canonical form (see *note A.5.3::).
64161
64162 _Static Semantics_
64163
64164 2
64165 Associated with each floating point type is an infinite set of model
64166 numbers. The model numbers of a type are used to define the accuracy
64167 requirements that have to be satisfied by certain predefined operations
64168 of the type; through certain attributes of the model numbers, they are
64169 also used to explain the meaning of a user-declared floating point type
64170 declaration. The model numbers of a derived type are those of the
64171 parent type; the model numbers of a subtype are those of its type.
64172
64173 3
64174 The model numbers of a floating point type T are zero and all the values
64175 expressible in the canonical form (for the type T), in which mantissa
64176 has T'Model_Mantissa digits and exponent has a value greater than or
64177 equal to T'Model_Emin. (These attributes are defined in *note G.2.2::.)
64178
64179 4
64180 A model interval of a floating point type is any interval whose bounds
64181 are model numbers of the type. The model interval of a type T
64182 associated with a value v is the smallest model interval of T that
64183 includes v. (The model interval associated with a model number of a
64184 type consists of that number only.)
64185
64186 _Implementation Requirements_
64187
64188 5
64189 The accuracy requirements for the evaluation of certain predefined
64190 operations of floating point types are as follows.
64191
64192 6
64193 An operand interval is the model interval, of the type specified for the
64194 operand of an operation, associated with the value of the operand.
64195
64196 7
64197 For any predefined arithmetic operation that yields a result of a
64198 floating point type T, the required bounds on the result are given by a
64199 model interval of T (called the result interval) defined in terms of the
64200 operand values as follows:
64201
64202 8
64203 * The result interval is the smallest model interval of T that
64204 includes the minimum and the maximum of all the values obtained by
64205 applying the (exact) mathematical operation to values arbitrarily
64206 selected from the respective operand intervals.
64207
64208 9
64209 The result interval of an exponentiation is obtained by applying the
64210 above rule to the sequence of multiplications defined by the exponent,
64211 assuming arbitrary association of the factors, and to the final division
64212 in the case of a negative exponent.
64213
64214 10
64215 The result interval of a conversion of a numeric value to a floating
64216 point type T is the model interval of T associated with the operand
64217 value, except when the source expression is of a fixed point type with a
64218 small that is not a power of T'Machine_Radix or is a fixed point
64219 multiplication or division either of whose operands has a small that is
64220 not a power of T'Machine_Radix; in these cases, the result interval is
64221 implementation defined.
64222
64223 11
64224 For any of the foregoing operations, the implementation shall deliver a
64225 value that belongs to the result interval when both bounds of the result
64226 interval are in the safe range of the result type T, as determined by
64227 the values of T'Safe_First and T'Safe_Last; otherwise,
64228
64229 12
64230 * if T'Machine_Overflows is True, the implementation shall either
64231 deliver a value that belongs to the result interval or raise
64232 Constraint_Error;
64233
64234 13
64235 * if T'Machine_Overflows is False, the result is implementation
64236 defined.
64237
64238 14
64239 For any predefined relation on operands of a floating point type T, the
64240 implementation may deliver any value (i.e., either True or False)
64241 obtained by applying the (exact) mathematical comparison to values
64242 arbitrarily chosen from the respective operand intervals.
64243
64244 15
64245 The result of a membership test is defined in terms of comparisons of
64246 the operand value with the lower and upper bounds of the given range or
64247 type mark (the usual rules apply to these comparisons).
64248
64249 _Implementation Permissions_
64250
64251 16
64252 If the underlying floating point hardware implements division as
64253 multiplication by a reciprocal, the result interval for division (and
64254 exponentiation by a negative exponent) is implementation defined.
64255
64256 \1f
64257 File: arm2012.info, Node: G.2.2, Next: G.2.3, Prev: G.2.1, Up: G.2
64258
64259 G.2.2 Model-Oriented Attributes of Floating Point Types
64260 -------------------------------------------------------
64261
64262 1
64263 In implementations that support the Numerics Annex, the model-oriented
64264 attributes of floating point types shall yield the values defined here,
64265 in both the strict and the relaxed modes. These definitions add
64266 conditions to those in *note A.5.3::.
64267
64268 _Static Semantics_
64269
64270 2
64271 For every subtype S of a floating point type T:
64272
64273 3/2
64274 S'Model_Mantissa
64275 Yields the number of digits in the mantissa of the
64276 canonical form of the model numbers of T (see *note
64277 A.5.3::). The value of this attribute shall be greater
64278 than or equal to
64279
64280 3.1/2
64281 'ceiling(d · log(10) / log(T'Machine_Radix))' + g
64282
64283 3.2/2
64284 where d is the requested decimal precision of T, and g is
64285 0 if T'Machine_Radix is a positive power of 10 and 1
64286 otherwise. In addition, T'Model_Mantissa shall be less
64287 than or equal to the value of T'Machine_Mantissa. This
64288 attribute yields a value of the type universal_integer.
64289
64290 4
64291 S'Model_Emin
64292 Yields the minimum exponent of the canonical form of the
64293 model numbers of T (see *note A.5.3::). The value of
64294 this attribute shall be greater than or equal to the
64295 value of T'Machine_Emin. This attribute yields a value
64296 of the type universal_integer.
64297
64298 5
64299 S'Safe_First
64300 Yields the lower bound of the safe range of T. The value
64301 of this attribute shall be a model number of T and
64302 greater than or equal to the lower bound of the base
64303 range of T. In addition, if T is declared by a
64304 floating_point_definition or is derived from such a type,
64305 and the floating_point_definition includes a
64306 real_range_specification specifying a lower bound of lb,
64307 then the value of this attribute shall be less than or
64308 equal to lb; otherwise, it shall be less than or equal to
64309 -10.0 4 · d, where d is the requested decimal precision
64310 of T. This attribute yields a value of the type
64311 universal_real.
64312
64313 6
64314 S'Safe_Last
64315 Yields the upper bound of the safe range of T. The value
64316 of this attribute shall be a model number of T and less
64317 than or equal to the upper bound of the base range of T.
64318 In addition, if T is declared by a
64319 floating_point_definition or is derived from such a type,
64320 and the floating_point_definition includes a
64321 real_range_specification specifying an upper bound of ub,
64322 then the value of this attribute shall be greater than or
64323 equal to ub; otherwise, it shall be greater than or equal
64324 to 10.0 4 · d, where d is the requested decimal precision
64325 of T. This attribute yields a value of the type
64326 universal_real.
64327
64328 7
64329 S'Model
64330 Denotes a function (of a parameter X) whose specification
64331 is given in *note A.5.3::. If X is a model number of T,
64332 the function yields X; otherwise, it yields the value
64333 obtained by rounding or truncating X to either one of the
64334 adjacent model numbers of T. Constraint_Error is raised
64335 if the resulting model number is outside the safe range
64336 of S. A zero result has the sign of X when S'Signed_Zeros
64337 is True.
64338
64339 8
64340 Subject to the constraints given above, the values of S'Model_Mantissa
64341 and S'Safe_Last are to be maximized, and the values of S'Model_Emin and
64342 S'Safe_First minimized, by the implementation as follows:
64343
64344 9
64345 * First, S'Model_Mantissa is set to the largest value for which
64346 values of S'Model_Emin, S'Safe_First, and S'Safe_Last can be chosen
64347 so that the implementation satisfies the strict-mode requirements
64348 of *note G.2.1:: in terms of the model numbers and safe range
64349 induced by these attributes.
64350
64351 10
64352 * Next, S'Model_Emin is set to the smallest value for which values of
64353 S'Safe_First and S'Safe_Last can be chosen so that the
64354 implementation satisfies the strict-mode requirements of *note
64355 G.2.1:: in terms of the model numbers and safe range induced by
64356 these attributes and the previously determined value of
64357 S'Model_Mantissa.
64358
64359 11/3
64360 * Finally, S'Safe_First and S'Safe_Last are set (in either order) to
64361 the smallest and largest values, respectively, for which the
64362 implementation satisfies the strict-mode requirements of *note
64363 G.2.1:: in terms of the model numbers and safe range induced by
64364 these attributes and the previously determined values of
64365 S'Model_Mantissa and S'Model_Emin.
64366
64367 \1f
64368 File: arm2012.info, Node: G.2.3, Next: G.2.4, Prev: G.2.2, Up: G.2
64369
64370 G.2.3 Model of Fixed Point Arithmetic
64371 -------------------------------------
64372
64373 1
64374 In the strict mode, the predefined arithmetic operations of a fixed
64375 point type shall satisfy the accuracy requirements specified here and
64376 shall avoid or signal overflow in the situations described.
64377
64378 _Implementation Requirements_
64379
64380 2
64381 The accuracy requirements for the predefined fixed point arithmetic
64382 operations and conversions, and the results of relations on fixed point
64383 operands, are given below.
64384
64385 3
64386 The operands of the fixed point adding operators, absolute value, and
64387 comparisons have the same type. These operations are required to yield
64388 exact results, unless they overflow.
64389
64390 4
64391 Multiplications and divisions are allowed between operands of any two
64392 fixed point types; the result has to be (implicitly or explicitly)
64393 converted to some other numeric type. For purposes of defining the
64394 accuracy rules, the multiplication or division and the conversion are
64395 treated as a single operation whose accuracy depends on three types
64396 (those of the operands and the result). For decimal fixed point types,
64397 the attribute T'Round may be used to imply explicit conversion with
64398 rounding (see *note 3.5.10::).
64399
64400 5
64401 When the result type is a floating point type, the accuracy is as given
64402 in *note G.2.1::. For some combinations of the operand and result types
64403 in the remaining cases, the result is required to belong to a small set
64404 of values called the perfect result set; for other combinations, it is
64405 required merely to belong to a generally larger and
64406 implementation-defined set of values called the close result set. When
64407 the result type is a decimal fixed point type, the perfect result set
64408 contains a single value; thus, operations on decimal types are always
64409 fully specified.
64410
64411 6
64412 When one operand of a fixed-fixed multiplication or division is of type
64413 universal_real, that operand is not implicitly converted in the usual
64414 sense, since the context does not determine a unique target type, but
64415 the accuracy of the result of the multiplication or division (i.e.,
64416 whether the result has to belong to the perfect result set or merely the
64417 close result set) depends on the value of the operand of type
64418 universal_real and on the types of the other operand and of the result.
64419
64420 7
64421 For a fixed point multiplication or division whose (exact) mathematical
64422 result is v, and for the conversion of a value v to a fixed point type,
64423 the perfect result set and close result set are defined as follows:
64424
64425 8
64426 * If the result type is an ordinary fixed point type with a small of
64427 s,
64428
64429 9
64430 * if v is an integer multiple of s, then the perfect result
64431 set contains only the value v;
64432
64433 10
64434 * otherwise, it contains the integer multiple of s just
64435 below v and the integer multiple of s just above v.
64436
64437 11
64438 The close result set is an implementation-defined set of
64439 consecutive integer multiples of s containing the perfect result
64440 set as a subset.
64441
64442 12
64443 * If the result type is a decimal type with a small of s,
64444
64445 13
64446 * if v is an integer multiple of s, then the perfect result
64447 set contains only the value v;
64448
64449 14/3
64450 * otherwise, if truncation applies, then it contains only
64451 the integer multiple of s in the direction toward zero,
64452 whereas if rounding applies, then it contains only the
64453 nearest integer multiple of s (with ties broken by
64454 rounding away from zero).
64455
64456 15
64457 The close result set is an implementation-defined set of
64458 consecutive integer multiples of s containing the perfect result
64459 set as a subset.
64460
64461 16
64462 * If the result type is an integer type,
64463
64464 17
64465 * if v is an integer, then the perfect result set contains
64466 only the value v;
64467
64468 18
64469 * otherwise, it contains the integer nearest to the value v
64470 (if v lies equally distant from two consecutive integers,
64471 the perfect result set contains the one that is further
64472 from zero).
64473
64474 19
64475 The close result set is an implementation-defined set of
64476 consecutive integers containing the perfect result set as a subset.
64477
64478 20
64479 The result of a fixed point multiplication or division shall belong
64480 either to the perfect result set or to the close result set, as
64481 described below, if overflow does not occur. In the following cases, if
64482 the result type is a fixed point type, let s be its small; otherwise,
64483 i.e. when the result type is an integer type, let s be 1.0.
64484
64485 21
64486 * For a multiplication or division neither of whose operands is of
64487 type universal_real, let l and r be the smalls of the left and
64488 right operands. For a multiplication, if (l · r) / s is an integer
64489 or the reciprocal of an integer (the smalls are said to be
64490 "compatible" in this case), the result shall belong to the perfect
64491 result set; otherwise, it belongs to the close result set. For a
64492 division, if l / (r · s) is an integer or the reciprocal of an
64493 integer (i.e., the smalls are compatible), the result shall belong
64494 to the perfect result set; otherwise, it belongs to the close
64495 result set.
64496
64497 22
64498 * For a multiplication or division having one universal_real operand
64499 with a value of v, note that it is always possible to factor v as
64500 an integer multiple of a "compatible" small, but the integer
64501 multiple may be "too big." If there exists a factorization in
64502 which that multiple is less than some implementation-defined limit,
64503 the result shall belong to the perfect result set; otherwise, it
64504 belongs to the close result set.
64505
64506 23
64507 A multiplication P * Q of an operand of a fixed point type F by an
64508 operand of an integer type I, or vice-versa, and a division P / Q of an
64509 operand of a fixed point type F by an operand of an integer type I, are
64510 also allowed. In these cases, the result has a type of F; explicit
64511 conversion of the result is never required. The accuracy required in
64512 these cases is the same as that required for a multiplication F(P * Q)
64513 or a division F(P / Q) obtained by interpreting the operand of the
64514 integer type to have a fixed point type with a small of 1.0.
64515
64516 24
64517 The accuracy of the result of a conversion from an integer or fixed
64518 point type to a fixed point type, or from a fixed point type to an
64519 integer type, is the same as that of a fixed point multiplication of the
64520 source value by a fixed point operand having a small of 1.0 and a value
64521 of 1.0, as given by the foregoing rules. The result of a conversion
64522 from a floating point type to a fixed point type shall belong to the
64523 close result set. The result of a conversion of a universal_real
64524 operand to a fixed point type shall belong to the perfect result set.
64525
64526 25
64527 The possibility of overflow in the result of a predefined arithmetic
64528 operation or conversion yielding a result of a fixed point type T is
64529 analogous to that for floating point types, except for being related to
64530 the base range instead of the safe range. If all of the permitted
64531 results belong to the base range of T, then the implementation shall
64532 deliver one of the permitted results; otherwise,
64533
64534 26
64535 * if T'Machine_Overflows is True, the implementation shall either
64536 deliver one of the permitted results or raise Constraint_Error;
64537
64538 27
64539 * if T'Machine_Overflows is False, the result is implementation
64540 defined.
64541
64542 \1f
64543 File: arm2012.info, Node: G.2.4, Next: G.2.5, Prev: G.2.3, Up: G.2
64544
64545 G.2.4 Accuracy Requirements for the Elementary Functions
64546 --------------------------------------------------------
64547
64548 1
64549 In the strict mode, the performance of
64550 Numerics.Generic_Elementary_Functions shall be as specified here.
64551
64552 _Implementation Requirements_
64553
64554 2
64555 When an exception is not raised, the result of evaluating a function in
64556 an instance EF of Numerics.Generic_Elementary_Functions belongs to a
64557 result interval, defined as the smallest model interval of EF.Float_Type
64558 that contains all the values of the form f · (1.0 + d), where f is the
64559 exact value of the corresponding mathematical function at the given
64560 parameter values, d is a real number, and |d| is less than or equal to
64561 the function's maximum relative error. The function delivers a value
64562 that belongs to the result interval when both of its bounds belong to
64563 the safe range of EF.Float_Type; otherwise,
64564
64565 3
64566 * if EF.Float_Type'Machine_Overflows is True, the function either
64567 delivers a value that belongs to the result interval or raises
64568 Constraint_Error, signaling overflow;
64569
64570 4
64571 * if EF.Float_Type'Machine_Overflows is False, the result is
64572 implementation defined.
64573
64574 5
64575 The maximum relative error exhibited by each function is as follows:
64576
64577 6
64578 * 2.0 · EF.Float_Type'Model_Epsilon, in the case of the Sqrt, Sin,
64579 and Cos functions;
64580
64581 7
64582 * 4.0 · EF.Float_Type'Model_Epsilon, in the case of the Log, Exp,
64583 Tan, Cot, and inverse trigonometric functions; and
64584
64585 8
64586 * 8.0 · EF.Float_Type'Model_Epsilon, in the case of the forward and
64587 inverse hyperbolic functions.
64588
64589 9
64590 The maximum relative error exhibited by the exponentiation operator,
64591 which depends on the values of the operands, is (4.0 + |Right ·
64592 log(Left)| / 32.0) · EF.Float_Type'Model_Epsilon.
64593
64594 10
64595 The maximum relative error given above applies throughout the domain of
64596 the forward trigonometric functions when the Cycle parameter is
64597 specified. When the Cycle parameter is omitted, the maximum relative
64598 error given above applies only when the absolute value of the angle
64599 parameter X is less than or equal to some implementation-defined angle
64600 threshold, which shall be at least EF.Float_Type'Machine_Radix
64601 'floor(EF.Float_Type'Machine_Mantissa/2)'. Beyond the angle threshold,
64602 the accuracy of the forward trigonometric functions is implementation
64603 defined.
64604
64605 11/2
64606 The prescribed results specified in *note A.5.1:: for certain functions
64607 at particular parameter values take precedence over the maximum relative
64608 error bounds; effectively, they narrow to a single value the result
64609 interval allowed by the maximum relative error bounds. Additional rules
64610 with a similar effect are given by table G-1 for the inverse
64611 trigonometric functions, at particular parameter values for which the
64612 mathematical result is possibly not a model number of EF.Float_Type (or
64613 is, indeed, even transcendental). In each table entry, the values of
64614 the parameters are such that the result lies on the axis between two
64615 quadrants; the corresponding accuracy rule, which takes precedence over
64616 the maximum relative error bounds, is that the result interval is the
64617 model interval of EF.Float_Type associated with the exact mathematical
64618 result given in the table.
64619
64620 12/1
64621 This paragraph was deleted.
64622
64623 13
64624 The last line of the table is meant to apply when
64625 EF.Float_Type'Signed_Zeros is False; the two lines just above it, when
64626 EF.Float_Type'Signed_Zeros is True and the parameter Y has a zero value
64627 with the indicated sign.
64628
64629 Table G-1: Tightly Approximated Elementary Function Results
64630 Function Value of X Value of Y Exact Result Exact Result
64631 when Cycle when Cycle
64632 Specified Omitted
64633 Arcsin 1.0 n.a. Cycle/4.0 PI/2.0
64634 Arcsin -1.0 n.a. -Cycle/4.0 -PI/2.0
64635 Arccos 0.0 n.a. Cycle/4.0 PI/2.0
64636 Arccos -1.0 n.a. Cycle/2.0 PI
64637 Arctan 0.0 positive Cycle/4.0 PI/2.0
64638 and
64639 Arccot
64640 Arctan 0.0 negative -Cycle/4.0 -PI/2.0
64641 and
64642 Arccot
64643 Arctan negative +0.0 Cycle/2.0 PI
64644 and
64645 Arccot
64646 Arctan negative -0.0 -Cycle/2.0 -PI
64647 and
64648 Arccot
64649 Arctan negative 0.0 Cycle/2.0 PI
64650 and
64651 Arccot
64652 14
64653 The amount by which the result of an inverse trigonometric function is
64654 allowed to spill over into a quadrant adjacent to the one corresponding
64655 to the principal branch, as given in *note A.5.1::, is limited. The
64656 rule is that the result belongs to the smallest model interval of
64657 EF.Float_Type that contains both boundaries of the quadrant
64658 corresponding to the principal branch. This rule also takes precedence
64659 over the maximum relative error bounds, effectively narrowing the result
64660 interval allowed by them.
64661
64662 15
64663 Finally, the following specifications also take precedence over the
64664 maximum relative error bounds:
64665
64666 16
64667 * The absolute value of the result of the Sin, Cos, and Tanh
64668 functions never exceeds one.
64669
64670 17
64671 * The absolute value of the result of the Coth function is never less
64672 than one.
64673
64674 18
64675 * The result of the Cosh function is never less than one.
64676
64677 _Implementation Advice_
64678
64679 19
64680 The versions of the forward trigonometric functions without a Cycle
64681 parameter should not be implemented by calling the corresponding version
64682 with a Cycle parameter of 2.0*Numerics.Pi, since this will not provide
64683 the required accuracy in some portions of the domain. For the same
64684 reason, the version of Log without a Base parameter should not be
64685 implemented by calling the corresponding version with a Base parameter
64686 of Numerics.e.
64687
64688 \1f
64689 File: arm2012.info, Node: G.2.5, Next: G.2.6, Prev: G.2.4, Up: G.2
64690
64691 G.2.5 Performance Requirements for Random Number Generation
64692 -----------------------------------------------------------
64693
64694 1
64695 In the strict mode, the performance of Numerics.Float_Random and
64696 Numerics.Discrete_Random shall be as specified here.
64697
64698 _Implementation Requirements_
64699
64700 2
64701 Two different calls to the time-dependent Reset procedure shall reset
64702 the generator to different states, provided that the calls are separated
64703 in time by at least one second and not more than fifty years.
64704
64705 3
64706 The implementation's representations of generator states and its
64707 algorithms for generating random numbers shall yield a period of at
64708 least 231-2; much longer periods are desirable but not required.
64709
64710 4
64711 The implementations of Numerics.Float_Random.Random and
64712 Numerics.Discrete_Random.Random shall pass at least 85% of the
64713 individual trials in a suite of statistical tests. For
64714 Numerics.Float_Random, the tests are applied directly to the floating
64715 point values generated (i.e., they are not converted to integers first),
64716 while for Numerics.Discrete_Random they are applied to the generated
64717 values of various discrete types. Each test suite performs 6 different
64718 tests, with each test repeated 10 times, yielding a total of 60
64719 individual trials. An individual trial is deemed to pass if the
64720 chi-square value (or other statistic) calculated for the observed counts
64721 or distribution falls within the range of values corresponding to the
64722 2.5 and 97.5 percentage points for the relevant degrees of freedom
64723 (i.e., it shall be neither too high nor too low). For the purpose of
64724 determining the degrees of freedom, measurement categories are combined
64725 whenever the expected counts are fewer than 5.
64726
64727 \1f
64728 File: arm2012.info, Node: G.2.6, Prev: G.2.5, Up: G.2
64729
64730 G.2.6 Accuracy Requirements for Complex Arithmetic
64731 --------------------------------------------------
64732
64733 1
64734 In the strict mode, the performance of Numerics.Generic_Complex_Types
64735 and Numerics.Generic_Complex_Elementary_Functions shall be as specified
64736 here.
64737
64738 _Implementation Requirements_
64739
64740 2
64741 When an exception is not raised, the result of evaluating a real
64742 function of an instance CT of Numerics.Generic_Complex_Types (i.e., a
64743 function that yields a value of subtype CT.Real'Base or CT.Imaginary)
64744 belongs to a result interval defined as for a real elementary function
64745 (see *note G.2.4::).
64746
64747 3
64748 When an exception is not raised, each component of the result of
64749 evaluating a complex function of such an instance, or of an instance of
64750 Numerics.Generic_Complex_Elementary_Functions obtained by instantiating
64751 the latter with CT (i.e., a function that yields a value of subtype
64752 CT.Complex), also belongs to a result interval. The result intervals
64753 for the components of the result are either defined by a maximum
64754 relative error bound or by a maximum box error bound. When the result
64755 interval for the real (resp., imaginary) component is defined by maximum
64756 relative error, it is defined as for that of a real function, relative
64757 to the exact value of the real (resp., imaginary) part of the result of
64758 the corresponding mathematical function. When defined by maximum box
64759 error, the result interval for a component of the result is the smallest
64760 model interval of CT.Real that contains all the values of the
64761 corresponding part of f · (1.0 + d), where f is the exact complex value
64762 of the corresponding mathematical function at the given parameter
64763 values, d is complex, and |d| is less than or equal to the given maximum
64764 box error. The function delivers a value that belongs to the result
64765 interval (or a value both of whose components belong to their respective
64766 result intervals) when both bounds of the result interval(s) belong to
64767 the safe range of CT.Real; otherwise,
64768
64769 4
64770 * if CT.Real'Machine_Overflows is True, the function either delivers
64771 a value that belongs to the result interval (or a value both of
64772 whose components belong to their respective result intervals) or
64773 raises Constraint_Error, signaling overflow;
64774
64775 5
64776 * if CT.Real'Machine_Overflows is False, the result is implementation
64777 defined.
64778
64779 6/2
64780 The error bounds for particular complex functions are tabulated in table
64781 G-2. In the table, the error bound is given as the coefficient of
64782 CT.Real'Model_Epsilon.
64783
64784 7/1
64785 This paragraph was deleted.
64786
64787 Table G-2: Error Bounds for Particular Complex Functions
64788 Function or Operator Nature of Nature of Error Bound
64789 Result Bound
64790 Modulus real max. 3.0
64791 rel.
64792 error
64793 Argument real max. 4.0
64794 rel.
64795 error
64796 Compose_From_Polar complex max. 3.0
64797 rel.
64798 error
64799 "*" (both operands complex max. 5.0
64800 complex) box
64801 error
64802 "/" (right operand complex max. 13.0
64803 complex) box
64804 error
64805 Sqrt complex max. 6.0
64806 rel.
64807 error
64808 Log complex max. 13.0
64809 box
64810 error
64811 Exp (complex complex max. 7.0
64812 parameter) rel.
64813 error
64814 Exp (imaginary complex max. 2.0
64815 parameter) rel.
64816 error
64817 Sin, Cos, Sinh, and complex max. 11.0
64818 Cosh rel.
64819 error
64820 Tan, Cot, Tanh, and complex max. 35.0
64821 Coth rel.
64822 error
64823 inverse complex max. 14.0
64824 trigonometric rel.
64825 error
64826 inverse hyperbolic complex max. 14.0
64827 rel.
64828 error
64829 8
64830 The maximum relative error given above applies throughout the domain of
64831 the Compose_From_Polar function when the Cycle parameter is specified.
64832 When the Cycle parameter is omitted, the maximum relative error applies
64833 only when the absolute value of the parameter Argument is less than or
64834 equal to the angle threshold (see *note G.2.4::). For the Exp function,
64835 and for the forward hyperbolic (resp., trigonometric) functions, the
64836 maximum relative error given above likewise applies only when the
64837 absolute value of the imaginary (resp., real) component of the parameter
64838 X (or the absolute value of the parameter itself, in the case of the Exp
64839 function with a parameter of pure-imaginary type) is less than or equal
64840 to the angle threshold. For larger angles, the accuracy is
64841 implementation defined.
64842
64843 9
64844 The prescribed results specified in *note G.1.2:: for certain functions
64845 at particular parameter values take precedence over the error bounds;
64846 effectively, they narrow to a single value the result interval allowed
64847 by the error bounds for a component of the result. Additional rules
64848 with a similar effect are given below for certain inverse trigonometric
64849 and inverse hyperbolic functions, at particular parameter values for
64850 which a component of the mathematical result is transcendental. In each
64851 case, the accuracy rule, which takes precedence over the error bounds,
64852 is that the result interval for the stated result component is the model
64853 interval of CT.Real associated with the component's exact mathematical
64854 value. The cases in question are as follows:
64855
64856 10
64857 * When the parameter X has the value zero, the real (resp.,
64858 imaginary) component of the result of the Arccot (resp., Arccoth)
64859 function is in the model interval of CT.Real associated with the
64860 value PI/2.0.
64861
64862 11
64863 * When the parameter X has the value one, the real component of the
64864 result of the Arcsin function is in the model interval of CT.Real
64865 associated with the value PI/2.0.
64866
64867 12
64868 * When the parameter X has the value -1.0, the real component of the
64869 result of the Arcsin (resp., Arccos) function is in the model
64870 interval of CT.Real associated with the value -PI/2.0 (resp., PI).
64871
64872 13/2
64873 The amount by which a component of the result of an inverse
64874 trigonometric or inverse hyperbolic function is allowed to spill over
64875 into a quadrant adjacent to the one corresponding to the principal
64876 branch, as given in *note G.1.2::, is limited. The rule is that the
64877 result belongs to the smallest model interval of CT.Real that contains
64878 both boundaries of the quadrant corresponding to the principal branch.
64879 This rule also takes precedence over the maximum error bounds,
64880 effectively narrowing the result interval allowed by them.
64881
64882 14
64883 Finally, the results allowed by the error bounds are narrowed by one
64884 further rule: The absolute value of each component of the result of the
64885 Exp function, for a pure-imaginary parameter, never exceeds one.
64886
64887 _Implementation Advice_
64888
64889 15
64890 The version of the Compose_From_Polar function without a Cycle parameter
64891 should not be implemented by calling the corresponding version with a
64892 Cycle parameter of 2.0*Numerics.Pi, since this will not provide the
64893 required accuracy in some portions of the domain.
64894
64895 \1f
64896 File: arm2012.info, Node: G.3, Prev: G.2, Up: Annex G
64897
64898 G.3 Vector and Matrix Manipulation
64899 ==================================
64900
64901 1/2
64902 Types and operations for the manipulation of real vectors and matrices
64903 are provided in Generic_Real_Arrays, which is defined in *note G.3.1::.
64904 Types and operations for the manipulation of complex vectors and
64905 matrices are provided in Generic_Complex_Arrays, which is defined in
64906 *note G.3.2::. Both of these library units are generic children of the
64907 predefined package Numerics (see *note A.5::). Nongeneric equivalents
64908 of these packages for each of the predefined floating point types are
64909 also provided as children of Numerics.
64910
64911 * Menu:
64912
64913 * G.3.1 :: Real Vectors and Matrices
64914 * G.3.2 :: Complex Vectors and Matrices
64915
64916 \1f
64917 File: arm2012.info, Node: G.3.1, Next: G.3.2, Up: G.3
64918
64919 G.3.1 Real Vectors and Matrices
64920 -------------------------------
64921
64922 _Static Semantics_
64923
64924 1/2
64925 The generic library package Numerics.Generic_Real_Arrays has the
64926 following declaration:
64927
64928 2/2
64929 generic
64930 type Real is digits <>;
64931 package Ada.Numerics.Generic_Real_Arrays is
64932 pragma Pure(Generic_Real_Arrays);
64933
64934 3/2
64935 -- Types
64936
64937 4/2
64938 type Real_Vector is array (Integer range <>) of Real'Base;
64939 type Real_Matrix is array (Integer range <>, Integer range <>)
64940 of Real'Base;
64941
64942 5/2
64943 -- Subprograms for Real_Vector types
64944
64945 6/2
64946 -- Real_Vector arithmetic operations
64947
64948 7/2
64949 function "+" (Right : Real_Vector) return Real_Vector;
64950 function "-" (Right : Real_Vector) return Real_Vector;
64951 function "abs" (Right : Real_Vector) return Real_Vector;
64952
64953 8/2
64954 function "+" (Left, Right : Real_Vector) return Real_Vector;
64955 function "-" (Left, Right : Real_Vector) return Real_Vector;
64956
64957 9/2
64958 function "*" (Left, Right : Real_Vector) return Real'Base;
64959
64960 10/2
64961 function "abs" (Right : Real_Vector) return Real'Base;
64962
64963 11/2
64964 -- Real_Vector scaling operations
64965
64966 12/2
64967 function "*" (Left : Real'Base; Right : Real_Vector)
64968 return Real_Vector;
64969 function "*" (Left : Real_Vector; Right : Real'Base)
64970 return Real_Vector;
64971 function "/" (Left : Real_Vector; Right : Real'Base)
64972 return Real_Vector;
64973
64974 13/2
64975 -- Other Real_Vector operations
64976
64977 14/2
64978 function Unit_Vector (Index : Integer;
64979 Order : Positive;
64980 First : Integer := 1) return Real_Vector;
64981
64982 15/2
64983 -- Subprograms for Real_Matrix types
64984
64985 16/2
64986 -- Real_Matrix arithmetic operations
64987
64988 17/2
64989 function "+" (Right : Real_Matrix) return Real_Matrix;
64990 function "-" (Right : Real_Matrix) return Real_Matrix;
64991 function "abs" (Right : Real_Matrix) return Real_Matrix;
64992 function Transpose (X : Real_Matrix) return Real_Matrix;
64993
64994 18/2
64995 function "+" (Left, Right : Real_Matrix) return Real_Matrix;
64996 function "-" (Left, Right : Real_Matrix) return Real_Matrix;
64997 function "*" (Left, Right : Real_Matrix) return Real_Matrix;
64998
64999 19/2
65000 function "*" (Left, Right : Real_Vector) return Real_Matrix;
65001
65002 20/2
65003 function "*" (Left : Real_Vector; Right : Real_Matrix)
65004 return Real_Vector;
65005 function "*" (Left : Real_Matrix; Right : Real_Vector)
65006 return Real_Vector;
65007
65008 21/2
65009 -- Real_Matrix scaling operations
65010
65011 22/2
65012 function "*" (Left : Real'Base; Right : Real_Matrix)
65013 return Real_Matrix;
65014 function "*" (Left : Real_Matrix; Right : Real'Base)
65015 return Real_Matrix;
65016 function "/" (Left : Real_Matrix; Right : Real'Base)
65017 return Real_Matrix;
65018
65019 23/2
65020 -- Real_Matrix inversion and related operations
65021
65022 24/2
65023 function Solve (A : Real_Matrix; X : Real_Vector) return Real_Vector;
65024 function Solve (A, X : Real_Matrix) return Real_Matrix;
65025 function Inverse (A : Real_Matrix) return Real_Matrix;
65026 function Determinant (A : Real_Matrix) return Real'Base;
65027
65028 25/2
65029 -- Eigenvalues and vectors of a real symmetric matrix
65030
65031 26/2
65032 function Eigenvalues (A : Real_Matrix) return Real_Vector;
65033
65034 27/2
65035 procedure Eigensystem (A : in Real_Matrix;
65036 Values : out Real_Vector;
65037 Vectors : out Real_Matrix);
65038
65039 28/2
65040 -- Other Real_Matrix operations
65041
65042 29/2
65043 function Unit_Matrix (Order : Positive;
65044 First_1, First_2 : Integer := 1)
65045 return Real_Matrix;
65046
65047 30/2
65048 end Ada.Numerics.Generic_Real_Arrays;
65049
65050 31/2
65051 The library package Numerics.Real_Arrays is declared pure and defines
65052 the same types and subprograms as Numerics.Generic_Real_Arrays, except
65053 that the predefined type Float is systematically substituted for
65054 Real'Base throughout. Nongeneric equivalents for each of the other
65055 predefined floating point types are defined similarly, with the names
65056 Numerics.Short_Real_Arrays, Numerics.Long_Real_Arrays, etc.
65057
65058 32/2
65059 Two types are defined and exported by Numerics.Generic_Real_Arrays. The
65060 composite type Real_Vector is provided to represent a vector with
65061 components of type Real; it is defined as an unconstrained,
65062 one-dimensional array with an index of type Integer. The composite type
65063 Real_Matrix is provided to represent a matrix with components of type
65064 Real; it is defined as an unconstrained, two-dimensional array with
65065 indices of type Integer.
65066
65067 33/2
65068 The effect of the various subprograms is as described below. In most
65069 cases the subprograms are described in terms of corresponding scalar
65070 operations of the type Real; any exception raised by those operations is
65071 propagated by the array operation. Moreover, the accuracy of the result
65072 for each individual component is as defined for the scalar operation
65073 unless stated otherwise.
65074
65075 34/2
65076 In the case of those operations which are defined to involve an inner
65077 product, Constraint_Error may be raised if an intermediate result is
65078 outside the range of Real'Base even though the mathematical final result
65079 would not be.
65080
65081 35/2
65082 function "+" (Right : Real_Vector) return Real_Vector;
65083 function "-" (Right : Real_Vector) return Real_Vector;
65084 function "abs" (Right : Real_Vector) return Real_Vector;
65085
65086 36/2
65087 Each operation returns the result of applying the
65088 corresponding operation of the type Real to each component of
65089 Right. The index range of the result is Right'Range.
65090
65091 37/2
65092 function "+" (Left, Right : Real_Vector) return Real_Vector;
65093 function "-" (Left, Right : Real_Vector) return Real_Vector;
65094
65095 38/2
65096 Each operation returns the result of applying the
65097 corresponding operation of the type Real to each component of
65098 Left and the matching component of Right. The index range of
65099 the result is Left'Range. Constraint_Error is raised if
65100 Left'Length is not equal to Right'Length.
65101
65102 39/2
65103 function "*" (Left, Right : Real_Vector) return Real'Base;
65104
65105 40/2
65106 This operation returns the inner product of Left and Right.
65107 Constraint_Error is raised if Left'Length is not equal to
65108 Right'Length. This operation involves an inner product.
65109
65110 41/2
65111 function "abs" (Right : Real_Vector) return Real'Base;
65112
65113 42/2
65114 This operation returns the L2-norm of Right (the square root
65115 of the inner product of the vector with itself).
65116
65117 43/2
65118 function "*" (Left : Real'Base; Right : Real_Vector) return Real_Vector;
65119
65120 44/2
65121 This operation returns the result of multiplying each
65122 component of Right by the scalar Left using the "*" operation
65123 of the type Real. The index range of the result is
65124 Right'Range.
65125
65126 45/2
65127 function "*" (Left : Real_Vector; Right : Real'Base) return Real_Vector;
65128 function "/" (Left : Real_Vector; Right : Real'Base) return Real_Vector;
65129
65130 46/2
65131 Each operation returns the result of applying the
65132 corresponding operation of the type Real to each component of
65133 Left and to the scalar Right. The index range of the result
65134 is Left'Range.
65135
65136 47/2
65137 function Unit_Vector (Index : Integer;
65138 Order : Positive;
65139 First : Integer := 1) return Real_Vector;
65140
65141 48/2
65142 This function returns a unit vector with Order components and
65143 a lower bound of First. All components are set to 0.0 except
65144 for the Index component which is set to 1.0. Constraint_Error
65145 is raised if Index < First, Index > First + Order - 1 or if
65146 First + Order - 1 > Integer'Last.
65147
65148 49/2
65149 function "+" (Right : Real_Matrix) return Real_Matrix;
65150 function "-" (Right : Real_Matrix) return Real_Matrix;
65151 function "abs" (Right : Real_Matrix) return Real_Matrix;
65152
65153 50/2
65154 Each operation returns the result of applying the
65155 corresponding operation of the type Real to each component of
65156 Right. The index ranges of the result are those of Right.
65157
65158 51/2
65159 function Transpose (X : Real_Matrix) return Real_Matrix;
65160
65161 52/2
65162 This function returns the transpose of a matrix X. The first
65163 and second index ranges of the result are X'Range(2) and
65164 X'Range(1) respectively.
65165
65166 53/2
65167 function "+" (Left, Right : Real_Matrix) return Real_Matrix;
65168 function "-" (Left, Right : Real_Matrix) return Real_Matrix;
65169
65170 54/2
65171 Each operation returns the result of applying the
65172 corresponding operation of the type Real to each component of
65173 Left and the matching component of Right. The index ranges of
65174 the result are those of Left. Constraint_Error is raised if
65175 Left'Length(1) is not equal to Right'Length(1) or
65176 Left'Length(2) is not equal to Right'Length(2).
65177
65178 55/2
65179 function "*" (Left, Right : Real_Matrix) return Real_Matrix;
65180
65181 56/2
65182 This operation provides the standard mathematical operation
65183 for matrix multiplication. The first and second index ranges
65184 of the result are Left'Range(1) and Right'Range(2)
65185 respectively. Constraint_Error is raised if Left'Length(2) is
65186 not equal to Right'Length(1). This operation involves inner
65187 products.
65188
65189 57/2
65190 function "*" (Left, Right : Real_Vector) return Real_Matrix;
65191
65192 58/2
65193 This operation returns the outer product of a (column) vector
65194 Left by a (row) vector Right using the operation "*" of the
65195 type Real for computing the individual components. The first
65196 and second index ranges of the result are Left'Range and
65197 Right'Range respectively.
65198
65199 59/2
65200 function "*" (Left : Real_Vector; Right : Real_Matrix) return Real_Vector;
65201
65202 60/2
65203 This operation provides the standard mathematical operation
65204 for multiplication of a (row) vector Left by a matrix Right.
65205 The index range of the (row) vector result is Right'Range(2).
65206 Constraint_Error is raised if Left'Length is not equal to
65207 Right'Length(1). This operation involves inner products.
65208
65209 61/2
65210 function "*" (Left : Real_Matrix; Right : Real_Vector) return Real_Vector;
65211
65212 62/2
65213 This operation provides the standard mathematical operation
65214 for multiplication of a matrix Left by a (column) vector
65215 Right. The index range of the (column) vector result is
65216 Left'Range(1). Constraint_Error is raised if Left'Length(2)
65217 is not equal to Right'Length. This operation involves inner
65218 products.
65219
65220 63/2
65221 function "*" (Left : Real'Base; Right : Real_Matrix) return Real_Matrix;
65222
65223 64/2
65224 This operation returns the result of multiplying each
65225 component of Right by the scalar Left using the "*" operation
65226 of the type Real. The index ranges of the result are those of
65227 Right.
65228
65229 65/2
65230 function "*" (Left : Real_Matrix; Right : Real'Base) return Real_Matrix;
65231 function "/" (Left : Real_Matrix; Right : Real'Base) return Real_Matrix;
65232
65233 66/2
65234 Each operation returns the result of applying the
65235 corresponding operation of the type Real to each component of
65236 Left and to the scalar Right. The index ranges of the result
65237 are those of Left.
65238
65239 67/2
65240 function Solve (A : Real_Matrix; X : Real_Vector) return Real_Vector;
65241
65242 68/2
65243 This function returns a vector Y such that X is (nearly) equal
65244 to A * Y. This is the standard mathematical operation for
65245 solving a single set of linear equations. The index range of
65246 the result is A'Range(2). Constraint_Error is raised if
65247 A'Length(1), A'Length(2), and X'Length are not equal.
65248 Constraint_Error is raised if the matrix A is ill-conditioned.
65249
65250 69/2
65251 function Solve (A, X : Real_Matrix) return Real_Matrix;
65252
65253 70/2
65254 This function returns a matrix Y such that X is (nearly) equal
65255 to A * Y. This is the standard mathematical operation for
65256 solving several sets of linear equations. The index ranges of
65257 the result are A'Range(2) and X'Range(2). Constraint_Error is
65258 raised if A'Length(1), A'Length(2), and X'Length(1) are not
65259 equal. Constraint_Error is raised if the matrix A is
65260 ill-conditioned.
65261
65262 71/2
65263 function Inverse (A : Real_Matrix) return Real_Matrix;
65264
65265 72/2
65266 This function returns a matrix B such that A * B is (nearly)
65267 equal to the unit matrix. The index ranges of the result are
65268 A'Range(2) and A'Range(1). Constraint_Error is raised if
65269 A'Length(1) is not equal to A'Length(2). Constraint_Error is
65270 raised if the matrix A is ill-conditioned.
65271
65272 73/2
65273 function Determinant (A : Real_Matrix) return Real'Base;
65274
65275 74/2
65276 This function returns the determinant of the matrix A.
65277 Constraint_Error is raised if A'Length(1) is not equal to
65278 A'Length(2).
65279
65280 75/2
65281 function Eigenvalues(A : Real_Matrix) return Real_Vector;
65282
65283 76/2
65284 This function returns the eigenvalues of the symmetric matrix
65285 A as a vector sorted into order with the largest first.
65286 Constraint_Error is raised if A'Length(1) is not equal to
65287 A'Length(2). The index range of the result is A'Range(1).
65288 Argument_Error is raised if the matrix A is not symmetric.
65289
65290 77/2
65291 procedure Eigensystem(A : in Real_Matrix;
65292 Values : out Real_Vector;
65293 Vectors : out Real_Matrix);
65294
65295 78/3
65296 This procedure computes both the eigenvalues and eigenvectors
65297 of the symmetric matrix A. The out parameter Values is the
65298 same as that obtained by calling the function Eigenvalues.
65299 The out parameter Vectors is a matrix whose columns are the
65300 eigenvectors of the matrix A. The order of the columns
65301 corresponds to the order of the eigenvalues. The eigenvectors
65302 are normalized and mutually orthogonal (they are orthonormal),
65303 including when there are repeated eigenvalues.
65304 Constraint_Error is raised if A'Length(1) is not equal to
65305 A'Length(2), or if Values'Range is not equal to A'Range(1), or
65306 if the index ranges of the parameter Vectors are not equal to
65307 those of A. Argument_Error is raised if the matrix A is not
65308 symmetric. Constraint_Error is also raised in
65309 implementation-defined circumstances if the algorithm used
65310 does not converge quickly enough.
65311
65312 79/2
65313 function Unit_Matrix (Order : Positive;
65314 First_1, First_2 : Integer := 1) return Real_Matrix;
65315
65316 80/2
65317 This function returns a square unit matrix with Order**2
65318 components and lower bounds of First_1 and First_2 (for the
65319 first and second index ranges respectively). All components
65320 are set to 0.0 except for the main diagonal, whose components
65321 are set to 1.0. Constraint_Error is raised if First_1 + Order
65322 - 1 > Integer'Last or First_2 + Order - 1 > Integer'Last.
65323
65324 _Implementation Requirements_
65325
65326 81/2
65327 Accuracy requirements for the subprograms Solve, Inverse, Determinant,
65328 Eigenvalues and Eigensystem are implementation defined.
65329
65330 82/2
65331 For operations not involving an inner product, the accuracy requirements
65332 are those of the corresponding operations of the type Real in both the
65333 strict mode and the relaxed mode (see *note G.2::).
65334
65335 83/2
65336 For operations involving an inner product, no requirements are specified
65337 in the relaxed mode. In the strict mode the modulus of the absolute
65338 error of the inner product X*Y shall not exceed g*abs(X)*abs(Y) where g
65339 is defined as
65340
65341 84/2
65342 g = X'Length * Real'Machine_Radix**(1 - Real'Model_Mantissa)
65343
65344 85/2
65345 For the L2-norm, no accuracy requirements are specified in the relaxed
65346 mode. In the strict mode the relative error on the norm shall not
65347 exceed g / 2.0 + 3.0 * Real'Model_Epsilon where g is defined as above.
65348
65349 _Documentation Requirements_
65350
65351 86/2
65352 Implementations shall document any techniques used to reduce
65353 cancellation errors such as extended precision arithmetic.
65354
65355 _Implementation Permissions_
65356
65357 87/2
65358 The nongeneric equivalent packages may, but need not, be actual
65359 instantiations of the generic package for the appropriate predefined
65360 type.
65361
65362 _Implementation Advice_
65363
65364 88/3
65365 Implementations should implement the Solve and Inverse functions using
65366 established techniques such as LU decomposition with row interchanges
65367 followed by back and forward substitution. Implementations are
65368 recommended to refine the result by performing an iteration on the
65369 residuals; if this is done, then it should be documented.
65370
65371 89/2
65372 It is not the intention that any special provision should be made to
65373 determine whether a matrix is ill-conditioned or not. The naturally
65374 occurring overflow (including division by zero) which will result from
65375 executing these functions with an ill-conditioned matrix and thus raise
65376 Constraint_Error is sufficient.
65377
65378 90/2
65379 The test that a matrix is symmetric should be performed by using the
65380 equality operator to compare the relevant components.
65381
65382 91/3
65383 An implementation should minimize the circumstances under which the
65384 algorithm used for Eigenvalues and Eigensystem fails to converge.
65385
65386 \1f
65387 File: arm2012.info, Node: G.3.2, Prev: G.3.1, Up: G.3
65388
65389 G.3.2 Complex Vectors and Matrices
65390 ----------------------------------
65391
65392 _Static Semantics_
65393
65394 1/2
65395 The generic library package Numerics.Generic_Complex_Arrays has the
65396 following declaration:
65397
65398 2/2
65399 with Ada.Numerics.Generic_Real_Arrays, Ada.Numerics.Generic_Complex_Types;
65400 generic
65401 with package Real_Arrays is new
65402 Ada.Numerics.Generic_Real_Arrays (<>);
65403 use Real_Arrays;
65404 with package Complex_Types is new
65405 Ada.Numerics.Generic_Complex_Types (Real);
65406 use Complex_Types;
65407 package Ada.Numerics.Generic_Complex_Arrays is
65408 pragma Pure(Generic_Complex_Arrays);
65409
65410 3/2
65411 -- Types
65412
65413 4/2
65414 type Complex_Vector is array (Integer range <>) of Complex;
65415 type Complex_Matrix is array (Integer range <>,
65416 Integer range <>) of Complex;
65417
65418 5/2
65419 -- Subprograms for Complex_Vector types
65420
65421 6/2
65422 -- Complex_Vector selection, conversion and composition operations
65423
65424 7/2
65425 function Re (X : Complex_Vector) return Real_Vector;
65426 function Im (X : Complex_Vector) return Real_Vector;
65427
65428 8/2
65429 procedure Set_Re (X : in out Complex_Vector;
65430 Re : in Real_Vector);
65431 procedure Set_Im (X : in out Complex_Vector;
65432 Im : in Real_Vector);
65433
65434 9/2
65435 function Compose_From_Cartesian (Re : Real_Vector)
65436 return Complex_Vector;
65437 function Compose_From_Cartesian (Re, Im : Real_Vector)
65438 return Complex_Vector;
65439
65440 10/2
65441 function Modulus (X : Complex_Vector) return Real_Vector;
65442 function "abs" (Right : Complex_Vector) return Real_Vector
65443 renames Modulus;
65444 function Argument (X : Complex_Vector) return Real_Vector;
65445 function Argument (X : Complex_Vector;
65446 Cycle : Real'Base) return Real_Vector;
65447
65448 11/2
65449 function Compose_From_Polar (Modulus, Argument : Real_Vector)
65450 return Complex_Vector;
65451 function Compose_From_Polar (Modulus, Argument : Real_Vector;
65452 Cycle : Real'Base)
65453 return Complex_Vector;
65454
65455 12/2
65456 -- Complex_Vector arithmetic operations
65457
65458 13/2
65459 function "+" (Right : Complex_Vector) return Complex_Vector;
65460 function "-" (Right : Complex_Vector) return Complex_Vector;
65461 function Conjugate (X : Complex_Vector) return Complex_Vector;
65462
65463 14/2
65464 function "+" (Left, Right : Complex_Vector) return Complex_Vector;
65465 function "-" (Left, Right : Complex_Vector) return Complex_Vector;
65466
65467 15/2
65468 function "*" (Left, Right : Complex_Vector) return Complex;
65469
65470 16/3
65471 function "abs" (Right : Complex_Vector) return Real'Base;
65472
65473 17/2
65474 -- Mixed Real_Vector and Complex_Vector arithmetic operations
65475
65476 18/2
65477 function "+" (Left : Real_Vector;
65478 Right : Complex_Vector) return Complex_Vector;
65479 function "+" (Left : Complex_Vector;
65480 Right : Real_Vector) return Complex_Vector;
65481 function "-" (Left : Real_Vector;
65482 Right : Complex_Vector) return Complex_Vector;
65483 function "-" (Left : Complex_Vector;
65484 Right : Real_Vector) return Complex_Vector;
65485
65486 19/2
65487 function "*" (Left : Real_Vector; Right : Complex_Vector)
65488 return Complex;
65489 function "*" (Left : Complex_Vector; Right : Real_Vector)
65490 return Complex;
65491
65492 20/2
65493 -- Complex_Vector scaling operations
65494
65495 21/2
65496 function "*" (Left : Complex;
65497 Right : Complex_Vector) return Complex_Vector;
65498 function "*" (Left : Complex_Vector;
65499 Right : Complex) return Complex_Vector;
65500 function "/" (Left : Complex_Vector;
65501 Right : Complex) return Complex_Vector;
65502
65503 22/2
65504 function "*" (Left : Real'Base;
65505 Right : Complex_Vector) return Complex_Vector;
65506 function "*" (Left : Complex_Vector;
65507 Right : Real'Base) return Complex_Vector;
65508 function "/" (Left : Complex_Vector;
65509 Right : Real'Base) return Complex_Vector;
65510
65511 23/2
65512 -- Other Complex_Vector operations
65513
65514 24/2
65515 function Unit_Vector (Index : Integer;
65516 Order : Positive;
65517 First : Integer := 1) return Complex_Vector;
65518
65519 25/2
65520 -- Subprograms for Complex_Matrix types
65521
65522 26/2
65523 -- Complex_Matrix selection, conversion and composition operations
65524
65525 27/2
65526 function Re (X : Complex_Matrix) return Real_Matrix;
65527 function Im (X : Complex_Matrix) return Real_Matrix;
65528
65529 28/2
65530 procedure Set_Re (X : in out Complex_Matrix;
65531 Re : in Real_Matrix);
65532 procedure Set_Im (X : in out Complex_Matrix;
65533 Im : in Real_Matrix);
65534
65535 29/2
65536 function Compose_From_Cartesian (Re : Real_Matrix)
65537 return Complex_Matrix;
65538 function Compose_From_Cartesian (Re, Im : Real_Matrix)
65539 return Complex_Matrix;
65540
65541 30/2
65542 function Modulus (X : Complex_Matrix) return Real_Matrix;
65543 function "abs" (Right : Complex_Matrix) return Real_Matrix
65544 renames Modulus;
65545
65546 31/2
65547 function Argument (X : Complex_Matrix) return Real_Matrix;
65548 function Argument (X : Complex_Matrix;
65549 Cycle : Real'Base) return Real_Matrix;
65550
65551 32/2
65552 function Compose_From_Polar (Modulus, Argument : Real_Matrix)
65553 return Complex_Matrix;
65554 function Compose_From_Polar (Modulus, Argument : Real_Matrix;
65555 Cycle : Real'Base)
65556 return Complex_Matrix;
65557
65558 33/2
65559 -- Complex_Matrix arithmetic operations
65560
65561 34/2
65562 function "+" (Right : Complex_Matrix) return Complex_Matrix;
65563 function "-" (Right : Complex_Matrix) return Complex_Matrix;
65564 function Conjugate (X : Complex_Matrix) return Complex_Matrix;
65565 function Transpose (X : Complex_Matrix) return Complex_Matrix;
65566
65567 35/2
65568 function "+" (Left, Right : Complex_Matrix) return Complex_Matrix;
65569 function "-" (Left, Right : Complex_Matrix) return Complex_Matrix;
65570 function "*" (Left, Right : Complex_Matrix) return Complex_Matrix;
65571
65572 36/2
65573 function "*" (Left, Right : Complex_Vector) return Complex_Matrix;
65574
65575 37/2
65576 function "*" (Left : Complex_Vector;
65577 Right : Complex_Matrix) return Complex_Vector;
65578 function "*" (Left : Complex_Matrix;
65579 Right : Complex_Vector) return Complex_Vector;
65580
65581 38/2
65582 -- Mixed Real_Matrix and Complex_Matrix arithmetic operations
65583
65584 39/2
65585 function "+" (Left : Real_Matrix;
65586 Right : Complex_Matrix) return Complex_Matrix;
65587 function "+" (Left : Complex_Matrix;
65588 Right : Real_Matrix) return Complex_Matrix;
65589 function "-" (Left : Real_Matrix;
65590 Right : Complex_Matrix) return Complex_Matrix;
65591 function "-" (Left : Complex_Matrix;
65592 Right : Real_Matrix) return Complex_Matrix;
65593 function "*" (Left : Real_Matrix;
65594 Right : Complex_Matrix) return Complex_Matrix;
65595 function "*" (Left : Complex_Matrix;
65596 Right : Real_Matrix) return Complex_Matrix;
65597
65598 40/2
65599 function "*" (Left : Real_Vector;
65600 Right : Complex_Vector) return Complex_Matrix;
65601 function "*" (Left : Complex_Vector;
65602 Right : Real_Vector) return Complex_Matrix;
65603
65604 41/2
65605 function "*" (Left : Real_Vector;
65606 Right : Complex_Matrix) return Complex_Vector;
65607 function "*" (Left : Complex_Vector;
65608 Right : Real_Matrix) return Complex_Vector;
65609 function "*" (Left : Real_Matrix;
65610 Right : Complex_Vector) return Complex_Vector;
65611 function "*" (Left : Complex_Matrix;
65612 Right : Real_Vector) return Complex_Vector;
65613
65614 42/2
65615 -- Complex_Matrix scaling operations
65616
65617 43/2
65618 function "*" (Left : Complex;
65619 Right : Complex_Matrix) return Complex_Matrix;
65620 function "*" (Left : Complex_Matrix;
65621 Right : Complex) return Complex_Matrix;
65622 function "/" (Left : Complex_Matrix;
65623 Right : Complex) return Complex_Matrix;
65624
65625 44/2
65626 function "*" (Left : Real'Base;
65627 Right : Complex_Matrix) return Complex_Matrix;
65628 function "*" (Left : Complex_Matrix;
65629 Right : Real'Base) return Complex_Matrix;
65630 function "/" (Left : Complex_Matrix;
65631 Right : Real'Base) return Complex_Matrix;
65632
65633 45/2
65634 -- Complex_Matrix inversion and related operations
65635
65636 46/2
65637 function Solve (A : Complex_Matrix; X : Complex_Vector)
65638 return Complex_Vector;
65639 function Solve (A, X : Complex_Matrix) return Complex_Matrix;
65640 function Inverse (A : Complex_Matrix) return Complex_Matrix;
65641 function Determinant (A : Complex_Matrix) return Complex;
65642
65643 47/2
65644 -- Eigenvalues and vectors of a Hermitian matrix
65645
65646 48/2
65647 function Eigenvalues(A : Complex_Matrix) return Real_Vector;
65648
65649 49/2
65650 procedure Eigensystem(A : in Complex_Matrix;
65651 Values : out Real_Vector;
65652 Vectors : out Complex_Matrix);
65653
65654 50/2
65655 -- Other Complex_Matrix operations
65656
65657 51/2
65658 function Unit_Matrix (Order : Positive;
65659 First_1, First_2 : Integer := 1)
65660 return Complex_Matrix;
65661
65662 52/2
65663 end Ada.Numerics.Generic_Complex_Arrays;
65664
65665 53/2
65666 The library package Numerics.Complex_Arrays is declared pure and defines
65667 the same types and subprograms as Numerics.Generic_Complex_Arrays,
65668 except that the predefined type Float is systematically substituted for
65669 Real'Base, and the Real_Vector and Real_Matrix types exported by
65670 Numerics.Real_Arrays are systematically substituted for Real_Vector and
65671 Real_Matrix, and the Complex type exported by Numerics.Complex_Types is
65672 systematically substituted for Complex, throughout. Nongeneric
65673 equivalents for each of the other predefined floating point types are
65674 defined similarly, with the names Numerics.Short_Complex_Arrays,
65675 Numerics.Long_Complex_Arrays, etc.
65676
65677 54/2
65678 Two types are defined and exported by Numerics.Generic_Complex_Arrays.
65679 The composite type Complex_Vector is provided to represent a vector with
65680 components of type Complex; it is defined as an unconstrained
65681 one-dimensional array with an index of type Integer. The composite type
65682 Complex_Matrix is provided to represent a matrix with components of type
65683 Complex; it is defined as an unconstrained, two-dimensional array with
65684 indices of type Integer.
65685
65686 55/2
65687 The effect of the various subprograms is as described below. In many
65688 cases they are described in terms of corresponding scalar operations in
65689 Numerics.Generic_Complex_Types. Any exception raised by those
65690 operations is propagated by the array subprogram. Moreover, any
65691 constraints on the parameters and the accuracy of the result for each
65692 individual component are as defined for the scalar operation.
65693
65694 56/2
65695 In the case of those operations which are defined to involve an inner
65696 product, Constraint_Error may be raised if an intermediate result has a
65697 component outside the range of Real'Base even though the final
65698 mathematical result would not.
65699
65700 57/2
65701 function Re (X : Complex_Vector) return Real_Vector;
65702 function Im (X : Complex_Vector) return Real_Vector;
65703
65704 58/2
65705 Each function returns a vector of the specified Cartesian
65706 components of X. The index range of the result is X'Range.
65707
65708 59/2
65709 procedure Set_Re (X : in out Complex_Vector; Re : in Real_Vector);
65710 procedure Set_Im (X : in out Complex_Vector; Im : in Real_Vector);
65711
65712 60/2
65713 Each procedure replaces the specified (Cartesian) component of
65714 each of the components of X by the value of the matching
65715 component of Re or Im; the other (Cartesian) component of each
65716 of the components is unchanged. Constraint_Error is raised if
65717 X'Length is not equal to Re'Length or Im'Length.
65718
65719 61/2
65720 function Compose_From_Cartesian (Re : Real_Vector)
65721 return Complex_Vector;
65722 function Compose_From_Cartesian (Re, Im : Real_Vector)
65723 return Complex_Vector;
65724
65725 62/2
65726 Each function constructs a vector of Complex results (in
65727 Cartesian representation) formed from given vectors of
65728 Cartesian components; when only the real components are given,
65729 imaginary components of zero are assumed. The index range of
65730 the result is Re'Range. Constraint_Error is raised if
65731 Re'Length is not equal to Im'Length.
65732
65733 63/2
65734 function Modulus (X : Complex_Vector) return Real_Vector;
65735 function "abs" (Right : Complex_Vector) return Real_Vector
65736 renames Modulus;
65737 function Argument (X : Complex_Vector) return Real_Vector;
65738 function Argument (X : Complex_Vector;
65739 Cycle : Real'Base) return Real_Vector;
65740
65741 64/2
65742 Each function calculates and returns a vector of the specified
65743 polar components of X or Right using the corresponding
65744 function in numerics.generic_complex_types. The index range
65745 of the result is X'Range or Right'Range.
65746
65747 65/2
65748 function Compose_From_Polar (Modulus, Argument : Real_Vector)
65749 return Complex_Vector;
65750 function Compose_From_Polar (Modulus, Argument : Real_Vector;
65751 Cycle : Real'Base)
65752 return Complex_Vector;
65753
65754 66/2
65755 Each function constructs a vector of Complex results (in
65756 Cartesian representation) formed from given vectors of polar
65757 components using the corresponding function in
65758 numerics.generic_complex_types on matching components of
65759 Modulus and Argument. The index range of the result is
65760 Modulus'Range. Constraint_Error is raised if Modulus'Length
65761 is not equal to Argument'Length.
65762
65763 67/2
65764 function "+" (Right : Complex_Vector) return Complex_Vector;
65765 function "-" (Right : Complex_Vector) return Complex_Vector;
65766
65767 68/2
65768 Each operation returns the result of applying the
65769 corresponding operation in numerics.generic_complex_types to
65770 each component of Right. The index range of the result is
65771 Right'Range.
65772
65773 69/2
65774 function Conjugate (X : Complex_Vector) return Complex_Vector;
65775
65776 70/2
65777 This function returns the result of applying the appropriate
65778 function Conjugate in numerics.generic_complex_types to each
65779 component of X. The index range of the result is X'Range.
65780
65781 71/2
65782 function "+" (Left, Right : Complex_Vector) return Complex_Vector;
65783 function "-" (Left, Right : Complex_Vector) return Complex_Vector;
65784
65785 72/2
65786 Each operation returns the result of applying the
65787 corresponding operation in numerics.generic_complex_types to
65788 each component of Left and the matching component of Right.
65789 The index range of the result is Left'Range. Constraint_Error
65790 is raised if Left'Length is not equal to Right'Length.
65791
65792 73/2
65793 function "*" (Left, Right : Complex_Vector) return Complex;
65794
65795 74/2
65796 This operation returns the inner product of Left and Right.
65797 Constraint_Error is raised if Left'Length is not equal to
65798 Right'Length. This operation involves an inner product.
65799
65800 75/3
65801 function "abs" (Right : Complex_Vector) return Real'Base;
65802
65803 76/2
65804 This operation returns the Hermitian L2-norm of Right (the
65805 square root of the inner product of the vector with its
65806 conjugate).
65807
65808 77/2
65809 function "+" (Left : Real_Vector;
65810 Right : Complex_Vector) return Complex_Vector;
65811 function "+" (Left : Complex_Vector;
65812 Right : Real_Vector) return Complex_Vector;
65813 function "-" (Left : Real_Vector;
65814 Right : Complex_Vector) return Complex_Vector;
65815 function "-" (Left : Complex_Vector;
65816 Right : Real_Vector) return Complex_Vector;
65817
65818 78/2
65819 Each operation returns the result of applying the
65820 corresponding operation in numerics.generic_complex_types to
65821 each component of Left and the matching component of Right.
65822 The index range of the result is Left'Range. Constraint_Error
65823 is raised if Left'Length is not equal to Right'Length.
65824
65825 79/2
65826 function "*" (Left : Real_Vector; Right : Complex_Vector) return Complex;
65827 function "*" (Left : Complex_Vector; Right : Real_Vector) return Complex;
65828
65829 80/2
65830 Each operation returns the inner product of Left and Right.
65831 Constraint_Error is raised if Left'Length is not equal to
65832 Right'Length. These operations involve an inner product.
65833
65834 81/2
65835 function "*" (Left : Complex; Right : Complex_Vector) return Complex_Vector;
65836
65837 82/2
65838 This operation returns the result of multiplying each
65839 component of Right by the complex number Left using the
65840 appropriate operation "*" in numerics.generic_complex_types.
65841 The index range of the result is Right'Range.
65842
65843 83/2
65844 function "*" (Left : Complex_Vector; Right : Complex) return Complex_Vector;
65845 function "/" (Left : Complex_Vector; Right : Complex) return Complex_Vector;
65846
65847 84/2
65848 Each operation returns the result of applying the
65849 corresponding operation in numerics.generic_complex_types to
65850 each component of the vector Left and the complex number
65851 Right. The index range of the result is Left'Range.
65852
65853 85/2
65854 function "*" (Left : Real'Base;
65855 Right : Complex_Vector) return Complex_Vector;
65856
65857 86/2
65858 This operation returns the result of multiplying each
65859 component of Right by the real number Left using the
65860 appropriate operation "*" in numerics.generic_complex_types.
65861 The index range of the result is Right'Range.
65862
65863 87/2
65864 function "*" (Left : Complex_Vector;
65865 Right : Real'Base) return Complex_Vector;
65866 function "/" (Left : Complex_Vector;
65867 Right : Real'Base) return Complex_Vector;
65868
65869 88/2
65870 Each operation returns the result of applying the
65871 corresponding operation in numerics.generic_complex_types to
65872 each component of the vector Left and the real number Right.
65873 The index range of the result is Left'Range.
65874
65875 89/2
65876 function Unit_Vector (Index : Integer;
65877 Order : Positive;
65878 First : Integer := 1) return Complex_Vector;
65879
65880 90/2
65881 This function returns a unit vector with Order components and
65882 a lower bound of First. All components are set to (0.0, 0.0)
65883 except for the Index component which is set to (1.0, 0.0).
65884 Constraint_Error is raised if Index < First, Index > First +
65885 Order - 1, or if First + Order - 1 > Integer'Last.
65886
65887 91/2
65888 function Re (X : Complex_Matrix) return Real_Matrix;
65889 function Im (X : Complex_Matrix) return Real_Matrix;
65890
65891 92/2
65892 Each function returns a matrix of the specified Cartesian
65893 components of X. The index ranges of the result are those of
65894 X.
65895
65896 93/2
65897 procedure Set_Re (X : in out Complex_Matrix; Re : in Real_Matrix);
65898 procedure Set_Im (X : in out Complex_Matrix; Im : in Real_Matrix);
65899
65900 94/2
65901 Each procedure replaces the specified (Cartesian) component of
65902 each of the components of X by the value of the matching
65903 component of Re or Im; the other (Cartesian) component of each
65904 of the components is unchanged. Constraint_Error is raised if
65905 X'Length(1) is not equal to Re'Length(1) or Im'Length(1) or if
65906 X'Length(2) is not equal to Re'Length(2) or Im'Length(2).
65907
65908 95/2
65909 function Compose_From_Cartesian (Re : Real_Matrix)
65910 return Complex_Matrix;
65911 function Compose_From_Cartesian (Re, Im : Real_Matrix)
65912 return Complex_Matrix;
65913
65914 96/2
65915 Each function constructs a matrix of Complex results (in
65916 Cartesian representation) formed from given matrices of
65917 Cartesian components; when only the real components are given,
65918 imaginary components of zero are assumed. The index ranges of
65919 the result are those of Re. Constraint_Error is raised if
65920 Re'Length(1) is not equal to Im'Length(1) or Re'Length(2) is
65921 not equal to Im'Length(2).
65922
65923 97/2
65924 function Modulus (X : Complex_Matrix) return Real_Matrix;
65925 function "abs" (Right : Complex_Matrix) return Real_Matrix
65926 renames Modulus;
65927 function Argument (X : Complex_Matrix) return Real_Matrix;
65928 function Argument (X : Complex_Matrix;
65929 Cycle : Real'Base) return Real_Matrix;
65930
65931 98/2
65932 Each function calculates and returns a matrix of the specified
65933 polar components of X or Right using the corresponding
65934 function in numerics.generic_complex_types. The index ranges
65935 of the result are those of X or Right.
65936
65937 99/2
65938 function Compose_From_Polar (Modulus, Argument : Real_Matrix)
65939 return Complex_Matrix;
65940 function Compose_From_Polar (Modulus, Argument : Real_Matrix;
65941 Cycle : Real'Base)
65942 return Complex_Matrix;
65943
65944 100/2
65945 Each function constructs a matrix of Complex results (in
65946 Cartesian representation) formed from given matrices of polar
65947 components using the corresponding function in
65948 numerics.generic_complex_types on matching components of
65949 Modulus and Argument. The index ranges of the result are
65950 those of Modulus. Constraint_Error is raised if
65951 Modulus'Length(1) is not equal to Argument'Length(1) or
65952 Modulus'Length(2) is not equal to Argument'Length(2).
65953
65954 101/2
65955 function "+" (Right : Complex_Matrix) return Complex_Matrix;
65956 function "-" (Right : Complex_Matrix) return Complex_Matrix;
65957
65958 102/2
65959 Each operation returns the result of applying the
65960 corresponding operation in numerics.generic_complex_types to
65961 each component of Right. The index ranges of the result are
65962 those of Right.
65963
65964 103/2
65965 function Conjugate (X : Complex_Matrix) return Complex_Matrix;
65966
65967 104/2
65968 This function returns the result of applying the appropriate
65969 function Conjugate in numerics.generic_complex_types to each
65970 component of X. The index ranges of the result are those of X.
65971
65972 105/2
65973 function Transpose (X : Complex_Matrix) return Complex_Matrix;
65974
65975 106/2
65976 This function returns the transpose of a matrix X. The first
65977 and second index ranges of the result are X'Range(2) and
65978 X'Range(1) respectively.
65979
65980 107/2
65981 function "+" (Left, Right : Complex_Matrix) return Complex_Matrix;
65982 function "-" (Left, Right : Complex_Matrix) return Complex_Matrix;
65983
65984 108/2
65985 Each operation returns the result of applying the
65986 corresponding operation in numerics.generic_complex_types to
65987 each component of Left and the matching component of Right.
65988 The index ranges of the result are those of Left.
65989 Constraint_Error is raised if Left'Length(1) is not equal to
65990 Right'Length(1) or Left'Length(2) is not equal to
65991 Right'Length(2).
65992
65993 109/2
65994 function "*" (Left, Right : Complex_Matrix) return Complex_Matrix;
65995
65996 110/2
65997 This operation provides the standard mathematical operation
65998 for matrix multiplication. The first and second index ranges
65999 of the result are Left'Range(1) and Right'Range(2)
66000 respectively. Constraint_Error is raised if Left'Length(2) is
66001 not equal to Right'Length(1). This operation involves inner
66002 products.
66003
66004 111/2
66005 function "*" (Left, Right : Complex_Vector) return Complex_Matrix;
66006
66007 112/2
66008 This operation returns the outer product of a (column) vector
66009 Left by a (row) vector Right using the appropriate operation
66010 "*" in numerics.generic_complex_types for computing the
66011 individual components. The first and second index ranges of
66012 the result are Left'Range and Right'Range respectively.
66013
66014 113/2
66015 function "*" (Left : Complex_Vector;
66016 Right : Complex_Matrix) return Complex_Vector;
66017
66018 114/2
66019 This operation provides the standard mathematical operation
66020 for multiplication of a (row) vector Left by a matrix Right.
66021 The index range of the (row) vector result is Right'Range(2).
66022 Constraint_Error is raised if Left'Length is not equal to
66023 Right'Length(1). This operation involves inner products.
66024
66025 115/2
66026 function "*" (Left : Complex_Matrix;
66027 Right : Complex_Vector) return Complex_Vector;
66028
66029 116/2
66030 This operation provides the standard mathematical operation
66031 for multiplication of a matrix Left by a (column) vector
66032 Right. The index range of the (column) vector result is
66033 Left'Range(1). Constraint_Error is raised if Left'Length(2)
66034 is not equal to Right'Length. This operation involves inner
66035 products.
66036
66037 117/2
66038 function "+" (Left : Real_Matrix;
66039 Right : Complex_Matrix) return Complex_Matrix;
66040 function "+" (Left : Complex_Matrix;
66041 Right : Real_Matrix) return Complex_Matrix;
66042 function "-" (Left : Real_Matrix;
66043 Right : Complex_Matrix) return Complex_Matrix;
66044 function "-" (Left : Complex_Matrix;
66045 Right : Real_Matrix) return Complex_Matrix;
66046
66047 118/2
66048 Each operation returns the result of applying the
66049 corresponding operation in numerics.generic_complex_types to
66050 each component of Left and the matching component of Right.
66051 The index ranges of the result are those of Left.
66052 Constraint_Error is raised if Left'Length(1) is not equal to
66053 Right'Length(1) or Left'Length(2) is not equal to
66054 Right'Length(2).
66055
66056 119/2
66057 function "*" (Left : Real_Matrix;
66058 Right : Complex_Matrix) return Complex_Matrix;
66059 function "*" (Left : Complex_Matrix;
66060 Right : Real_Matrix) return Complex_Matrix;
66061
66062 120/2
66063 Each operation provides the standard mathematical operation
66064 for matrix multiplication. The first and second index ranges
66065 of the result are Left'Range(1) and Right'Range(2)
66066 respectively. Constraint_Error is raised if Left'Length(2) is
66067 not equal to Right'Length(1). These operations involve inner
66068 products.
66069
66070 121/2
66071 function "*" (Left : Real_Vector;
66072 Right : Complex_Vector) return Complex_Matrix;
66073 function "*" (Left : Complex_Vector;
66074 Right : Real_Vector) return Complex_Matrix;
66075
66076 122/2
66077 Each operation returns the outer product of a (column) vector
66078 Left by a (row) vector Right using the appropriate operation
66079 "*" in numerics.generic_complex_types for computing the
66080 individual components. The first and second index ranges of
66081 the result are Left'Range and Right'Range respectively.
66082
66083 123/2
66084 function "*" (Left : Real_Vector;
66085 Right : Complex_Matrix) return Complex_Vector;
66086 function "*" (Left : Complex_Vector;
66087 Right : Real_Matrix) return Complex_Vector;
66088
66089 124/2
66090 Each operation provides the standard mathematical operation
66091 for multiplication of a (row) vector Left by a matrix Right.
66092 The index range of the (row) vector result is Right'Range(2).
66093 Constraint_Error is raised if Left'Length is not equal to
66094 Right'Length(1). These operations involve inner products.
66095
66096 125/2
66097 function "*" (Left : Real_Matrix;
66098 Right : Complex_Vector) return Complex_Vector;
66099 function "*" (Left : Complex_Matrix;
66100 Right : Real_Vector) return Complex_Vector;
66101
66102 126/2
66103 Each operation provides the standard mathematical operation
66104 for multiplication of a matrix Left by a (column) vector
66105 Right. The index range of the (column) vector result is
66106 Left'Range(1). Constraint_Error is raised if Left'Length(2)
66107 is not equal to Right'Length. These operations involve inner
66108 products.
66109
66110 127/2
66111 function "*" (Left : Complex; Right : Complex_Matrix) return Complex_Matrix;
66112
66113 128/2
66114 This operation returns the result of multiplying each
66115 component of Right by the complex number Left using the
66116 appropriate operation "*" in numerics.generic_complex_types.
66117 The index ranges of the result are those of Right.
66118
66119 129/2
66120 function "*" (Left : Complex_Matrix; Right : Complex) return Complex_Matrix;
66121 function "/" (Left : Complex_Matrix; Right : Complex) return Complex_Matrix;
66122
66123 130/2
66124 Each operation returns the result of applying the
66125 corresponding operation in numerics.generic_complex_types to
66126 each component of the matrix Left and the complex number
66127 Right. The index ranges of the result are those of Left.
66128
66129 131/2
66130 function "*" (Left : Real'Base;
66131 Right : Complex_Matrix) return Complex_Matrix;
66132
66133 132/2
66134 This operation returns the result of multiplying each
66135 component of Right by the real number Left using the
66136 appropriate operation "*" in numerics.generic_complex_types.
66137 The index ranges of the result are those of Right.
66138
66139 133/2
66140 function "*" (Left : Complex_Matrix;
66141 Right : Real'Base) return Complex_Matrix;
66142 function "/" (Left : Complex_Matrix;
66143 Right : Real'Base) return Complex_Matrix;
66144
66145 134/2
66146 Each operation returns the result of applying the
66147 corresponding operation in numerics.generic_complex_types to
66148 each component of the matrix Left and the real number Right.
66149 The index ranges of the result are those of Left.
66150
66151 135/2
66152 function Solve (A : Complex_Matrix; X : Complex_Vector) return Complex_Vector;
66153
66154 136/2
66155 This function returns a vector Y such that X is (nearly) equal
66156 to A * Y. This is the standard mathematical operation for
66157 solving a single set of linear equations. The index range of
66158 the result is A'Range(2). Constraint_Error is raised if
66159 A'Length(1), A'Length(2), and X'Length are not equal.
66160 Constraint_Error is raised if the matrix A is ill-conditioned.
66161
66162 137/2
66163 function Solve (A, X : Complex_Matrix) return Complex_Matrix;
66164
66165 138/2
66166 This function returns a matrix Y such that X is (nearly) equal
66167 to A * Y. This is the standard mathematical operation for
66168 solving several sets of linear equations. The index ranges of
66169 the result are A'Range(2) and X'Range(2). Constraint_Error is
66170 raised if A'Length(1), A'Length(2), and X'Length(1) are not
66171 equal. Constraint_Error is raised if the matrix A is
66172 ill-conditioned.
66173
66174 139/2
66175 function Inverse (A : Complex_Matrix) return Complex_Matrix;
66176
66177 140/2
66178 This function returns a matrix B such that A * B is (nearly)
66179 equal to the unit matrix. The index ranges of the result are
66180 A'Range(2) and A'Range(1). Constraint_Error is raised if
66181 A'Length(1) is not equal to A'Length(2). Constraint_Error is
66182 raised if the matrix A is ill-conditioned.
66183
66184 141/2
66185 function Determinant (A : Complex_Matrix) return Complex;
66186
66187 142/2
66188 This function returns the determinant of the matrix A.
66189 Constraint_Error is raised if A'Length(1) is not equal to
66190 A'Length(2).
66191
66192 143/2
66193 function Eigenvalues(A : Complex_Matrix) return Real_Vector;
66194
66195 144/2
66196 This function returns the eigenvalues of the Hermitian matrix
66197 A as a vector sorted into order with the largest first.
66198 Constraint_Error is raised if A'Length(1) is not equal to
66199 A'Length(2). The index range of the result is A'Range(1).
66200 Argument_Error is raised if the matrix A is not Hermitian.
66201
66202 145/2
66203 procedure Eigensystem(A : in Complex_Matrix;
66204 Values : out Real_Vector;
66205 Vectors : out Complex_Matrix);
66206
66207 146/3
66208 This procedure computes both the eigenvalues and eigenvectors
66209 of the Hermitian matrix A. The out parameter Values is the
66210 same as that obtained by calling the function Eigenvalues.
66211 The out parameter Vectors is a matrix whose columns are the
66212 eigenvectors of the matrix A. The order of the columns
66213 corresponds to the order of the eigenvalues. The eigenvectors
66214 are mutually orthonormal, including when there are repeated
66215 eigenvalues. Constraint_Error is raised if A'Length(1) is not
66216 equal to A'Length(2), or if Values'Range is not equal to
66217 A'Range(1), or if the index ranges of the parameter Vectors
66218 are not equal to those of A. Argument_Error is raised if the
66219 matrix A is not Hermitian. Constraint_Error is also raised in
66220 implementation-defined circumstances if the algorithm used
66221 does not converge quickly enough.
66222
66223 147/2
66224 function Unit_Matrix (Order : Positive;
66225 First_1, First_2 : Integer := 1)
66226 return Complex_Matrix;
66227
66228 148/2
66229 This function returns a square unit matrix with Order**2
66230 components and lower bounds of First_1 and First_2 (for the
66231 first and second index ranges respectively). All components
66232 are set to (0.0, 0.0) except for the main diagonal, whose
66233 components are set to (1.0, 0.0). Constraint_Error is raised
66234 if First_1 + Order - 1 > Integer'Last or First_2 + Order - 1 >
66235 Integer'Last.
66236
66237 _Implementation Requirements_
66238
66239 149/2
66240 Accuracy requirements for the subprograms Solve, Inverse, Determinant,
66241 Eigenvalues and Eigensystem are implementation defined.
66242
66243 150/2
66244 For operations not involving an inner product, the accuracy requirements
66245 are those of the corresponding operations of the type Real'Base and
66246 Complex in both the strict mode and the relaxed mode (see *note G.2::).
66247
66248 151/2
66249 For operations involving an inner product, no requirements are specified
66250 in the relaxed mode. In the strict mode the modulus of the absolute
66251 error of the inner product X*Y shall not exceed g*abs(X)*abs(Y) where g
66252 is defined as
66253
66254 152/2
66255 g = X'Length * Real'Machine_Radix**(1 - Real'Model_Mantissa)
66256 for mixed complex and real operands
66257
66258 153/2
66259 g = sqrt(2.0) * X'Length * Real'Machine_Radix**(1 - Real'Model_Mantissa)
66260 for two complex operands
66261
66262 154/2
66263 For the L2-norm, no accuracy requirements are specified in the relaxed
66264 mode. In the strict mode the relative error on the norm shall not
66265 exceed g / 2.0 + 3.0 * Real'Model_Epsilon where g has the definition
66266 appropriate for two complex operands.
66267
66268 _Documentation Requirements_
66269
66270 155/2
66271 Implementations shall document any techniques used to reduce
66272 cancellation errors such as extended precision arithmetic.
66273
66274 _Implementation Permissions_
66275
66276 156/2
66277 The nongeneric equivalent packages may, but need not, be actual
66278 instantiations of the generic package for the appropriate predefined
66279 type.
66280
66281 157/2
66282 Although many operations are defined in terms of operations from
66283 numerics.generic_complex_types, they need not be implemented by calling
66284 those operations provided that the effect is the same.
66285
66286 _Implementation Advice_
66287
66288 158/3
66289 Implementations should implement the Solve and Inverse functions using
66290 established techniques. Implementations are recommended to refine the
66291 result by performing an iteration on the residuals; if this is done,
66292 then it should be documented.
66293
66294 159/2
66295 It is not the intention that any special provision should be made to
66296 determine whether a matrix is ill-conditioned or not. The naturally
66297 occurring overflow (including division by zero) which will result from
66298 executing these functions with an ill-conditioned matrix and thus raise
66299 Constraint_Error is sufficient.
66300
66301 160/2
66302 The test that a matrix is Hermitian should use the equality operator to
66303 compare the real components and negation followed by equality to compare
66304 the imaginary components (see *note G.2.1::).
66305
66306 160.1/3
66307 An implementation should minimize the circumstances under which the
66308 algorithm used for Eigenvalues and Eigensystem fails to converge.
66309
66310 161/2
66311 Implementations should not perform operations on mixed complex and real
66312 operands by first converting the real operand to complex. See *note
66313 G.1.1::.
66314
66315 \1f
66316 File: arm2012.info, Node: Annex H, Next: Annex J, Prev: Annex G, Up: Top
66317
66318 Annex H High Integrity Systems
66319 ******************************
66320
66321 1/2
66322 This Annex addresses requirements for high integrity systems (including
66323 safety-critical systems and security-critical systems). It provides
66324 facilities and specifies documentation requirements that relate to
66325 several needs:
66326
66327 2
66328 * Understanding program execution;
66329
66330 3
66331 * Reviewing object code;
66332
66333 4
66334 * Restricting language constructs whose usage might complicate the
66335 demonstration of program correctness
66336
66337 4.1
66338 Execution understandability is supported by pragma Normalize_Scalars,
66339 and also by requirements for the implementation to document the effect
66340 of a program in the presence of a bounded error or where the language
66341 rules leave the effect unspecified.
66342
66343 5
66344 The pragmas Reviewable and Restrictions relate to the other requirements
66345 addressed by this Annex.
66346
66347 NOTES
66348
66349 6
66350 1 The Valid attribute (see *note 13.9.2::) is also useful in
66351 addressing these needs, to avoid problems that could otherwise
66352 arise from scalars that have values outside their declared range
66353 constraints.
66354
66355 * Menu:
66356
66357 * H.1 :: Pragma Normalize_Scalars
66358 * H.2 :: Documentation of Implementation Decisions
66359 * H.3 :: Reviewable Object Code
66360 * H.4 :: High Integrity Restrictions
66361 * H.5 :: Pragma Detect_Blocking
66362 * H.6 :: Pragma Partition_Elaboration_Policy
66363
66364 \1f
66365 File: arm2012.info, Node: H.1, Next: H.2, Up: Annex H
66366
66367 H.1 Pragma Normalize_Scalars
66368 ============================
66369
66370 1
66371 This pragma ensures that an otherwise uninitialized scalar object is set
66372 to a predictable value, but out of range if possible.
66373
66374 _Syntax_
66375
66376 2
66377 The form of a pragma Normalize_Scalars is as follows:
66378
66379 3
66380 pragma Normalize_Scalars;
66381
66382 _Post-Compilation Rules_
66383
66384 4
66385 Pragma Normalize_Scalars is a configuration pragma. It applies to all
66386 compilation_units included in a partition.
66387
66388 _Documentation Requirements_
66389
66390 5/2
66391 If a pragma Normalize_Scalars applies, the implementation shall document
66392 the implicit initial values for scalar subtypes, and shall identify each
66393 case in which such a value is used and is not an invalid representation.
66394
66395 _Implementation Advice_
66396
66397 6/2
66398 Whenever possible, the implicit initial values for a scalar subtype
66399 should be an invalid representation (see *note 13.9.1::).
66400
66401 NOTES
66402
66403 7
66404 2 The initialization requirement applies to uninitialized scalar
66405 objects that are subcomponents of composite objects, to allocated
66406 objects, and to stand-alone objects. It also applies to scalar out
66407 parameters. Scalar subcomponents of composite out parameters are
66408 initialized to the corresponding part of the actual, by virtue of
66409 *note 6.4.1::.
66410
66411 8
66412 3 The initialization requirement does not apply to a scalar for
66413 which pragma Import has been specified, since initialization of an
66414 imported object is performed solely by the foreign language
66415 environment (see *note B.1::).
66416
66417 9
66418 4 The use of pragma Normalize_Scalars in conjunction with Pragma
66419 Restrictions(No_Exceptions) may result in erroneous execution (see
66420 *note H.4::).
66421
66422 \1f
66423 File: arm2012.info, Node: H.2, Next: H.3, Prev: H.1, Up: Annex H
66424
66425 H.2 Documentation of Implementation Decisions
66426 =============================================
66427
66428 _Documentation Requirements_
66429
66430 1
66431 The implementation shall document the range of effects for each
66432 situation that the language rules identify as either a bounded error or
66433 as having an unspecified effect. If the implementation can constrain
66434 the effects of erroneous execution for a given construct, then it shall
66435 document such constraints. The documentation might be provided either
66436 independently of any compilation unit or partition, or as part of an
66437 annotated listing for a given unit or partition. See also *note
66438 1.1.3::, and *note 1.1.2::.
66439
66440 NOTES
66441
66442 2
66443 5 Among the situations to be documented are the conventions chosen
66444 for parameter passing, the methods used for the management of
66445 run-time storage, and the method used to evaluate numeric
66446 expressions if this involves extended range or extra precision.
66447
66448 \1f
66449 File: arm2012.info, Node: H.3, Next: H.4, Prev: H.2, Up: Annex H
66450
66451 H.3 Reviewable Object Code
66452 ==========================
66453
66454 1
66455 Object code review and validation are supported by pragmas Reviewable
66456 and Inspection_Point.
66457
66458 * Menu:
66459
66460 * H.3.1 :: Pragma Reviewable
66461 * H.3.2 :: Pragma Inspection_Point
66462
66463 \1f
66464 File: arm2012.info, Node: H.3.1, Next: H.3.2, Up: H.3
66465
66466 H.3.1 Pragma Reviewable
66467 -----------------------
66468
66469 1
66470 This pragma directs the implementation to provide information to
66471 facilitate analysis and review of a program's object code, in particular
66472 to allow determination of execution time and storage usage and to
66473 identify the correspondence between the source and object programs.
66474
66475 _Syntax_
66476
66477 2
66478 The form of a pragma Reviewable is as follows:
66479
66480 3
66481 pragma Reviewable;
66482
66483 _Post-Compilation Rules_
66484
66485 4
66486 Pragma Reviewable is a configuration pragma. It applies to all
66487 compilation_units included in a partition.
66488
66489 _Implementation Requirements_
66490
66491 5
66492 The implementation shall provide the following information for any
66493 compilation unit to which such a pragma applies:
66494
66495 6
66496 * Where compiler-generated run-time checks remain;
66497
66498 7
66499 * An identification of any construct with a language-defined check
66500 that is recognized prior to run time as certain to fail if executed
66501 (even if the generation of run-time checks has been suppressed);
66502
66503 8/2
66504 * For each read of a scalar object, an identification of the read as
66505 either "known to be initialized," or "possibly uninitialized,"
66506 independent of whether pragma Normalize_Scalars applies;
66507
66508 9
66509 * Where run-time support routines are implicitly invoked;
66510
66511 10
66512 * An object code listing, including:
66513
66514 11
66515 * Machine instructions, with relative offsets;
66516
66517 12
66518 * Where each data object is stored during its lifetime;
66519
66520 13
66521 * Correspondence with the source program, including an
66522 identification of the code produced per declaration and
66523 per statement.
66524
66525 14
66526 * An identification of each construct for which the implementation
66527 detects the possibility of erroneous execution;
66528
66529 15
66530 * For each subprogram, block, task, or other construct implemented by
66531 reserving and subsequently freeing an area on a run-time stack, an
66532 identification of the length of the fixed-size portion of the area
66533 and an indication of whether the non-fixed size portion is reserved
66534 on the stack or in a dynamically-managed storage region.
66535
66536 16
66537 The implementation shall provide the following information for any
66538 partition to which the pragma applies:
66539
66540 17
66541 * An object code listing of the entire partition, including
66542 initialization and finalization code as well as run-time system
66543 components, and with an identification of those instructions and
66544 data that will be relocated at load time;
66545
66546 18
66547 * A description of the run-time model relevant to the partition.
66548
66549 18.1
66550 The implementation shall provide control- and data-flow information,
66551 both within each compilation unit and across the compilation units of
66552 the partition.
66553
66554 _Implementation Advice_
66555
66556 19
66557 The implementation should provide the above information in both a
66558 human-readable and machine-readable form, and should document the latter
66559 so as to ease further processing by automated tools.
66560
66561 20
66562 Object code listings should be provided both in a symbolic format and
66563 also in an appropriate numeric format (such as hexadecimal or octal).
66564
66565 NOTES
66566
66567 21
66568 6 The order of elaboration of library units will be documented
66569 even in the absence of pragma Reviewable (see *note 10.2::).
66570
66571 \1f
66572 File: arm2012.info, Node: H.3.2, Prev: H.3.1, Up: H.3
66573
66574 H.3.2 Pragma Inspection_Point
66575 -----------------------------
66576
66577 1
66578 An occurrence of a pragma Inspection_Point identifies a set of objects
66579 each of whose values is to be available at the point(s) during program
66580 execution corresponding to the position of the pragma in the compilation
66581 unit. The purpose of such a pragma is to facilitate code validation.
66582
66583 _Syntax_
66584
66585 2
66586 The form of a pragma Inspection_Point is as follows:
66587
66588 3
66589 pragma Inspection_Point[(object_name {, object_name})];
66590
66591 _Legality Rules_
66592
66593 4
66594 A pragma Inspection_Point is allowed wherever a declarative_item or
66595 statement is allowed. Each object_name shall statically denote the
66596 declaration of an object.
66597
66598 _Static Semantics_
66599
66600 5/2
66601 An inspection point is a point in the object code corresponding to the
66602 occurrence of a pragma Inspection_Point in the compilation unit. An
66603 object is inspectable at an inspection point if the corresponding pragma
66604 Inspection_Point either has an argument denoting that object, or has no
66605 arguments and the declaration of the object is visible at the inspection
66606 point.
66607
66608 _Dynamic Semantics_
66609
66610 6
66611 Execution of a pragma Inspection_Point has no effect.
66612
66613 _Implementation Requirements_
66614
66615 7
66616 Reaching an inspection point is an external interaction with respect to
66617 the values of the inspectable objects at that point (see *note 1.1.3::).
66618
66619 _Documentation Requirements_
66620
66621 8
66622 For each inspection point, the implementation shall identify a mapping
66623 between each inspectable object and the machine resources (such as
66624 memory locations or registers) from which the object's value can be
66625 obtained.
66626
66627 NOTES
66628
66629 9/2
66630 7 The implementation is not allowed to perform "dead store
66631 elimination" on the last assignment to a variable prior to a point
66632 where the variable is inspectable. Thus an inspection point has
66633 the effect of an implicit read of each of its inspectable objects.
66634
66635 10
66636 8 Inspection points are useful in maintaining a correspondence
66637 between the state of the program in source code terms, and the
66638 machine state during the program's execution. Assertions about the
66639 values of program objects can be tested in machine terms at
66640 inspection points. Object code between inspection points can be
66641 processed by automated tools to verify programs mechanically.
66642
66643 11
66644 9 The identification of the mapping from source program objects to
66645 machine resources is allowed to be in the form of an annotated
66646 object listing, in human-readable or tool-processable form.
66647
66648 \1f
66649 File: arm2012.info, Node: H.4, Next: H.5, Prev: H.3, Up: Annex H
66650
66651 H.4 High Integrity Restrictions
66652 ===============================
66653
66654 1/3
66655 This subclause defines restrictions that can be used with pragma
66656 Restrictions (see *note 13.12::); these facilitate the demonstration of
66657 program correctness by allowing tailored versions of the run-time
66658 system.
66659
66660 _Static Semantics_
66661
66662 2/2
66663 This paragraph was deleted.
66664
66665 3/2
66666 The following restriction_identifiers are language defined:
66667
66668 4
66669 Tasking-related restriction:
66670
66671 5
66672 No_Protected_Types
66673 There are no declarations of protected types or protected
66674 objects.
66675
66676 6
66677 Memory-management related restrictions:
66678
66679 7
66680 No_Allocators
66681 There are no occurrences of an allocator.
66682
66683 8/1
66684 No_Local_Allocators
66685 Allocators are prohibited in subprograms, generic
66686 subprograms, tasks, and entry bodies.
66687
66688 8.1/3
66689 No_Anonymous_Allocators
66690 There are no allocators of anonymous access types.
66691
66692 8.2/3
66693 No_Coextensions
66694 There are no coextensions. See *note 3.10.2::.
66695
66696 8.3/3
66697 No_Access_Parameter_Allocators
66698 Allocators are not permitted as the actual parameter to
66699 an access parameter. See *note 6.1::.
66700
66701 9/2
66702
66703 This paragraph was deleted.
66704
66705 10
66706 Immediate_Reclamation
66707 Except for storage occupied by objects created by
66708 allocators and not deallocated via unchecked
66709 deallocation, any storage reserved at run time for an
66710 object is immediately reclaimed when the object no longer
66711 exists.
66712
66713 11
66714 Exception-related restriction:
66715
66716 12
66717 No_Exceptions
66718 Raise_statements and exception_handlers are not allowed.
66719 No language-defined run-time checks are generated;
66720 however, a run-time check performed automatically by the
66721 hardware is permitted.
66722
66723 13
66724 Other restrictions:
66725
66726 14
66727 No_Floating_Point
66728 Uses of predefined floating point types and operations,
66729 and declarations of new floating point types, are not
66730 allowed.
66731
66732 15
66733 No_Fixed_Point
66734 Uses of predefined fixed point types and operations, and
66735 declarations of new fixed point types, are not allowed.
66736
66737 16/2
66738
66739 This paragraph was deleted.
66740
66741 17
66742 No_Access_Subprograms
66743 The declaration of access-to-subprogram types is not
66744 allowed.
66745
66746 18
66747 No_Unchecked_Access
66748 The Unchecked_Access attribute is not allowed.
66749
66750 19
66751 No_Dispatch
66752 Occurrences of T'Class are not allowed, for any (tagged)
66753 subtype T.
66754
66755 20/2
66756 No_IO
66757 Semantic dependence on any of the library units
66758 Sequential_IO, Direct_IO, Text_IO, Wide_Text_IO,
66759 Wide_Wide_Text_IO, or Stream_IO is not allowed.
66760
66761 21
66762 No_Delay
66763 Delay_Statements and semantic dependence on package
66764 Calendar are not allowed.
66765
66766 22
66767 No_Recursion
66768 As part of the execution of a subprogram, the same
66769 subprogram is not invoked.
66770
66771 23
66772 No_Reentrancy
66773 During the execution of a subprogram by a task, no other
66774 task invokes the same subprogram.
66775
66776 _Implementation Requirements_
66777
66778 23.1/2
66779 An implementation of this Annex shall support:
66780
66781 23.2/2
66782 * the restrictions defined in this subclause; and
66783
66784 23.3/3
66785 * the following restrictions defined in *note D.7:::
66786 No_Task_Hierarchy, No_Abort_Statement, No_Implicit_Heap_Allocation,
66787 No_Standard_Allocators_After_Elaboration; and
66788
66789 23.4/2
66790 * the pragma Profile(Ravenscar); and
66791
66792 23.5/2
66793 * the following uses of restriction_parameter_identifiers defined in
66794 *note D.7::, which are checked prior to program execution:
66795
66796 23.6/2
66797 * Max_Task_Entries => 0,
66798
66799 23.7/2
66800 * Max_Asynchronous_Select_Nesting => 0, and
66801
66802 23.8/2
66803 * Max_Tasks => 0.
66804
66805 24/3
66806 If an implementation supports pragma Restrictions for a particular
66807 argument, then except for the restrictions No_Unchecked_Deallocation,
66808 No_Unchecked_Conversion, No_Access_Subprograms, No_Unchecked_Access,
66809 No_Specification_of_Aspect, No_Use_of_Attribute, No_Use_of_Pragma, and
66810 the equivalent use of No_Dependence, the associated restriction applies
66811 to the run-time system.
66812
66813 _Documentation Requirements_
66814
66815 25
66816 If a pragma Restrictions(No_Exceptions) is specified, the implementation
66817 shall document the effects of all constructs where language-defined
66818 checks are still performed automatically (for example, an overflow check
66819 performed by the processor).
66820
66821 _Erroneous Execution_
66822
66823 26
66824 Program execution is erroneous if pragma Restrictions(No_Exceptions) has
66825 been specified and the conditions arise under which a generated
66826 language-defined run-time check would fail.
66827
66828 27
66829 Program execution is erroneous if pragma Restrictions(No_Recursion) has
66830 been specified and a subprogram is invoked as part of its own execution,
66831 or if pragma Restrictions(No_Reentrancy) has been specified and during
66832 the execution of a subprogram by a task, another task invokes the same
66833 subprogram.
66834
66835 NOTES
66836
66837 28/2
66838 10 Uses of restriction_parameter_identifier No_Dependence defined
66839 in *note 13.12.1::: No_Dependence => Ada.Unchecked_Deallocation and
66840 No_Dependence => Ada.Unchecked_Conversion may be appropriate for
66841 high-integrity systems. Other uses of No_Dependence can also be
66842 appropriate for high-integrity systems.
66843
66844 \1f
66845 File: arm2012.info, Node: H.5, Next: H.6, Prev: H.4, Up: Annex H
66846
66847 H.5 Pragma Detect_Blocking
66848 ==========================
66849
66850 1/2
66851 The following pragma forces an implementation to detect potentially
66852 blocking operations within a protected operation.
66853
66854 _Syntax_
66855
66856 2/2
66857 The form of a pragma Detect_Blocking is as follows:
66858
66859 3/2
66860 pragma Detect_Blocking;
66861
66862 _Post-Compilation Rules_
66863
66864 4/2
66865 A pragma Detect_Blocking is a configuration pragma.
66866
66867 _Dynamic Semantics_
66868
66869 5/2
66870 An implementation is required to detect a potentially blocking operation
66871 within a protected operation, and to raise Program_Error (see *note
66872 9.5.1::).
66873
66874 _Implementation Permissions_
66875
66876 6/2
66877 An implementation is allowed to reject a compilation_unit if a
66878 potentially blocking operation is present directly within an entry_body
66879 or the body of a protected subprogram.
66880
66881 NOTES
66882
66883 7/2
66884 11 An operation that causes a task to be blocked within a foreign
66885 language domain is not defined to be potentially blocking, and need
66886 not be detected.
66887
66888 \1f
66889 File: arm2012.info, Node: H.6, Prev: H.5, Up: Annex H
66890
66891 H.6 Pragma Partition_Elaboration_Policy
66892 =======================================
66893
66894 1/3
66895 This subclause defines a pragma for user control over elaboration
66896 policy.
66897
66898 _Syntax_
66899
66900 2/2
66901 The form of a pragma Partition_Elaboration_Policy is as follows:
66902
66903 3/2
66904 pragma Partition_Elaboration_Policy (policy_identifier);
66905
66906 4/2
66907 The policy_identifier shall be either Sequential, Concurrent or an
66908 implementation-defined identifier.
66909
66910 _Post-Compilation Rules_
66911
66912 5/2
66913 A pragma Partition_Elaboration_Policy is a configuration pragma. It
66914 specifies the elaboration policy for a partition. At most one
66915 elaboration policy shall be specified for a partition.
66916
66917 6/3
66918 If the Sequential policy is specified for a partition, then pragma
66919 Restrictions (No_Task_Hierarchy) shall also be specified for the
66920 partition.
66921
66922 _Dynamic Semantics_
66923
66924 7/2
66925 Notwithstanding what this International Standard says elsewhere, this
66926 pragma allows partition elaboration rules concerning task activation and
66927 interrupt attachment to be changed. If the policy_identifier is
66928 Concurrent, or if there is no pragma Partition_Elaboration_Policy
66929 defined for the partition, then the rules defined elsewhere in this
66930 Standard apply.
66931
66932 8/2
66933 If the partition elaboration policy is Sequential, then task activation
66934 and interrupt attachment are performed in the following sequence of
66935 steps:
66936
66937 9/2
66938 * The activation of all library-level tasks and the attachment of
66939 interrupt handlers are deferred until all library units are
66940 elaborated.
66941
66942 10/2
66943 * The interrupt handlers are attached by the environment task.
66944
66945 11/2
66946 * The environment task is suspended while the library-level tasks are
66947 activated.
66948
66949 12/2
66950 * The environment task executes the main subprogram (if any)
66951 concurrently with these executing tasks.
66952
66953 13/2
66954 If several dynamic interrupt handler attachments for the same interrupt
66955 are deferred, then the most recent call of Attach_Handler or
66956 Exchange_Handler determines which handler is attached.
66957
66958 14/2
66959 If any deferred task activation fails, Tasking_Error is raised at the
66960 beginning of the sequence of statements of the body of the environment
66961 task prior to calling the main subprogram.
66962
66963 _Implementation Advice_
66964
66965 15/3
66966 If the partition elaboration policy is Sequential and the Environment
66967 task becomes permanently blocked during elaboration, then the partition
66968 is deadlocked and it is recommended that the partition be immediately
66969 terminated.
66970
66971 _Implementation Permissions_
66972
66973 16/3
66974 If the partition elaboration policy is Sequential and any task
66975 activation fails, then an implementation may immediately terminate the
66976 active partition to mitigate the hazard posed by continuing to execute
66977 with a subset of the tasks being active.
66978
66979 NOTES
66980
66981 17/2
66982 12 If any deferred task activation fails, the environment task is
66983 unable to handle the Tasking_Error exception and completes
66984 immediately. By contrast, if the partition elaboration policy is
66985 Concurrent, then this exception could be handled within a library
66986 unit.
66987
66988 \1f
66989 File: arm2012.info, Node: Annex J, Next: Annex K, Prev: Annex H, Up: Top
66990
66991 Annex J Obsolescent Features
66992 ****************************
66993
66994 1/2
66995 This Annex contains descriptions of features of the language whose
66996 functionality is largely redundant with other features defined by this
66997 International Standard. Use of these features is not recommended in
66998 newly written programs. Use of these features can be prevented by using
66999 pragma Restrictions (No_Obsolescent_Features), see *note 13.12.1::.
67000
67001 * Menu:
67002
67003 * J.1 :: Renamings of Library Units
67004 * J.2 :: Allowed Replacements of Characters
67005 * J.3 :: Reduced Accuracy Subtypes
67006 * J.4 :: The Constrained Attribute
67007 * J.5 :: ASCII
67008 * J.6 :: Numeric_Error
67009 * J.7 :: At Clauses
67010 * J.8 :: Mod Clauses
67011 * J.9 :: The Storage_Size Attribute
67012 * J.10 :: Specific Suppression of Checks
67013 * J.11 :: The Class Attribute of Untagged Incomplete Types
67014 * J.12 :: Pragma Interface
67015 * J.13 :: Dependence Restriction Identifiers
67016 * J.14 :: Character and Wide_Character Conversion Functions
67017 * J.15 :: Aspect-related Pragmas
67018
67019 \1f
67020 File: arm2012.info, Node: J.1, Next: J.2, Up: Annex J
67021
67022 J.1 Renamings of Library Units
67023 ==============================
67024
67025 _Static Semantics_
67026
67027 1
67028 The following library_unit_renaming_declarations exist:
67029
67030 2
67031 with Ada.Unchecked_Conversion;
67032 generic function Unchecked_Conversion renames Ada.Unchecked_Conversion;
67033
67034 3
67035 with Ada.Unchecked_Deallocation;
67036 generic procedure Unchecked_Deallocation renames Ada.Unchecked_Deallocation;
67037
67038 4
67039 with Ada.Sequential_IO;
67040 generic package Sequential_IO renames Ada.Sequential_IO;
67041
67042 5
67043 with Ada.Direct_IO;
67044 generic package Direct_IO renames Ada.Direct_IO;
67045
67046 6
67047 with Ada.Text_IO;
67048 package Text_IO renames Ada.Text_IO;
67049
67050 7
67051 with Ada.IO_Exceptions;
67052 package IO_Exceptions renames Ada.IO_Exceptions;
67053
67054 8
67055 with Ada.Calendar;
67056 package Calendar renames Ada.Calendar;
67057
67058 9
67059 with System.Machine_Code;
67060 package Machine_Code renames System.Machine_Code; -- If supported.
67061
67062 _Implementation Requirements_
67063
67064 10
67065 The implementation shall allow the user to replace these renamings.
67066
67067 \1f
67068 File: arm2012.info, Node: J.2, Next: J.3, Prev: J.1, Up: Annex J
67069
67070 J.2 Allowed Replacements of Characters
67071 ======================================
67072
67073 _Syntax_
67074
67075 1
67076 The following replacements are allowed for the vertical line,
67077 number sign, and quotation mark characters:
67078
67079 2
67080 * A vertical line character (|) can be replaced by an
67081 exclamation mark (!) where used as a delimiter.
67082
67083 3
67084 * The number sign characters (#) of a based_literal can be
67085 replaced by colons (:) provided that the replacement is done
67086 for both occurrences.
67087
67088 4
67089 * The quotation marks (") used as string brackets at both ends
67090 of a string literal can be replaced by percent signs (%)
67091 provided that the enclosed sequence of characters contains no
67092 quotation mark, and provided that both string brackets are
67093 replaced. Any percent sign within the sequence of characters
67094 shall then be doubled and each such doubled percent sign is
67095 interpreted as a single percent sign character value.
67096
67097 5
67098 These replacements do not change the meaning of the program.
67099
67100 \1f
67101 File: arm2012.info, Node: J.3, Next: J.4, Prev: J.2, Up: Annex J
67102
67103 J.3 Reduced Accuracy Subtypes
67104 =============================
67105
67106 1
67107 A digits_constraint may be used to define a floating point subtype with
67108 a new value for its requested decimal precision, as reflected by its
67109 Digits attribute. Similarly, a delta_constraint may be used to define
67110 an ordinary fixed point subtype with a new value for its delta, as
67111 reflected by its Delta attribute.
67112
67113 _Syntax_
67114
67115 2
67116 delta_constraint ::= delta static_expression [range_constraint]
67117
67118 _Name Resolution Rules_
67119
67120 3
67121 The expression of a delta_constraint is expected to be of any real type.
67122
67123 _Legality Rules_
67124
67125 4
67126 The expression of a delta_constraint shall be static.
67127
67128 5
67129 For a subtype_indication with a delta_constraint, the subtype_mark shall
67130 denote an ordinary fixed point subtype.
67131
67132 6
67133 For a subtype_indication with a digits_constraint, the subtype_mark
67134 shall denote either a decimal fixed point subtype or a floating point
67135 subtype (notwithstanding the rule given in *note 3.5.9:: that only
67136 allows a decimal fixed point subtype).
67137
67138 _Static Semantics_
67139
67140 7
67141 A subtype_indication with a subtype_mark that denotes an ordinary fixed
67142 point subtype and a delta_constraint defines an ordinary fixed point
67143 subtype with a delta given by the value of the expression of the
67144 delta_constraint. If the delta_constraint includes a range_constraint
67145 (*note 3.5: S0036.), then the ordinary fixed point subtype is
67146 constrained by the range_constraint (*note 3.5: S0036.).
67147
67148 8
67149 A subtype_indication with a subtype_mark that denotes a floating point
67150 subtype and a digits_constraint defines a floating point subtype with a
67151 requested decimal precision (as reflected by its Digits attribute) given
67152 by the value of the expression of the digits_constraint. If the
67153 digits_constraint includes a range_constraint (*note 3.5: S0036.), then
67154 the floating point subtype is constrained by the range_constraint (*note
67155 3.5: S0036.).
67156
67157 _Dynamic Semantics_
67158
67159 9
67160 A delta_constraint is compatible with an ordinary fixed point subtype if
67161 the value of the expression is no less than the delta of the subtype,
67162 and the range_constraint, if any, is compatible with the subtype.
67163
67164 10
67165 A digits_constraint is compatible with a floating point subtype if the
67166 value of the expression is no greater than the requested decimal
67167 precision of the subtype, and the range_constraint, if any, is
67168 compatible with the subtype.
67169
67170 11
67171 The elaboration of a delta_constraint consists of the elaboration of the
67172 range_constraint, if any.
67173
67174 \1f
67175 File: arm2012.info, Node: J.4, Next: J.5, Prev: J.3, Up: Annex J
67176
67177 J.4 The Constrained Attribute
67178 =============================
67179
67180 _Static Semantics_
67181
67182 1
67183 For every private subtype S, the following attribute is defined:
67184
67185 2
67186 S'Constrained
67187 Yields the value False if S denotes an unconstrained
67188 nonformal private subtype with discriminants; also yields
67189 the value False if S denotes a generic formal private
67190 subtype, and the associated actual subtype is either an
67191 unconstrained subtype with discriminants or an
67192 unconstrained array subtype; yields the value True
67193 otherwise. The value of this attribute is of the
67194 predefined subtype Boolean.
67195
67196 \1f
67197 File: arm2012.info, Node: J.5, Next: J.6, Prev: J.4, Up: Annex J
67198
67199 J.5 ASCII
67200 =========
67201
67202 _Static Semantics_
67203
67204 1
67205 The following declaration exists in the declaration of package Standard:
67206
67207 2
67208 package ASCII is
67209
67210 3
67211 -- Control characters:
67212
67213 4
67214 NUL : constant Character := nul; SOH : constant Character := soh;
67215 STX : constant Character := stx; ETX : constant Character := etx;
67216 EOT : constant Character := eot; ENQ : constant Character := enq;
67217 ACK : constant Character := ack; BEL : constant Character := bel;
67218 BS : constant Character := bs; HT : constant Character := ht;
67219 LF : constant Character := lf; VT : constant Character := vt;
67220 FF : constant Character := ff; CR : constant Character := cr;
67221 SO : constant Character := so; SI : constant Character := si;
67222 DLE : constant Character := dle; DC1 : constant Character := dc1;
67223 DC2 : constant Character := dc2; DC3 : constant Character := dc3;
67224 DC4 : constant Character := dc4; NAK : constant Character := nak;
67225 SYN : constant Character := syn; ETB : constant Character := etb;
67226 CAN : constant Character := can; EM : constant Character := em;
67227 SUB : constant Character := sub; ESC : constant Character := esc;
67228 FS : constant Character := fs; GS : constant Character := gs;
67229 RS : constant Character := rs; US : constant Character := us;
67230 DEL : constant Character := del;
67231
67232 5
67233 -- Other characters:
67234
67235 6
67236 Exclam : constant Character:= '!'; Quotation : constant Character:= '"';
67237 Sharp : constant Character:= '#'; Dollar : constant Character:= '$';
67238 Percent : constant Character:= '%'; Ampersand : constant Character:= '&';
67239 Colon : constant Character:= ':'; Semicolon : constant Character:= ';';
67240 Query : constant Character:= '?'; At_Sign : constant Character:= '@';
67241 L_Bracket: constant Character:= '['; Back_Slash: constant Character:= '\';
67242 R_Bracket: constant Character:= ']'; Circumflex: constant Character:= '^';
67243 Underline: constant Character:= '_'; Grave : constant Character:= '`';
67244 L_Brace : constant Character:= '{'; Bar : constant Character:= '|';
67245 R_Brace : constant Character:= '}'; Tilde : constant Character:= '~';
67246
67247 7
67248 -- Lower case letters:
67249
67250 8
67251 LC_A: constant Character:= 'a';
67252 ...
67253 LC_Z: constant Character:= 'z';
67254
67255 9
67256 end ASCII;
67257
67258 \1f
67259 File: arm2012.info, Node: J.6, Next: J.7, Prev: J.5, Up: Annex J
67260
67261 J.6 Numeric_Error
67262 =================
67263
67264 _Static Semantics_
67265
67266 1
67267 The following declaration exists in the declaration of package Standard:
67268
67269 2
67270 Numeric_Error : exception renames Constraint_Error;
67271
67272 \1f
67273 File: arm2012.info, Node: J.7, Next: J.8, Prev: J.6, Up: Annex J
67274
67275 J.7 At Clauses
67276 ==============
67277
67278 _Syntax_
67279
67280 1
67281 at_clause ::= for direct_name use at expression;
67282
67283 _Static Semantics_
67284
67285 2
67286 An at_clause of the form "for x use at y;" is equivalent to an
67287 attribute_definition_clause of the form "for x'Address use y;".
67288
67289 * Menu:
67290
67291 * J.7.1 :: Interrupt Entries
67292
67293 \1f
67294 File: arm2012.info, Node: J.7.1, Up: J.7
67295
67296 J.7.1 Interrupt Entries
67297 -----------------------
67298
67299 1
67300 Implementations are permitted to allow the attachment of task entries to
67301 interrupts via the address clause. Such an entry is referred to as an
67302 interrupt entry.
67303
67304 2
67305 The address of the task entry corresponds to a hardware interrupt in an
67306 implementation-defined manner. (See Ada.Interrupts.Reference in *note
67307 C.3.2::.)
67308
67309 _Static Semantics_
67310
67311 3
67312 The following attribute is defined:
67313
67314 4
67315 For any task entry X:
67316
67317 5
67318 X'Address
67319 For a task entry whose address is specified (an interrupt
67320 entry), the value refers to the corresponding hardware
67321 interrupt. For such an entry, as for any other task
67322 entry, the meaning of this value is implementation
67323 defined. The value of this attribute is of the type of
67324 the subtype System.Address.
67325
67326 6
67327 Address may be specified for single entries via an
67328 attribute_definition_clause.
67329
67330 _Dynamic Semantics_
67331
67332 7
67333 As part of the initialization of a task object, the address clause for
67334 an interrupt entry is elaborated, which evaluates the expression of the
67335 address clause. A check is made that the address specified is
67336 associated with some interrupt to which a task entry may be attached.
67337 If this check fails, Program_Error is raised. Otherwise, the interrupt
67338 entry is attached to the interrupt associated with the specified
67339 address.
67340
67341 8
67342 Upon finalization of the task object, the interrupt entry, if any, is
67343 detached from the corresponding interrupt and the default treatment is
67344 restored.
67345
67346 9
67347 While an interrupt entry is attached to an interrupt, the interrupt is
67348 reserved (see *note C.3::).
67349
67350 10
67351 An interrupt delivered to a task entry acts as a call to the entry
67352 issued by a hardware task whose priority is in the
67353 System.Interrupt_Priority range. It is implementation defined whether
67354 the call is performed as an ordinary entry call, a timed entry call, or
67355 a conditional entry call; which kind of call is performed can depend on
67356 the specific interrupt.
67357
67358 _Bounded (Run-Time) Errors_
67359
67360 11
67361 It is a bounded error to evaluate E'Caller (see *note C.7.1::) in an
67362 accept_statement for an interrupt entry. The possible effects are the
67363 same as for calling Current_Task from an entry body.
67364
67365 _Documentation Requirements_
67366
67367 12
67368 The implementation shall document to which interrupts a task entry may
67369 be attached.
67370
67371 13
67372 The implementation shall document whether the invocation of an interrupt
67373 entry has the effect of an ordinary entry call, conditional call, or a
67374 timed call, and whether the effect varies in the presence of pending
67375 interrupts.
67376
67377 _Implementation Permissions_
67378
67379 14
67380 The support for this subclause is optional.
67381
67382 15
67383 Interrupts to which the implementation allows a task entry to be
67384 attached may be designated as reserved for the entire duration of
67385 program execution; that is, not just when they have an interrupt entry
67386 attached to them.
67387
67388 16/1
67389 Interrupt entry calls may be implemented by having the hardware execute
67390 directly the appropriate accept_statement. Alternatively, the
67391 implementation is allowed to provide an internal interrupt handler to
67392 simulate the effect of a normal task calling the entry.
67393
67394 17
67395 The implementation is allowed to impose restrictions on the
67396 specifications and bodies of tasks that have interrupt entries.
67397
67398 18
67399 It is implementation defined whether direct calls (from the program) to
67400 interrupt entries are allowed.
67401
67402 19
67403 If a select_statement contains both a terminate_alternative and an
67404 accept_alternative for an interrupt entry, then an implementation is
67405 allowed to impose further requirements for the selection of the
67406 terminate_alternative in addition to those given in *note 9.3::.
67407
67408 NOTES
67409
67410 20/1
67411 1 Queued interrupts correspond to ordinary entry calls.
67412 Interrupts that are lost if not immediately processed correspond to
67413 conditional entry calls. It is a consequence of the priority rules
67414 that an accept_statement executed in response to an interrupt can
67415 be executed with the active priority at which the hardware
67416 generates the interrupt, taking precedence over lower priority
67417 tasks, without a scheduling action.
67418
67419 21
67420 2 Control information that is supplied upon an interrupt can be
67421 passed to an associated interrupt entry as one or more parameters
67422 of mode in.
67423
67424 _Examples_
67425
67426 22
67427 Example of an interrupt entry:
67428
67429 23
67430 task Interrupt_Handler is
67431 entry Done;
67432 for Done'Address use Ada.Interrupts.Reference(Ada.Interrupts.Names.Device_Done);
67433 end Interrupt_Handler;
67434
67435 \1f
67436 File: arm2012.info, Node: J.8, Next: J.9, Prev: J.7, Up: Annex J
67437
67438 J.8 Mod Clauses
67439 ===============
67440
67441 _Syntax_
67442
67443 1
67444 mod_clause ::= at mod static_expression;
67445
67446 _Static Semantics_
67447
67448 2
67449 A record_representation_clause of the form:
67450
67451 3/3
67452 for r use
67453 record at mod a;
67454 ...
67455 end record;
67456
67457 4
67458 is equivalent to:
67459
67460 5
67461 for r'Alignment use a;
67462 for r use
67463 record
67464 ...
67465 end record;
67466
67467 \1f
67468 File: arm2012.info, Node: J.9, Next: J.10, Prev: J.8, Up: Annex J
67469
67470 J.9 The Storage_Size Attribute
67471 ==============================
67472
67473 _Static Semantics_
67474
67475 1
67476 For any task subtype T, the following attribute is defined:
67477
67478 2
67479 T'Storage_Size
67480 Denotes an implementation-defined value of type
67481 universal_integer representing the number of storage
67482 elements reserved for a task of the subtype T.
67483
67484 3/3
67485 Storage_Size may be specified for a task first subtype
67486 that is not an interface via an
67487 attribute_definition_clause. When the attribute is
67488 specified, the Storage_Size aspect is specified to be the
67489 value of the given expression.
67490
67491 \1f
67492 File: arm2012.info, Node: J.10, Next: J.11, Prev: J.9, Up: Annex J
67493
67494 J.10 Specific Suppression of Checks
67495 ===================================
67496
67497 1/2
67498 Pragma Suppress can be used to suppress checks on specific entities.
67499
67500 _Syntax_
67501
67502 2/2
67503 The form of a specific Suppress pragma is as follows:
67504
67505 3/2
67506 pragma Suppress(identifier, [On =>] name);
67507
67508 _Legality Rules_
67509
67510 4/2
67511 The identifier shall be the name of a check (see *note 11.5::). The
67512 name shall statically denote some entity.
67513
67514 5/2
67515 For a specific Suppress pragma that is immediately within a
67516 package_specification, the name shall denote an entity (or several
67517 overloaded subprograms) declared immediately within the
67518 package_specification (*note 7.1: S0191.).
67519
67520 _Static Semantics_
67521
67522 6/2
67523 A specific Suppress pragma applies to the named check from the place of
67524 the pragma to the end of the innermost enclosing declarative region, or,
67525 if the pragma is given in a package_specification, to the end of the
67526 scope of the named entity. The pragma applies only to the named entity,
67527 or, for a subtype, on objects and values of its type. A specific
67528 Suppress pragma suppresses the named check for any entities to which it
67529 applies (see *note 11.5::). Which checks are associated with a specific
67530 entity is not defined by this International Standard.
67531
67532 _Implementation Permissions_
67533
67534 7/2
67535 An implementation is allowed to place restrictions on specific Suppress
67536 pragmas.
67537
67538 NOTES
67539
67540 8/2
67541 3 An implementation may support a similar On parameter on pragma
67542 Unsuppress (see *note 11.5::).
67543
67544 \1f
67545 File: arm2012.info, Node: J.11, Next: J.12, Prev: J.10, Up: Annex J
67546
67547 J.11 The Class Attribute of Untagged Incomplete Types
67548 =====================================================
67549
67550 _Static Semantics_
67551
67552 1/2
67553 For the first subtype S of a type T declared by an
67554 incomplete_type_declaration that is not tagged, the following attribute
67555 is defined:
67556
67557 2/2
67558 S'Class
67559 Denotes the first subtype of the incomplete class-wide
67560 type rooted at T. The completion of T shall declare a
67561 tagged type. Such an attribute reference shall occur in
67562 the same library unit as the incomplete_type_declaration.
67563
67564 \1f
67565 File: arm2012.info, Node: J.12, Next: J.13, Prev: J.11, Up: Annex J
67566
67567 J.12 Pragma Interface
67568 =====================
67569
67570 _Syntax_
67571
67572 1/2
67573 In addition to an identifier, the reserved word interface is
67574 allowed as a pragma name, to provide compatibility with a prior
67575 edition of this International Standard.
67576
67577 \1f
67578 File: arm2012.info, Node: J.13, Next: J.14, Prev: J.12, Up: Annex J
67579
67580 J.13 Dependence Restriction Identifiers
67581 =======================================
67582
67583 1/2
67584 The following restrictions involve dependence on specific
67585 language-defined units. The more general restriction No_Dependence (see
67586 *note 13.12.1::) should be used for this purpose.
67587
67588 _Static Semantics_
67589
67590 2/2
67591 The following restriction_identifiers exist:
67592
67593 3/2
67594 No_Asynchronous_Control
67595 Semantic dependence on the predefined package
67596 Asynchronous_Task_Control is not allowed.
67597
67598 4/2
67599 No_Unchecked_Conversion
67600 Semantic dependence on the predefined generic function
67601 Unchecked_Conversion is not allowed.
67602
67603 5/2
67604 No_Unchecked_Deallocation
67605 Semantic dependence on the predefined generic procedure
67606 Unchecked_Deallocation is not allowed.
67607
67608 \1f
67609 File: arm2012.info, Node: J.14, Next: J.15, Prev: J.13, Up: Annex J
67610
67611 J.14 Character and Wide_Character Conversion Functions
67612 ======================================================
67613
67614 _Static Semantics_
67615
67616 1/2
67617 The following declarations exist in the declaration of package
67618 Ada.Characters.Handling:
67619
67620 2/2
67621 function Is_Character (Item : in Wide_Character) return Boolean
67622 renames Conversions.Is_Character;
67623 function Is_String (Item : in Wide_String) return Boolean
67624 renames Conversions.Is_String;
67625
67626 3/2
67627 function To_Character (Item : in Wide_Character;
67628 Substitute : in Character := ' ')
67629 return Character
67630 renames Conversions.To_Character;
67631
67632 4/2
67633 function To_String (Item : in Wide_String;
67634 Substitute : in Character := ' ')
67635 return String
67636 renames Conversions.To_String;
67637
67638 5/2
67639 function To_Wide_Character (Item : in Character) return Wide_Character
67640 renames Conversions.To_Wide_Character;
67641
67642 6/2
67643 function To_Wide_String (Item : in String) return Wide_String
67644 renames Conversions.To_Wide_String;
67645
67646 \1f
67647 File: arm2012.info, Node: J.15, Prev: J.14, Up: Annex J
67648
67649 J.15 Aspect-related Pragmas
67650 ===========================
67651
67652 1/3
67653 Pragmas can be used as an alternative to aspect_specifications to
67654 specify certain aspects.
67655
67656 * Menu:
67657
67658 * J.15.1 :: Pragma Inline
67659 * J.15.2 :: Pragma No_Return
67660 * J.15.3 :: Pragma Pack
67661 * J.15.4 :: Pragma Storage_Size
67662 * J.15.5 :: Interfacing Pragmas
67663 * J.15.6 :: Pragma Unchecked_Union
67664 * J.15.7 :: Pragmas Interrupt_Handler and Attach_Handler
67665 * J.15.8 :: Shared Variable Pragmas
67666 * J.15.9 :: Pragma CPU
67667 * J.15.10 :: Pragma Dispatching_Domain
67668 * J.15.11 :: Pragmas Priority and Interrupt_Priority
67669 * J.15.12 :: Pragma Relative_Deadline
67670 * J.15.13 :: Pragma Asynchronous
67671
67672 \1f
67673 File: arm2012.info, Node: J.15.1, Next: J.15.2, Up: J.15
67674
67675 J.15.1 Pragma Inline
67676 --------------------
67677
67678 _Syntax_
67679
67680 1/3
67681 The form of a pragma Inline, which is a program unit pragma (see
67682 *note 10.1.5::), is as follows:
67683
67684 2/3
67685 pragma Inline (name{, name});
67686
67687 _Legality Rules_
67688
67689 3/3
67690 The pragma shall apply to one or more callable entities or generic
67691 subprograms.
67692
67693 _Static Semantics_
67694
67695 4/3
67696 Pragma Inline specifies that the Inline aspect (see *note 6.3.2::) for
67697 each entity denoted by each name given in the pragma has the value True.
67698
67699 _Implementation Permissions_
67700
67701 5/3
67702 An implementation may allow a pragma Inline that has an argument which
67703 is a direct_name denoting a subprogram_body of the same
67704 declarative_part.
67705
67706 NOTES
67707
67708 6/3
67709 4 The name in a pragma Inline may denote more than one entity in
67710 the case of overloading. Such a pragma applies to all of the
67711 denoted entities.
67712
67713 \1f
67714 File: arm2012.info, Node: J.15.2, Next: J.15.3, Prev: J.15.1, Up: J.15
67715
67716 J.15.2 Pragma No_Return
67717 -----------------------
67718
67719 _Syntax_
67720
67721 1/3
67722 The form of a pragma No_Return, which is a representation pragma
67723 (see *note 13.1::), is as follows:
67724
67725 2/3
67726 pragma No_Return (procedure_local_name{, procedure_local_name});
67727
67728 _Legality Rules_
67729
67730 3/3
67731 Each procedure_local_name shall denote one or more procedures or generic
67732 procedures. The procedure_local_name shall not denote a null procedure
67733 nor an instance of a generic unit.
67734
67735 _Static Semantics_
67736
67737 4/3
67738 Pragma No_Return specifies that the No_Return aspect (see *note 6.5.1::)
67739 for each procedure denoted by each local_name given in the pragma has
67740 the value True.
67741
67742 \1f
67743 File: arm2012.info, Node: J.15.3, Next: J.15.4, Prev: J.15.2, Up: J.15
67744
67745 J.15.3 Pragma Pack
67746 ------------------
67747
67748 _Syntax_
67749
67750 1/3
67751 The form of a pragma Pack, which is a representation pragma (see
67752 *note 13.1::), is as follows:
67753
67754 2/3
67755 pragma Pack (first_subtype_local_name);
67756
67757 _Legality Rules_
67758
67759 3/3
67760 The first_subtype_local_name of a pragma Pack shall denote a composite
67761 subtype.
67762
67763 _Static Semantics_
67764
67765 4/3
67766 Pragma Pack specifies that the Pack aspect (see *note 13.2::) for the
67767 type denoted by first_subtype_local_name has the value True.
67768
67769 \1f
67770 File: arm2012.info, Node: J.15.4, Next: J.15.5, Prev: J.15.3, Up: J.15
67771
67772 J.15.4 Pragma Storage_Size
67773 --------------------------
67774
67775 _Syntax_
67776
67777 1/3
67778 The form of a pragma Storage_Size is as follows:
67779
67780 2/3
67781 pragma Storage_Size (expression);
67782
67783 3/3
67784 A pragma Storage_Size is allowed only immediately within a
67785 task_definition.
67786
67787 _Name Resolution Rules_
67788
67789 4/3
67790 The expression of a pragma Storage_Size is expected to be of any integer
67791 type.
67792
67793 _Static Semantics_
67794
67795 5/3
67796 The pragma Storage_Size sets the Storage_Size aspect (see *note 13.3::)
67797 of the type defined by the immediately enclosing task_definition to the
67798 value of the expression of the pragma.
67799
67800 \1f
67801 File: arm2012.info, Node: J.15.5, Next: J.15.6, Prev: J.15.4, Up: J.15
67802
67803 J.15.5 Interfacing Pragmas
67804 --------------------------
67805
67806 _Syntax_
67807
67808 1/3
67809 An interfacing pragma is a representation pragma that is one of the
67810 pragmas Import, Export, or Convention. Their forms are as follows:
67811
67812 2/3
67813 pragma Import(
67814 [Convention =>] convention_identifier, [Entity =>] local_name
67815 [, [External_Name =>] external_name_string_expression]
67816 [, [Link_Name =>] link_name_string_expression]);
67817
67818 3/3
67819 pragma Export(
67820 [Convention =>] convention_identifier, [Entity =>] local_name
67821 [, [External_Name =>] external_name_string_expression]
67822 [, [Link_Name =>] link_name_string_expression]);
67823
67824 4/3
67825 pragma Convention([Convention =>] convention_identifier,[Entity
67826 =>] local_name);
67827
67828 5/3
67829 For pragmas Import and Export, the argument for Link_Name shall not
67830 be given without the pragma_argument_identifier unless the argument
67831 for External_Name is given.
67832
67833 _Name Resolution Rules_
67834
67835 6/3
67836 The expected type for an external_name_string_expression and a
67837 link_name_string_expression in an interfacing pragma is String.
67838
67839 _Legality Rules_
67840
67841 7/3
67842 The convention_identifier of an interfacing pragma shall be the name of
67843 a convention (see *note B.1::).
67844
67845 8/3
67846 A pragma Import shall be the completion of a declaration.
67847 Notwithstanding any rule to the contrary, a pragma Import may serve as
67848 the completion of any kind of (explicit) declaration if supported by an
67849 implementation for that kind of declaration. If a completion is a
67850 pragma Import, then it shall appear in the same declarative_part,
67851 package_specification, task_definition, or protected_definition as the
67852 declaration. For a library unit, it shall appear in the same
67853 compilation, before any subsequent compilation_units other than pragmas.
67854 If the local_name denotes more than one entity, then the pragma Import
67855 is the completion of all of them.
67856
67857 9/3
67858 The external_name_string_expression and link_name_string_expression of a
67859 pragma Import or Export shall be static.
67860
67861 10/3
67862 The local_name of each of these pragmas shall denote a declaration that
67863 may have the similarly named aspect specified.
67864
67865 _Static Semantics_
67866
67867 11/3
67868 An interfacing pragma specifies various aspects of the entity denoted by
67869 the local_name as follows:
67870
67871 12/3
67872 * The Convention aspect (see *note B.1::) is convention_identifier.
67873
67874 13/3
67875 * A pragma Import specifies that the Import aspect (see *note B.1::)
67876 is True.
67877
67878 14/3
67879 * A pragma Export specifies that the Export aspect (see *note B.1::)
67880 is True.
67881
67882 15/3
67883 * For both pragma Import and Export, if an external name is given in
67884 the pragma, the External_Name aspect (see *note B.1::) is specified
67885 to be external_name_string_expression. If a link name is given in
67886 the pragma, the Link_Name aspect (see *note B.1::) is specified to
67887 be the link_name_string_expression.
67888
67889 \1f
67890 File: arm2012.info, Node: J.15.6, Next: J.15.7, Prev: J.15.5, Up: J.15
67891
67892 J.15.6 Pragma Unchecked_Union
67893 -----------------------------
67894
67895 _Syntax_
67896
67897 1/3
67898 The form of a pragma Unchecked_Union, which is a representation
67899 pragma (see *note 13.1::), is as follows:
67900
67901 2/3
67902 pragma Unchecked_Union (first_subtype_local_name);
67903
67904 _Legality Rules_
67905
67906 3/3
67907 The first_subtype_local_name of a pragma Unchecked_Union shall denote an
67908 unconstrained discriminated record subtype having a variant_part.
67909
67910 _Static Semantics_
67911
67912 4/3
67913 A pragma Unchecked_Union specifies that the Unchecked_Union aspect (see
67914 *note B.3.3::) for the type denoted by first_subtype_local_name has the
67915 value True.
67916
67917 \1f
67918 File: arm2012.info, Node: J.15.7, Next: J.15.8, Prev: J.15.6, Up: J.15
67919
67920 J.15.7 Pragmas Interrupt_Handler and Attach_Handler
67921 ---------------------------------------------------
67922
67923 _Syntax_
67924
67925 1/3
67926 The form of a pragma Interrupt_Handler is as follows:
67927
67928 2/3
67929 pragma Interrupt_Handler (handler_name);
67930
67931 3/3
67932 The form of a pragma Attach_Handler is as follows:
67933
67934 4/3
67935 pragma Attach_Handler (handler_name, expression);
67936
67937 _Name Resolution Rules_
67938
67939 5/3
67940 For the Interrupt_Handler and Attach_Handler pragmas, the handler_name
67941 shall resolve to denote a protected procedure with a parameterless
67942 profile.
67943
67944 6/3
67945 For the Attach_Handler pragma, the expected type for the expression is
67946 Interrupts.Interrupt_Id (see *note C.3.2::).
67947
67948 _Legality Rules_
67949
67950 7/3
67951 The Attach_Handler and Interrupt_Handler pragmas are only allowed
67952 immediately within the protected_definition where the corresponding
67953 subprogram is declared. The corresponding protected_type_declaration or
67954 single_protected_declaration shall be a library-level declaration, and
67955 shall not be declared within a generic body. In addition to the places
67956 where Legality Rules normally apply (see *note 12.3::), these rules also
67957 apply in the private part of an instance of a generic unit.
67958
67959 _Static Semantics_
67960
67961 8/3
67962 For an implementation that supports Annex C, a pragma Interrupt_Handler
67963 specifies the Interrupt_Handler aspect (see *note C.3.1::) for the
67964 protected procedure handler_name to have the value True. For an
67965 implementation that supports Annex C, a pragma Attach_Handler specifies
67966 the Attach_Handler aspect (see *note C.3.1::) for the protected
67967 procedure handler_name to have the value of the given expression as
67968 evaluated at object creation time.
67969
67970 \1f
67971 File: arm2012.info, Node: J.15.8, Next: J.15.9, Prev: J.15.7, Up: J.15
67972
67973 J.15.8 Shared Variable Pragmas
67974 ------------------------------
67975
67976 _Syntax_
67977
67978 1/3
67979 The form for pragmas Atomic, Volatile, Independent,
67980 Atomic_Components, and Volatile_Components, and
67981 Independent_Components is as follows:
67982
67983 2/3
67984 pragma Atomic (local_name);
67985
67986 3/3
67987 pragma Volatile (local_name);
67988
67989 4/3
67990 pragma Independent (component_local_name);
67991
67992 5/3
67993 pragma Atomic_Components (array_local_name);
67994
67995 6/3
67996 pragma Volatile_Components (array_local_name);
67997
67998 7/3
67999 pragma Independent_Components (local_name);
68000
68001 _Name Resolution Rules_
68002
68003 8/3
68004 The local_name in an Atomic or Volatile pragma shall resolve to denote
68005 either an object_declaration, a noninherited component_declaration, or a
68006 full_type_declaration. The component_local_name in an Independent
68007 pragma shall resolve to denote a noninherited component_declaration.
68008 The array_local_name in an Atomic_Components or Volatile_Components
68009 pragma shall resolve to denote the declaration of an array type or an
68010 array object of an anonymous type. The local_name in an
68011 Independent_Components pragma shall resolve to denote the declaration of
68012 an array or record type or an array object of an anonymous type.
68013
68014 _Static Semantics_
68015
68016 9/3
68017 These pragmas are representation pragmas (see *note 13.1::). Each of
68018 these pragmas specifies that the similarly named aspect (see *note
68019 C.6::) of the type, object, or component denoted by its argument is
68020 True.
68021
68022 _Legality Rules_
68023
68024 10/3
68025 The local_name of each of these pragmas shall denote a declaration that
68026 may have the similarly named aspect specified.
68027
68028 \1f
68029 File: arm2012.info, Node: J.15.9, Next: J.15.10, Prev: J.15.8, Up: J.15
68030
68031 J.15.9 Pragma CPU
68032 -----------------
68033
68034 _Syntax_
68035
68036 1/3
68037 The form of a pragma CPU is as follows:
68038
68039 2/3
68040 pragma CPU (expression);
68041
68042 _Name Resolution Rules_
68043
68044 3/3
68045 The expected type for the expression of a pragma CPU is
68046 System.Multiprocessors.CPU_Range.
68047
68048 _Legality Rules_
68049
68050 4/3
68051 A CPU pragma is allowed only immediately within a task_definition, or
68052 the declarative_part of a subprogram_body.
68053
68054 5/3
68055 For a CPU pragma that appears in the declarative_part of a
68056 subprogram_body, the expression shall be static.
68057
68058 _Static Semantics_
68059
68060 6/3
68061 For an implementation that supports Annex D, a pragma CPU specifies the
68062 value of the CPU aspect (see *note D.16::). If the pragma appears in a
68063 task_definition, the expression is associated with the aspect for the
68064 task type or single_task_declaration that contains the pragma;
68065 otherwise, the expression is associated with the aspect for the
68066 subprogram that contains the pragma.
68067
68068 \1f
68069 File: arm2012.info, Node: J.15.10, Next: J.15.11, Prev: J.15.9, Up: J.15
68070
68071 J.15.10 Pragma Dispatching_Domain
68072 ---------------------------------
68073
68074 _Syntax_
68075
68076 1/3
68077 The form of a pragma Dispatching_Domain is as follows:
68078
68079 2/3
68080 pragma Dispatching_Domain (expression);
68081
68082 _Name Resolution Rules_
68083
68084 3/3
68085 The expected type for the expression is
68086 System.Multiprocessors.Dispatching_Domains.Dispatching_Domain.
68087
68088 _Legality Rules_
68089
68090 4/3
68091 A Dispatching_Domain pragma is allowed only immediately within a
68092 task_definition.
68093
68094 _Static Semantics_
68095
68096 5/3
68097 For an implementation that supports Annex D, a pragma Dispatching_Domain
68098 specifies the value of the Dispatching_Domain aspect (see *note
68099 D.16.1::). The expression is associated with the aspect for the task
68100 type or single_task_declaration that contains the pragma.
68101
68102 \1f
68103 File: arm2012.info, Node: J.15.11, Next: J.15.12, Prev: J.15.10, Up: J.15
68104
68105 J.15.11 Pragmas Priority and Interrupt_Priority
68106 -----------------------------------------------
68107
68108 _Syntax_
68109
68110 1/3
68111 The form of a pragma Priority is as follows:
68112
68113 2/3
68114 pragma Priority (expression);
68115
68116 3/3
68117 The form of a pragma Interrupt_Priority is as follows:
68118
68119 4/3
68120 pragma Interrupt_Priority [(expression);]
68121
68122 _Name Resolution Rules_
68123
68124 5/3
68125 The expected type for the expression in a Priority or Interrupt_Priority
68126 pragma is Integer.
68127
68128 _Legality Rules_
68129
68130 6/3
68131 A Priority pragma is allowed only immediately within a task_definition,
68132 a protected_definition, or the declarative_part of a subprogram_body.
68133 An Interrupt_Priority pragma is allowed only immediately within a
68134 task_definition or a protected_definition.
68135
68136 7/3
68137 For a Priority pragma that appears in the declarative_part of a
68138 subprogram_body, the expression shall be static, and its value shall be
68139 in the range of System.Priority.
68140
68141 _Static Semantics_
68142
68143 8/3
68144 For an implementation that supports Annex D, a pragma Priority specifies
68145 the value of the Priority aspect (see *note D.1::) and a pragma
68146 Interrupt_Priority specifies the value of the Interrupt_Priority aspect
68147 as follows:
68148
68149 9/3
68150 * If the pragma appears in a task_definition, the expression is
68151 associated with the aspect for the task type or
68152 single_task_declaration that contains the pragma;
68153
68154 10/3
68155 * If the pragma appears in a protected_definition, the expression is
68156 associated with the aspect for the protected type or
68157 single_protected_declaration that contains the pragma;
68158
68159 11/3
68160 * If the pragma appears in the declarative_part of a subprogram_body,
68161 the expression is associated with the aspect for the subprogram
68162 that contains the pragma.
68163
68164 12/3
68165 If there is no expression in an Interrupt_Priority pragma, the
68166 Interrupt_Priority aspect has the value Interrupt_Priority'Last.
68167
68168 \1f
68169 File: arm2012.info, Node: J.15.12, Next: J.15.13, Prev: J.15.11, Up: J.15
68170
68171 J.15.12 Pragma Relative_Deadline
68172 --------------------------------
68173
68174 _Syntax_
68175
68176 1/3
68177 The form of a pragma Relative_Deadline is as follows:
68178
68179 2/3
68180 pragma Relative_Deadline (relative_deadline_expression);
68181
68182 _Name Resolution Rules_
68183
68184 3/3
68185 The expected type for a relative_deadline_expression is
68186 Real_Time.Time_Span.
68187
68188 _Legality Rules_
68189
68190 4/3
68191 A Relative_Deadline pragma is allowed only immediately within a
68192 task_definition or the declarative_part of a subprogram_body.
68193
68194 _Static Semantics_
68195
68196 5/3
68197 For an implementation that supports Annex D, a pragma Relative_Deadline
68198 specifies the value of the Relative_Deadline aspect (see *note D.2.6::).
68199 If the pragma appears in a task_definition, the expression is associated
68200 with the aspect for the task type or single_task_declaration that
68201 contains the pragma; otherwise, the expression is associated with the
68202 aspect for the subprogram that contains the pragma.
68203
68204 \1f
68205 File: arm2012.info, Node: J.15.13, Prev: J.15.12, Up: J.15
68206
68207 J.15.13 Pragma Asynchronous
68208 ---------------------------
68209
68210 _Syntax_
68211
68212 1/3
68213 The form of a pragma Asynchronous, which is a representation pragma
68214 (see *note 13.1::), is as follows:
68215
68216 2/3
68217 pragma Asynchronous (local_name);
68218
68219 _Static Semantics_
68220
68221 3/3
68222 For an implementation that supports Annex E, a pragma Asynchronous
68223 specifies that the Asynchronous aspect (see *note E.4.1::) for the
68224 procedure or type denoted by local_name has the value True.
68225
68226 _Legality Rules_
68227
68228 4/3
68229 The local_name of a pragma Asynchronous shall denote a declaration that
68230 may have aspect Asynchronous specified.
68231
68232 \1f
68233 File: arm2012.info, Node: Annex K, Next: Annex L, Prev: Annex J, Up: Top
68234
68235 Annex K Language-Defined Aspects and Attributes
68236 ***********************************************
68237
68238 1/3
68239 This annex summarizes the definitions given elsewhere of the
68240 language-defined aspects and attributes. Some aspects have
68241 corresponding attributes, as noted.
68242
68243 * Menu:
68244
68245 * K.1 :: Language-Defined Aspects
68246 * K.2 :: Language-Defined Attributes
68247
68248 \1f
68249 File: arm2012.info, Node: K.1, Next: K.2, Up: Annex K
68250
68251 K.1 Language-Defined Aspects
68252 ============================
68253
68254 1/3
68255 This subclause summarizes the definitions given elsewhere of the
68256 language-defined aspects. Aspects are properties of entities that can
68257 be specified by the Ada program; unless otherwise specified below,
68258 aspects can be specified using an aspect_specification.
68259
68260 2/3
68261 Address
68262 Machine address of an entity. See *note 13.3::.
68263
68264 3/3
68265 Alignment (object)
68266 Alignment of an object. See *note 13.3::.
68267
68268 4/3
68269 Alignment (subtype)
68270 Alignment of a subtype. See *note 13.3::.
68271
68272 5/3
68273 All_Calls_Remote
68274 All remote procedure calls should use the Partition
68275 Communication Subsystem, even if they are local. See
68276 *note E.2.3::.
68277
68278 6/3
68279 Asynchronous
68280 Remote procedure calls are asynchronous; the caller
68281 continues without waiting for the call to return. See
68282 *note E.4.1::.
68283
68284 7/3
68285 Atomic
68286 Declare that a type, object, or component is atomic. See
68287 *note C.6::.
68288
68289 8/3
68290 Atomic_Components
68291 Declare that the components of an array type or object
68292 are atomic. See *note C.6::.
68293
68294 9/3
68295 Attach_Handler
68296 Protected procedure is attached to an interrupt. See
68297 *note C.3.1::.
68298
68299 10/3
68300 Bit_Order
68301 Order of bit numbering in a record_representation_clause.
68302 See *note 13.5.3::.
68303
68304 11/3
68305 Coding
68306 Internal representation of enumeration literals.
68307 Specified by an enumeration_representation_clause, not by
68308 an aspect_specification. See *note 13.4::.
68309
68310 12/3
68311 Component_Size
68312 Size in bits of a component of an array type. See *note
68313 13.3::.
68314
68315 13/3
68316 Constant_Indexing
68317 Defines function(s) to implement user-defined
68318 indexed_components. See *note 4.1.6::.
68319
68320 14/3
68321 Convention
68322 Calling convention or other convention used for
68323 interfacing to other languages. See *note B.1::.
68324
68325 15/3
68326 CPU
68327 Processor on which a given task should run. See *note
68328 D.16::.
68329
68330 16/3
68331 Default_Component_Value
68332 Default value for the components of an array-of-scalar
68333 subtype. See *note 3.6::.
68334
68335 17/3
68336 Default_Iterator
68337 Default iterator to be used in for loops. See *note
68338 5.5.1::.
68339
68340 18/3
68341 Default_Storage_Pool
68342 Default storage pool for a generic instance. See *note
68343 13.11.3::.
68344
68345 19/3
68346 Default_Value
68347 Default value for a scalar subtype. See *note 3.5::.
68348
68349 20/3
68350 Dispatching_Domain
68351 Domain (group of processors) on which a given task should
68352 run. See *note D.16.1::.
68353
68354 21/3
68355 Dynamic_Predicate
68356 Condition that must hold true for objects of a given
68357 subtype; the subtype is not static. See *note 3.2.4::.
68358
68359 22/3
68360 Elaborate_Body
68361 A given package must have a body, and that body is
68362 elaborated immediately after the declaration. See *note
68363 10.2.1::.
68364
68365 23/3
68366 Export
68367 Entity is exported to another language. See *note B.1::.
68368
68369 24/3
68370 External_Name
68371 Name used to identify an imported or exported entity.
68372 See *note B.1::.
68373
68374 25/3
68375 External_Tag
68376 Unique identifier for a tagged type in streams. See
68377 *note 13.3::.
68378
68379 26/3
68380 Implicit_Dereference
68381 Mechanism for user-defined implicit .all. See *note
68382 4.1.5::.
68383
68384 27/3
68385 Import
68386 Entity is imported from another language. See *note
68387 B.1::.
68388
68389 28/3
68390 Independent
68391 Declare that a type, object, or component is
68392 independently addressable. See *note C.6::.
68393
68394 29/3
68395 Independent_Components
68396 Declare that the components of an array or record type,
68397 or an array object, are independently addressable. See
68398 *note C.6::.
68399
68400 30/3
68401 Inline
68402 For efficiency, Inline calls are requested for a
68403 subprogram. See *note 6.3.2::.
68404
68405 31/3
68406 Input
68407 Function to read a value from a stream for a given type,
68408 including any bounds and discriminants. See *note
68409 13.13.2::.
68410
68411 32/3
68412 Interrupt_Handler
68413 Protected procedure may be attached to interrupts. See
68414 *note C.3.1::.
68415
68416 33/3
68417 Interrupt_Priority
68418 Priority of a task object or type, or priority of a
68419 protected object or type; the priority is in the
68420 interrupt range. See *note D.1::.
68421
68422 34/3
68423 Iterator_Element
68424 Element type to be used for user-defined iterators. See
68425 *note 5.5.1::.
68426
68427 35/3
68428 Layout (record)
68429 Layout of record components. Specified by a
68430 record_representation_clause, not by an
68431 aspect_specification. See *note 13.5.1::.
68432
68433 36/3
68434 Link_Name
68435 Linker symbol used to identify an imported or exported
68436 entity. See *note B.1::.
68437
68438 37/3
68439 Machine_Radix
68440 Radix (2 or 10) that is used to represent a decimal fixed
68441 point type. See *note F.1::.
68442
68443 38/3
68444 No_Return
68445 A procedure will not return normally. See *note 6.5.1::.
68446
68447 39/3
68448 Output
68449 Procedure to write a value to a stream for a given type,
68450 including any bounds and discriminants. See *note
68451 13.13.2::.
68452
68453 40/3
68454 Pack
68455 Minimize storage when laying out records and arrays. See
68456 *note 13.2::.
68457
68458 41/3
68459 Post
68460 Postcondition; a condition that must hold true after a
68461 call. See *note 6.1.1::.
68462
68463 42/3
68464 Post'Class
68465 Postcondition inherited on type derivation. See *note
68466 6.1.1::.
68467
68468 43/3
68469 Pre
68470 Precondition; a condition that must hold true before a
68471 call. See *note 6.1.1::.
68472
68473 44/3
68474 Pre'Class
68475 Precondition inherited on type derivation. See *note
68476 6.1.1::.
68477
68478 45/3
68479 Preelaborate
68480 Code execution during elaboration is avoided for a given
68481 package. See *note 10.2.1::.
68482
68483 46/3
68484 Priority
68485 Priority of a task object or type, or priority of a
68486 protected object or type; the priority is not in the
68487 interrupt range. See *note D.1::.
68488
68489 47/3
68490 Pure
68491 Side effects are avoided in the subprograms of a given
68492 package. See *note 10.2.1::.
68493
68494 48/3
68495 Read
68496 Procedure to read a value from a stream for a given type.
68497 See *note 13.13.2::.
68498
68499 49/3
68500 Record layout
68501 See Layout. See *note 13.5.1::.
68502
68503 50/3
68504 Relative_Deadline
68505 Task parameter used in Earliest Deadline First
68506 Dispatching. See *note D.2.6::.
68507
68508 51/3
68509 Remote_Call_Interface
68510 Subprograms in a given package may be used in remote
68511 procedure calls. See *note E.2.3::.
68512
68513 52/3
68514 Remote_Types
68515 Types in a given package may be used in remote procedure
68516 calls. See *note E.2.2::.
68517
68518 53/3
68519 Shared_Passive
68520 A given package is used to represent shared memory in a
68521 distributed system. See *note E.2.1::.
68522
68523 54/3
68524 Size (object)
68525 Size in bits of an object. See *note 13.3::.
68526
68527 55/3
68528 Size (subtype)
68529 Size in bits of a subtype. See *note 13.3::.
68530
68531 56/3
68532 Small
68533 Scale factor for a fixed point type. See *note 3.5.10::.
68534
68535 57/3
68536 Static_Predicate
68537 Condition that must hold true for objects of a given
68538 subtype; the subtype may be static. See *note 3.2.4::.
68539
68540 58/3
68541 Storage_Pool
68542 Pool of memory from which new will allocate for a given
68543 access type. See *note 13.11::.
68544
68545 59/3
68546 Storage_Size (access)
68547 Sets memory size for allocations for an access type. See
68548 *note 13.11::.
68549
68550 60/3
68551 Storage_Size (task)
68552 Size in storage elements reserved for a task type or
68553 single task object. See *note 13.3::.
68554
68555 61/3
68556 Stream_Size
68557 Size in bits used to represent elementary objects in a
68558 stream. See *note 13.13.2::.
68559
68560 62/3
68561 Synchronization
68562 Defines whether a given primitive operation of a
68563 synchronized interface must be implemented by an entry or
68564 protected procedure. See *note 9.5::.
68565
68566 63/3
68567 Type_Invariant
68568 A condition that must hold true for all objects of a
68569 type. See *note 7.3.2::.
68570
68571 64/3
68572 Type_Invariant'Class
68573 A condition that must hold true for all objects in a
68574 class of types. See *note 7.3.2::.
68575
68576 65/3
68577 Unchecked_Union
68578 Type is used to interface to a C union type. See *note
68579 B.3.3::.
68580
68581 66/3
68582 Variable_Indexing
68583 Defines function(s) to implement user-defined
68584 indexed_components. See *note 4.1.6::.
68585
68586 67/3
68587 Volatile
68588 Declare that a type, object, or component is volatile.
68589 See *note C.6::.
68590
68591 68/3
68592 Volatile_Components
68593 Declare that the components of an array type or object
68594 are volatile. See *note C.6::.
68595
68596 69/3
68597 Write
68598 Procedure to write a value to a stream for a given type.
68599 See *note 13.13.2::.
68600
68601 \1f
68602 File: arm2012.info, Node: K.2, Prev: K.1, Up: Annex K
68603
68604 K.2 Language-Defined Attributes
68605 ===============================
68606
68607 1/3
68608 This subclause summarizes the definitions given elsewhere of the
68609 language-defined attributes. Attributes are properties of entities that
68610 can be queried by an Ada program.
68611
68612 2
68613 P'Access
68614 For a prefix P that denotes a subprogram:
68615
68616 3
68617 P'Access yields an access value that designates the
68618 subprogram denoted by P. The type of P'Access is an
68619 access-to-subprogram type (S), as determined by the
68620 expected type. See *note 3.10.2::.
68621
68622 4
68623 X'Access
68624 For a prefix X that denotes an aliased view of an object:
68625
68626 5
68627 X'Access yields an access value that designates the
68628 object denoted by X. The type of X'Access is an
68629 access-to-object type, as determined by the expected
68630 type. The expected type shall be a general access type.
68631 See *note 3.10.2::.
68632
68633 6/1
68634 X'Address
68635 For a prefix X that denotes an object, program unit, or
68636 label:
68637
68638 7
68639 Denotes the address of the first of the storage elements
68640 allocated to X. For a program unit or label, this value
68641 refers to the machine code associated with the
68642 corresponding body or statement. The value of this
68643 attribute is of type System.Address. See *note 13.3::.
68644
68645 8
68646 S'Adjacent
68647 For every subtype S of a floating point type T:
68648
68649 9
68650 S'Adjacent denotes a function with the following
68651 specification:
68652
68653 10
68654 function S'Adjacent (X, Towards : T)
68655 return T
68656
68657 11
68658 If Towards = X, the function yields X; otherwise, it
68659 yields the machine number of the type T adjacent to X in
68660 the direction of Towards, if that machine number exists.
68661 If the result would be outside the base range of S,
68662 Constraint_Error is raised. When T'Signed_Zeros is True,
68663 a zero result has the sign of X. When Towards is zero,
68664 its sign has no bearing on the result. See *note
68665 A.5.3::.
68666
68667 12
68668 S'Aft
68669 For every fixed point subtype S:
68670
68671 13
68672 S'Aft yields the number of decimal digits needed after
68673 the decimal point to accommodate the delta of the subtype
68674 S, unless the delta of the subtype S is greater than 0.1,
68675 in which case the attribute yields the value one. (S'Aft
68676 is the smallest positive integer N for which
68677 (10**N)*S'Delta is greater than or equal to one.) The
68678 value of this attribute is of the type universal_integer.
68679 See *note 3.5.10::.
68680
68681 13.1/2
68682 S'Alignment
68683 For every subtype S:
68684
68685 13.2/2
68686 The value of this attribute is of type universal_integer,
68687 and nonnegative.
68688
68689 13.3/2
68690 For an object X of subtype S, if S'Alignment is not zero,
68691 then X'Alignment is a nonzero integral multiple of
68692 S'Alignment unless specified otherwise by a
68693 representation item. See *note 13.3::.
68694
68695 14/1
68696 X'Alignment
68697 For a prefix X that denotes an object:
68698
68699 15
68700 The value of this attribute is of type universal_integer,
68701 and nonnegative; zero means that the object is not
68702 necessarily aligned on a storage element boundary. If
68703 X'Alignment is not zero, then X is aligned on a storage
68704 unit boundary and X'Address is an integral multiple of
68705 X'Alignment (that is, the Address modulo the Alignment is
68706 zero).
68707
68708 16/2
68709
68710 This paragraph was deleted. See *note 13.3::.
68711
68712 17
68713 S'Base
68714 For every scalar subtype S:
68715
68716 18
68717 S'Base denotes an unconstrained subtype of the type of S.
68718 This unconstrained subtype is called the base subtype of
68719 the type. See *note 3.5::.
68720
68721 19
68722 S'Bit_Order
68723 For every specific record subtype S:
68724
68725 20
68726 Denotes the bit ordering for the type of S. The value of
68727 this attribute is of type System.Bit_Order. See *note
68728 13.5.3::.
68729
68730 21/1
68731 P'Body_Version
68732 For a prefix P that statically denotes a program unit:
68733
68734 22
68735 Yields a value of the predefined type String that
68736 identifies the version of the compilation unit that
68737 contains the body (but not any subunits) of the program
68738 unit. See *note E.3::.
68739
68740 23
68741 T'Callable
68742 For a prefix T that is of a task type (after any implicit
68743 dereference):
68744
68745 24
68746 Yields the value True when the task denoted by T is
68747 callable, and False otherwise; See *note 9.9::.
68748
68749 25
68750 E'Caller
68751 For a prefix E that denotes an entry_declaration:
68752
68753 26/3
68754 Yields a value of the type Task_Id that identifies the
68755 task whose call is now being serviced. Use of this
68756 attribute is allowed only inside an accept_statement, or
68757 entry_body after the entry_barrier, corresponding to the
68758 entry_declaration denoted by E. See *note C.7.1::.
68759
68760 27
68761 S'Ceiling
68762 For every subtype S of a floating point type T:
68763
68764 28
68765 S'Ceiling denotes a function with the following
68766 specification:
68767
68768 29
68769 function S'Ceiling (X : T)
68770 return T
68771
68772 30
68773 The function yields the value 'ceiling(X)', i.e., the
68774 smallest (most negative) integral value greater than or
68775 equal to X. When X is zero, the result has the sign of X;
68776 a zero result otherwise has a negative sign when
68777 S'Signed_Zeros is True. See *note A.5.3::.
68778
68779 31
68780 S'Class
68781 For every subtype S of a tagged type T (specific or
68782 class-wide):
68783
68784 32
68785 S'Class denotes a subtype of the class-wide type (called
68786 T'Class in this International Standard) for the class
68787 rooted at T (or if S already denotes a class-wide
68788 subtype, then S'Class is the same as S).
68789
68790 33
68791 S'Class is unconstrained. However, if S is constrained,
68792 then the values of S'Class are only those that when
68793 converted to the type T belong to S. See *note 3.9::.
68794
68795 34
68796 S'Class
68797 For every subtype S of an untagged private type whose
68798 full view is tagged:
68799
68800 35
68801 Denotes the class-wide subtype corresponding to the full
68802 view of S. This attribute is allowed only from the
68803 beginning of the private part in which the full view is
68804 declared, until the declaration of the full view. After
68805 the full view, the Class attribute of the full view can
68806 be used. See *note 7.3.1::.
68807
68808 36/1
68809 X'Component_Size
68810 For a prefix X that denotes an array subtype or array
68811 object (after any implicit dereference):
68812
68813 37
68814 Denotes the size in bits of components of the type of X.
68815 The value of this attribute is of type universal_integer.
68816 See *note 13.3::.
68817
68818 38
68819 S'Compose
68820 For every subtype S of a floating point type T:
68821
68822 39
68823 S'Compose denotes a function with the following
68824 specification:
68825
68826 40
68827 function S'Compose (Fraction : T;
68828 Exponent : universal_integer)
68829 return T
68830
68831 41
68832 Let v be the value Fraction · T'Machine_RadixExponent-k,
68833 where k is the normalized exponent of Fraction. If v is
68834 a machine number of the type T, or if |v| >=
68835 T'Model_Small, the function yields v; otherwise, it
68836 yields either one of the machine numbers of the type T
68837 adjacent to v. Constraint_Error is optionally raised if
68838 v is outside the base range of S. A zero result has the
68839 sign of Fraction when S'Signed_Zeros is True. See *note
68840 A.5.3::.
68841
68842 42
68843 A'Constrained
68844 For a prefix A that is of a discriminated type (after any
68845 implicit dereference):
68846
68847 43/3
68848 Yields the value True if A denotes a constant, a value, a
68849 tagged object, or a constrained variable, and False
68850 otherwise. See *note 3.7.2::.
68851
68852 44
68853 S'Copy_Sign
68854 For every subtype S of a floating point type T:
68855
68856 45
68857 S'Copy_Sign denotes a function with the following
68858 specification:
68859
68860 46
68861 function S'Copy_Sign (Value, Sign : T)
68862 return T
68863
68864 47
68865 If the value of Value is nonzero, the function yields a
68866 result whose magnitude is that of Value and whose sign is
68867 that of Sign; otherwise, it yields the value zero.
68868 Constraint_Error is optionally raised if the result is
68869 outside the base range of S. A zero result has the sign
68870 of Sign when S'Signed_Zeros is True. See *note A.5.3::.
68871
68872 48
68873 E'Count
68874 For a prefix E that denotes an entry of a task or
68875 protected unit:
68876
68877 49
68878 Yields the number of calls presently queued on the entry
68879 E of the current instance of the unit. The value of this
68880 attribute is of the type universal_integer. See *note
68881 9.9::.
68882
68883 50/1
68884 S'Definite
68885 For a prefix S that denotes a formal indefinite subtype:
68886
68887 51/3
68888 S'Definite yields True if the actual subtype
68889 corresponding to S is definite; otherwise, it yields
68890 False. The value of this attribute is of the predefined
68891 type Boolean. See *note 12.5.1::.
68892
68893 52
68894 S'Delta
68895 For every fixed point subtype S:
68896
68897 53
68898 S'Delta denotes the delta of the fixed point subtype S.
68899 The value of this attribute is of the type
68900 universal_real. See *note 3.5.10::.
68901
68902 54
68903 S'Denorm
68904 For every subtype S of a floating point type T:
68905
68906 55
68907 Yields the value True if every value expressible in the
68908 form
68909 ± mantissa · T'Machine_RadixT'Machine_Emin
68910 where mantissa is a nonzero T'Machine_Mantissa-digit
68911 fraction in the number base T'Machine_Radix, the first
68912 digit of which is zero, is a machine number (see *note
68913 3.5.7::) of the type T; yields the value False otherwise.
68914 The value of this attribute is of the predefined type
68915 Boolean. See *note A.5.3::.
68916
68917 56
68918 S'Digits
68919 For every floating point subtype S:
68920
68921 57
68922 S'Digits denotes the requested decimal precision for the
68923 subtype S. The value of this attribute is of the type
68924 universal_integer. See *note 3.5.8::.
68925
68926 58
68927 S'Digits
68928 For every decimal fixed point subtype S:
68929
68930 59
68931 S'Digits denotes the digits of the decimal fixed point
68932 subtype S, which corresponds to the number of decimal
68933 digits that are representable in objects of the subtype.
68934 The value of this attribute is of the type
68935 universal_integer. See *note 3.5.10::.
68936
68937 60
68938 S'Exponent
68939 For every subtype S of a floating point type T:
68940
68941 61
68942 S'Exponent denotes a function with the following
68943 specification:
68944
68945 62
68946 function S'Exponent (X : T)
68947 return universal_integer
68948
68949 63
68950 The function yields the normalized exponent of X. See
68951 *note A.5.3::.
68952
68953 64
68954 S'External_Tag
68955 For every subtype S of a tagged type T (specific or
68956 class-wide):
68957
68958 65
68959 S'External_Tag denotes an external string representation
68960 for S'Tag; it is of the predefined type String.
68961 External_Tag may be specified for a specific tagged type
68962 via an attribute_definition_clause; the expression of
68963 such a clause shall be static. The default external tag
68964 representation is implementation defined. See *note
68965 13.13.2::. See *note 13.3::.
68966
68967 66/1
68968 A'First
68969 For a prefix A that is of an array type (after any
68970 implicit dereference), or denotes a constrained array
68971 subtype:
68972
68973 67
68974 A'First denotes the lower bound of the first index range;
68975 its type is the corresponding index type. See *note
68976 3.6.2::.
68977
68978 68
68979 S'First
68980 For every scalar subtype S:
68981
68982 69
68983 S'First denotes the lower bound of the range of S. The
68984 value of this attribute is of the type of S. See *note
68985 3.5::.
68986
68987 70/1
68988 A'First(N)
68989 For a prefix A that is of an array type (after any
68990 implicit dereference), or denotes a constrained array
68991 subtype:
68992
68993 71
68994 A'First(N) denotes the lower bound of the N-th index
68995 range; its type is the corresponding index type. See
68996 *note 3.6.2::.
68997
68998 72
68999 R.C'First_Bit
69000 For a component C of a composite, non-array object R:
69001
69002 73/2
69003 If the nondefault bit ordering applies to the composite
69004 type, and if a component_clause specifies the placement
69005 of C, denotes the value given for the first_bit of the
69006 component_clause; otherwise, denotes the offset, from the
69007 start of the first of the storage elements occupied by C,
69008 of the first bit occupied by C. This offset is measured
69009 in bits. The first bit of a storage element is numbered
69010 zero. The value of this attribute is of the type
69011 universal_integer. See *note 13.5.2::.
69012
69013 73.1/3
69014 S'First_Valid
69015 For every static discrete subtype S for which there
69016 exists at least one value belonging to S that satisfies
69017 any predicate of S:
69018
69019 73.2/3
69020 S'First_Valid denotes the smallest value that belongs to
69021 S and satisfies the predicate of S. The value of this
69022 attribute is of the type of S. See *note 3.5.5::.
69023
69024 74
69025 S'Floor
69026 For every subtype S of a floating point type T:
69027
69028 75
69029 S'Floor denotes a function with the following
69030 specification:
69031
69032 76
69033 function S'Floor (X : T)
69034 return T
69035
69036 77
69037 The function yields the value 'floor(X)', i.e., the
69038 largest (most positive) integral value less than or equal
69039 to X. When X is zero, the result has the sign of X; a
69040 zero result otherwise has a positive sign. See *note
69041 A.5.3::.
69042
69043 78
69044 S'Fore
69045 For every fixed point subtype S:
69046
69047 79
69048 S'Fore yields the minimum number of characters needed
69049 before the decimal point for the decimal representation
69050 of any value of the subtype S, assuming that the
69051 representation does not include an exponent, but includes
69052 a one-character prefix that is either a minus sign or a
69053 space. (This minimum number does not include superfluous
69054 zeros or underlines, and is at least 2.) The value of
69055 this attribute is of the type universal_integer. See
69056 *note 3.5.10::.
69057
69058 80
69059 S'Fraction
69060 For every subtype S of a floating point type T:
69061
69062 81
69063 S'Fraction denotes a function with the following
69064 specification:
69065
69066 82
69067 function S'Fraction (X : T)
69068 return T
69069
69070 83
69071 The function yields the value X · T'Machine_Radix-k,
69072 where k is the normalized exponent of X. A zero result,
69073 which can only occur when X is zero, has the sign of X.
69074 See *note A.5.3::.
69075
69076 83.1/3
69077 X'Has_Same_Storage
69078 For a prefix X that denotes an object:
69079
69080 83.2/3
69081 X'Has_Same_Storage denotes a function with the following
69082 specification:
69083
69084 83.3/3
69085 function X'Has_Same_Storage (Arg : any_type)
69086 return Boolean
69087
69088 83.4/3
69089 The actual parameter shall be a name that denotes an
69090 object. The object denoted by the actual parameter can
69091 be of any type. This function evaluates the names of the
69092 objects involved and returns True if the representation
69093 of the object denoted by the actual parameter occupies
69094 exactly the same bits as the representation of the object
69095 denoted by X; otherwise, it returns False. See *note
69096 13.3::.
69097
69098 84/1
69099 E'Identity
69100 For a prefix E that denotes an exception:
69101
69102 85
69103 E'Identity returns the unique identity of the exception.
69104 The type of this attribute is Exception_Id. See *note
69105 11.4.1::.
69106
69107 86
69108 T'Identity
69109 For a prefix T that is of a task type (after any implicit
69110 dereference):
69111
69112 87
69113 Yields a value of the type Task_Id that identifies the
69114 task denoted by T. See *note C.7.1::.
69115
69116 88
69117 S'Image
69118 For every scalar subtype S:
69119
69120 89
69121 S'Image denotes a function with the following
69122 specification:
69123
69124 90
69125 function S'Image(Arg : S'Base)
69126 return String
69127
69128 91/3
69129 The function returns an image of the value of Arg as a
69130 String. See *note 3.5::.
69131
69132 92
69133 S'Class'Input
69134 For every subtype S'Class of a class-wide type T'Class:
69135
69136 93
69137 S'Class'Input denotes a function with the following
69138 specification:
69139
69140 94/2
69141 function S'Class'Input(
69142 Stream : not null access Ada.Streams.Root_Stream_Type'Class)
69143 return T'Class
69144
69145 95/3
69146 First reads the external tag from Stream and determines
69147 the corresponding internal tag (by calling
69148 Tags.Descendant_Tag(String'Input(Stream), S'Tag) which
69149 might raise Tag_Error -- see *note 3.9::) and then
69150 dispatches to the subprogram denoted by the Input
69151 attribute of the specific type identified by the internal
69152 tag; returns that result. If the specific type
69153 identified by the internal tag is abstract,
69154 Constraint_Error is raised. See *note 13.13.2::.
69155
69156 96
69157 S'Input
69158 For every subtype S of a specific type T:
69159
69160 97
69161 S'Input denotes a function with the following
69162 specification:
69163
69164 98/2
69165 function S'Input(
69166 Stream : not null access Ada.Streams.Root_Stream_Type'Class)
69167 return T
69168
69169 99
69170 S'Input reads and returns one value from Stream, using
69171 any bounds or discriminants written by a corresponding
69172 S'Output to determine how much to read. See *note
69173 13.13.2::.
69174
69175 100/1
69176 A'Last
69177 For a prefix A that is of an array type (after any
69178 implicit dereference), or denotes a constrained array
69179 subtype:
69180
69181 101
69182 A'Last denotes the upper bound of the first index range;
69183 its type is the corresponding index type. See *note
69184 3.6.2::.
69185
69186 102
69187 S'Last
69188 For every scalar subtype S:
69189
69190 103
69191 S'Last denotes the upper bound of the range of S. The
69192 value of this attribute is of the type of S. See *note
69193 3.5::.
69194
69195 104/1
69196 A'Last(N)
69197 For a prefix A that is of an array type (after any
69198 implicit dereference), or denotes a constrained array
69199 subtype:
69200
69201 105
69202 A'Last(N) denotes the upper bound of the N-th index
69203 range; its type is the corresponding index type. See
69204 *note 3.6.2::.
69205
69206 106
69207 R.C'Last_Bit
69208 For a component C of a composite, non-array object R:
69209
69210 107/2
69211 If the nondefault bit ordering applies to the composite
69212 type, and if a component_clause specifies the placement
69213 of C, denotes the value given for the last_bit of the
69214 component_clause; otherwise, denotes the offset, from the
69215 start of the first of the storage elements occupied by C,
69216 of the last bit occupied by C. This offset is measured in
69217 bits. The value of this attribute is of the type
69218 universal_integer. See *note 13.5.2::.
69219
69220 107.1/3
69221 S'Last_Valid
69222 For every static discrete subtype S for which there
69223 exists at least one value belonging to S that satisfies
69224 any predicate of S:
69225
69226 107.2/3
69227 S'Last_Valid denotes the largest value that belongs to S
69228 and satisfies the predicate of S. The value of this
69229 attribute is of the type of S. See *note 3.5.5::.
69230
69231 108
69232 S'Leading_Part
69233 For every subtype S of a floating point type T:
69234
69235 109
69236 S'Leading_Part denotes a function with the following
69237 specification:
69238
69239 110
69240 function S'Leading_Part (X : T;
69241 Radix_Digits : universal_integer)
69242 return T
69243
69244 111
69245 Let v be the value T'Machine_Radixk-Radix_Digits, where k
69246 is the normalized exponent of X. The function yields the
69247 value
69248
69249 112
69250 * 'floor(X/v)' · v, when X is nonnegative and
69251 Radix_Digits is positive;
69252
69253 113
69254 * 'ceiling(X/v)' · v, when X is negative and
69255 Radix_Digits is positive.
69256
69257 114
69258 Constraint_Error is raised when Radix_Digits is zero or
69259 negative. A zero result, which can only occur when X is
69260 zero, has the sign of X. See *note A.5.3::.
69261
69262 115/1
69263 A'Length
69264 For a prefix A that is of an array type (after any
69265 implicit dereference), or denotes a constrained array
69266 subtype:
69267
69268 116
69269 A'Length denotes the number of values of the first index
69270 range (zero for a null range); its type is
69271 universal_integer. See *note 3.6.2::.
69272
69273 117/1
69274 A'Length(N)
69275 For a prefix A that is of an array type (after any
69276 implicit dereference), or denotes a constrained array
69277 subtype:
69278
69279 118
69280 A'Length(N) denotes the number of values of the N-th
69281 index range (zero for a null range); its type is
69282 universal_integer. See *note 3.6.2::.
69283
69284 119
69285 S'Machine
69286 For every subtype S of a floating point type T:
69287
69288 120
69289 S'Machine denotes a function with the following
69290 specification:
69291
69292 121
69293 function S'Machine (X : T)
69294 return T
69295
69296 122
69297 If X is a machine number of the type T, the function
69298 yields X; otherwise, it yields the value obtained by
69299 rounding or truncating X to either one of the adjacent
69300 machine numbers of the type T. Constraint_Error is raised
69301 if rounding or truncating X to the precision of the
69302 machine numbers results in a value outside the base range
69303 of S. A zero result has the sign of X when S'Signed_Zeros
69304 is True. See *note A.5.3::.
69305
69306 123
69307 S'Machine_Emax
69308 For every subtype S of a floating point type T:
69309
69310 124
69311 Yields the largest (most positive) value of exponent such
69312 that every value expressible in the canonical form (for
69313 the type T), having a mantissa of T'Machine_Mantissa
69314 digits, is a machine number (see *note 3.5.7::) of the
69315 type T. This attribute yields a value of the type
69316 universal_integer. See *note A.5.3::.
69317
69318 125
69319 S'Machine_Emin
69320 For every subtype S of a floating point type T:
69321
69322 126
69323 Yields the smallest (most negative) value of exponent
69324 such that every value expressible in the canonical form
69325 (for the type T), having a mantissa of T'Machine_Mantissa
69326 digits, is a machine number (see *note 3.5.7::) of the
69327 type T. This attribute yields a value of the type
69328 universal_integer. See *note A.5.3::.
69329
69330 127
69331 S'Machine_Mantissa
69332 For every subtype S of a floating point type T:
69333
69334 128
69335 Yields the largest value of p such that every value
69336 expressible in the canonical form (for the type T),
69337 having a p-digit mantissa and an exponent between
69338 T'Machine_Emin and T'Machine_Emax, is a machine number
69339 (see *note 3.5.7::) of the type T. This attribute yields
69340 a value of the type universal_integer. See *note
69341 A.5.3::.
69342
69343 129
69344 S'Machine_Overflows
69345 For every subtype S of a floating point type T:
69346
69347 130
69348 Yields the value True if overflow and divide-by-zero are
69349 detected and reported by raising Constraint_Error for
69350 every predefined operation that yields a result of the
69351 type T; yields the value False otherwise. The value of
69352 this attribute is of the predefined type Boolean. See
69353 *note A.5.3::.
69354
69355 131
69356 S'Machine_Overflows
69357 For every subtype S of a fixed point type T:
69358
69359 132
69360 Yields the value True if overflow and divide-by-zero are
69361 detected and reported by raising Constraint_Error for
69362 every predefined operation that yields a result of the
69363 type T; yields the value False otherwise. The value of
69364 this attribute is of the predefined type Boolean. See
69365 *note A.5.4::.
69366
69367 133
69368 S'Machine_Radix
69369 For every subtype S of a floating point type T:
69370
69371 134
69372 Yields the radix of the hardware representation of the
69373 type T. The value of this attribute is of the type
69374 universal_integer. See *note A.5.3::.
69375
69376 135
69377 S'Machine_Radix
69378 For every subtype S of a fixed point type T:
69379
69380 136
69381 Yields the radix of the hardware representation of the
69382 type T. The value of this attribute is of the type
69383 universal_integer. See *note A.5.4::.
69384
69385 136.1/2
69386 S'Machine_Rounding
69387 For every subtype S of a floating point type T:
69388
69389 136.2/2
69390 S'Machine_Rounding denotes a function with the following
69391 specification:
69392
69393 136.3/2
69394 function S'Machine_Rounding (X : T)
69395 return T
69396
69397 136.4/2
69398 The function yields the integral value nearest to X. If X
69399 lies exactly halfway between two integers, one of those
69400 integers is returned, but which of them is returned is
69401 unspecified. A zero result has the sign of X when
69402 S'Signed_Zeros is True. This function provides access to
69403 the rounding behavior which is most efficient on the
69404 target processor. See *note A.5.3::.
69405
69406 137
69407 S'Machine_Rounds
69408 For every subtype S of a floating point type T:
69409
69410 138
69411 Yields the value True if rounding is performed on inexact
69412 results of every predefined operation that yields a
69413 result of the type T; yields the value False otherwise.
69414 The value of this attribute is of the predefined type
69415 Boolean. See *note A.5.3::.
69416
69417 139
69418 S'Machine_Rounds
69419 For every subtype S of a fixed point type T:
69420
69421 140
69422 Yields the value True if rounding is performed on inexact
69423 results of every predefined operation that yields a
69424 result of the type T; yields the value False otherwise.
69425 The value of this attribute is of the predefined type
69426 Boolean. See *note A.5.4::.
69427
69428 141
69429 S'Max
69430 For every scalar subtype S:
69431
69432 142
69433 S'Max denotes a function with the following
69434 specification:
69435
69436 143
69437 function S'Max(Left, Right : S'Base)
69438 return S'Base
69439
69440 144
69441 The function returns the greater of the values of the two
69442 parameters. See *note 3.5::.
69443
69444 144.1/3
69445 S'Max_Alignment_For_Allocation
69446 For every subtype S:
69447
69448 144.2/3
69449 Denotes the maximum value for Alignment that could be
69450 requested by the implementation via Allocate for an
69451 access type whose designated subtype is S. The value of
69452 this attribute is of type universal_integer. See *note
69453 13.11.1::.
69454
69455 145
69456 S'Max_Size_In_Storage_Elements
69457 For every subtype S:
69458
69459 146/3
69460 Denotes the maximum value for Size_In_Storage_Elements
69461 that could be requested by the implementation via
69462 Allocate for an access type whose designated subtype is
69463 S. The value of this attribute is of type
69464 universal_integer. See *note 13.11.1::.
69465
69466 147
69467 S'Min
69468 For every scalar subtype S:
69469
69470 148
69471 S'Min denotes a function with the following
69472 specification:
69473
69474 149
69475 function S'Min(Left, Right : S'Base)
69476 return S'Base
69477
69478 150
69479 The function returns the lesser of the values of the two
69480 parameters. See *note 3.5::.
69481
69482 150.1/2
69483 S'Mod
69484 For every modular subtype S:
69485
69486 150.2/2
69487 S'Mod denotes a function with the following
69488 specification:
69489
69490 150.3/2
69491 function S'Mod (Arg : universal_integer)
69492 return S'Base
69493
69494 150.4/2
69495 This function returns Arg mod S'Modulus, as a value of
69496 the type of S. See *note 3.5.4::.
69497
69498 151
69499 S'Model
69500 For every subtype S of a floating point type T:
69501
69502 152
69503 S'Model denotes a function with the following
69504 specification:
69505
69506 153
69507 function S'Model (X : T)
69508 return T
69509
69510 154
69511 If the Numerics Annex is not supported, the meaning of
69512 this attribute is implementation defined; see *note
69513 G.2.2:: for the definition that applies to
69514 implementations supporting the Numerics Annex. See *note
69515 A.5.3::.
69516
69517 155
69518 S'Model_Emin
69519 For every subtype S of a floating point type T:
69520
69521 156
69522 If the Numerics Annex is not supported, this attribute
69523 yields an implementation defined value that is greater
69524 than or equal to the value of T'Machine_Emin. See *note
69525 G.2.2:: for further requirements that apply to
69526 implementations supporting the Numerics Annex. The value
69527 of this attribute is of the type universal_integer. See
69528 *note A.5.3::.
69529
69530 157
69531 S'Model_Epsilon
69532 For every subtype S of a floating point type T:
69533
69534 158
69535 Yields the value T'Machine_Radix1 - T'Model_Mantissa.
69536 The value of this attribute is of the type
69537 universal_real. See *note A.5.3::.
69538
69539 159
69540 S'Model_Mantissa
69541 For every subtype S of a floating point type T:
69542
69543 160
69544 If the Numerics Annex is not supported, this attribute
69545 yields an implementation defined value that is greater
69546 than or equal to 'ceiling(d · log(10) /
69547 log(T'Machine_Radix))' + 1, where d is the requested
69548 decimal precision of T, and less than or equal to the
69549 value of T'Machine_Mantissa. See *note G.2.2:: for
69550 further requirements that apply to implementations
69551 supporting the Numerics Annex. The value of this
69552 attribute is of the type universal_integer. See *note
69553 A.5.3::.
69554
69555 161
69556 S'Model_Small
69557 For every subtype S of a floating point type T:
69558
69559 162
69560 Yields the value T'Machine_RadixT'Model_Emin - 1. The
69561 value of this attribute is of the type universal_real.
69562 See *note A.5.3::.
69563
69564 163
69565 S'Modulus
69566 For every modular subtype S:
69567
69568 164
69569 S'Modulus yields the modulus of the type of S, as a value
69570 of the type universal_integer. See *note 3.5.4::.
69571
69572 164.1/3
69573 X'Old
69574 For a prefix X that denotes an object of a nonlimited
69575 type:
69576
69577 164.2/3
69578 For each X'Old in a postcondition expression that is
69579 enabled, a constant is implicitly declared at the
69580 beginning of the subprogram or entry. The constant is of
69581 the type of X and is initialized to the result of
69582 evaluating X (as an expression) at the point of the
69583 constant declaration. The value of X'Old in the
69584 postcondition expression is the value of this constant;
69585 the type of X'Old is the type of X. These implicit
69586 constant declarations occur in an arbitrary order. See
69587 *note 6.1.1::.
69588
69589 165
69590 S'Class'Output
69591 For every subtype S'Class of a class-wide type T'Class:
69592
69593 166
69594 S'Class'Output denotes a procedure with the following
69595 specification:
69596
69597 167/2
69598 procedure S'Class'Output(
69599 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
69600 Item : in T'Class)
69601
69602 168/2
69603 First writes the external tag of Item to Stream (by
69604 calling String'Output(Stream,
69605 Tags.External_Tag(Item'Tag)) -- see *note 3.9::) and then
69606 dispatches to the subprogram denoted by the Output
69607 attribute of the specific type identified by the tag.
69608 Tag_Error is raised if the tag of Item identifies a type
69609 declared at an accessibility level deeper than that of S.
69610 See *note 13.13.2::.
69611
69612 169
69613 S'Output
69614 For every subtype S of a specific type T:
69615
69616 170
69617 S'Output denotes a procedure with the following
69618 specification:
69619
69620 171/2
69621 procedure S'Output(
69622 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
69623 Item : in T)
69624
69625 172
69626 S'Output writes the value of Item to Stream, including
69627 any bounds or discriminants. See *note 13.13.2::.
69628
69629 172.1/3
69630 X'Overlaps_Storage
69631 For a prefix X that denotes an object:
69632
69633 172.2/3
69634 X'Overlaps_Storage denotes a function with the following
69635 specification:
69636
69637 172.3/3
69638 function X'Overlaps_Storage (Arg : any_type)
69639 return Boolean
69640
69641 172.4/3
69642 The actual parameter shall be a name that denotes an
69643 object. The object denoted by the actual parameter can
69644 be of any type. This function evaluates the names of the
69645 objects involved and returns True if the representation
69646 of the object denoted by the actual parameter shares at
69647 least one bit with the representation of the object
69648 denoted by X; otherwise, it returns False. See *note
69649 13.3::.
69650
69651 173/1
69652 D'Partition_Id
69653 For a prefix D that denotes a library-level declaration,
69654 excepting a declaration of or within a declared-pure
69655 library unit:
69656
69657 174
69658 Denotes a value of the type universal_integer that
69659 identifies the partition in which D was elaborated. If D
69660 denotes the declaration of a remote call interface
69661 library unit (see *note E.2.3::) the given partition is
69662 the one where the body of D was elaborated. See *note
69663 E.1::.
69664
69665 175
69666 S'Pos
69667 For every discrete subtype S:
69668
69669 176
69670 S'Pos denotes a function with the following
69671 specification:
69672
69673 177
69674 function S'Pos(Arg : S'Base)
69675 return universal_integer
69676
69677 178
69678 This function returns the position number of the value of
69679 Arg, as a value of type universal_integer. See *note
69680 3.5.5::.
69681
69682 179
69683 R.C'Position
69684 For a component C of a composite, non-array object R:
69685
69686 180/2
69687 If the nondefault bit ordering applies to the composite
69688 type, and if a component_clause specifies the placement
69689 of C, denotes the value given for the position of the
69690 component_clause; otherwise, denotes the same value as
69691 R.C'Address - R'Address. The value of this attribute is
69692 of the type universal_integer. See *note 13.5.2::.
69693
69694 181
69695 S'Pred
69696 For every scalar subtype S:
69697
69698 182
69699 S'Pred denotes a function with the following
69700 specification:
69701
69702 183
69703 function S'Pred(Arg : S'Base)
69704 return S'Base
69705
69706 184
69707 For an enumeration type, the function returns the value
69708 whose position number is one less than that of the value
69709 of Arg; Constraint_Error is raised if there is no such
69710 value of the type. For an integer type, the function
69711 returns the result of subtracting one from the value of
69712 Arg. For a fixed point type, the function returns the
69713 result of subtracting small from the value of Arg. For a
69714 floating point type, the function returns the machine
69715 number (as defined in *note 3.5.7::) immediately below
69716 the value of Arg; Constraint_Error is raised if there is
69717 no such machine number. See *note 3.5::.
69718
69719 184.1/2
69720 P'Priority
69721 For a prefix P that denotes a protected object:
69722
69723 184.2/2
69724 Denotes a non-aliased component of the protected object
69725 P. This component is of type System.Any_Priority and its
69726 value is the priority of P. P'Priority denotes a variable
69727 if and only if P denotes a variable. A reference to this
69728 attribute shall appear only within the body of P. See
69729 *note D.5.2::.
69730
69731 185/1
69732 A'Range
69733 For a prefix A that is of an array type (after any
69734 implicit dereference), or denotes a constrained array
69735 subtype:
69736
69737 186
69738 A'Range is equivalent to the range A'First .. A'Last,
69739 except that the prefix A is only evaluated once. See
69740 *note 3.6.2::.
69741
69742 187
69743 S'Range
69744 For every scalar subtype S:
69745
69746 188
69747 S'Range is equivalent to the range S'First .. S'Last.
69748 See *note 3.5::.
69749
69750 189/1
69751 A'Range(N)
69752 For a prefix A that is of an array type (after any
69753 implicit dereference), or denotes a constrained array
69754 subtype:
69755
69756 190
69757 A'Range(N) is equivalent to the range A'First(N) ..
69758 A'Last(N), except that the prefix A is only evaluated
69759 once. See *note 3.6.2::.
69760
69761 191
69762 S'Class'Read
69763 For every subtype S'Class of a class-wide type T'Class:
69764
69765 192
69766 S'Class'Read denotes a procedure with the following
69767 specification:
69768
69769 193/2
69770 procedure S'Class'Read(
69771 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
69772 Item : out T'Class)
69773
69774 194
69775 Dispatches to the subprogram denoted by the Read
69776 attribute of the specific type identified by the tag of
69777 Item. See *note 13.13.2::.
69778
69779 195
69780 S'Read
69781 For every subtype S of a specific type T:
69782
69783 196
69784 S'Read denotes a procedure with the following
69785 specification:
69786
69787 197/2
69788 procedure S'Read(
69789 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
69790 Item : out T)
69791
69792 198
69793 S'Read reads the value of Item from Stream. See *note
69794 13.13.2::.
69795
69796 199
69797 S'Remainder
69798 For every subtype S of a floating point type T:
69799
69800 200
69801 S'Remainder denotes a function with the following
69802 specification:
69803
69804 201
69805 function S'Remainder (X, Y : T)
69806 return T
69807
69808 202
69809 For nonzero Y, let v be the value X - n · Y, where n is
69810 the integer nearest to the exact value of X/Y; if |n -
69811 X/Y| = 1/2, then n is chosen to be even. If v is a
69812 machine number of the type T, the function yields v;
69813 otherwise, it yields zero. Constraint_Error is raised if
69814 Y is zero. A zero result has the sign of X when
69815 S'Signed_Zeros is True. See *note A.5.3::.
69816
69817 202.1/3
69818 F'Result
69819 For a prefix F that denotes a function declaration:
69820
69821 202.2/3
69822 Within a postcondition expression for function F, denotes
69823 the result object of the function. The type of this
69824 attribute is that of the function result except within a
69825 Post'Class postcondition expression for a function with a
69826 controlling result or with a controlling access result.
69827 For a controlling result, the type of the attribute is
69828 T'Class, where T is the function result type. For a
69829 controlling access result, the type of the attribute is
69830 an anonymous access type whose designated type is
69831 T'Class, where T is the designated type of the function
69832 result type. See *note 6.1.1::.
69833
69834 203
69835 S'Round
69836 For every decimal fixed point subtype S:
69837
69838 204
69839 S'Round denotes a function with the following
69840 specification:
69841
69842 205
69843 function S'Round(X : universal_real)
69844 return S'Base
69845
69846 206
69847 The function returns the value obtained by rounding X
69848 (away from 0, if X is midway between two values of the
69849 type of S). See *note 3.5.10::.
69850
69851 207
69852 S'Rounding
69853 For every subtype S of a floating point type T:
69854
69855 208
69856 S'Rounding denotes a function with the following
69857 specification:
69858
69859 209
69860 function S'Rounding (X : T)
69861 return T
69862
69863 210
69864 The function yields the integral value nearest to X,
69865 rounding away from zero if X lies exactly halfway between
69866 two integers. A zero result has the sign of X when
69867 S'Signed_Zeros is True. See *note A.5.3::.
69868
69869 211
69870 S'Safe_First
69871 For every subtype S of a floating point type T:
69872
69873 212
69874 Yields the lower bound of the safe range (see *note
69875 3.5.7::) of the type T. If the Numerics Annex is not
69876 supported, the value of this attribute is implementation
69877 defined; see *note G.2.2:: for the definition that
69878 applies to implementations supporting the Numerics Annex.
69879 The value of this attribute is of the type
69880 universal_real. See *note A.5.3::.
69881
69882 213
69883 S'Safe_Last
69884 For every subtype S of a floating point type T:
69885
69886 214
69887 Yields the upper bound of the safe range (see *note
69888 3.5.7::) of the type T. If the Numerics Annex is not
69889 supported, the value of this attribute is implementation
69890 defined; see *note G.2.2:: for the definition that
69891 applies to implementations supporting the Numerics Annex.
69892 The value of this attribute is of the type
69893 universal_real. See *note A.5.3::.
69894
69895 215
69896 S'Scale
69897 For every decimal fixed point subtype S:
69898
69899 216
69900 S'Scale denotes the scale of the subtype S, defined as
69901 the value N such that S'Delta = 10.0**(-N). The scale
69902 indicates the position of the point relative to the
69903 rightmost significant digits of values of subtype S. The
69904 value of this attribute is of the type universal_integer.
69905 See *note 3.5.10::.
69906
69907 217
69908 S'Scaling
69909 For every subtype S of a floating point type T:
69910
69911 218
69912 S'Scaling denotes a function with the following
69913 specification:
69914
69915 219
69916 function S'Scaling (X : T;
69917 Adjustment : universal_integer)
69918 return T
69919
69920 220
69921 Let v be the value X · T'Machine_RadixAdjustment. If v
69922 is a machine number of the type T, or if |v| >=
69923 T'Model_Small, the function yields v; otherwise, it
69924 yields either one of the machine numbers of the type T
69925 adjacent to v. Constraint_Error is optionally raised if
69926 v is outside the base range of S. A zero result has the
69927 sign of X when S'Signed_Zeros is True. See *note
69928 A.5.3::.
69929
69930 221
69931 S'Signed_Zeros
69932 For every subtype S of a floating point type T:
69933
69934 222
69935 Yields the value True if the hardware representation for
69936 the type T has the capability of representing both
69937 positively and negatively signed zeros, these being
69938 generated and used by the predefined operations of the
69939 type T as specified in IEC 559:1989; yields the value
69940 False otherwise. The value of this attribute is of the
69941 predefined type Boolean. See *note A.5.3::.
69942
69943 223
69944 S'Size
69945 For every subtype S:
69946
69947 224
69948 If S is definite, denotes the size (in bits) that the
69949 implementation would choose for the following objects of
69950 subtype S:
69951
69952 225
69953 * A record component of subtype S when the record type
69954 is packed.
69955
69956 226
69957 * The formal parameter of an instance of
69958 Unchecked_Conversion that converts from subtype S to
69959 some other subtype.
69960
69961 227
69962 If S is indefinite, the meaning is implementation
69963 defined. The value of this attribute is of the type
69964 universal_integer. See *note 13.3::.
69965
69966 228/1
69967 X'Size
69968 For a prefix X that denotes an object:
69969
69970 229
69971 Denotes the size in bits of the representation of the
69972 object. The value of this attribute is of the type
69973 universal_integer. See *note 13.3::.
69974
69975 230
69976 S'Small
69977 For every fixed point subtype S:
69978
69979 231
69980 S'Small denotes the small of the type of S. The value of
69981 this attribute is of the type universal_real. See *note
69982 3.5.10::.
69983
69984 232
69985 S'Storage_Pool
69986 For every access-to-object subtype S:
69987
69988 233
69989 Denotes the storage pool of the type of S. The type of
69990 this attribute is Root_Storage_Pool'Class. See *note
69991 13.11::.
69992
69993 234
69994 S'Storage_Size
69995 For every access-to-object subtype S:
69996
69997 235
69998 Yields the result of calling
69999 Storage_Size(S'Storage_Pool), which is intended to be a
70000 measure of the number of storage elements reserved for
70001 the pool. The type of this attribute is
70002 universal_integer. See *note 13.11::.
70003
70004 236/1
70005 T'Storage_Size
70006 For a prefix T that denotes a task object (after any
70007 implicit dereference):
70008
70009 237
70010 Denotes the number of storage elements reserved for the
70011 task. The value of this attribute is of the type
70012 universal_integer. The Storage_Size includes the size of
70013 the task's stack, if any. The language does not specify
70014 whether or not it includes other storage associated with
70015 the task (such as the "task control block" used by some
70016 implementations.) See *note 13.3::.
70017
70018 237.1/3
70019 S'Stream_Size
70020 For every subtype S of an elementary type T:
70021
70022 237.2/3
70023 Denotes the number of bits read from or written to a
70024 stream by the default implementations of S'Read and
70025 S'Write. Hence, the number of stream elements required
70026 per item of elementary type T is:
70027
70028 237.3/2
70029 T'Stream_Size / Ada.Streams.Stream_Element'Size
70030
70031 237.4/2
70032 The value of this attribute is of type universal_integer
70033 and is a multiple of Stream_Element'Size. See *note
70034 13.13.2::.
70035
70036 238
70037 S'Succ
70038 For every scalar subtype S:
70039
70040 239
70041 S'Succ denotes a function with the following
70042 specification:
70043
70044 240
70045 function S'Succ(Arg : S'Base)
70046 return S'Base
70047
70048 241
70049 For an enumeration type, the function returns the value
70050 whose position number is one more than that of the value
70051 of Arg; Constraint_Error is raised if there is no such
70052 value of the type. For an integer type, the function
70053 returns the result of adding one to the value of Arg.
70054 For a fixed point type, the function returns the result
70055 of adding small to the value of Arg. For a floating
70056 point type, the function returns the machine number (as
70057 defined in *note 3.5.7::) immediately above the value of
70058 Arg; Constraint_Error is raised if there is no such
70059 machine number. See *note 3.5::.
70060
70061 242
70062 S'Tag
70063 For every subtype S of a tagged type T (specific or
70064 class-wide):
70065
70066 243
70067 S'Tag denotes the tag of the type T (or if T is
70068 class-wide, the tag of the root type of the corresponding
70069 class). The value of this attribute is of type Tag. See
70070 *note 3.9::.
70071
70072 244
70073 X'Tag
70074 For a prefix X that is of a class-wide tagged type (after
70075 any implicit dereference):
70076
70077 245
70078 X'Tag denotes the tag of X. The value of this attribute
70079 is of type Tag. See *note 3.9::.
70080
70081 246
70082 T'Terminated
70083 For a prefix T that is of a task type (after any implicit
70084 dereference):
70085
70086 247
70087 Yields the value True if the task denoted by T is
70088 terminated, and False otherwise. The value of this
70089 attribute is of the predefined type Boolean. See *note
70090 9.9::.
70091
70092 248
70093 S'Truncation
70094 For every subtype S of a floating point type T:
70095
70096 249
70097 S'Truncation denotes a function with the following
70098 specification:
70099
70100 250
70101 function S'Truncation (X : T)
70102 return T
70103
70104 251
70105 The function yields the value 'ceiling(X)' when X is
70106 negative, and 'floor(X)' otherwise. A zero result has
70107 the sign of X when S'Signed_Zeros is True. See *note
70108 A.5.3::.
70109
70110 252
70111 S'Unbiased_Rounding
70112 For every subtype S of a floating point type T:
70113
70114 253
70115 S'Unbiased_Rounding denotes a function with the following
70116 specification:
70117
70118 254
70119 function S'Unbiased_Rounding (X : T)
70120 return T
70121
70122 255
70123 The function yields the integral value nearest to X,
70124 rounding toward the even integer if X lies exactly
70125 halfway between two integers. A zero result has the sign
70126 of X when S'Signed_Zeros is True. See *note A.5.3::.
70127
70128 256
70129 X'Unchecked_Access
70130 For a prefix X that denotes an aliased view of an object:
70131
70132 257
70133 All rules and semantics that apply to X'Access (see *note
70134 3.10.2::) apply also to X'Unchecked_Access, except that,
70135 for the purposes of accessibility rules and checks, it is
70136 as if X were declared immediately within a library
70137 package. See *note 13.10::.
70138
70139 258
70140 S'Val
70141 For every discrete subtype S:
70142
70143 259
70144 S'Val denotes a function with the following
70145 specification:
70146
70147 260
70148 function S'Val(Arg : universal_integer)
70149 return S'Base
70150
70151 261
70152 This function returns a value of the type of S whose
70153 position number equals the value of Arg. See *note
70154 3.5.5::.
70155
70156 262
70157 X'Valid
70158 For a prefix X that denotes a scalar object (after any
70159 implicit dereference):
70160
70161 263/3
70162 Yields True if and only if the object denoted by X is
70163 normal, has a valid representation, and the predicate of
70164 the nominal subtype of X evaluates to True. The value of
70165 this attribute is of the predefined type Boolean. See
70166 *note 13.9.2::.
70167
70168 264
70169 S'Value
70170 For every scalar subtype S:
70171
70172 265
70173 S'Value denotes a function with the following
70174 specification:
70175
70176 266
70177 function S'Value(Arg : String)
70178 return S'Base
70179
70180 267
70181 This function returns a value given an image of the value
70182 as a String, ignoring any leading or trailing spaces.
70183 See *note 3.5::.
70184
70185 268/1
70186 P'Version
70187 For a prefix P that statically denotes a program unit:
70188
70189 269
70190 Yields a value of the predefined type String that
70191 identifies the version of the compilation unit that
70192 contains the declaration of the program unit. See *note
70193 E.3::.
70194
70195 270
70196 S'Wide_Image
70197 For every scalar subtype S:
70198
70199 271
70200 S'Wide_Image denotes a function with the following
70201 specification:
70202
70203 272
70204 function S'Wide_Image(Arg : S'Base)
70205 return Wide_String
70206
70207 273/3
70208 The function returns an image of the value of Arg as a
70209 Wide_String. See *note 3.5::.
70210
70211 274
70212 S'Wide_Value
70213 For every scalar subtype S:
70214
70215 275
70216 S'Wide_Value denotes a function with the following
70217 specification:
70218
70219 276
70220 function S'Wide_Value(Arg : Wide_String)
70221 return S'Base
70222
70223 277
70224 This function returns a value given an image of the value
70225 as a Wide_String, ignoring any leading or trailing
70226 spaces. See *note 3.5::.
70227
70228 277.1/2
70229 S'Wide_Wide_Image
70230 For every scalar subtype S:
70231
70232 277.2/2
70233 S'Wide_Wide_Image denotes a function with the following
70234 specification:
70235
70236 277.3/2
70237 function S'Wide_Wide_Image(Arg : S'Base)
70238 return Wide_Wide_String
70239
70240 277.4/2
70241 The function returns an image of the value of Arg, that
70242 is, a sequence of characters representing the value in
70243 display form. See *note 3.5::.
70244
70245 277.5/2
70246 S'Wide_Wide_Value
70247 For every scalar subtype S:
70248
70249 277.6/2
70250 S'Wide_Wide_Value denotes a function with the following
70251 specification:
70252
70253 277.7/2
70254 function S'Wide_Wide_Value(Arg : Wide_Wide_String)
70255 return S'Base
70256
70257 277.8/2
70258 This function returns a value given an image of the value
70259 as a Wide_Wide_String, ignoring any leading or trailing
70260 spaces. See *note 3.5::.
70261
70262 277.9/2
70263 S'Wide_Wide_Width
70264 For every scalar subtype S:
70265
70266 277.10/2
70267 S'Wide_Wide_Width denotes the maximum length of a
70268 Wide_Wide_String returned by S'Wide_Wide_Image over all
70269 values of the subtype S. It denotes zero for a subtype
70270 that has a null range. Its type is universal_integer.
70271 See *note 3.5::.
70272
70273 278
70274 S'Wide_Width
70275 For every scalar subtype S:
70276
70277 279
70278 S'Wide_Width denotes the maximum length of a Wide_String
70279 returned by S'Wide_Image over all values of the subtype
70280 S. It denotes zero for a subtype that has a null range.
70281 Its type is universal_integer. See *note 3.5::.
70282
70283 280
70284 S'Width
70285 For every scalar subtype S:
70286
70287 281
70288 S'Width denotes the maximum length of a String returned
70289 by S'Image over all values of the subtype S. It denotes
70290 zero for a subtype that has a null range. Its type is
70291 universal_integer. See *note 3.5::.
70292
70293 282
70294 S'Class'Write
70295 For every subtype S'Class of a class-wide type T'Class:
70296
70297 283
70298 S'Class'Write denotes a procedure with the following
70299 specification:
70300
70301 284/2
70302 procedure S'Class'Write(
70303 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
70304 Item : in T'Class)
70305
70306 285
70307 Dispatches to the subprogram denoted by the Write
70308 attribute of the specific type identified by the tag of
70309 Item. See *note 13.13.2::.
70310
70311 286
70312 S'Write
70313 For every subtype S of a specific type T:
70314
70315 287
70316 S'Write denotes a procedure with the following
70317 specification:
70318
70319 288/2
70320 procedure S'Write(
70321 Stream : not null access Ada.Streams.Root_Stream_Type'Class;
70322 Item : in T)
70323
70324 289
70325 S'Write writes the value of Item to Stream. See *note
70326 13.13.2::.
70327
70328 \1f
70329 File: arm2012.info, Node: Annex L, Next: Annex M, Prev: Annex K, Up: Top
70330
70331 Annex L Language-Defined Pragmas
70332 ********************************
70333
70334 1
70335 This Annex summarizes the definitions given elsewhere of the
70336 language-defined pragmas.
70337
70338 2
70339 pragma All_Calls_Remote[(library_unit_name)]; -- See *note E.2.3::.
70340
70341 2.1/2
70342 pragma Assert([Check =>] boolean_expression[, [Message =>] string_
70343 expression]); -- See *note 11.4.2::.
70344
70345 2.2/2
70346 pragma Assertion_Policy(policy_identifier); -- See *note 11.4.2::.
70347
70348 2.3/3
70349 pragma Assertion_Policy(
70350 assertion_aspect_mark => policy_identifier
70351 {, assertion_aspect_mark => policy_identifier}); -- See *note
70352 11.4.2::.
70353
70354 3/3
70355 This paragraph was deleted.
70356
70357 3.1/3
70358 pragma Asynchronous (local_name); -- See *note J.15.13::.
70359
70360 4/3
70361 This paragraph was deleted.
70362
70363 4.1/3
70364 pragma Atomic (local_name); -- See *note J.15.8::.
70365
70366 5/3
70367 This paragraph was deleted.
70368
70369 5.1/3
70370 pragma Atomic_Components (array_local_name); -- See *note J.15.8::.
70371
70372 6/3
70373 This paragraph was deleted.
70374
70375 6.1/3
70376 pragma Attach_Handler (handler_name, expression); -- See *note J.15.7::.
70377
70378 7/3
70379 This paragraph was deleted.
70380
70381 8/3
70382 This paragraph was deleted.
70383
70384 8.1/3
70385 pragma Convention([Convention =>] convention_identifier,[Entity =>]
70386 local_name); -- See *note J.15.5::.
70387
70388 8.2/3
70389 pragma CPU (expression); -- See *note J.15.9::.
70390
70391 8.3/3
70392 pragma Default_Storage_Pool (storage_pool_indicator); -- See *note
70393 13.11.3::.
70394
70395 8.4/2
70396 pragma Detect_Blocking; -- See *note H.5::.
70397
70398 9
70399 pragma Discard_Names[([On => ] local_name)]; -- See *note C.5::.
70400
70401 9.1/3
70402 pragma Dispatching_Domain (expression); -- See *note J.15.10::.
70403
70404 10
70405 pragma Elaborate(library_unit_name{, library_unit_name}); -- See *note
70406 10.2.1::.
70407
70408 11
70409 pragma Elaborate_All(library_unit_name{, library_unit_name}); -- See
70410 *note 10.2.1::.
70411
70412 12
70413 pragma Elaborate_Body[(library_unit_name)]; -- See *note 10.2.1::.
70414
70415 13/3
70416 This paragraph was deleted.
70417
70418 13.1/3
70419 pragma Export(
70420 [Convention =>] convention_identifier, [Entity =>] local_name
70421 [, [External_Name =>] external_name_string_expression]
70422 [, [Link_Name =>] link_name_string_expression]); -- See *note
70423 J.15.5::.
70424
70425 14/3
70426 This paragraph was deleted.
70427
70428 14.1/3
70429 pragma Import(
70430 [Convention =>] convention_identifier, [Entity =>] local_name
70431 [, [External_Name =>] external_name_string_expression]
70432 [, [Link_Name =>] link_name_string_expression]); -- See *note
70433 J.15.5::.
70434
70435 14.2/3
70436 pragma Independent (component_local_name); -- See *note J.15.8::.
70437
70438 14.3/3
70439 pragma Independent_Components (local_name); -- See *note J.15.8::.
70440
70441 15/3
70442 This paragraph was deleted.
70443
70444 15.1/3
70445 pragma Inline (name{, name}); -- See *note J.15.1::.
70446
70447 16
70448 pragma Inspection_Point[(object_name {, object_name})]; -- See *note
70449 H.3.2::.
70450
70451 17/3
70452 This paragraph was deleted.
70453
70454 17.1/3
70455 pragma Interrupt_Handler (handler_name); -- See *note J.15.7::.
70456
70457 18/3
70458 This paragraph was deleted.
70459
70460 18.1/3
70461 pragma Interrupt_Priority [(expression);] -- See *note J.15.11::.
70462
70463 19
70464 pragma Linker_Options(string_expression); -- See *note B.1::.
70465
70466 20
70467 pragma List(identifier); -- See *note 2.8::.
70468
70469 21
70470 pragma Locking_Policy(policy_identifier); -- See *note D.3::.
70471
70472 21.1/3
70473 This paragraph was deleted.
70474
70475 21.2/3
70476 pragma No_Return (procedure_local_name{, procedure_local_name}); -- See
70477 *note J.15.2::.
70478
70479 22
70480 pragma Normalize_Scalars; -- See *note H.1::.
70481
70482 23
70483 pragma Optimize(identifier); -- See *note 2.8::.
70484
70485 24/3
70486 This paragraph was deleted.
70487
70488 24.1/3
70489 pragma Pack (first_subtype_local_name); -- See *note J.15.3::.
70490
70491 25
70492 pragma Page; -- See *note 2.8::.
70493
70494 25.1/2
70495 pragma Partition_Elaboration_Policy (policy_identifier); -- See *note
70496 H.6::.
70497
70498 25.2/2
70499 pragma Preelaborable_Initialization(direct_name); -- See *note 10.2.1::.
70500
70501 26
70502 pragma Preelaborate[(library_unit_name)]; -- See *note 10.2.1::.
70503
70504 27/3
70505 This paragraph was deleted.
70506
70507 27.1/3
70508 pragma Priority (expression); -- See *note J.15.11::.
70509
70510 27.2/2
70511 pragma Priority_Specific_Dispatching (
70512 policy_identifier, first_priority_expression, last_priority_
70513 expression); -- See *note D.2.2::.
70514
70515 27.3/3
70516 pragma Profile (profile_identifier {, profile_
70517 pragma_argument_association}); -- See *note 13.12::.
70518
70519 27.4/3
70520 This paragraph was deleted.
70521
70522 28
70523 pragma Pure[(library_unit_name)]; -- See *note 10.2.1::.
70524
70525 29
70526 pragma Queuing_Policy(policy_identifier); -- See *note D.4::.
70527
70528 29.1/3
70529 This paragraph was deleted.
70530
70531 29.2/3
70532 pragma Relative_Deadline (relative_deadline_expression); -- See *note
70533 J.15.12::.
70534
70535 30
70536 pragma Remote_Call_Interface[(library_unit_name)]; -- See *note E.2.3::.
70537
70538 31
70539 pragma Remote_Types[(library_unit_name)]; -- See *note E.2.2::.
70540
70541 32
70542 pragma Restrictions(restriction{, restriction}); -- See *note 13.12::.
70543
70544 33
70545 pragma Reviewable; -- See *note H.3.1::.
70546
70547 34
70548 pragma Shared_Passive[(library_unit_name)]; -- See *note E.2.1::.
70549
70550 35/3
70551 This paragraph was deleted.
70552
70553 35.1/3
70554 pragma Storage_Size (expression); -- See *note J.15.4::.
70555
70556 36
70557 pragma Suppress(identifier); -- See *note 11.5::.
70558
70559 37
70560 pragma Task_Dispatching_Policy(policy_identifier); -- See *note D.2.2::.
70561
70562 37.1/3
70563 This paragraph was deleted.
70564
70565 37.2/3
70566 pragma Unchecked_Union (first_subtype_local_name); -- See *note
70567 J.15.6::.
70568
70569 37.3/2
70570 pragma Unsuppress(identifier); -- See *note 11.5::.
70571
70572 38/3
70573 This paragraph was deleted.
70574
70575 38.1/3
70576 pragma Volatile (local_name); -- See *note J.15.8::.
70577
70578 39/3
70579 This paragraph was deleted.
70580
70581 39.1/3
70582 pragma Volatile_Components (array_local_name); -- See *note J.15.8::.
70583
70584 \1f
70585 File: arm2012.info, Node: Annex M, Next: Annex N, Prev: Annex L, Up: Top
70586
70587 Annex M Summary of Documentation Requirements
70588 *********************************************
70589
70590 1/3
70591 The Ada language allows for certain target machine dependences in a
70592 controlled manner. Each Ada implementation must document many
70593 characteristics and properties of the target system. This International
70594 Standard contains specific documentation requirements. In addition,
70595 many characteristics that require documentation are identified
70596 throughout this International Standard as being implementation defined.
70597 Finally, this International Standard requires documentation of whether
70598 implementation advice is followed. The following subclauses provide
70599 summaries of these documentation requirements.
70600
70601 * Menu:
70602
70603 * M.1 :: Specific Documentation Requirements
70604 * M.2 :: Implementation-Defined Characteristics
70605 * M.3 :: Implementation Advice
70606
70607 \1f
70608 File: arm2012.info, Node: M.1, Next: M.2, Up: Annex M
70609
70610 M.1 Specific Documentation Requirements
70611 =======================================
70612
70613 1/2
70614 In addition to implementation-defined characteristics, each Ada
70615 implementation must document various properties of the implementation:
70616
70617 2/2
70618 * The behavior of implementations in implementation-defined
70619 situations shall be documented -- see *note M.2::, "*note M.2::
70620 Implementation-Defined Characteristics" for a listing. See *note
70621 1.1.3::(19).
70622
70623 3/2
70624 * The set of values that a user-defined Allocate procedure needs to
70625 accept for the Alignment parameter. How the standard storage pool
70626 is chosen, and how storage is allocated by standard storage pools.
70627 See *note 13.11::(22).
70628
70629 4/2
70630 * The algorithm used for random number generation, including a
70631 description of its period. See *note A.5.2::(44).
70632
70633 5/2
70634 * The minimum time interval between calls to the time-dependent Reset
70635 procedure that is guaranteed to initiate different random number
70636 sequences. See *note A.5.2::(45).
70637
70638 6/2
70639 * The conditions under which Io_Exceptions.Name_Error,
70640 Io_Exceptions.Use_Error, and Io_Exceptions.Device_Error are
70641 propagated. See *note A.13::(15).
70642
70643 7/2
70644 * The behavior of package Environment_Variables when environment
70645 variables are changed by external mechanisms. See *note
70646 A.17::(30/2).
70647
70648 8/2
70649 * The overhead of calling machine-code or intrinsic subprograms. See
70650 *note C.1::(6).
70651
70652 9/2
70653 * The types and attributes used in machine code insertions. See
70654 *note C.1::(7).
70655
70656 10/2
70657 * The subprogram calling conventions for all supported convention
70658 identifiers. See *note C.1::(8/3).
70659
70660 11/2
70661 * The mapping between the Link_Name or Ada designator and the
70662 external link name. See *note C.1::(9).
70663
70664 12/2
70665 * The treatment of interrupts. See *note C.3::(22).
70666
70667 13/2
70668 * The metrics for interrupt handlers. See *note C.3.1::(16).
70669
70670 14/3
70671 * If the Ceiling_Locking policy is in effect, the default ceiling
70672 priority for a protected object that specifies an interrupt handler
70673 aspect. See *note C.3.2::(24/3).
70674
70675 15/2
70676 * Any circumstances when the elaboration of a preelaborated package
70677 causes code to be executed. See *note C.4::(12).
70678
70679 16/2
70680 * Whether a partition can be restarted without reloading. See *note
70681 C.4::(13).
70682
70683 17/2
70684 * The effect of calling Current_Task from an entry body or interrupt
70685 handler. See *note C.7.1::(19).
70686
70687 18/2
70688 * For package Task_Attributes, limits on the number and size of task
70689 attributes, and how to configure any limits. See *note
70690 C.7.2::(19).
70691
70692 19/2
70693 * The metrics for the Task_Attributes package. See *note
70694 C.7.2::(27).
70695
70696 20/2
70697 * The details of the configuration used to generate the values of all
70698 metrics. See *note D::(2).
70699
70700 21/2
70701 * The maximum priority inversion a user task can experience from the
70702 implementation. See *note D.2.3::(12/2).
70703
70704 22/2
70705 * The amount of time that a task can be preempted for processing on
70706 behalf of lower-priority tasks. See *note D.2.3::(13/2).
70707
70708 23/2
70709 * The quantum values supported for round robin dispatching. See
70710 *note D.2.5::(16/2).
70711
70712 24/2
70713 * The accuracy of the detection of the exhaustion of the budget of a
70714 task for round robin dispatching. See *note D.2.5::(17/2).
70715
70716 25/2
70717 * Any conditions that cause the completion of the setting of the
70718 deadline of a task to be delayed for a multiprocessor. See *note
70719 D.2.6::(32/2).
70720
70721 26/2
70722 * Any conditions that cause the completion of the setting of the
70723 priority of a task to be delayed for a multiprocessor. See *note
70724 D.5.1::(12.1/2).
70725
70726 27/2
70727 * The metrics for Set_Priority. See *note D.5.1::(14).
70728
70729 28/2
70730 * The metrics for setting the priority of a protected object. See
70731 *note D.5.2::(10).
70732
70733 29/2
70734 * On a multiprocessor, any conditions that cause the completion of an
70735 aborted construct to be delayed later than what is specified for a
70736 single processor. See *note D.6::(3).
70737
70738 30/2
70739 * The metrics for aborts. See *note D.6::(8).
70740
70741 31/2
70742 * The values of Time_First, Time_Last, Time_Span_First,
70743 Time_Span_Last, Time_Span_Unit, and Tick for package Real_Time.
70744 See *note D.8::(33).
70745
70746 32/2
70747 * The properties of the underlying time base used in package
70748 Real_Time. See *note D.8::(34).
70749
70750 33/2
70751 * Any synchronization of package Real_Time with external time
70752 references. See *note D.8::(35).
70753
70754 34/2
70755 * Any aspects of the external environment that could interfere with
70756 package Real_Time. See *note D.8::(36/3).
70757
70758 35/2
70759 * The metrics for package Real_Time. See *note D.8::(45).
70760
70761 36/2
70762 * The minimum value of the delay expression of a
70763 delay_relative_statement that causes a task to actually be blocked.
70764 See *note D.9::(7).
70765
70766 37/2
70767 * The minimum difference between the value of the delay expression of
70768 a delay_until_statement and the value of Real_Time.Clock, that
70769 causes the task to actually be blocked. See *note D.9::(8).
70770
70771 38/2
70772 * The metrics for delay statements. See *note D.9::(13).
70773
70774 39/2
70775 * The upper bound on the duration of interrupt blocking caused by the
70776 implementation. See *note D.12::(5).
70777
70778 40/2
70779 * The metrics for entry-less protected objects. See *note
70780 D.12::(12).
70781
70782 41/2
70783 * The values of CPU_Time_First, CPU_Time_Last, CPU_Time_Unit, and
70784 CPU_Tick of package Execution_Time. See *note D.14::(21/2).
70785
70786 42/3
70787 * The properties of the mechanism used to implement package
70788 Execution_Time, including the values of the constants defined in
70789 the package. See *note D.14::(22/2).
70790
70791 43/2
70792 * The metrics for execution time. See *note D.14::(27).
70793
70794 44/2
70795 * The metrics for timing events. See *note D.15::(24).
70796
70797 44.1/3
70798 * The processor(s) on which the clock interrupt is handled; the
70799 processors on which each Interrupt_Id can be handled. See *note
70800 D.16.1::(32).
70801
70802 45/2
70803 * Whether the RPC-receiver is invoked from concurrent tasks, and if
70804 so, the number of such tasks. See *note E.5::(25).
70805
70806 46/2
70807 * Any techniques used to reduce cancellation errors in
70808 Numerics.Generic_Real_Arrays shall be documented. See *note
70809 G.3.1::(86/2).
70810
70811 47/2
70812 * Any techniques used to reduce cancellation errors in
70813 Numerics.Generic_Complex_Arrays shall be documented. See *note
70814 G.3.2::(155/2).
70815
70816 48/2
70817 * If a pragma Normalize_Scalars applies, the implicit initial values
70818 of scalar subtypes shall be documented. Such a value should be an
70819 invalid representation when possible; any cases when is it not
70820 shall be documented. See *note H.1::(5/2).
70821
70822 49/2
70823 * The range of effects for each bounded error and each unspecified
70824 effect. If the effects of a given erroneous construct are
70825 constrained, the constraints shall be documented. See *note
70826 H.2::(1).
70827
70828 50/2
70829 * For each inspection point, a mapping between each inspectable
70830 object and the machine resources where the object's value can be
70831 obtained shall be provided. See *note H.3.2::(8).
70832
70833 51/2
70834 * If a pragma Restrictions(No_Exceptions) is specified, the effects
70835 of all constructs where language-defined checks are still
70836 performed. See *note H.4::(25).
70837
70838 52/2
70839 * The interrupts to which a task entry may be attached. See *note
70840 J.7.1::(12).
70841
70842 53/2
70843 * The type of entry call invoked for an interrupt entry. See *note
70844 J.7.1::(13).
70845
70846 \1f
70847 File: arm2012.info, Node: M.2, Next: M.3, Prev: M.1, Up: Annex M
70848
70849 M.2 Implementation-Defined Characteristics
70850 ==========================================
70851
70852 1/2
70853 The Ada language allows for certain machine dependences in a controlled
70854 manner. Each Ada implementation must document all
70855 implementation-defined characteristics:
70856
70857 2/2
70858 * Whether or not each recommendation given in Implementation Advice
70859 is followed -- see *note M.3::, "*note M.3:: Implementation Advice"
70860 for a listing. See *note 1.1.2::(37).
70861
70862 3
70863 * Capacity limitations of the implementation. See *note 1.1.3::(3).
70864
70865 4
70866 * Variations from the standard that are impractical to avoid given
70867 the implementation's execution environment. See *note 1.1.3::(6).
70868
70869 5
70870 * Which code_statements cause external interactions. See *note
70871 1.1.3::(10).
70872
70873 6
70874 * The coded representation for the text of an Ada program. See *note
70875 2.1::(4/3).
70876
70877 6.1/2
70878 * The semantics of an Ada program whose text is not in Normalization
70879 Form KC. See *note 2.1::(4.1/3).
70880
70881 7/2
70882 * This paragraph was deleted.
70883
70884 8
70885 * The representation for an end of line. See *note 2.2::(2/3).
70886
70887 9
70888 * Maximum supported line length and lexical element length. See
70889 *note 2.2::(14).
70890
70891 10
70892 * Implementation-defined pragmas. See *note 2.8::(14).
70893
70894 11
70895 * Effect of pragma Optimize. See *note 2.8::(27).
70896
70897 11.1/2
70898 * The sequence of characters of the value returned by S'Wide_Image
70899 when some of the graphic characters of S'Wide_Wide_Image are not
70900 defined in Wide_Character. See *note 3.5::(30/3).
70901
70902 12/2
70903 * The sequence of characters of the value returned by S'Image when
70904 some of the graphic characters of S'Wide_Wide_Image are not defined
70905 in Character. See *note 3.5::(37/3).
70906
70907 13
70908 * The predefined integer types declared in Standard. See *note
70909 3.5.4::(25).
70910
70911 14
70912 * Any nonstandard integer types and the operators defined for them.
70913 See *note 3.5.4::(26).
70914
70915 15
70916 * Any nonstandard real types and the operators defined for them. See
70917 *note 3.5.6::(8).
70918
70919 16
70920 * What combinations of requested decimal precision and range are
70921 supported for floating point types. See *note 3.5.7::(7).
70922
70923 17
70924 * The predefined floating point types declared in Standard. See
70925 *note 3.5.7::(16).
70926
70927 18
70928 * The small of an ordinary fixed point type. See *note 3.5.9::(8/2).
70929
70930 19
70931 * What combinations of small, range, and digits are supported for
70932 fixed point types. See *note 3.5.9::(10).
70933
70934 20/2
70935 * The result of Tags.Wide_Wide_Expanded_Name for types declared
70936 within an unnamed block_statement. See *note 3.9::(10).
70937
70938 20.1/2
70939 * The sequence of characters of the value returned by
70940 Tags.Expanded_Name (respectively, Tags.Wide_Expanded_Name) when
70941 some of the graphic characters of Tags.Wide_Wide_Expanded_Name are
70942 not defined in Character (respectively, Wide_Character). See *note
70943 3.9::(10.1/2).
70944
70945 21
70946 * Implementation-defined attributes. See *note 4.1.4::(12/1).
70947
70948 21.1/2
70949 * Rounding of real static expressions which are exactly half-way
70950 between two machine numbers. See *note 4.9::(38/2).
70951
70952 22
70953 * Any implementation-defined time types. See *note 9.6::(6/3).
70954
70955 23
70956 * The time base associated with relative delays. See *note
70957 9.6::(20).
70958
70959 24
70960 * The time base of the type Calendar.Time. See *note 9.6::(23).
70961
70962 25/2
70963 * The time zone used for package Calendar operations. See *note
70964 9.6::(24/2).
70965
70966 26
70967 * Any limit on delay_until_statements of select_statements. See
70968 *note 9.6::(29).
70969
70970 26.1/2
70971 * The result of Calendar.Formating.Image if its argument represents
70972 more than 100 hours. See *note 9.6.1::(86/2).
70973
70974 27/3
70975 * This paragraph was deleted.
70976
70977 28
70978 * The representation for a compilation. See *note 10.1::(2).
70979
70980 29
70981 * Any restrictions on compilations that contain multiple
70982 compilation_units. See *note 10.1::(4).
70983
70984 30
70985 * The mechanisms for creating an environment and for adding and
70986 replacing compilation units. See *note 10.1.4::(3/2).
70987
70988 30.1/2
70989 * The mechanisms for adding a compilation unit mentioned in a
70990 limited_with_clause to an environment. See *note 10.1.4::(3/2).
70991
70992 31
70993 * The manner of explicitly assigning library units to a partition.
70994 See *note 10.2::(2).
70995
70996 32
70997 * The implementation-defined means, if any, of specifying which
70998 compilation units are needed by a given compilation unit. See
70999 *note 10.2::(2).
71000
71001 33
71002 * The manner of designating the main subprogram of a partition. See
71003 *note 10.2::(7).
71004
71005 34
71006 * The order of elaboration of library_items. See *note 10.2::(18).
71007
71008 35
71009 * Parameter passing and function return for the main subprogram. See
71010 *note 10.2::(21).
71011
71012 36
71013 * The mechanisms for building and running partitions. See *note
71014 10.2::(24).
71015
71016 37
71017 * The details of program execution, including program termination.
71018 See *note 10.2::(25).
71019
71020 38
71021 * The semantics of any nonactive partitions supported by the
71022 implementation. See *note 10.2::(28/3).
71023
71024 39
71025 * The information returned by Exception_Message. See *note
71026 11.4.1::(10.1/3).
71027
71028 40/2
71029 * The result of Exceptions.Wide_Wide_Exception_Name for exceptions
71030 declared within an unnamed block_statement. See *note
71031 11.4.1::(12).
71032
71033 40.1/2
71034 * The sequence of characters of the value returned by
71035 Exceptions.Exception_Name (respectively,
71036 Exceptions.Wide_Exception_Name) when some of the graphic characters
71037 of Exceptions.Wide_Wide_Exception_Name are not defined in Character
71038 (respectively, Wide_Character). See *note 11.4.1::(12.1/2).
71039
71040 41
71041 * The information returned by Exception_Information. See *note
71042 11.4.1::(13/2).
71043
71044 41.1/3
71045 * Implementation-defined policy_identifiers and
71046 assertion_aspect_marks allowed in a pragma Assertion_Policy. See
71047 *note 11.4.2::(9/3).
71048
71049 41.2/2
71050 * The default assertion policy. See *note 11.4.2::(10).
71051
71052 42
71053 * Implementation-defined check names. See *note 11.5::(27).
71054
71055 42.1/2
71056 * Existence and meaning of second parameter of pragma Unsuppress.
71057 See *note 11.5::(27.1/2).
71058
71059 42.2/2
71060 * The cases that cause conflicts between the representation of the
71061 ancestors of a type_declaration. See *note 13.1::(13.1/3).
71062
71063 43/3
71064 * The interpretation of each representation aspect. See *note
71065 13.1::(20).
71066
71067 44/3
71068 * Any restrictions placed upon the specification of representation
71069 aspects. See *note 13.1::(20).
71070
71071 44.1/3
71072 * Implementation-defined aspects, inluding the syntax for specifying
71073 such aspects and the legality rules for such aspects. See *note
71074 13.1.1::(38).
71075
71076 44.2/2
71077 * The set of machine scalars. See *note 13.3::(8.1/3).
71078
71079 45
71080 * The meaning of Size for indefinite subtypes. See *note 13.3::(48).
71081
71082 46
71083 * The default external representation for a type tag. See *note
71084 13.3::(75/3).
71085
71086 47
71087 * What determines whether a compilation unit is the same in two
71088 different partitions. See *note 13.3::(76).
71089
71090 48
71091 * Implementation-defined components. See *note 13.5.1::(15).
71092
71093 49
71094 * If Word_Size = Storage_Unit, the default bit ordering. See *note
71095 13.5.3::(5).
71096
71097 50/2
71098 * The contents of the visible part of package System. See *note
71099 13.7::(2).
71100
71101 50.1/2
71102 * The range of Storage_Elements.Storage_Offset, the modulus of
71103 Storage_Elements.Storage_Element, and the declaration of
71104 Storage_Elements.Integer_Address.. See *note 13.7.1::(11).
71105
71106 51
71107 * The contents of the visible part of package System.Machine_Code,
71108 and the meaning of code_statements. See *note 13.8::(7).
71109
71110 51.1/2
71111 * The result of unchecked conversion for instances with scalar result
71112 types whose result is not defined by the language. See *note
71113 13.9::(11).
71114
71115 52/2
71116 * The effect of unchecked conversion for instances with nonscalar
71117 result types whose effect is not defined by the language. See
71118 *note 13.9::(11).
71119
71120 53/2
71121 * This paragraph was deleted.
71122
71123 54
71124 * Whether or not the implementation provides user-accessible names
71125 for the standard pool type(s). See *note 13.11::(17).
71126
71127 55/2
71128 * The meaning of Storage_Size when neither the Storage_Size nor the
71129 Storage_Pool is specified for an access type. See *note
71130 13.11::(18).
71131
71132 56/2
71133 * This paragraph was deleted.
71134
71135 57/3
71136 * This paragraph was deleted.
71137
71138 57.1/3
71139 * Implementation-defined restrictions allowed in a pragma
71140 Restrictions. See *note 13.12::(8.7/3).
71141
71142 58
71143 * The consequences of violating limitations on Restrictions pragmas.
71144 See *note 13.12::(9).
71145
71146 58.1/3
71147 * Implementation-defined usage profiles allowed in a pragma Profile.
71148 See *note 13.12::(15).
71149
71150 59/2
71151 * The contents of the stream elements read and written by the Read
71152 and Write attributes of elementary types. See *note 13.13.2::(9).
71153
71154 60
71155 * The names and characteristics of the numeric subtypes declared in
71156 the visible part of package Standard. See *note A.1::(3).
71157
71158 60.1/2
71159 * The values returned by Strings.Hash. See *note A.4.9::(3/2).
71160
71161 61
71162 * The accuracy actually achieved by the elementary functions. See
71163 *note A.5.1::(1).
71164
71165 62
71166 * The sign of a zero result from some of the operators or functions
71167 in Numerics.Generic_Elementary_Functions, when
71168 Float_Type'Signed_Zeros is True. See *note A.5.1::(46).
71169
71170 63
71171 * The value of Numerics.Float_Random.Max_Image_Width. See *note
71172 A.5.2::(27).
71173
71174 64
71175 * The value of Numerics.Discrete_Random.Max_Image_Width. See *note
71176 A.5.2::(27).
71177
71178 65/2
71179 * This paragraph was deleted.
71180
71181 66
71182 * The string representation of a random number generator's state.
71183 See *note A.5.2::(38).
71184
71185 67/2
71186 * This paragraph was deleted.
71187
71188 68
71189 * The values of the Model_Mantissa, Model_Emin, Model_Epsilon, Model,
71190 Safe_First, and Safe_Last attributes, if the Numerics Annex is not
71191 supported. See *note A.5.3::(72).
71192
71193 69/2
71194 * This paragraph was deleted.
71195
71196 70
71197 * The value of Buffer_Size in Storage_IO. See *note A.9::(10).
71198
71199 71/2
71200 * The external files associated with the standard input, standard
71201 output, and standard error files. See *note A.10::(5).
71202
71203 72
71204 * The accuracy of the value produced by Put. See *note A.10.9::(36).
71205
71206 72.1/1
71207 * Current size for a stream file for which positioning is not
71208 supported. See *note A.12.1::(1.1/1).
71209
71210 73/2
71211 * The meaning of Argument_Count, Argument, and Command_Name for
71212 package Command_Line. The bounds of type Command_Line.Exit_Status.
71213 See *note A.15::(1).
71214
71215 73.1/2
71216 * The interpretation of file names and directory names. See *note
71217 A.16::(46/2).
71218
71219 73.2/2
71220 * The maximum value for a file size in Directories. See *note
71221 A.16::(87/2).
71222
71223 73.3/2
71224 * The result for Directories.Size for a directory or special file See
71225 *note A.16::(93/2).
71226
71227 73.4/2
71228 * The result for Directories.Modification_Time for a directory or
71229 special file. See *note A.16::(95/2).
71230
71231 73.5/2
71232 * The interpretation of a nonnull search pattern in Directories. See
71233 *note A.16::(104/3).
71234
71235 73.6/2
71236 * The results of a Directories search if the contents of the
71237 directory are altered while a search is in progress. See *note
71238 A.16::(110/3).
71239
71240 73.7/2
71241 * The definition and meaning of an environment variable. See *note
71242 A.17::(1/2).
71243
71244 73.8/2
71245 * The circumstances where an environment variable cannot be defined.
71246 See *note A.17::(16/2).
71247
71248 73.9/2
71249 * Environment names for which Set has the effect of Clear. See *note
71250 A.17::(17/2).
71251
71252 73.10/2
71253 * The value of Containers.Hash_Type'Modulus. The value of
71254 Containers.Count_Type'Last. See *note A.18.1::(7/2).
71255
71256 74
71257 * Implementation-defined convention names. See *note B.1::(11/3).
71258
71259 75
71260 * The meaning of link names. See *note B.1::(36).
71261
71262 76
71263 * The manner of choosing link names when neither the link name nor
71264 the address of an imported or exported entity is specified. See
71265 *note B.1::(36).
71266
71267 77
71268 * The effect of pragma Linker_Options. See *note B.1::(37).
71269
71270 78
71271 * The contents of the visible part of package Interfaces and its
71272 language-defined descendants. See *note B.2::(1).
71273
71274 79/2
71275 * Implementation-defined children of package Interfaces. See *note
71276 B.2::(11).
71277
71278 79.1/2
71279 * The definitions of certain types and constants in Interfaces.C. See
71280 *note B.3::(41).
71281
71282 80/1
71283 * The types Floating, Long_Floating, Binary, Long_Binary,
71284 Decimal_Element, and COBOL_Character; and the initializations of
71285 the variables Ada_To_COBOL and COBOL_To_Ada, in Interfaces.COBOL.
71286 See *note B.4::(50).
71287
71288 80.1/1
71289 * The types Fortran_Integer, Real, Double_Precision, and
71290 Character_Set in Interfaces.Fortran. See *note B.5::(17).
71291
71292 81/2
71293 * Implementation-defined intrinsic subprograms. See *note
71294 C.1::(1/3).
71295
71296 82/2
71297 * This paragraph was deleted.
71298
71299 83/2
71300 * This paragraph was deleted.
71301
71302 83.1/3
71303 * Any restrictions on a protected procedure or its containing type
71304 when an aspect Attach_handler or Interrupt_Handler is specified.
71305 See *note C.3.1::(17).
71306
71307 83.2/3
71308 * Any other forms of interrupt handler supported by the
71309 Attach_Handler and Interrupt_Handler aspects. See *note
71310 C.3.1::(19).
71311
71312 84/2
71313 * This paragraph was deleted.
71314
71315 85
71316 * The semantics of pragma Discard_Names. See *note C.5::(7).
71317
71318 86
71319 * The result of the Task_Identification.Image attribute. See *note
71320 C.7.1::(7).
71321
71322 87/2
71323 * The value of Current_Task when in a protected entry, interrupt
71324 handler, or finalization of a task attribute. See *note
71325 C.7.1::(17/3).
71326
71327 88/2
71328 * This paragraph was deleted.
71329
71330 88.1/1
71331 * Granularity of locking for Task_Attributes. See *note
71332 C.7.2::(16/1).
71333
71334 89/2
71335 * This paragraph was deleted.
71336
71337 90/2
71338 * This paragraph was deleted.
71339
71340 91
71341 * The declarations of Any_Priority and Priority. See *note
71342 D.1::(11).
71343
71344 92
71345 * Implementation-defined execution resources. See *note D.1::(15).
71346
71347 93
71348 * Whether, on a multiprocessor, a task that is waiting for access to
71349 a protected object keeps its processor busy. See *note D.2.1::(3).
71350
71351 94/2
71352 * The effect of implementation-defined execution resources on task
71353 dispatching. See *note D.2.1::(9/2).
71354
71355 95/2
71356 * This paragraph was deleted.
71357
71358 96/2
71359 * This paragraph was deleted.
71360
71361 97/2
71362 * Implementation defined task dispatching policies. See *note
71363 D.2.2::(19).
71364
71365 97.1/2
71366 * The value of Default_Quantum in Dispatching.Round_Robin. See *note
71367 D.2.5::(4).
71368
71369 98
71370 * Implementation-defined policy_identifiers allowed in a pragma
71371 Locking_Policy. See *note D.3::(4).
71372
71373 98.1/2
71374 * The locking policy if no Locking_Policy pragma applies to any unit
71375 of a partition. See *note D.3::(6).
71376
71377 99
71378 * Default ceiling priorities. See *note D.3::(10/3).
71379
71380 100
71381 * The ceiling of any protected object used internally by the
71382 implementation. See *note D.3::(16).
71383
71384 101
71385 * Implementation-defined queuing policies. See *note D.4::(1/3).
71386
71387 102/2
71388 * This paragraph was deleted.
71389
71390 103
71391 * Any operations that implicitly require heap storage allocation.
71392 See *note D.7::(8).
71393
71394 103.1/2
71395 * When restriction No_Task_Termination applies to a partition, what
71396 happens when a task terminates. See *note D.7::(15.1/2).
71397
71398 103.2/2
71399 * The behavior when restriction Max_Storage_At_Blocking is violated.
71400 See *note D.7::(17/1).
71401
71402 103.3/2
71403 * The behavior when restriction Max_Asynchronous_Select_Nesting is
71404 violated. See *note D.7::(18/1).
71405
71406 103.4/2
71407 * The behavior when restriction Max_Tasks is violated. See *note
71408 D.7::(19).
71409
71410 104/2
71411 * Whether the use of pragma Restrictions results in a reduction in
71412 program code or data size or execution time. See *note D.7::(20).
71413
71414 105/2
71415 * This paragraph was deleted.
71416
71417 106/2
71418 * This paragraph was deleted.
71419
71420 106.1/3
71421 * The value of Barrier_Limit'Last in Synchronous_Barriers. See *note
71422 D.10.1::(4/3).
71423
71424 106.2/3
71425 * When an aborted task that is waiting on a Synchronous_Barrier is
71426 aborted. See *note D.10.1::(13/3).
71427
71428 107/2
71429 * This paragraph was deleted.
71430
71431 107.1/3
71432 * The processor on which a task with a CPU value of a
71433 Not_A_Specific_CPU will execute when the Ravenscar profile is in
71434 effect. See *note D.13::(8).
71435
71436 107.2/3
71437 * The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets.
71438 See *note D.14.2::(7/2).
71439
71440 107.3/3
71441 * The value of CPU_Range'Last in System.Multiprocessors. See *note
71442 D.16::(4/3).
71443
71444 107.4/3
71445 * The processor on which the environment task executes in the absence
71446 of a value for the aspect CPU. See *note D.16::(13/3).
71447
71448 108
71449 * The means for creating and executing distributed programs. See
71450 *note E::(5).
71451
71452 109
71453 * Any events that can result in a partition becoming inaccessible.
71454 See *note E.1::(7).
71455
71456 110
71457 * The scheduling policies, treatment of priorities, and management of
71458 shared resources between partitions in certain cases. See *note
71459 E.1::(11).
71460
71461 111/1
71462 * This paragraph was deleted.
71463
71464 112
71465 * Whether the execution of the remote subprogram is immediately
71466 aborted as a result of cancellation. See *note E.4::(13).
71467
71468 112.1/2
71469 * The range of type System.RPC.Partition_Id. See *note E.5::(14).
71470
71471 113/2
71472 * This paragraph was deleted.
71473
71474 114
71475 * Implementation-defined interfaces in the PCS. See *note E.5::(26).
71476
71477 115
71478 * The values of named numbers in the package Decimal. See *note
71479 F.2::(7).
71480
71481 116
71482 * The value of Max_Picture_Length in the package Text_IO.Editing See
71483 *note F.3.3::(16).
71484
71485 117
71486 * The value of Max_Picture_Length in the package Wide_Text_IO.Editing
71487 See *note F.3.4::(5).
71488
71489 117.1/2
71490 * The value of Max_Picture_Length in the package
71491 Wide_Wide_Text_IO.Editing See *note F.3.5::(5).
71492
71493 118
71494 * The accuracy actually achieved by the complex elementary functions
71495 and by other complex arithmetic operations. See *note G.1::(1).
71496
71497 119
71498 * The sign of a zero result (or a component thereof) from any
71499 operator or function in Numerics.Generic_Complex_Types, when
71500 Real'Signed_Zeros is True. See *note G.1.1::(53).
71501
71502 120
71503 * The sign of a zero result (or a component thereof) from any
71504 operator or function in
71505 Numerics.Generic_Complex_Elementary_Functions, when
71506 Complex_Types.Real'Signed_Zeros is True. See *note G.1.2::(45).
71507
71508 121
71509 * Whether the strict mode or the relaxed mode is the default. See
71510 *note G.2::(2).
71511
71512 122
71513 * The result interval in certain cases of fixed-to-float conversion.
71514 See *note G.2.1::(10).
71515
71516 123
71517 * The result of a floating point arithmetic operation in overflow
71518 situations, when the Machine_Overflows attribute of the result type
71519 is False. See *note G.2.1::(13).
71520
71521 124
71522 * The result interval for division (or exponentiation by a negative
71523 exponent), when the floating point hardware implements division as
71524 multiplication by a reciprocal. See *note G.2.1::(16).
71525
71526 125
71527 * The definition of close result set, which determines the accuracy
71528 of certain fixed point multiplications and divisions. See *note
71529 G.2.3::(5).
71530
71531 126
71532 * Conditions on a universal_real operand of a fixed point
71533 multiplication or division for which the result shall be in the
71534 perfect result set. See *note G.2.3::(22).
71535
71536 127
71537 * The result of a fixed point arithmetic operation in overflow
71538 situations, when the Machine_Overflows attribute of the result type
71539 is False. See *note G.2.3::(27).
71540
71541 128
71542 * The result of an elementary function reference in overflow
71543 situations, when the Machine_Overflows attribute of the result type
71544 is False. See *note G.2.4::(4).
71545
71546 129
71547 * The value of the angle threshold, within which certain elementary
71548 functions, complex arithmetic operations, and complex elementary
71549 functions yield results conforming to a maximum relative error
71550 bound. See *note G.2.4::(10).
71551
71552 130
71553 * The accuracy of certain elementary functions for parameters beyond
71554 the angle threshold. See *note G.2.4::(10).
71555
71556 131
71557 * The result of a complex arithmetic operation or complex elementary
71558 function reference in overflow situations, when the
71559 Machine_Overflows attribute of the corresponding real type is
71560 False. See *note G.2.6::(5).
71561
71562 132
71563 * The accuracy of certain complex arithmetic operations and certain
71564 complex elementary functions for parameters (or components thereof)
71565 beyond the angle threshold. See *note G.2.6::(8).
71566
71567 132.1/2
71568 * The accuracy requirements for the subprograms Solve, Inverse,
71569 Determinant, Eigenvalues and Eigensystem for type Real_Matrix. See
71570 *note G.3.1::(81/2).
71571
71572 132.2/2
71573 * The accuracy requirements for the subprograms Solve, Inverse,
71574 Determinant, Eigenvalues and Eigensystem for type Complex_Matrix.
71575 See *note G.3.2::(149/2).
71576
71577 133/2
71578 * This paragraph was deleted.
71579
71580 134/2
71581 * This paragraph was deleted.
71582
71583 135/2
71584 * This paragraph was deleted.
71585
71586 136/2
71587 * This paragraph was deleted.
71588
71589 136.1/2
71590 * Implementation-defined policy_identifiers allowed in a pragma
71591 Partition_Elaboration_Policy. See *note H.6::(4/2).
71592
71593 \1f
71594 File: arm2012.info, Node: M.3, Prev: M.2, Up: Annex M
71595
71596 M.3 Implementation Advice
71597 =========================
71598
71599 1/2
71600 This International Standard sometimes gives advice about handling
71601 certain target machine dependences. Each Ada implementation must
71602 document whether that advice is followed:
71603
71604 2/2
71605 * Program_Error should be raised when an unsupported Specialized
71606 Needs Annex feature is used at run time. See *note 1.1.3::(20).
71607
71608 3/2
71609 * Implementation-defined extensions to the functionality of a
71610 language-defined library unit should be provided by adding children
71611 to the library unit. See *note 1.1.3::(21).
71612
71613 4/2
71614 * If a bounded error or erroneous execution is detected,
71615 Program_Error should be raised. See *note 1.1.5::(12).
71616
71617 5/2
71618 * Implementation-defined pragmas should have no semantic effect for
71619 error-free programs. See *note 2.8::(16/3).
71620
71621 6/2
71622 * Implementation-defined pragmas should not make an illegal program
71623 legal, unless they complete a declaration or configure the
71624 library_items in an environment. See *note 2.8::(19).
71625
71626 7/2
71627 * Long_Integer should be declared in Standard if the target supports
71628 32-bit arithmetic. No other named integer subtypes should be
71629 declared in Standard. See *note 3.5.4::(28).
71630
71631 8/2
71632 * For a two's complement target, modular types with a binary modulus
71633 up to System.Max_Int*2+2 should be supported. A nonbinary modulus
71634 up to Integer'Last should be supported. See *note 3.5.4::(29).
71635
71636 9/2
71637 * Program_Error should be raised for the evaluation of S'Pos for an
71638 enumeration type, if the value of the operand does not correspond
71639 to the internal code for any enumeration literal of the type. See
71640 *note 3.5.5::(8).
71641
71642 10/2
71643 * Long_Float should be declared in Standard if the target supports 11
71644 or more digits of precision. No other named float subtypes should
71645 be declared in Standard. See *note 3.5.7::(17).
71646
71647 11/2
71648 * Multidimensional arrays should be represented in row-major order,
71649 unless the array has convention Fortran. See *note 3.6.2::(11/3).
71650
71651 12/3
71652 * Tags.Internal_Tag should return the tag of a type, if one exists,
71653 whose innermost master is a master of the point of the function
71654 call.. See *note 3.9::(26.1/3).
71655
71656 13/2
71657 * A real static expression with a nonformal type that is not part of
71658 a larger static expression should be rounded the same as the target
71659 system. See *note 4.9::(38.1/2).
71660
71661 14/2
71662 * The value of Duration'Small should be no greater than 100
71663 microseconds. See *note 9.6::(30).
71664
71665 15/2
71666 * The time base for delay_relative_statements should be monotonic.
71667 See *note 9.6::(31).
71668
71669 16/2
71670 * Leap seconds should be supported if the target system supports
71671 them. Otherwise, operations in Calendar.Formatting should return
71672 results consistent with no leap seconds. See *note 9.6.1::(89/2).
71673
71674 17/2
71675 * When applied to a generic unit, a program unit pragma that is not a
71676 library unit pragma should apply to each instance of the generic
71677 unit for which there is not an overriding pragma applied directly
71678 to the instance. See *note 10.1.5::(10/1).
71679
71680 18/2
71681 * A type declared in a preelaborated package should have the same
71682 representation in every elaboration of a given version of the
71683 package. See *note 10.2.1::(12).
71684
71685 19/2
71686 * Exception_Information should provide information useful for
71687 debugging, and should include the Exception_Name and
71688 Exception_Message. See *note 11.4.1::(19).
71689
71690 20/2
71691 * Exception_Message by default should be short, provide information
71692 useful for debugging, and should not include the Exception_Name.
71693 See *note 11.4.1::(19).
71694
71695 21/2
71696 * Code executed for checks that have been suppressed should be
71697 minimized. See *note 11.5::(28).
71698
71699 22/2
71700 * The recommended level of support for all representation items
71701 should be followed. See *note 13.1::(28/3).
71702
71703 23/2
71704 * Storage allocated to objects of a packed type should be minimized.
71705 See *note 13.2::(6).
71706
71707 24/3
71708 * The recommended level of support for the Pack aspect should be
71709 followed. See *note 13.2::(9).
71710
71711 25/2
71712 * For an array X, X'Address should point at the first component of
71713 the array rather than the array bounds. See *note 13.3::(14).
71714
71715 26/2
71716 * The recommended level of support for the Address attribute should
71717 be followed. See *note 13.3::(19).
71718
71719 26.1/3
71720 * For any tagged specific subtype S, S'Class'Alignment should equal
71721 S'Alignment. See *note 13.3::(28).
71722
71723 27/2
71724 * The recommended level of support for the Alignment attribute should
71725 be followed. See *note 13.3::(35).
71726
71727 28/2
71728 * The Size of an array object should not include its bounds. See
71729 *note 13.3::(41.1/2).
71730
71731 29/2
71732 * If the Size of a subtype allows for efficient independent
71733 addressability, then the Size of most objects of the subtype should
71734 equal the Size of the subtype. See *note 13.3::(52).
71735
71736 30/2
71737 * A Size clause on a composite subtype should not affect the internal
71738 layout of components. See *note 13.3::(53).
71739
71740 31/2
71741 * The recommended level of support for the Size attribute should be
71742 followed. See *note 13.3::(56).
71743
71744 32/2
71745 * The recommended level of support for the Component_Size attribute
71746 should be followed. See *note 13.3::(73).
71747
71748 33/2
71749 * The recommended level of support for
71750 enumeration_representation_clauses should be followed. See *note
71751 13.4::(10).
71752
71753 34/2
71754 * The recommended level of support for record_representation_clauses
71755 should be followed. See *note 13.5.1::(22).
71756
71757 35/2
71758 * If a component is represented using a pointer to the actual data of
71759 the component which is contiguous with the rest of the object, then
71760 the storage place attributes should reflect the place of the actual
71761 data. If a component is allocated discontiguously from the rest of
71762 the object, then a warning should be generated upon reference to
71763 one of its storage place attributes. See *note 13.5.2::(5).
71764
71765 36/2
71766 * The recommended level of support for the nondefault bit ordering
71767 should be followed. See *note 13.5.3::(8).
71768
71769 37/2
71770 * Type System.Address should be a private type. See *note
71771 13.7::(37).
71772
71773 38/2
71774 * Operations in System and its children should reflect the target
71775 environment; operations that do not make sense should raise
71776 Program_Error. See *note 13.7.1::(16).
71777
71778 39/2
71779 * Since the Size of an array object generally does not include its
71780 bounds, the bounds should not be part of the converted data in an
71781 instance of Unchecked_Conversion. See *note 13.9::(14/2).
71782
71783 40/2
71784 * There should not be unnecessary run-time checks on the result of an
71785 Unchecked_Conversion; the result should be returned by reference
71786 when possible. Restrictions on Unchecked_Conversions should be
71787 avoided. See *note 13.9::(15).
71788
71789 41/2
71790 * The recommended level of support for Unchecked_Conversion should be
71791 followed. See *note 13.9::(17).
71792
71793 42/2
71794 * Any cases in which heap storage is dynamically allocated other than
71795 as part of the evaluation of an allocator should be documented.
71796 See *note 13.11::(23).
71797
71798 43/2
71799 * A default storage pool for an access-to-constant type should not
71800 have overhead to support deallocation of individual objects. See
71801 *note 13.11::(24).
71802
71803 44/2
71804 * Usually, a storage pool for an access discriminant or access
71805 parameter should be created at the point of an allocator, and be
71806 reclaimed when the designated object becomes inaccessible. For
71807 other anonymous access types, the pool should be created at the
71808 point where the type is elaborated and need not support
71809 deallocation of individual objects. See *note 13.11::(25).
71810
71811 45/2
71812 * For a standard storage pool, an instance of Unchecked_Deallocation
71813 should actually reclaim the storage. See *note 13.11.2::(17).
71814
71815 45.1/3
71816 * A call on an instance of Unchecked_Deallocation with a nonnull
71817 access value should raise Program_Error if the actual access type
71818 of the instance is a type for which the Storage_Size has been
71819 specified to be zero or is defined by the language to be zero. See
71820 *note 13.11.2::(17.1/3).
71821
71822 46/2
71823 * If not specified, the value of Stream_Size for an elementary type
71824 should be the number of bits that corresponds to the minimum number
71825 of stream elements required by the first subtype of the type,
71826 rounded up to the nearest factor or multiple of the word size that
71827 is also a multiple of the stream element size. See *note
71828 13.13.2::(1.6/2).
71829
71830 47/2
71831 * The recommended level of support for the Stream_Size attribute
71832 should be followed. See *note 13.13.2::(1.8/2).
71833
71834 48/2
71835 * If an implementation provides additional named predefined integer
71836 types, then the names should end with "Integer". If an
71837 implementation provides additional named predefined floating point
71838 types, then the names should end with "Float". See *note
71839 A.1::(52).
71840
71841 49/2
71842 * Implementation-defined operations on Wide_Character, Wide_String,
71843 Wide_Wide_Character, and Wide_Wide_String should be child units of
71844 Wide_Characters or Wide_Wide_Characters. See *note A.3.1::(7/3).
71845
71846 49.1/3
71847 * The string returned by
71848 Wide_Characters.Handling.Character_Set_Version should include
71849 either "10646:" or "Unicode". See *note A.3.5::(62).
71850
71851 50/2
71852 * Bounded string objects should not be implemented by implicit
71853 pointers and dynamic allocation. See *note A.4.4::(106).
71854
71855 51/2
71856 * Strings.Hash should be good a hash function, returning a wide
71857 spread of values for different string values, and similar strings
71858 should rarely return the same value. See *note A.4.9::(12/2).
71859
71860 51.1/3
71861 * If an implementation supports other string encoding schemes, a
71862 child of Ada.Strings similar to UTF_Encoding should be defined.
71863 See *note A.4.11::(107/3).
71864
71865 52/2
71866 * Any storage associated with an object of type Generator of the
71867 random number packages should be reclaimed on exit from the scope
71868 of the object. See *note A.5.2::(46).
71869
71870 53/2
71871 * Each value of Initiator passed to Reset for the random number
71872 packages should initiate a distinct sequence of random numbers, or,
71873 if that is not possible, be at least a rapidly varying function of
71874 the initiator value. See *note A.5.2::(47).
71875
71876 54/2
71877 * Get_Immediate should be implemented with unbuffered input; input
71878 should be available immediately; line-editing should be disabled.
71879 See *note A.10.7::(23).
71880
71881 55/2
71882 * Package Directories.Information should be provided to retrieve
71883 other information about a file. See *note A.16::(124/2).
71884
71885 56/3
71886 * Directories.Start_Search and Directories.Search should raise
71887 Name_Error for malformed patterns. See *note A.16::(125).
71888
71889 57/2
71890 * Directories.Rename should be supported at least when both New_Name
71891 and Old_Name are simple names and New_Name does not identify an
71892 existing external file. See *note A.16::(126/2).
71893
71894 57.1/3
71895 * Directories.Hierarchical_File_Names should be provided for systems
71896 with hierarchical file naming, and should not be provided on other
71897 systems. See *note A.16.1::(36/3).
71898
71899 58/2
71900 * If the execution environment supports subprocesses, the current
71901 environment variables should be used to initialize the environment
71902 variables of a subprocess. See *note A.17::(32/2).
71903
71904 59/2
71905 * Changes to the environment variables made outside the control of
71906 Environment_Variables should be reflected immediately. See *note
71907 A.17::(33/2).
71908
71909 60/2
71910 * Containers.Hash_Type'Modulus should be at least 2**32.
71911 Containers.Count_Type'Last should be at least 2**31-1. See *note
71912 A.18.1::(8/2).
71913
71914 61/2
71915 * The worst-case time complexity of Element for Containers.Vector
71916 should be O(log N). See *note A.18.2::(256/2).
71917
71918 62/2
71919 * The worst-case time complexity of Append with Count = 1 when N is
71920 less than the capacity for Containers.Vector should be O(log N).
71921 See *note A.18.2::(257/2).
71922
71923 63/2
71924 * The worst-case time complexity of Prepend with Count = 1 and
71925 Delete_First with Count=1 for Containers.Vectors should be O(N log
71926 N). See *note A.18.2::(258/2).
71927
71928 64/2
71929 * The worst-case time complexity of a call on procedure Sort of an
71930 instance of Containers.Vectors.Generic_Sorting should be O(N**2),
71931 and the average time complexity should be better than O(N**2). See
71932 *note A.18.2::(259/2).
71933
71934 65/2
71935 * Containers.Vectors.Generic_Sorting.Sort and
71936 Containers.Vectors.Generic_Sorting.Merge should minimize copying of
71937 elements. See *note A.18.2::(260/2).
71938
71939 66/2
71940 * Containers.Vectors.Move should not copy elements, and should
71941 minimize copying of internal data structures. See *note
71942 A.18.2::(261/2).
71943
71944 67/2
71945 * If an exception is propagated from a vector operation, no storage
71946 should be lost, nor any elements removed from a vector unless
71947 specified by the operation. See *note A.18.2::(262/2).
71948
71949 68/2
71950 * The worst-case time complexity of Element, Insert with Count=1, and
71951 Delete with Count=1 for Containers.Doubly_Linked_Lists should be
71952 O(log N). See *note A.18.3::(160/2).
71953
71954 69/2
71955 * A call on procedure Sort of an instance of
71956 Containers.Doubly_Linked_Lists.Generic_Sorting should have an
71957 average time complexity better than O(N**2) and worst case no worse
71958 than O(N**2). See *note A.18.3::(161/2).
71959
71960 70/2
71961 * Containers.Doubly_Linked_Lists.Move should not copy elements, and
71962 should minimize copying of internal data structures. See *note
71963 A.18.3::(162/2).
71964
71965 71/2
71966 * If an exception is propagated from a list operation, no storage
71967 should be lost, nor any elements removed from a list unless
71968 specified by the operation. See *note A.18.3::(163/2).
71969
71970 72/2
71971 * Move for a map should not copy elements, and should minimize
71972 copying of internal data structures. See *note A.18.4::(83/2).
71973
71974 73/2
71975 * If an exception is propagated from a map operation, no storage
71976 should be lost, nor any elements removed from a map unless
71977 specified by the operation. See *note A.18.4::(84/2).
71978
71979 74/2
71980 * The average time complexity of Element, Insert, Include, Replace,
71981 Delete, Exclude and Find operations that take a key parameter for
71982 Containers.Hashed_Maps should be O(log N). The average time
71983 complexity of the subprograms of Containers.Hashed_Maps that take a
71984 cursor parameter should be O(1). The average time complexity of
71985 Containers.Hashed_Maps.Reserve_Capacity should be O(N). See *note
71986 A.18.5::(62/2).
71987
71988 75/2
71989 * The worst-case time complexity of Element, Insert, Include,
71990 Replace, Delete, Exclude and Find operations that take a key
71991 parameter for Containers.Ordered_Maps should be O((log N)**2) or
71992 better. The worst-case time complexity of the subprograms of
71993 Containers.Ordered_Maps that take a cursor parameter should be
71994 O(1). See *note A.18.6::(95/2).
71995
71996 76/2
71997 * Move for sets should not copy elements, and should minimize copying
71998 of internal data structures. See *note A.18.7::(104/2).
71999
72000 77/2
72001 * If an exception is propagated from a set operation, no storage
72002 should be lost, nor any elements removed from a set unless
72003 specified by the operation. See *note A.18.7::(105/2).
72004
72005 78/2
72006 * The average time complexity of the Insert, Include, Replace,
72007 Delete, Exclude and Find operations of Containers.Hashed_Sets that
72008 take an element parameter should be O(log N). The average time
72009 complexity of the subprograms of Containers.Hashed_Sets that take a
72010 cursor parameter should be O(1). The average time complexity of
72011 Containers.Hashed_Sets.Reserve_Capacity should be O(N). See *note
72012 A.18.8::(88/2).
72013
72014 79/2
72015 * The worst-case time complexity of the Insert, Include, Replace,
72016 Delete, Exclude and Find operations of Containers.Ordered_Sets that
72017 take an element parameter should be O((log N)**2). The worst-case
72018 time complexity of the subprograms of Containers.Ordered_Sets that
72019 take a cursor parameter should be O(1). See *note A.18.9::(116/2).
72020
72021 79.1/3
72022 * The worst-case time complexity of the Element, Parent, First_Child,
72023 Last_Child, Next_Sibling, Previous_Sibling, Insert_Child with
72024 Count=1, and Delete operations of Containers.Multiway_Trees should
72025 be O(log N). See *note A.18.10::(231/3).
72026
72027 79.2/3
72028 * Containers.Multiway_Trees.Move should not copy elements, and should
72029 minimize copying of internal data structures. See *note
72030 A.18.10::(232/3).
72031
72032 79.3/3
72033 * If an exception is propagated from a tree operation, no storage
72034 should be lost, nor any elements removed from a tree unless
72035 specified by the operation. See *note A.18.10::(233/3).
72036
72037 79.4/3
72038 * Containers.Indefinite_Holders.Move should not copy the element, and
72039 should minimize copying of internal data structures. See *note
72040 A.18.18::(73/3).
72041
72042 79.5/3
72043 * If an exception is propagated from a holder operation, no storage
72044 should be lost, nor should the element be removed from a holder
72045 container unless specified by the operation. See *note
72046 A.18.18::(74/3).
72047
72048 79.6/3
72049 * Bounded vector objects should be implemented without implicit
72050 pointers or dynamic allocation. See *note A.18.19::(16/3).
72051
72052 79.7/3
72053 * The implementation advice for procedure Move to minimize copying
72054 does not apply to bounded vectors. See *note A.18.19::(17/3).
72055
72056 79.8/3
72057 * Bounded list objects should be implemented without implicit
72058 pointers or dynamic allocation. See *note A.18.20::(19/3).
72059
72060 79.9/3
72061 * The implementation advice for procedure Move to minimize copying
72062 does not apply to bounded lists. See *note A.18.20::(20/3).
72063
72064 79.10/3
72065 * Bounded hashed map objects should be implemented without implicit
72066 pointers or dynamic allocation. See *note A.18.21::(21/3).
72067
72068 79.11/3
72069 * The implementation advice for procedure Move to minimize copying
72070 does not apply to bounded hashed maps. See *note A.18.21::(22/3).
72071
72072 79.12/3
72073 * Bounded ordered map objects should be implemented without implicit
72074 pointers or dynamic allocation. See *note A.18.22::(18/3).
72075
72076 79.13/3
72077 * The implementation advice for procedure Move to minimize copying
72078 does not apply to bounded ordered maps. See *note A.18.22::(19/3).
72079
72080 79.14/3
72081 * Bounded hashed set objects should be implemented without implicit
72082 pointers or dynamic allocation. See *note A.18.23::(20/3).
72083
72084 79.15/3
72085 * The implementation advice for procedure Move to minimize copying
72086 does not apply to bounded hashed sets. See *note A.18.23::(21/3).
72087
72088 79.16/3
72089 * Bounded ordered set objects should be implemented without implicit
72090 pointers or dynamic allocation. See *note A.18.24::(17/3).
72091
72092 79.17/3
72093 * The implementation advice for procedure Move to minimize copying
72094 does not apply to bounded ordered sets. See *note A.18.24::(18/3).
72095
72096 79.18/3
72097 * Bounded tree objects should be implemented without implicit
72098 pointers or dynamic allocation. See *note A.18.25::(19/3).
72099
72100 79.19/3
72101 * The implementation advice for procedure Move to minimize copying
72102 does not apply to bounded trees. See *note A.18.25::(20/3).
72103
72104 80/2
72105 * Containers.Generic_Array_Sort and
72106 Containers.Generic_Constrained_Array_Sort should have an average
72107 time complexity better than O(N**2) and worst case no worse than
72108 O(N**2). See *note A.18.26::(10/2).
72109
72110 81/2
72111 * Containers.Generic_Array_Sort and
72112 Containers.Generic_Constrained_Array_Sort should minimize copying
72113 of elements. See *note A.18.26::(11/2).
72114
72115 81.1/3
72116 * Containers.Generic_Sort should have an average time complexity
72117 better than O(N**2) and worst case no worse than O(N**2). See
72118 *note A.18.26::(12/3).
72119
72120 81.2/3
72121 * Containers.Generic_Sort should minimize calls to the generic formal
72122 Swap. See *note A.18.26::(13/3).
72123
72124 81.3/3
72125 * Bounded queue objects should be implemented without implicit
72126 pointers or dynamic allocation. See *note A.18.29::(13/3).
72127
72128 81.4/3
72129 * Bounded priority queue objects should be implemented without
72130 implicit pointers or dynamic allocation. See *note
72131 A.18.31::(14/3).
72132
72133 82/3
72134 * If Export is supported for a language, the main program should be
72135 able to be written in that language. Subprograms named "adainit"
72136 and "adafinal" should be provided for elaboration and finalization
72137 of the environment task. See *note B.1::(39/3).
72138
72139 83/3
72140 * Automatic elaboration of preelaborated packages should be provided
72141 when specifying the Export aspect as True is supported. See *note
72142 B.1::(40/3).
72143
72144 84/3
72145 * For each supported convention L other than Intrinsic, specifying
72146 the aspects Import and Export should be supported for objects of
72147 L-compatible types and for subprograms, and aspect Convention
72148 should be supported for L-eligible types and for subprograms. See
72149 *note B.1::(41/3).
72150
72151 85/2
72152 * If an interface to C, COBOL, or Fortran is provided, the
72153 corresponding package or packages described in *note Annex B::,
72154 "*note Annex B:: Interface to Other Languages" should also be
72155 provided. See *note B.2::(13/3).
72156
72157 86/2
72158 * The constants nul, wide_nul, char16_nul, and char32_nul in package
72159 Interfaces.C should have a representation of zero. See *note
72160 B.3::(62.5/3).
72161
72162 87/2
72163 * If C interfacing is supported, the interface correspondences
72164 between Ada and C should be supported. See *note B.3::(71).
72165
72166 88/2
72167 * If COBOL interfacing is supported, the interface correspondences
72168 between Ada and COBOL should be supported. See *note B.4::(98).
72169
72170 89/2
72171 * If Fortran interfacing is supported, the interface correspondences
72172 between Ada and Fortran should be supported. See *note B.5::(26).
72173
72174 90/2
72175 * The machine code or intrinsics support should allow access to all
72176 operations normally available to assembly language programmers for
72177 the target environment. See *note C.1::(3).
72178
72179 91/2
72180 * Interface to assembler should be supported; the default assembler
72181 should be associated with the convention identifier Assembler. See
72182 *note C.1::(4/3).
72183
72184 92/2
72185 * If an entity is exported to assembly language, then the
72186 implementation should allocate it at an addressable location even
72187 if not otherwise referenced from the Ada code. A call to a machine
72188 code or assembler subprogram should be treated as if it could read
72189 or update every object that is specified as exported. See *note
72190 C.1::(5).
72191
72192 93/2
72193 * Little or no overhead should be associated with calling intrinsic
72194 and machine-code subprograms. See *note C.1::(10).
72195
72196 94/2
72197 * Intrinsic subprograms should be provided to access any machine
72198 operations that provide special capabilities or efficiency not
72199 normally available. See *note C.1::(16).
72200
72201 95/2
72202 * If the Ceiling_Locking policy is not in effect and the target
72203 system allows for finer-grained control of interrupt blocking, a
72204 means for the application to specify which interrupts are to be
72205 blocked during protected actions should be provided. See *note
72206 C.3::(28/2).
72207
72208 96/2
72209 * Interrupt handlers should be called directly by the hardware. See
72210 *note C.3.1::(20).
72211
72212 97/2
72213 * Violations of any implementation-defined restrictions on interrupt
72214 handlers should be detected before run time. See *note
72215 C.3.1::(21).
72216
72217 98/2
72218 * If implementation-defined forms of interrupt handler procedures are
72219 supported, then for each such form of a handler, a type analogous
72220 to Parameterless_Handler should be specified in a child package of
72221 Interrupts, with the same operations as in the predefined package
72222 Interrupts. See *note C.3.2::(25).
72223
72224 99/2
72225 * Preelaborated packages should be implemented such that little or no
72226 code is executed at run time for the elaboration of entities. See
72227 *note C.4::(14).
72228
72229 100/2
72230 * If pragma Discard_Names applies to an entity, then the amount of
72231 storage used for storing names associated with that entity should
72232 be reduced. See *note C.5::(8).
72233
72234 101/2
72235 * A load or store of a volatile object whose size is a multiple of
72236 System.Storage_Unit and whose alignment is nonzero, should be
72237 implemented by accessing exactly the bits of the object and no
72238 others. See *note C.6::(22/2).
72239
72240 102/2
72241 * A load or store of an atomic object should be implemented by a
72242 single load or store instruction. See *note C.6::(23/2).
72243
72244 103/2
72245 * If the target domain requires deterministic memory use at run time,
72246 storage for task attributes should be pre-allocated statically and
72247 the number of attributes pre-allocated should be documented. See
72248 *note C.7.2::(30).
72249
72250 104/2
72251 * Finalization of task attributes and reclamation of associated
72252 storage should be performed as soon as possible after task
72253 termination. See *note C.7.2::(30.1/2).
72254
72255 105/2
72256 * Names that end with "_Locking" should be used for
72257 implementation-defined locking policies. See *note D.3::(17).
72258
72259 106/2
72260 * Names that end with "_Queuing" should be used for
72261 implementation-defined queuing policies. See *note D.4::(16).
72262
72263 107/2
72264 * The abort_statement should not require the task executing the
72265 statement to block. See *note D.6::(9).
72266
72267 108/2
72268 * On a multi-processor, the delay associated with aborting a task on
72269 another processor should be bounded. See *note D.6::(10).
72270
72271 109/2
72272 * When feasible, specified restrictions should be used to produce a
72273 more efficient implementation. See *note D.7::(21).
72274
72275 110/2
72276 * When appropriate, mechanisms to change the value of Tick should be
72277 provided. See *note D.8::(47).
72278
72279 111/2
72280 * Calendar.Clock and Real_Time.Clock should be transformations of the
72281 same time base. See *note D.8::(48).
72282
72283 112/2
72284 * The "best" time base which exists in the underlying system should
72285 be available to the application through Real_Time.Clock. See *note
72286 D.8::(49).
72287
72288 112.1/3
72289 * On a multiprocessor system, each processor should have a separate
72290 and disjoint ready queue. See *note D.13::(9).
72291
72292 113/2
72293 * When appropriate, implementations should provide configuration
72294 mechanisms to change the value of Execution_Time.CPU_Tick. See
72295 *note D.14::(29/2).
72296
72297 114/2
72298 * For a timing event, the handler should be executed directly by the
72299 real-time clock interrupt mechanism. See *note D.15::(25).
72300
72301 114.1/3
72302 * Each dispatching domain should have separate and disjoint ready
72303 queues. See *note D.16.1::(31).
72304
72305 115/2
72306 * The PCS should allow for multiple tasks to call the RPC-receiver.
72307 See *note E.5::(28).
72308
72309 116/2
72310 * The System.RPC.Write operation should raise Storage_Error if it
72311 runs out of space when writing an item. See *note E.5::(29).
72312
72313 117/2
72314 * If COBOL (respectively, C) is supported in the target environment,
72315 then interfacing to COBOL (respectively, C) should be supported as
72316 specified in *note Annex B::. See *note F::(7/3).
72317
72318 118/2
72319 * Packed decimal should be used as the internal representation for
72320 objects of subtype S when S'Machine_Radix = 10. See *note
72321 F.1::(2).
72322
72323 119/2
72324 * If Fortran (respectively, C) is supported in the target
72325 environment, then interfacing to Fortran (respectively, C) should
72326 be supported as specified in *note Annex B::. See *note G::(7/3).
72327
72328 120/2
72329 * Mixed real and complex operations (as well as pure-imaginary and
72330 complex operations) should not be performed by converting the real
72331 (resp. pure-imaginary) operand to complex. See *note G.1.1::(56).
72332
72333 121/3
72334 * If Real'Signed_Zeros is True for Numerics.Generic_Complex_Types, a
72335 rational treatment of the signs of zero results and result
72336 components should be provided. See *note G.1.1::(58).
72337
72338 122/3
72339 * If Complex_Types.Real'Signed_Zeros is True for
72340 Numerics.Generic_Complex_Elementary_Functions, a rational treatment
72341 of the signs of zero results and result components should be
72342 provided. See *note G.1.2::(49).
72343
72344 123/2
72345 * For elementary functions, the forward trigonometric functions
72346 without a Cycle parameter should not be implemented by calling the
72347 corresponding version with a Cycle parameter. Log without a Base
72348 parameter should not be implemented by calling Log with a Base
72349 parameter. See *note G.2.4::(19).
72350
72351 124/2
72352 * For complex arithmetic, the Compose_From_Polar function without a
72353 Cycle parameter should not be implemented by calling
72354 Compose_From_Polar with a Cycle parameter. See *note G.2.6::(15).
72355
72356 125/2
72357 * Solve and Inverse for Numerics.Generic_Real_Arrays should be
72358 implemented using established techniques such as LU decomposition
72359 and the result should be refined by an iteration on the residuals.
72360 See *note G.3.1::(88/3).
72361
72362 126/2
72363 * The equality operator should be used to test that a matrix in
72364 Numerics.Generic_Real_Arrays is symmetric. See *note
72365 G.3.1::(90/2).
72366
72367 126.1/3
72368 * An implementation should minimize the circumstances under which the
72369 algorithm used for Numerics.Generic_Real_Arrays.Eigenvalues and
72370 Numerics.Generic_Real_Arrays.Eigensystem fails to converge. See
72371 *note G.3.1::(91/3).
72372
72373 127/2
72374 * Solve and Inverse for Numerics.Generic_Complex_Arrays should be
72375 implemented using established techniques and the result should be
72376 refined by an iteration on the residuals. See *note
72377 G.3.2::(158/3).
72378
72379 128/2
72380 * The equality and negation operators should be used to test that a
72381 matrix is Hermitian. See *note G.3.2::(160/2).
72382
72383 128.1/3
72384 * An implementation should minimize the circumstances under which the
72385 algorithm used for Numerics.Generic_Complex_Arrays.Eigenvalues and
72386 Numerics.Generic_Complex_Arrays.Eigensystem fails to converge. See
72387 *note G.3.2::(160.1/3).
72388
72389 129/2
72390 * Mixed real and complex operations should not be performed by
72391 converting the real operand to complex. See *note G.3.2::(161/2).
72392
72393 130/2
72394 * The information produced by pragma Reviewable should be provided in
72395 both a human-readable and machine-readable form, and the latter
72396 form should be documented. See *note H.3.1::(19).
72397
72398 131/2
72399 * Object code listings should be provided both in a symbolic format
72400 and in a numeric format. See *note H.3.1::(20).
72401
72402 132/3
72403 * If the partition elaboration policy is Sequential and the
72404 Environment task becomes permanently blocked during elaboration,
72405 then the partition should be immediately terminated. See *note
72406 H.6::(15/3).
72407
72408 \1f
72409 File: arm2012.info, Node: Annex N, Next: Annex P, Prev: Annex M, Up: Top
72410
72411 Annex N Glossary
72412 ****************
72413
72414 1/2
72415 This Annex contains informal descriptions of some of the terms used in
72416 this International Standard. The index provides references to more
72417 formal definitions of all of the terms used in this International
72418 Standard.
72419
72420 1.1/2
72421 Abstract type. An abstract type is a tagged type intended for use as an
72422 ancestor of other types, but which is not allowed to have objects of its
72423 own.
72424
72425 2
72426 Access type. An access type has values that designate aliased objects.
72427 Access types correspond to "pointer types" or "reference types" in some
72428 other languages.
72429
72430 3
72431 Aliased. An aliased view of an object is one that can be designated by
72432 an access value. Objects allocated by allocators are aliased. Objects
72433 can also be explicitly declared as aliased with the reserved word
72434 aliased. The Access attribute can be used to create an access value
72435 designating an aliased object.
72436
72437 3.1/2
72438 Ancestor. An ancestor of a type is the type itself or, in the case of a
72439 type derived from other types, its parent type or one of its progenitor
72440 types or one of their ancestors. Note that ancestor and descendant are
72441 inverse relationships.
72442
72443 4
72444 Array type. An array type is a composite type whose components are all
72445 of the same type. Components are selected by indexing.
72446
72447 4.1/3
72448 Aspect. An aspect is a specifiable property of an entity. An aspect
72449 may be specified by an aspect_specification on the declaration of the
72450 entity. Some aspects may be queried via attributes.
72451
72452 4.2/3
72453 Assertion. An assertion is a boolean expression that appears in any of
72454 the following: a pragma Assert, a predicate, a precondition, a
72455 postcondition, an invariant, a constraint, or a null exclusion. An
72456 assertion is expected to be True at run time at certain specified
72457 places.
72458
72459 4.3/2
72460 Category (of types). A category of types is a set of types with one or
72461 more common properties, such as primitive operations. A category of
72462 types that is closed under derivation is also known as a class.
72463
72464 5
72465 Character type. A character type is an enumeration type whose values
72466 include characters.
72467
72468 6/2
72469 Class (of types). A class is a set of types that is closed under
72470 derivation, which means that if a given type is in the class, then all
72471 types derived from that type are also in the class. The set of types of
72472 a class share common properties, such as their primitive operations.
72473
72474 7
72475 Compilation unit. The text of a program can be submitted to the
72476 compiler in one or more compilations. Each compilation is a succession
72477 of compilation_units. A compilation_unit contains either the
72478 declaration, the body, or a renaming of a program unit.
72479
72480 8/2
72481 Composite type. A composite type may have components.
72482
72483 9
72484 Construct. A construct is a piece of text (explicit or implicit) that
72485 is an instance of a syntactic category defined under "Syntax".
72486
72487 9.1/3
72488 Container. A container is an object that contain other objects all of
72489 the same type, which could be class-wide. Several predefined container
72490 types are provided by the children of package Ada.Containers (see *note
72491 A.18.1::).
72492
72493 10
72494 Controlled type. A controlled type supports user-defined assignment and
72495 finalization. Objects are always finalized before being destroyed.
72496
72497 11
72498 Declaration. A declaration is a language construct that associates a
72499 name with (a view of) an entity. A declaration may appear explicitly in
72500 the program text (an explicit declaration), or may be supposed to occur
72501 at a given place in the text as a consequence of the semantics of
72502 another construct (an implicit declaration).
72503
72504 12/2
72505 This paragraph was deleted.
72506
72507 13/2
72508 Derived type. A derived type is a type defined in terms of one or more
72509 other types given in a derived type definition. The first of those
72510 types is the parent type of the derived type and any others are
72511 progenitor types. Each class containing the parent type or a progenitor
72512 type also contains the derived type. The derived type inherits
72513 properties such as components and primitive operations from the parent
72514 and progenitors. A type together with the types derived from it
72515 (directly or indirectly) form a derivation class.
72516
72517 13.1/2
72518 Descendant. A type is a descendant of itself, its parent and progenitor
72519 types, and their ancestors. Note that descendant and ancestor are
72520 inverse relationships.
72521
72522 14
72523 Discrete type. A discrete type is either an integer type or an
72524 enumeration type. Discrete types may be used, for example, in
72525 case_statements and as array indices.
72526
72527 15/2
72528 Discriminant. A discriminant is a parameter for a composite type. It
72529 can control, for example, the bounds of a component of the type if the
72530 component is an array. A discriminant for a task type can be used to
72531 pass data to a task of the type upon creation.
72532
72533 15.1/2
72534 Elaboration. The process by which a declaration achieves its run-time
72535 effect is called elaboration. Elaboration is one of the forms of
72536 execution.
72537
72538 16
72539 Elementary type. An elementary type does not have components.
72540
72541 17
72542 Enumeration type. An enumeration type is defined by an enumeration of
72543 its values, which may be named by identifiers or character literals.
72544
72545 17.1/2
72546 Evaluation. The process by which an expression achieves its run-time
72547 effect is called evaluation. Evaluation is one of the forms of
72548 execution.
72549
72550 18
72551 Exception. An exception represents a kind of exceptional situation; an
72552 occurrence of such a situation (at run time) is called an exception
72553 occurrence. To raise an exception is to abandon normal program
72554 execution so as to draw attention to the fact that the corresponding
72555 situation has arisen. Performing some actions in response to the
72556 arising of an exception is called handling the exception.
72557
72558 19
72559 Execution. The process by which a construct achieves its run-time
72560 effect is called execution. Execution of a declaration is also called
72561 elaboration. Execution of an expression is also called evaluation.
72562
72563 19.1/2
72564 Function. A function is a form of subprogram that returns a result and
72565 can be called as part of an expression.
72566
72567 20
72568 Generic unit. A generic unit is a template for a (nongeneric) program
72569 unit; the template can be parameterized by objects, types, subprograms,
72570 and packages. An instance of a generic unit is created by a
72571 generic_instantiation. The rules of the language are enforced when a
72572 generic unit is compiled, using a generic contract model; additional
72573 checks are performed upon instantiation to verify the contract is met.
72574 That is, the declaration of a generic unit represents a contract between
72575 the body of the generic and instances of the generic. Generic units can
72576 be used to perform the role that macros sometimes play in other
72577 languages.
72578
72579 20.1/2
72580 Incomplete type. An incomplete type gives a view of a type that reveals
72581 only some of its properties. The remaining properties are provided by
72582 the full view given elsewhere. Incomplete types can be used for
72583 defining recursive data structures.
72584
72585 20.2/3
72586 Indexable container type. An indexable container type is one that has
72587 user-defined behavior for indexing, via the Constant_Indexing or
72588 Variable_Indexing aspects.
72589
72590 21
72591 Integer type. Integer types comprise the signed integer types and the
72592 modular types. A signed integer type has a base range that includes
72593 both positive and negative numbers, and has operations that may raise an
72594 exception when the result is outside the base range. A modular type has
72595 a base range whose lower bound is zero, and has operations with
72596 "wraparound" semantics. Modular types subsume what are called "unsigned
72597 types" in some other languages.
72598
72599 21.1/2
72600 Interface type. An interface type is a form of abstract tagged type
72601 which has no components or concrete operations except possibly null
72602 procedures. Interface types are used for composing other interfaces and
72603 tagged types and thereby provide multiple inheritance. Only an
72604 interface type can be used as a progenitor of another type.
72605
72606 21.2/3
72607 Invariant. A invariant is an assertion that is expected to be True for
72608 all objects of a given private type when viewed from outside the
72609 defining package.
72610
72611 21.3/3
72612 Iterable container type. An iterable container type is one that has
72613 user-defined behavior for iteration, via the Default_Iterator and
72614 Iterator_Element aspects.
72615
72616 21.4/3
72617 Iterator. An iterator is a construct that is used to loop over the
72618 elements of an array or container. Iterators may be user defined, and
72619 may perform arbitrary computations to access elements from a container.
72620
72621 22
72622 Library unit. A library unit is a separately compiled program unit, and
72623 is always a package, subprogram, or generic unit. Library units may
72624 have other (logically nested) library units as children, and may have
72625 other program units physically nested within them. A root library unit,
72626 together with its children and grandchildren and so on, form a
72627 subsystem.
72628
72629 23/2
72630 Limited type. A limited type is a type for which copying (such as in an
72631 assignment_statement) is not allowed. A nonlimited type is a type for
72632 which copying is allowed.
72633
72634 24
72635 Object. An object is either a constant or a variable. An object
72636 contains a value. An object is created by an object_declaration or by
72637 an allocator. A formal parameter is (a view of) an object. A
72638 subcomponent of an object is an object.
72639
72640 24.1/2
72641 Overriding operation. An overriding operation is one that replaces an
72642 inherited primitive operation. Operations may be marked explicitly as
72643 overriding or not overriding.
72644
72645 25
72646 Package. Packages are program units that allow the specification of
72647 groups of logically related entities. Typically, a package contains the
72648 declaration of a type (often a private type or private extension) along
72649 with the declarations of primitive subprograms of the type, which can be
72650 called from outside the package, while their inner workings remain
72651 hidden from outside users.
72652
72653 25.1/2
72654 Parent. The parent of a derived type is the first type given in the
72655 definition of the derived type. The parent can be almost any kind of
72656 type, including an interface type.
72657
72658 26
72659 Partition. A partition is a part of a program. Each partition consists
72660 of a set of library units. Each partition may run in a separate address
72661 space, possibly on a separate computer. A program may contain just one
72662 partition. A distributed program typically contains multiple
72663 partitions, which can execute concurrently.
72664
72665 26.1/3
72666 Postcondition. A postcondition is an assertion that is expected to be
72667 True when a given subprogram returns normally.
72668
72669 27
72670 Pragma. A pragma is a compiler directive. There are language-defined
72671 pragmas that give instructions for optimization, listing control, etc.
72672 An implementation may support additional (implementation-defined)
72673 pragmas.
72674
72675 27.1/3
72676 Precondition. A precondition is an assertion that is expected to be
72677 True when a given subprogram is called.
72678
72679 27.2/3
72680 Predicate. A predicate is an assertion that is expected to be True for
72681 all objects of a given subtype.
72682
72683 28
72684 Primitive operations. The primitive operations of a type are the
72685 operations (such as subprograms) declared together with the type
72686 declaration. They are inherited by other types in the same class of
72687 types. For a tagged type, the primitive subprograms are dispatching
72688 subprograms, providing run-time polymorphism. A dispatching subprogram
72689 may be called with statically tagged operands, in which case the
72690 subprogram body invoked is determined at compile time. Alternatively, a
72691 dispatching subprogram may be called using a dispatching call, in which
72692 case the subprogram body invoked is determined at run time.
72693
72694 29/2
72695 Private extension. A private extension is a type that extends another
72696 type, with the additional properties hidden from its clients.
72697
72698 30/2
72699 Private type. A private type gives a view of a type that reveals only
72700 some of its properties. The remaining properties are provided by the
72701 full view given elsewhere. Private types can be used for defining
72702 abstractions that hide unnecessary details from their clients.
72703
72704 30.1/2
72705 Procedure. A procedure is a form of subprogram that does not return a
72706 result and can only be called by a statement.
72707
72708 30.2/2
72709 Progenitor. A progenitor of a derived type is one of the types given in
72710 the definition of the derived type other than the first. A progenitor
72711 is always an interface type. Interfaces, tasks, and protected types may
72712 also have progenitors.
72713
72714 31
72715 Program. A program is a set of partitions, each of which may execute in
72716 a separate address space, possibly on a separate computer. A partition
72717 consists of a set of library units.
72718
72719 32
72720 Program unit. A program unit is either a package, a task unit, a
72721 protected unit, a protected entry, a generic unit, or an explicitly
72722 declared subprogram other than an enumeration literal. Certain kinds of
72723 program units can be separately compiled. Alternatively, they can
72724 appear physically nested within other program units.
72725
72726 33/2
72727 Protected type. A protected type is a composite type whose components
72728 are accessible only through one of its protected operations which
72729 synchronize concurrent access by multiple tasks.
72730
72731 34
72732 Real type. A real type has values that are approximations of the real
72733 numbers. Floating point and fixed point types are real types.
72734
72735 35
72736 Record extension. A record extension is a type that extends another
72737 type by adding additional components.
72738
72739 36
72740 Record type. A record type is a composite type consisting of zero or
72741 more named components, possibly of different types.
72742
72743 36.1/3
72744 Reference type. A reference type is one that has user-defined behavior
72745 for ".all", defined by the Implicit_Dereference aspect.
72746
72747 36.2/2
72748 Renaming. A renaming_declaration is a declaration that does not define
72749 a new entity, but instead defines a view of an existing entity.
72750
72751 37
72752 Scalar type. A scalar type is either a discrete type or a real type.
72753
72754 37.1/3
72755 Storage pool. Each access-to-object type has an associated storage pool
72756 object. The storage for an object created by an allocator comes from
72757 the storage pool of the type of the allocator. Some storage pools may
72758 be partitioned into subpools in order to support finer-grained storage
72759 management.
72760
72761 37.2/3
72762 Stream. A stream is a sequence of elements that can be used, along with
72763 the stream-oriented attributes, to support marshalling and unmarshalling
72764 of values of most types.
72765
72766 37.3/2
72767 Subprogram. A subprogram is a section of a program that can be executed
72768 in various contexts. It is invoked by a subprogram call that may
72769 qualify the effect of the subprogram through the passing of parameters.
72770 There are two forms of subprograms: functions, which return values, and
72771 procedures, which do not.
72772
72773 38/3
72774 Subtype. A subtype is a type together with optional constraints, null
72775 exclusions, and predicates, which constrain the values of the subtype to
72776 satisfy certain conditions. The values of a subtype are a subset of the
72777 values of its type.
72778
72779 38.1/2
72780 Synchronized. A synchronized entity is one that will work safely with
72781 multiple tasks at one time. A synchronized interface can be an ancestor
72782 of a task or a protected type. Such a task or protected type is called
72783 a synchronized tagged type.
72784
72785 39
72786 Tagged type. The objects of a tagged type have a run-time type tag,
72787 which indicates the specific type with which the object was originally
72788 created. An operand of a class-wide tagged type can be used in a
72789 dispatching call; the tag indicates which subprogram body to invoke.
72790 Nondispatching calls, in which the subprogram body to invoke is
72791 determined at compile time, are also allowed. Tagged types may be
72792 extended with additional components.
72793
72794 40/2
72795 Task type. A task type is a composite type used to represent active
72796 entities which execute concurrently and which can communicate via queued
72797 task entries. The top-level task of a partition is called the
72798 environment task.
72799
72800 41/2
72801 Type. Each object has a type. A type has an associated set of values,
72802 and a set of primitive operations which implement the fundamental
72803 aspects of its semantics. Types are grouped into categories. Most
72804 language-defined categories of types are also classes of types.
72805
72806 42/2
72807 View. A view of an entity reveals some or all of the properties of the
72808 entity. A single entity may have multiple views.
72809
72810 \1f
72811 File: arm2012.info, Node: Annex P, Next: Annex Q, Prev: Annex N, Up: Top
72812
72813 Annex P Syntax Summary
72814 **********************
72815
72816 This Annex summarizes the complete syntax of the language. See *note
72817 1.1.4:: for a description of the notation used.
72818
72819 *note 2.3:::
72820 identifier ::=
72821 identifier_start {identifier_start | identifier_extend}
72822
72823 *note 2.3:::
72824 identifier_start ::=
72825 letter_uppercase
72826 | letter_lowercase
72827 | letter_titlecase
72828 | letter_modifier
72829 | letter_other
72830 | number_letter
72831
72832 *note 2.3:::
72833 identifier_extend ::=
72834 mark_non_spacing
72835 | mark_spacing_combining
72836 | number_decimal
72837 | punctuation_connector
72838
72839 *note 2.4:::
72840 numeric_literal ::= decimal_literal | based_literal
72841
72842 *note 2.4.1:::
72843 decimal_literal ::= numeral [.numeral] [exponent]
72844
72845 *note 2.4.1:::
72846 numeral ::= digit {[underline] digit}
72847
72848 *note 2.4.1:::
72849 exponent ::= E [+] numeral | E - numeral
72850
72851 *note 2.4.1:::
72852 digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
72853
72854 *note 2.4.2:::
72855 based_literal ::=
72856 base # based_numeral [.based_numeral] # [exponent]
72857
72858 *note 2.4.2:::
72859 base ::= numeral
72860
72861 *note 2.4.2:::
72862 based_numeral ::=
72863 extended_digit {[underline] extended_digit}
72864
72865 *note 2.4.2:::
72866 extended_digit ::= digit | A | B | C | D | E | F
72867
72868 *note 2.5:::
72869 character_literal ::= 'graphic_character'
72870
72871 *note 2.6:::
72872 string_literal ::= "{string_element}"
72873
72874 *note 2.6:::
72875 string_element ::= "" | non_quotation_mark_graphic_character
72876
72877 *note 2.7:::
72878 comment ::= --{non_end_of_line_character}
72879
72880 *note 2.8:::
72881 pragma ::=
72882 pragma identifier [(pragma_argument_association {,
72883 pragma_argument_association})];
72884
72885 *note 2.8:::
72886 pragma_argument_association ::=
72887 [pragma_argument_identifier =>] name
72888 | [pragma_argument_identifier =>] expression
72889 | pragma_argument_aspect_mark => name
72890 | pragma_argument_aspect_mark => expression
72891
72892 *note 3.1:::
72893 basic_declaration ::=
72894 type_declaration | subtype_declaration
72895 | object_declaration | number_declaration
72896 | subprogram_declaration | abstract_subprogram_declaration
72897 | null_procedure_declaration | expression_function_declaration
72898 | package_declaration | renaming_declaration
72899 | exception_declaration | generic_declaration
72900 | generic_instantiation
72901
72902 *note 3.1:::
72903 defining_identifier ::= identifier
72904
72905 *note 3.2.1:::
72906 type_declaration ::= full_type_declaration
72907 | incomplete_type_declaration
72908 | private_type_declaration
72909 | private_extension_declaration
72910
72911 *note 3.2.1:::
72912 full_type_declaration ::=
72913 type defining_identifier [known_discriminant_part] is
72914 type_definition
72915 [aspect_specification];
72916 | task_type_declaration
72917 | protected_type_declaration
72918
72919 *note 3.2.1:::
72920 type_definition ::=
72921 enumeration_type_definition | integer_type_definition
72922 | real_type_definition | array_type_definition
72923 | record_type_definition | access_type_definition
72924 | derived_type_definition | interface_type_definition
72925
72926 *note 3.2.2:::
72927 subtype_declaration ::=
72928 subtype defining_identifier is subtype_indication
72929 [aspect_specification];
72930
72931 *note 3.2.2:::
72932 subtype_indication ::= [null_exclusion] subtype_mark [constraint]
72933
72934 *note 3.2.2:::
72935 subtype_mark ::= subtype_name
72936
72937 *note 3.2.2:::
72938 constraint ::= scalar_constraint | composite_constraint
72939
72940 *note 3.2.2:::
72941 scalar_constraint ::=
72942 range_constraint | digits_constraint | delta_constraint
72943
72944 *note 3.2.2:::
72945 composite_constraint ::=
72946 index_constraint | discriminant_constraint
72947
72948 *note 3.3.1:::
72949 object_declaration ::=
72950 defining_identifier_list : [aliased] [constant]
72951 subtype_indication [:= expression]
72952 [aspect_specification];
72953 | defining_identifier_list : [aliased] [constant]
72954 access_definition [:= expression]
72955 [aspect_specification];
72956 | defining_identifier_list : [aliased] [constant]
72957 array_type_definition [:= expression]
72958 [aspect_specification];
72959 | single_task_declaration
72960 | single_protected_declaration
72961
72962 *note 3.3.1:::
72963 defining_identifier_list ::=
72964 defining_identifier {, defining_identifier}
72965
72966 *note 3.3.2:::
72967 number_declaration ::=
72968 defining_identifier_list : constant := static_expression;
72969
72970 *note 3.4:::
72971 derived_type_definition ::=
72972 [abstract] [limited] new parent_subtype_indication [[and
72973 interface_list] record_extension_part]
72974
72975 *note 3.5:::
72976 range_constraint ::= range range
72977
72978 *note 3.5:::
72979 range ::= range_attribute_reference
72980 | simple_expression .. simple_expression
72981
72982 *note 3.5.1:::
72983 enumeration_type_definition ::=
72984 (enumeration_literal_specification {,
72985 enumeration_literal_specification})
72986
72987 *note 3.5.1:::
72988 enumeration_literal_specification ::= defining_identifier |
72989 defining_character_literal
72990
72991 *note 3.5.1:::
72992 defining_character_literal ::= character_literal
72993
72994 *note 3.5.4:::
72995 integer_type_definition ::= signed_integer_type_definition |
72996 modular_type_definition
72997
72998 *note 3.5.4:::
72999 signed_integer_type_definition ::= range static_
73000 simple_expression .. static_simple_expression
73001
73002 *note 3.5.4:::
73003 modular_type_definition ::= mod static_expression
73004
73005 *note 3.5.6:::
73006 real_type_definition ::=
73007 floating_point_definition | fixed_point_definition
73008
73009 *note 3.5.7:::
73010 floating_point_definition ::=
73011 digits static_expression [real_range_specification]
73012
73013 *note 3.5.7:::
73014 real_range_specification ::=
73015 range static_simple_expression .. static_simple_expression
73016
73017 *note 3.5.9:::
73018 fixed_point_definition ::= ordinary_fixed_point_definition |
73019 decimal_fixed_point_definition
73020
73021 *note 3.5.9:::
73022 ordinary_fixed_point_definition ::=
73023 delta static_expression real_range_specification
73024
73025 *note 3.5.9:::
73026 decimal_fixed_point_definition ::=
73027 delta static_expression digits static_expression [
73028 real_range_specification]
73029
73030 *note 3.5.9:::
73031 digits_constraint ::=
73032 digits static_expression [range_constraint]
73033
73034 *note 3.6:::
73035 array_type_definition ::=
73036 unconstrained_array_definition | constrained_array_definition
73037
73038 *note 3.6:::
73039 unconstrained_array_definition ::=
73040 array(index_subtype_definition {, index_subtype_definition}) of
73041 component_definition
73042
73043 *note 3.6:::
73044 index_subtype_definition ::= subtype_mark range <>
73045
73046 *note 3.6:::
73047 constrained_array_definition ::=
73048 array (discrete_subtype_definition {,
73049 discrete_subtype_definition}) of component_definition
73050
73051 *note 3.6:::
73052 discrete_subtype_definition ::= discrete_subtype_indication | range
73053
73054 *note 3.6:::
73055 component_definition ::=
73056 [aliased] subtype_indication
73057 | [aliased] access_definition
73058
73059 *note 3.6.1:::
73060 index_constraint ::= (discrete_range {, discrete_range})
73061
73062 *note 3.6.1:::
73063 discrete_range ::= discrete_subtype_indication | range
73064
73065 *note 3.7:::
73066 discriminant_part ::= unknown_discriminant_part |
73067 known_discriminant_part
73068
73069 *note 3.7:::
73070 unknown_discriminant_part ::= (<>)
73071
73072 *note 3.7:::
73073 known_discriminant_part ::=
73074 (discriminant_specification {; discriminant_specification})
73075
73076 *note 3.7:::
73077 discriminant_specification ::=
73078 defining_identifier_list : [null_exclusion] subtype_mark [:=
73079 default_expression]
73080 | defining_identifier_list : access_definition [:=
73081 default_expression]
73082
73083 *note 3.7:::
73084 default_expression ::= expression
73085
73086 *note 3.7.1:::
73087 discriminant_constraint ::=
73088 (discriminant_association {, discriminant_association})
73089
73090 *note 3.7.1:::
73091 discriminant_association ::=
73092 [discriminant_selector_name {| discriminant_selector_name} =>]
73093 expression
73094
73095 *note 3.8:::
73096 record_type_definition ::= [[abstract] tagged] [limited]
73097 record_definition
73098
73099 *note 3.8:::
73100 record_definition ::=
73101 record
73102 component_list
73103 end record
73104 | null record
73105
73106 *note 3.8:::
73107 component_list ::=
73108 component_item {component_item}
73109 | {component_item} variant_part
73110 | null;
73111
73112 *note 3.8:::
73113 component_item ::= component_declaration | aspect_clause
73114
73115 *note 3.8:::
73116 component_declaration ::=
73117 defining_identifier_list : component_definition [:=
73118 default_expression]
73119 [aspect_specification];
73120
73121 *note 3.8.1:::
73122 variant_part ::=
73123 case discriminant_direct_name is
73124 variant
73125 {variant}
73126 end case;
73127
73128 *note 3.8.1:::
73129 variant ::=
73130 when discrete_choice_list =>
73131 component_list
73132
73133 *note 3.8.1:::
73134 discrete_choice_list ::= discrete_choice {| discrete_choice}
73135
73136 *note 3.8.1:::
73137 discrete_choice ::= choice_expression | discrete_
73138 subtype_indication | range | others
73139
73140 *note 3.9.1:::
73141 record_extension_part ::= with record_definition
73142
73143 *note 3.9.3:::
73144 abstract_subprogram_declaration ::=
73145 [overriding_indicator]
73146 subprogram_specification is abstract
73147 [aspect_specification];
73148
73149 *note 3.9.4:::
73150 interface_type_definition ::=
73151 [limited | task | protected | synchronized] interface [and
73152 interface_list]
73153
73154 *note 3.9.4:::
73155 interface_list ::= interface_subtype_mark {and interface_
73156 subtype_mark}
73157
73158 *note 3.10:::
73159 access_type_definition ::=
73160 [null_exclusion] access_to_object_definition
73161 | [null_exclusion] access_to_subprogram_definition
73162
73163 *note 3.10:::
73164 access_to_object_definition ::=
73165 access [general_access_modifier] subtype_indication
73166
73167 *note 3.10:::
73168 general_access_modifier ::= all | constant
73169
73170 *note 3.10:::
73171 access_to_subprogram_definition ::=
73172 access [protected] procedure parameter_profile
73173 | access [protected] function parameter_and_result_profile
73174
73175 *note 3.10:::
73176 null_exclusion ::= not null
73177
73178 *note 3.10:::
73179 access_definition ::=
73180 [null_exclusion] access [constant] subtype_mark
73181 | [null_exclusion] access [protected] procedure parameter_profile
73182 | [null_exclusion] access [protected] function
73183 parameter_and_result_profile
73184
73185 *note 3.10.1:::
73186 incomplete_type_declaration ::= type defining_identifier [
73187 discriminant_part] [is tagged];
73188
73189 *note 3.11:::
73190 declarative_part ::= {declarative_item}
73191
73192 *note 3.11:::
73193 declarative_item ::=
73194 basic_declarative_item | body
73195
73196 *note 3.11:::
73197 basic_declarative_item ::=
73198 basic_declaration | aspect_clause | use_clause
73199
73200 *note 3.11:::
73201 body ::= proper_body | body_stub
73202
73203 *note 3.11:::
73204 proper_body ::=
73205 subprogram_body | package_body | task_body | protected_body
73206
73207 *note 4.1:::
73208 name ::=
73209 direct_name | explicit_dereference
73210 | indexed_component | slice
73211 | selected_component | attribute_reference
73212 | type_conversion | function_call
73213 | character_literal | qualified_expression
73214 | generalized_reference | generalized_indexing
73215
73216 *note 4.1:::
73217 direct_name ::= identifier | operator_symbol
73218
73219 *note 4.1:::
73220 prefix ::= name | implicit_dereference
73221
73222 *note 4.1:::
73223 explicit_dereference ::= name.all
73224
73225 *note 4.1:::
73226 implicit_dereference ::= name
73227
73228 *note 4.1.1:::
73229 indexed_component ::= prefix(expression {, expression})
73230
73231 *note 4.1.2:::
73232 slice ::= prefix(discrete_range)
73233
73234 *note 4.1.3:::
73235 selected_component ::= prefix . selector_name
73236
73237 *note 4.1.3:::
73238 selector_name ::= identifier | character_literal | operator_symbol
73239
73240 *note 4.1.4:::
73241 attribute_reference ::= prefix'attribute_designator
73242
73243 *note 4.1.4:::
73244 attribute_designator ::=
73245 identifier[(static_expression)]
73246 | Access | Delta | Digits | Mod
73247
73248 *note 4.1.4:::
73249 range_attribute_reference ::= prefix'range_attribute_designator
73250
73251 *note 4.1.4:::
73252 range_attribute_designator ::= Range[(static_expression)]
73253
73254 *note 4.1.5:::
73255 generalized_reference ::= reference_object_name
73256
73257 *note 4.1.6:::
73258 generalized_indexing ::= indexable_container_object_prefix
73259 actual_parameter_part
73260
73261 *note 4.3:::
73262 aggregate ::= record_aggregate | extension_aggregate |
73263 array_aggregate
73264
73265 *note 4.3.1:::
73266 record_aggregate ::= (record_component_association_list)
73267
73268 *note 4.3.1:::
73269 record_component_association_list ::=
73270 record_component_association {, record_component_association}
73271 | null record
73272
73273 *note 4.3.1:::
73274 record_component_association ::=
73275 [component_choice_list =>] expression
73276 | component_choice_list => <>
73277
73278 *note 4.3.1:::
73279 component_choice_list ::=
73280 component_selector_name {| component_selector_name}
73281 | others
73282
73283 *note 4.3.2:::
73284 extension_aggregate ::=
73285 (ancestor_part with record_component_association_list)
73286
73287 *note 4.3.2:::
73288 ancestor_part ::= expression | subtype_mark
73289
73290 *note 4.3.3:::
73291 array_aggregate ::=
73292 positional_array_aggregate | named_array_aggregate
73293
73294 *note 4.3.3:::
73295 positional_array_aggregate ::=
73296 (expression, expression {, expression})
73297 | (expression {, expression}, others => expression)
73298 | (expression {, expression}, others => <>)
73299
73300 *note 4.3.3:::
73301 named_array_aggregate ::=
73302 (array_component_association {, array_component_association})
73303
73304 *note 4.3.3:::
73305 array_component_association ::=
73306 discrete_choice_list => expression
73307 | discrete_choice_list => <>
73308
73309 *note 4.4:::
73310 expression ::=
73311 relation {and relation} | relation {and then relation}
73312 | relation {or relation} | relation {or else relation}
73313 | relation {xor relation}
73314
73315 *note 4.4:::
73316 choice_expression ::=
73317 choice_relation {and choice_relation}
73318 | choice_relation {or choice_relation}
73319 | choice_relation {xor choice_relation}
73320 | choice_relation {and then choice_relation}
73321 | choice_relation {or else choice_relation}
73322
73323 *note 4.4:::
73324 choice_relation ::=
73325 simple_expression [relational_operator simple_expression]
73326
73327 *note 4.4:::
73328 relation ::=
73329 simple_expression [relational_operator simple_expression]
73330 | simple_expression [not] in membership_choice_list
73331
73332 *note 4.4:::
73333 membership_choice_list ::= membership_choice {| membership_choice}
73334
73335 *note 4.4:::
73336 membership_choice ::= choice_expression | range | subtype_mark
73337
73338 *note 4.4:::
73339 simple_expression ::= [unary_adding_operator] term {
73340 binary_adding_operator term}
73341
73342 *note 4.4:::
73343 term ::= factor {multiplying_operator factor}
73344
73345 *note 4.4:::
73346 factor ::= primary [** primary] | abs primary | not primary
73347
73348 *note 4.4:::
73349 primary ::=
73350 numeric_literal | null | string_literal | aggregate
73351 | name | allocator | (expression)
73352 | (conditional_expression) | (quantified_expression)
73353
73354 *note 4.5:::
73355 logical_operator ::= and | or | xor
73356
73357 *note 4.5:::
73358 relational_operator ::= = | /= | < | <= | > | >=
73359
73360 *note 4.5:::
73361 binary_adding_operator ::= + | - | &
73362
73363 *note 4.5:::
73364 unary_adding_operator ::= + | -
73365
73366 *note 4.5:::
73367 multiplying_operator ::= * | / | mod | rem
73368
73369 *note 4.5:::
73370 highest_precedence_operator ::= ** | abs | not
73371
73372 *note 4.5.7:::
73373 conditional_expression ::= if_expression | case_expression
73374
73375 *note 4.5.7:::
73376 if_expression ::=
73377 if condition then dependent_expression
73378 {elsif condition then dependent_expression}
73379 [else dependent_expression]
73380
73381 *note 4.5.7:::
73382 condition ::= boolean_expression
73383
73384 *note 4.5.7:::
73385 case_expression ::=
73386 case selecting_expression is
73387 case_expression_alternative {,
73388 case_expression_alternative}
73389
73390 *note 4.5.7:::
73391 case_expression_alternative ::=
73392 when discrete_choice_list =>
73393 dependent_expression
73394
73395 *note 4.5.8:::
73396 quantified_expression ::= for quantifier
73397 loop_parameter_specification => predicate
73398 | for quantifier iterator_specification => predicate
73399
73400 *note 4.5.8:::
73401 quantifier ::= all | some
73402
73403 *note 4.5.8:::
73404 predicate ::= boolean_expression
73405
73406 *note 4.6:::
73407 type_conversion ::=
73408 subtype_mark(expression)
73409 | subtype_mark(name)
73410
73411 *note 4.7:::
73412 qualified_expression ::=
73413 subtype_mark'(expression) | subtype_mark'aggregate
73414
73415 *note 4.8:::
73416 allocator ::=
73417 new [subpool_specification] subtype_indication
73418 | new [subpool_specification] qualified_expression
73419
73420 *note 4.8:::
73421 subpool_specification ::= (subpool_handle_name)
73422
73423 *note 5.1:::
73424 sequence_of_statements ::= statement {statement} {label}
73425
73426 *note 5.1:::
73427 statement ::=
73428 {label} simple_statement | {label} compound_statement
73429
73430 *note 5.1:::
73431 simple_statement ::= null_statement
73432 | assignment_statement | exit_statement
73433 | goto_statement | procedure_call_statement
73434 | simple_return_statement | entry_call_statement
73435 | requeue_statement | delay_statement
73436 | abort_statement | raise_statement
73437 | code_statement
73438
73439 *note 5.1:::
73440 compound_statement ::=
73441 if_statement | case_statement
73442 | loop_statement | block_statement
73443 | extended_return_statement
73444 | accept_statement | select_statement
73445
73446 *note 5.1:::
73447 null_statement ::= null;
73448
73449 *note 5.1:::
73450 label ::= <<label_statement_identifier>>
73451
73452 *note 5.1:::
73453 statement_identifier ::= direct_name
73454
73455 *note 5.2:::
73456 assignment_statement ::=
73457 variable_name := expression;
73458
73459 *note 5.3:::
73460 if_statement ::=
73461 if condition then
73462 sequence_of_statements
73463 {elsif condition then
73464 sequence_of_statements}
73465 [else
73466 sequence_of_statements]
73467 end if;
73468
73469 *note 5.4:::
73470 case_statement ::=
73471 case selecting_expression is
73472 case_statement_alternative
73473 {case_statement_alternative}
73474 end case;
73475
73476 *note 5.4:::
73477 case_statement_alternative ::=
73478 when discrete_choice_list =>
73479 sequence_of_statements
73480
73481 *note 5.5:::
73482 loop_statement ::=
73483 [loop_statement_identifier:]
73484 [iteration_scheme] loop
73485 sequence_of_statements
73486 end loop [loop_identifier];
73487
73488 *note 5.5:::
73489 iteration_scheme ::= while condition
73490 | for loop_parameter_specification
73491 | for iterator_specification
73492
73493 *note 5.5:::
73494 loop_parameter_specification ::=
73495 defining_identifier in [reverse] discrete_subtype_definition
73496
73497 *note 5.5.2:::
73498 iterator_specification ::=
73499 defining_identifier in [reverse] iterator_name
73500 | defining_identifier [:
73501 subtype_indication] of [reverse] iterable_name
73502
73503 *note 5.6:::
73504 block_statement ::=
73505 [block_statement_identifier:]
73506 [declare
73507 declarative_part]
73508 begin
73509 handled_sequence_of_statements
73510 end [block_identifier];
73511
73512 *note 5.7:::
73513 exit_statement ::=
73514 exit [loop_name] [when condition];
73515
73516 *note 5.8:::
73517 goto_statement ::= goto label_name;
73518
73519 *note 6.1:::
73520 subprogram_declaration ::=
73521 [overriding_indicator]
73522 subprogram_specification
73523 [aspect_specification];
73524
73525 *note 6.1:::
73526 subprogram_specification ::=
73527 procedure_specification
73528 | function_specification
73529
73530 *note 6.1:::
73531 procedure_specification ::= procedure defining_program_unit_name
73532 parameter_profile
73533
73534 *note 6.1:::
73535 function_specification ::= function defining_designator
73536 parameter_and_result_profile
73537
73538 *note 6.1:::
73539 designator ::= [parent_unit_name . ]identifier | operator_symbol
73540
73541 *note 6.1:::
73542 defining_designator ::= defining_program_unit_name |
73543 defining_operator_symbol
73544
73545 *note 6.1:::
73546 defining_program_unit_name ::= [parent_unit_name . ]
73547 defining_identifier
73548
73549 *note 6.1:::
73550 operator_symbol ::= string_literal
73551
73552 *note 6.1:::
73553 defining_operator_symbol ::= operator_symbol
73554
73555 *note 6.1:::
73556 parameter_profile ::= [formal_part]
73557
73558 *note 6.1:::
73559 parameter_and_result_profile ::=
73560 [formal_part] return [null_exclusion] subtype_mark
73561 | [formal_part] return access_definition
73562
73563 *note 6.1:::
73564 formal_part ::=
73565 (parameter_specification {; parameter_specification})
73566
73567 *note 6.1:::
73568 parameter_specification ::=
73569 defining_identifier_list : [aliased] mode [null_exclusion]
73570 subtype_mark [:= default_expression]
73571 | defining_identifier_list : access_definition [:=
73572 default_expression]
73573
73574 *note 6.1:::
73575 mode ::= [in] | in out | out
73576
73577 *note 6.3:::
73578 subprogram_body ::=
73579 [overriding_indicator]
73580 subprogram_specification
73581 [aspect_specification] is
73582 declarative_part
73583 begin
73584 handled_sequence_of_statements
73585 end [designator];
73586
73587 *note 6.4:::
73588 procedure_call_statement ::=
73589 procedure_name;
73590 | procedure_prefix actual_parameter_part;
73591
73592 *note 6.4:::
73593 function_call ::=
73594 function_name
73595 | function_prefix actual_parameter_part
73596
73597 *note 6.4:::
73598 actual_parameter_part ::=
73599 (parameter_association {, parameter_association})
73600
73601 *note 6.4:::
73602 parameter_association ::=
73603 [formal_parameter_selector_name =>] explicit_actual_parameter
73604
73605 *note 6.4:::
73606 explicit_actual_parameter ::= expression | variable_name
73607
73608 *note 6.5:::
73609 simple_return_statement ::= return [expression];
73610
73611 *note 6.5:::
73612 extended_return_object_declaration ::=
73613 defining_identifier : [aliased][constant]
73614 return_subtype_indication [:= expression]
73615
73616 *note 6.5:::
73617 extended_return_statement ::=
73618 return extended_return_object_declaration [do
73619 handled_sequence_of_statements
73620 end return];
73621
73622 *note 6.5:::
73623 return_subtype_indication ::= subtype_indication |
73624 access_definition
73625
73626 *note 6.7:::
73627 null_procedure_declaration ::=
73628 [overriding_indicator]
73629 procedure_specification is null
73630 [aspect_specification];
73631
73632 *note 6.8:::
73633 expression_function_declaration ::=
73634 [overriding_indicator]
73635 function_specification is
73636 (expression)
73637 [aspect_specification];
73638
73639 *note 7.1:::
73640 package_declaration ::= package_specification;
73641
73642 *note 7.1:::
73643 package_specification ::=
73644 package defining_program_unit_name
73645 [aspect_specification] is
73646 {basic_declarative_item}
73647 [private
73648 {basic_declarative_item}]
73649 end [[parent_unit_name.]identifier]
73650
73651 *note 7.2:::
73652 package_body ::=
73653 package body defining_program_unit_name
73654 [aspect_specification] is
73655 declarative_part
73656 [begin
73657 handled_sequence_of_statements]
73658 end [[parent_unit_name.]identifier];
73659
73660 *note 7.3:::
73661 private_type_declaration ::=
73662 type defining_identifier [
73663 discriminant_part] is [[abstract] tagged] [limited] private
73664 [aspect_specification];
73665
73666 *note 7.3:::
73667 private_extension_declaration ::=
73668 type defining_identifier [discriminant_part] is
73669 [abstract] [limited | synchronized] new ancestor_
73670 subtype_indication
73671 [and interface_list] with private
73672 [aspect_specification];
73673
73674 *note 8.3.1:::
73675 overriding_indicator ::= [not] overriding
73676
73677 *note 8.4:::
73678 use_clause ::= use_package_clause | use_type_clause
73679
73680 *note 8.4:::
73681 use_package_clause ::= use package_name {, package_name};
73682
73683 *note 8.4:::
73684 use_type_clause ::= use [all] type subtype_mark {, subtype_mark};
73685
73686 *note 8.5:::
73687 renaming_declaration ::=
73688 object_renaming_declaration
73689 | exception_renaming_declaration
73690 | package_renaming_declaration
73691 | subprogram_renaming_declaration
73692 | generic_renaming_declaration
73693
73694 *note 8.5.1:::
73695 object_renaming_declaration ::=
73696 defining_identifier : [null_exclusion]
73697 subtype_mark renames object_name
73698 [aspect_specification];
73699 | defining_identifier : access_definition renames object_name
73700 [aspect_specification];
73701
73702 *note 8.5.2:::
73703 exception_renaming_declaration ::=
73704 defining_identifier : exception renames exception_name
73705 [aspect_specification];
73706
73707 *note 8.5.3:::
73708 package_renaming_declaration ::= package
73709 defining_program_unit_name renames package_name
73710 [aspect_specification];
73711
73712 *note 8.5.4:::
73713 subprogram_renaming_declaration ::=
73714 [overriding_indicator]
73715 subprogram_specification renames callable_entity_name
73716 [aspect_specification];
73717
73718 *note 8.5.5:::
73719 generic_renaming_declaration ::=
73720 generic package
73721 defining_program_unit_name renames generic_package_name
73722 [aspect_specification];
73723 | generic procedure
73724 defining_program_unit_name renames generic_procedure_name
73725 [aspect_specification];
73726 | generic function
73727 defining_program_unit_name renames generic_function_name
73728 [aspect_specification];
73729
73730 *note 9.1:::
73731 task_type_declaration ::=
73732 task type defining_identifier [known_discriminant_part]
73733 [aspect_specification] [is
73734 [new interface_list with]
73735 task_definition];
73736
73737 *note 9.1:::
73738 single_task_declaration ::=
73739 task defining_identifier
73740 [aspect_specification][is
73741 [new interface_list with]
73742 task_definition];
73743
73744 *note 9.1:::
73745 task_definition ::=
73746 {task_item}
73747 [ private
73748 {task_item}]
73749 end [task_identifier]
73750
73751 *note 9.1:::
73752 task_item ::= entry_declaration | aspect_clause
73753
73754 *note 9.1:::
73755 task_body ::=
73756 task body defining_identifier
73757 [aspect_specification] is
73758 declarative_part
73759 begin
73760 handled_sequence_of_statements
73761 end [task_identifier];
73762
73763 *note 9.4:::
73764 protected_type_declaration ::=
73765 protected type defining_identifier [known_discriminant_part]
73766 [aspect_specification] is
73767 [new interface_list with]
73768 protected_definition;
73769
73770 *note 9.4:::
73771 single_protected_declaration ::=
73772 protected defining_identifier
73773 [aspect_specification] is
73774 [new interface_list with]
73775 protected_definition;
73776
73777 *note 9.4:::
73778 protected_definition ::=
73779 { protected_operation_declaration }
73780 [ private
73781 { protected_element_declaration } ]
73782 end [protected_identifier]
73783
73784 *note 9.4:::
73785 protected_operation_declaration ::= subprogram_declaration
73786 | entry_declaration
73787 | aspect_clause
73788
73789 *note 9.4:::
73790 protected_element_declaration ::= protected_operation_declaration
73791 | component_declaration
73792
73793 *note 9.4:::
73794 protected_body ::=
73795 protected body defining_identifier
73796 [aspect_specification] is
73797 { protected_operation_item }
73798 end [protected_identifier];
73799
73800 *note 9.4:::
73801 protected_operation_item ::= subprogram_declaration
73802 | subprogram_body
73803 | entry_body
73804 | aspect_clause
73805
73806 *note 9.5:::
73807 synchronization_kind ::= By_Entry | By_Protected_Procedure | Optional
73808
73809 *note 9.5.2:::
73810 entry_declaration ::=
73811 [overriding_indicator]
73812 entry defining_identifier [(discrete_subtype_definition)]
73813 parameter_profile
73814 [aspect_specification];
73815
73816 *note 9.5.2:::
73817 accept_statement ::=
73818 accept entry_direct_name [(entry_index)] parameter_profile [do
73819 handled_sequence_of_statements
73820 end [entry_identifier]];
73821
73822 *note 9.5.2:::
73823 entry_index ::= expression
73824
73825 *note 9.5.2:::
73826 entry_body ::=
73827 entry defining_identifier entry_body_formal_part
73828 entry_barrier is
73829 declarative_part
73830 begin
73831 handled_sequence_of_statements
73832 end [entry_identifier];
73833
73834 *note 9.5.2:::
73835 entry_body_formal_part ::= [(entry_index_specification)]
73836 parameter_profile
73837
73838 *note 9.5.2:::
73839 entry_barrier ::= when condition
73840
73841 *note 9.5.2:::
73842 entry_index_specification ::= for defining_identifier in
73843 discrete_subtype_definition
73844
73845 *note 9.5.3:::
73846 entry_call_statement ::= entry_name [actual_parameter_part];
73847
73848 *note 9.5.4:::
73849 requeue_statement ::= requeue procedure_or_entry_name [with abort];
73850
73851 *note 9.6:::
73852 delay_statement ::= delay_until_statement |
73853 delay_relative_statement
73854
73855 *note 9.6:::
73856 delay_until_statement ::= delay until delay_expression;
73857
73858 *note 9.6:::
73859 delay_relative_statement ::= delay delay_expression;
73860
73861 *note 9.7:::
73862 select_statement ::=
73863 selective_accept
73864 | timed_entry_call
73865 | conditional_entry_call
73866 | asynchronous_select
73867
73868 *note 9.7.1:::
73869 selective_accept ::=
73870 select
73871 [guard]
73872 select_alternative
73873 { or
73874 [guard]
73875 select_alternative }
73876 [ else
73877 sequence_of_statements ]
73878 end select;
73879
73880 *note 9.7.1:::
73881 guard ::= when condition =>
73882
73883 *note 9.7.1:::
73884 select_alternative ::=
73885 accept_alternative
73886 | delay_alternative
73887 | terminate_alternative
73888
73889 *note 9.7.1:::
73890 accept_alternative ::=
73891 accept_statement [sequence_of_statements]
73892
73893 *note 9.7.1:::
73894 delay_alternative ::=
73895 delay_statement [sequence_of_statements]
73896
73897 *note 9.7.1:::
73898 terminate_alternative ::= terminate;
73899
73900 *note 9.7.2:::
73901 timed_entry_call ::=
73902 select
73903 entry_call_alternative
73904 or
73905 delay_alternative
73906 end select;
73907
73908 *note 9.7.2:::
73909 entry_call_alternative ::=
73910 procedure_or_entry_call [sequence_of_statements]
73911
73912 *note 9.7.2:::
73913 procedure_or_entry_call ::=
73914 procedure_call_statement | entry_call_statement
73915
73916 *note 9.7.3:::
73917 conditional_entry_call ::=
73918 select
73919 entry_call_alternative
73920 else
73921 sequence_of_statements
73922 end select;
73923
73924 *note 9.7.4:::
73925 asynchronous_select ::=
73926 select
73927 triggering_alternative
73928 then abort
73929 abortable_part
73930 end select;
73931
73932 *note 9.7.4:::
73933 triggering_alternative ::= triggering_statement [
73934 sequence_of_statements]
73935
73936 *note 9.7.4:::
73937 triggering_statement ::= procedure_or_entry_call | delay_statement
73938
73939 *note 9.7.4:::
73940 abortable_part ::= sequence_of_statements
73941
73942 *note 9.8:::
73943 abort_statement ::= abort task_name {, task_name};
73944
73945 *note 10.1.1:::
73946 compilation ::= {compilation_unit}
73947
73948 *note 10.1.1:::
73949 compilation_unit ::=
73950 context_clause library_item
73951 | context_clause subunit
73952
73953 *note 10.1.1:::
73954 library_item ::= [private] library_unit_declaration
73955 | library_unit_body
73956 | [private] library_unit_renaming_declaration
73957
73958 *note 10.1.1:::
73959 library_unit_declaration ::=
73960 subprogram_declaration | package_declaration
73961 | generic_declaration | generic_instantiation
73962
73963 *note 10.1.1:::
73964 library_unit_renaming_declaration ::=
73965 package_renaming_declaration
73966 | generic_renaming_declaration
73967 | subprogram_renaming_declaration
73968
73969 *note 10.1.1:::
73970 library_unit_body ::= subprogram_body | package_body
73971
73972 *note 10.1.1:::
73973 parent_unit_name ::= name
73974
73975 *note 10.1.2:::
73976 context_clause ::= {context_item}
73977
73978 *note 10.1.2:::
73979 context_item ::= with_clause | use_clause
73980
73981 *note 10.1.2:::
73982 with_clause ::= limited_with_clause | nonlimited_with_clause
73983
73984 *note 10.1.2:::
73985 limited_with_clause ::= limited [private] with library_unit_
73986 name {, library_unit_name};
73987
73988 *note 10.1.2:::
73989 nonlimited_with_clause ::= [private] with library_unit_
73990 name {, library_unit_name};
73991
73992 *note 10.1.3:::
73993 body_stub ::= subprogram_body_stub | package_body_stub |
73994 task_body_stub | protected_body_stub
73995
73996 *note 10.1.3:::
73997 subprogram_body_stub ::=
73998 [overriding_indicator]
73999 subprogram_specification is separate
74000 [aspect_specification];
74001
74002 *note 10.1.3:::
74003 package_body_stub ::=
74004 package body defining_identifier is separate
74005 [aspect_specification];
74006
74007 *note 10.1.3:::
74008 task_body_stub ::=
74009 task body defining_identifier is separate
74010 [aspect_specification];
74011
74012 *note 10.1.3:::
74013 protected_body_stub ::=
74014 protected body defining_identifier is separate
74015 [aspect_specification];
74016
74017 *note 10.1.3:::
74018 subunit ::= separate (parent_unit_name) proper_body
74019
74020 *note 11.1:::
74021 exception_declaration ::= defining_identifier_list : exception
74022 [aspect_specification];
74023
74024 *note 11.2:::
74025 handled_sequence_of_statements ::=
74026 sequence_of_statements
74027 [exception
74028 exception_handler
74029 {exception_handler}]
74030
74031 *note 11.2:::
74032 exception_handler ::=
74033 when [choice_parameter_specification:] exception_choice {|
74034 exception_choice} =>
74035 sequence_of_statements
74036
74037 *note 11.2:::
74038 choice_parameter_specification ::= defining_identifier
74039
74040 *note 11.2:::
74041 exception_choice ::= exception_name | others
74042
74043 *note 11.3:::
74044 raise_statement ::= raise;
74045 | raise exception_name [with string_expression];
74046
74047 *note 12.1:::
74048 generic_declaration ::= generic_subprogram_declaration |
74049 generic_package_declaration
74050
74051 *note 12.1:::
74052 generic_subprogram_declaration ::=
74053 generic_formal_part subprogram_specification
74054 [aspect_specification];
74055
74056 *note 12.1:::
74057 generic_package_declaration ::=
74058 generic_formal_part package_specification;
74059
74060 *note 12.1:::
74061 generic_formal_part ::= generic {
74062 generic_formal_parameter_declaration | use_clause}
74063
74064 *note 12.1:::
74065 generic_formal_parameter_declaration ::=
74066 formal_object_declaration
74067 | formal_type_declaration
74068 | formal_subprogram_declaration
74069 | formal_package_declaration
74070
74071 *note 12.3:::
74072 generic_instantiation ::=
74073 package defining_program_unit_name is
74074 new generic_package_name [generic_actual_part]
74075 [aspect_specification];
74076 | [overriding_indicator]
74077 procedure defining_program_unit_name is
74078 new generic_procedure_name [generic_actual_part]
74079 [aspect_specification];
74080 | [overriding_indicator]
74081 function defining_designator is
74082 new generic_function_name [generic_actual_part]
74083 [aspect_specification];
74084
74085 *note 12.3:::
74086 generic_actual_part ::=
74087 (generic_association {, generic_association})
74088
74089 *note 12.3:::
74090 generic_association ::=
74091 [generic_formal_parameter_selector_name =>]
74092 explicit_generic_actual_parameter
74093
74094 *note 12.3:::
74095 explicit_generic_actual_parameter ::= expression | variable_name
74096 | subprogram_name | entry_name | subtype_mark
74097 | package_instance_name
74098
74099 *note 12.4:::
74100 formal_object_declaration ::=
74101 defining_identifier_list : mode [null_exclusion]
74102 subtype_mark [:= default_expression]
74103 [aspect_specification];
74104 | defining_identifier_list : mode access_definition [:=
74105 default_expression]
74106 [aspect_specification];
74107
74108 *note 12.5:::
74109 formal_type_declaration ::=
74110 formal_complete_type_declaration
74111 | formal_incomplete_type_declaration
74112
74113 *note 12.5:::
74114 formal_complete_type_declaration ::=
74115 type defining_identifier[discriminant_part] is
74116 formal_type_definition
74117 [aspect_specification];
74118
74119 *note 12.5:::
74120 formal_incomplete_type_declaration ::=
74121 type defining_identifier[discriminant_part] [is tagged];
74122
74123 *note 12.5:::
74124 formal_type_definition ::=
74125 formal_private_type_definition
74126 | formal_derived_type_definition
74127 | formal_discrete_type_definition
74128 | formal_signed_integer_type_definition
74129 | formal_modular_type_definition
74130 | formal_floating_point_definition
74131 | formal_ordinary_fixed_point_definition
74132 | formal_decimal_fixed_point_definition
74133 | formal_array_type_definition
74134 | formal_access_type_definition
74135 | formal_interface_type_definition
74136
74137 *note 12.5.1:::
74138 formal_private_type_definition ::= [[abstract] tagged] [limited] private
74139
74140 *note 12.5.1:::
74141 formal_derived_type_definition ::=
74142 [abstract] [limited | synchronized] new subtype_mark [[and
74143 interface_list]with private]
74144
74145 *note 12.5.2:::
74146 formal_discrete_type_definition ::= (<>)
74147
74148 *note 12.5.2:::
74149 formal_signed_integer_type_definition ::= range <>
74150
74151 *note 12.5.2:::
74152 formal_modular_type_definition ::= mod <>
74153
74154 *note 12.5.2:::
74155 formal_floating_point_definition ::= digits <>
74156
74157 *note 12.5.2:::
74158 formal_ordinary_fixed_point_definition ::= delta <>
74159
74160 *note 12.5.2:::
74161 formal_decimal_fixed_point_definition ::= delta <> digits <>
74162
74163 *note 12.5.3:::
74164 formal_array_type_definition ::= array_type_definition
74165
74166 *note 12.5.4:::
74167 formal_access_type_definition ::= access_type_definition
74168
74169 *note 12.5.5:::
74170 formal_interface_type_definition ::= interface_type_definition
74171
74172 *note 12.6:::
74173 formal_subprogram_declaration ::=
74174 formal_concrete_subprogram_declaration
74175 | formal_abstract_subprogram_declaration
74176
74177 *note 12.6:::
74178 formal_concrete_subprogram_declaration ::=
74179 with subprogram_specification [is subprogram_default]
74180 [aspect_specification];
74181
74182 *note 12.6:::
74183 formal_abstract_subprogram_declaration ::=
74184 with subprogram_specification is abstract [subprogram_default]
74185 [aspect_specification];
74186
74187 *note 12.6:::
74188 subprogram_default ::= default_name | <> | null
74189
74190 *note 12.6:::
74191 default_name ::= name
74192
74193 *note 12.7:::
74194 formal_package_declaration ::=
74195 with package defining_identifier is new generic_package_name
74196 formal_package_actual_part
74197 [aspect_specification];
74198
74199 *note 12.7:::
74200 formal_package_actual_part ::=
74201 ([others =>] <>)
74202 | [generic_actual_part]
74203 | (formal_package_association {,
74204 formal_package_association} [, others => <>])
74205
74206 *note 12.7:::
74207 formal_package_association ::=
74208 generic_association
74209 | generic_formal_parameter_selector_name => <>
74210
74211 *note 13.1:::
74212 aspect_clause ::= attribute_definition_clause
74213 | enumeration_representation_clause
74214 | record_representation_clause
74215 | at_clause
74216
74217 *note 13.1:::
74218 local_name ::= direct_name
74219 | direct_name'attribute_designator
74220 | library_unit_name
74221
74222 *note 13.1.1:::
74223 aspect_specification ::=
74224 with aspect_mark [=> aspect_definition] {,
74225 aspect_mark [=> aspect_definition] }
74226
74227 *note 13.1.1:::
74228 aspect_mark ::= aspect_identifier['Class]
74229
74230 *note 13.1.1:::
74231 aspect_definition ::= name | expression | identifier
74232
74233 *note 13.3:::
74234 attribute_definition_clause ::=
74235 for local_name'attribute_designator use expression;
74236 | for local_name'attribute_designator use name;
74237
74238 *note 13.4:::
74239 enumeration_representation_clause ::=
74240 for first_subtype_local_name use enumeration_aggregate;
74241
74242 *note 13.4:::
74243 enumeration_aggregate ::= array_aggregate
74244
74245 *note 13.5.1:::
74246 record_representation_clause ::=
74247 for first_subtype_local_name use
74248 record [mod_clause]
74249 {component_clause}
74250 end record;
74251
74252 *note 13.5.1:::
74253 component_clause ::=
74254 component_local_name at position range first_bit .. last_bit;
74255
74256 *note 13.5.1:::
74257 position ::= static_expression
74258
74259 *note 13.5.1:::
74260 first_bit ::= static_simple_expression
74261
74262 *note 13.5.1:::
74263 last_bit ::= static_simple_expression
74264
74265 *note 13.8:::
74266 code_statement ::= qualified_expression;
74267
74268 *note 13.11.3:::
74269 storage_pool_indicator ::= storage_pool_name | null
74270
74271 *note 13.12:::
74272 restriction ::= restriction_identifier
74273 | restriction_parameter_identifier =>
74274 restriction_parameter_argument
74275
74276 *note 13.12:::
74277 restriction_parameter_argument ::= name | expression
74278
74279 *note J.3:::
74280 delta_constraint ::= delta static_expression [range_constraint]
74281
74282 *note J.7:::
74283 at_clause ::= for direct_name use at expression;
74284
74285 *note J.8:::
74286 mod_clause ::= at mod static_expression;
74287
74288 Syntax Cross Reference
74289
74290
74291 1/3
74292 In the following syntax cross reference, each syntactic category is
74293 followed by the subclause number where it is defined. In addition, each
74294 syntactic category S is followed by a list of the categories that use S
74295 in their definitions. For example, the first listing below shows that
74296 abort_statement appears in the definition of simple_statement.
74297
74298 abort_statement *note 9.8::
74299 simple_statement *note 5.1::
74300
74301 abortable_part *note 9.7.4::
74302 asynchronous_select *note 9.7.4::
74303
74304 abstract_subprogram_declaration *note 3.9.3::
74305 basic_declaration *note 3.1::
74306
74307 accept_alternative *note 9.7.1::
74308 select_alternative *note 9.7.1::
74309
74310 accept_statement *note 9.5.2::
74311 accept_alternative *note 9.7.1::
74312 compound_statement *note 5.1::
74313
74314 access_definition *note 3.10::
74315 component_definition *note 3.6::
74316 discriminant_specification *note 3.7::
74317 formal_object_declaration *note 12.4::
74318 object_declaration *note 3.3.1::
74319 object_renaming_declaration *note 8.5.1::
74320 parameter_and_result_profile *note 6.1::
74321 parameter_specification *note 6.1::
74322 return_subtype_indication *note 6.5::
74323
74324 access_to_object_definition *note 3.10::
74325 access_type_definition *note 3.10::
74326
74327 access_to_subprogram_definition *note 3.10::
74328 access_type_definition *note 3.10::
74329
74330 access_type_definition *note 3.10::
74331 formal_access_type_definition *note 12.5.4::
74332 type_definition *note 3.2.1::
74333
74334 actual_parameter_part *note 6.4::
74335 entry_call_statement *note 9.5.3::
74336 function_call *note 6.4::
74337 generalized_indexing *note 4.1.6::
74338 procedure_call_statement *note 6.4::
74339
74340 aggregate *note 4.3::
74341 primary *note 4.4::
74342 qualified_expression *note 4.7::
74343
74344 allocator *note 4.8::
74345 primary *note 4.4::
74346
74347 ancestor_part *note 4.3.2::
74348 extension_aggregate *note 4.3.2::
74349
74350 array_aggregate *note 4.3.3::
74351 aggregate *note 4.3::
74352 enumeration_aggregate *note 13.4::
74353
74354 array_component_association *note 4.3.3::
74355 named_array_aggregate *note 4.3.3::
74356
74357 array_type_definition *note 3.6::
74358 formal_array_type_definition *note 12.5.3::
74359 object_declaration *note 3.3.1::
74360 type_definition *note 3.2.1::
74361
74362 aspect_clause *note 13.1::
74363 basic_declarative_item *note 3.11::
74364 component_item *note 3.8::
74365 protected_operation_declaration *note 9.4::
74366 protected_operation_item *note 9.4::
74367 task_item *note 9.1::
74368
74369 aspect_definition *note 13.1.1::
74370 aspect_specification *note 13.1.1::
74371
74372 aspect_mark *note 13.1.1::
74373 aspect_specification *note 13.1.1::
74374 pragma_argument_association *note 2.8::
74375
74376 aspect_specification *note 13.1.1::
74377 abstract_subprogram_declaration *note 3.9.3::
74378 component_declaration *note 3.8::
74379 entry_declaration *note 9.5.2::
74380 exception_declaration *note 11.1::
74381 exception_renaming_declaration *note 8.5.2::
74382 expression_function_declaration *note 6.8::
74383 formal_abstract_subprogram_declaration *note 12.6::
74384 formal_complete_type_declaration *note 12.5::
74385 formal_concrete_subprogram_declaration *note 12.6::
74386 formal_object_declaration *note 12.4::
74387 formal_package_declaration *note 12.7::
74388 full_type_declaration *note 3.2.1::
74389 generic_instantiation *note 12.3::
74390 generic_renaming_declaration *note 8.5.5::
74391 generic_subprogram_declaration *note 12.1::
74392 null_procedure_declaration *note 6.7::
74393 object_declaration *note 3.3.1::
74394 object_renaming_declaration *note 8.5.1::
74395 package_body *note 7.2::
74396 package_body_stub *note 10.1.3::
74397 package_renaming_declaration *note 8.5.3::
74398 package_specification *note 7.1::
74399 private_extension_declaration *note 7.3::
74400 private_type_declaration *note 7.3::
74401 protected_body *note 9.4::
74402 protected_body_stub *note 10.1.3::
74403 protected_type_declaration *note 9.4::
74404 single_protected_declaration *note 9.4::
74405 single_task_declaration *note 9.1::
74406 subprogram_body *note 6.3::
74407 subprogram_body_stub *note 10.1.3::
74408 subprogram_declaration *note 6.1::
74409 subprogram_renaming_declaration *note 8.5.4::
74410 subtype_declaration *note 3.2.2::
74411 task_body *note 9.1::
74412 task_body_stub *note 10.1.3::
74413 task_type_declaration *note 9.1::
74414
74415 assignment_statement *note 5.2::
74416 simple_statement *note 5.1::
74417
74418 asynchronous_select *note 9.7.4::
74419 select_statement *note 9.7::
74420
74421 at_clause *note J.7::
74422 aspect_clause *note 13.1::
74423
74424 attribute_definition_clause *note 13.3::
74425 aspect_clause *note 13.1::
74426
74427 attribute_designator *note 4.1.4::
74428 attribute_definition_clause *note 13.3::
74429 attribute_reference *note 4.1.4::
74430 local_name *note 13.1::
74431
74432 attribute_reference *note 4.1.4::
74433 name *note 4.1::
74434
74435 base *note 2.4.2::
74436 based_literal *note 2.4.2::
74437
74438 based_literal *note 2.4.2::
74439 numeric_literal *note 2.4::
74440
74441 based_numeral *note 2.4.2::
74442 based_literal *note 2.4.2::
74443
74444 basic_declaration *note 3.1::
74445 basic_declarative_item *note 3.11::
74446
74447 basic_declarative_item *note 3.11::
74448 declarative_item *note 3.11::
74449 package_specification *note 7.1::
74450
74451 binary_adding_operator *note 4.5::
74452 simple_expression *note 4.4::
74453
74454 block_statement *note 5.6::
74455 compound_statement *note 5.1::
74456
74457 body *note 3.11::
74458 declarative_item *note 3.11::
74459
74460 body_stub *note 10.1.3::
74461 body *note 3.11::
74462
74463 case_expression *note 4.5.7::
74464 conditional_expression *note 4.5.7::
74465
74466 case_expression_alternative *note 4.5.7::
74467 case_expression *note 4.5.7::
74468
74469 case_statement *note 5.4::
74470 compound_statement *note 5.1::
74471
74472 case_statement_alternative *note 5.4::
74473 case_statement *note 5.4::
74474
74475 character *note 2.1::
74476 comment *note 2.7::
74477
74478 character_literal *note 2.5::
74479 defining_character_literal *note 3.5.1::
74480 name *note 4.1::
74481 selector_name *note 4.1.3::
74482
74483 choice_expression *note 4.4::
74484 discrete_choice *note 3.8.1::
74485 membership_choice *note 4.4::
74486
74487 choice_parameter_specification *note 11.2::
74488 exception_handler *note 11.2::
74489
74490 choice_relation *note 4.4::
74491 choice_expression *note 4.4::
74492
74493 code_statement *note 13.8::
74494 simple_statement *note 5.1::
74495
74496 compilation_unit *note 10.1.1::
74497 compilation *note 10.1.1::
74498
74499 component_choice_list *note 4.3.1::
74500 record_component_association *note 4.3.1::
74501
74502 component_clause *note 13.5.1::
74503 record_representation_clause *note 13.5.1::
74504
74505 component_declaration *note 3.8::
74506 component_item *note 3.8::
74507 protected_element_declaration *note 9.4::
74508
74509 component_definition *note 3.6::
74510 component_declaration *note 3.8::
74511 constrained_array_definition *note 3.6::
74512 unconstrained_array_definition *note 3.6::
74513
74514 component_item *note 3.8::
74515 component_list *note 3.8::
74516
74517 component_list *note 3.8::
74518 record_definition *note 3.8::
74519 variant *note 3.8.1::
74520
74521 composite_constraint *note 3.2.2::
74522 constraint *note 3.2.2::
74523
74524 compound_statement *note 5.1::
74525 statement *note 5.1::
74526
74527 condition *note 4.5.7::
74528 entry_barrier *note 9.5.2::
74529 exit_statement *note 5.7::
74530 guard *note 9.7.1::
74531 if_expression *note 4.5.7::
74532 if_statement *note 5.3::
74533 iteration_scheme *note 5.5::
74534
74535 conditional_entry_call *note 9.7.3::
74536 select_statement *note 9.7::
74537
74538 conditional_expression *note 4.5.7::
74539 primary *note 4.4::
74540
74541 constrained_array_definition *note 3.6::
74542 array_type_definition *note 3.6::
74543
74544 constraint *note 3.2.2::
74545 subtype_indication *note 3.2.2::
74546
74547 context_clause *note 10.1.2::
74548 compilation_unit *note 10.1.1::
74549
74550 context_item *note 10.1.2::
74551 context_clause *note 10.1.2::
74552
74553 decimal_fixed_point_definition *note 3.5.9::
74554 fixed_point_definition *note 3.5.9::
74555
74556 decimal_literal *note 2.4.1::
74557 numeric_literal *note 2.4::
74558
74559 declarative_item *note 3.11::
74560 declarative_part *note 3.11::
74561
74562 declarative_part *note 3.11::
74563 block_statement *note 5.6::
74564 entry_body *note 9.5.2::
74565 package_body *note 7.2::
74566 subprogram_body *note 6.3::
74567 task_body *note 9.1::
74568
74569 default_expression *note 3.7::
74570 component_declaration *note 3.8::
74571 discriminant_specification *note 3.7::
74572 formal_object_declaration *note 12.4::
74573 parameter_specification *note 6.1::
74574
74575 default_name *note 12.6::
74576 subprogram_default *note 12.6::
74577
74578 defining_character_literal *note 3.5.1::
74579 enumeration_literal_specification *note 3.5.1::
74580
74581 defining_designator *note 6.1::
74582 function_specification *note 6.1::
74583 generic_instantiation *note 12.3::
74584
74585 defining_identifier *note 3.1::
74586 choice_parameter_specification *note 11.2::
74587 defining_identifier_list *note 3.3.1::
74588 defining_program_unit_name *note 6.1::
74589 entry_body *note 9.5.2::
74590 entry_declaration *note 9.5.2::
74591 entry_index_specification *note 9.5.2::
74592 enumeration_literal_specification *note 3.5.1::
74593 exception_renaming_declaration *note 8.5.2::
74594 extended_return_object_declaration *note 6.5::
74595 formal_complete_type_declaration *note 12.5::
74596 formal_incomplete_type_declaration *note 12.5::
74597 formal_package_declaration *note 12.7::
74598 full_type_declaration *note 3.2.1::
74599 incomplete_type_declaration *note 3.10.1::
74600 iterator_specification *note 5.5.2::
74601 loop_parameter_specification *note 5.5::
74602 object_renaming_declaration *note 8.5.1::
74603 package_body_stub *note 10.1.3::
74604 private_extension_declaration *note 7.3::
74605 private_type_declaration *note 7.3::
74606 protected_body *note 9.4::
74607 protected_body_stub *note 10.1.3::
74608 protected_type_declaration *note 9.4::
74609 single_protected_declaration *note 9.4::
74610 single_task_declaration *note 9.1::
74611 subtype_declaration *note 3.2.2::
74612 task_body *note 9.1::
74613 task_body_stub *note 10.1.3::
74614 task_type_declaration *note 9.1::
74615
74616 defining_identifier_list *note 3.3.1::
74617 component_declaration *note 3.8::
74618 discriminant_specification *note 3.7::
74619 exception_declaration *note 11.1::
74620 formal_object_declaration *note 12.4::
74621 number_declaration *note 3.3.2::
74622 object_declaration *note 3.3.1::
74623 parameter_specification *note 6.1::
74624
74625 defining_operator_symbol *note 6.1::
74626 defining_designator *note 6.1::
74627
74628 defining_program_unit_name *note 6.1::
74629 defining_designator *note 6.1::
74630 generic_instantiation *note 12.3::
74631 generic_renaming_declaration *note 8.5.5::
74632 package_body *note 7.2::
74633 package_renaming_declaration *note 8.5.3::
74634 package_specification *note 7.1::
74635 procedure_specification *note 6.1::
74636
74637 delay_alternative *note 9.7.1::
74638 select_alternative *note 9.7.1::
74639 timed_entry_call *note 9.7.2::
74640
74641 delay_relative_statement *note 9.6::
74642 delay_statement *note 9.6::
74643
74644 delay_statement *note 9.6::
74645 delay_alternative *note 9.7.1::
74646 simple_statement *note 5.1::
74647 triggering_statement *note 9.7.4::
74648
74649 delay_until_statement *note 9.6::
74650 delay_statement *note 9.6::
74651
74652 delta_constraint *note J.3::
74653 scalar_constraint *note 3.2.2::
74654
74655 derived_type_definition *note 3.4::
74656 type_definition *note 3.2.1::
74657
74658 designator *note 6.1::
74659 subprogram_body *note 6.3::
74660
74661 digit *note 2.4.1::
74662 extended_digit *note 2.4.2::
74663 numeral *note 2.4.1::
74664
74665 digits_constraint *note 3.5.9::
74666 scalar_constraint *note 3.2.2::
74667
74668 direct_name *note 4.1::
74669 accept_statement *note 9.5.2::
74670 at_clause *note J.7::
74671 local_name *note 13.1::
74672 name *note 4.1::
74673 statement_identifier *note 5.1::
74674 variant_part *note 3.8.1::
74675
74676 discrete_choice *note 3.8.1::
74677 discrete_choice_list *note 3.8.1::
74678
74679 discrete_choice_list *note 3.8.1::
74680 array_component_association *note 4.3.3::
74681 case_expression_alternative *note 4.5.7::
74682 case_statement_alternative *note 5.4::
74683 variant *note 3.8.1::
74684
74685 discrete_range *note 3.6.1::
74686 index_constraint *note 3.6.1::
74687 slice *note 4.1.2::
74688
74689 discrete_subtype_definition *note 3.6::
74690 constrained_array_definition *note 3.6::
74691 entry_declaration *note 9.5.2::
74692 entry_index_specification *note 9.5.2::
74693 loop_parameter_specification *note 5.5::
74694
74695 discriminant_association *note 3.7.1::
74696 discriminant_constraint *note 3.7.1::
74697
74698 discriminant_constraint *note 3.7.1::
74699 composite_constraint *note 3.2.2::
74700
74701 discriminant_part *note 3.7::
74702 formal_complete_type_declaration *note 12.5::
74703 formal_incomplete_type_declaration *note 12.5::
74704 incomplete_type_declaration *note 3.10.1::
74705 private_extension_declaration *note 7.3::
74706 private_type_declaration *note 7.3::
74707
74708 discriminant_specification *note 3.7::
74709 known_discriminant_part *note 3.7::
74710
74711 entry_barrier *note 9.5.2::
74712 entry_body *note 9.5.2::
74713
74714 entry_body *note 9.5.2::
74715 protected_operation_item *note 9.4::
74716
74717 entry_body_formal_part *note 9.5.2::
74718 entry_body *note 9.5.2::
74719
74720 entry_call_alternative *note 9.7.2::
74721 conditional_entry_call *note 9.7.3::
74722 timed_entry_call *note 9.7.2::
74723
74724 entry_call_statement *note 9.5.3::
74725 procedure_or_entry_call *note 9.7.2::
74726 simple_statement *note 5.1::
74727
74728 entry_declaration *note 9.5.2::
74729 protected_operation_declaration *note 9.4::
74730 task_item *note 9.1::
74731
74732 entry_index *note 9.5.2::
74733 accept_statement *note 9.5.2::
74734
74735 entry_index_specification *note 9.5.2::
74736 entry_body_formal_part *note 9.5.2::
74737
74738 enumeration_aggregate *note 13.4::
74739 enumeration_representation_clause *note 13.4::
74740
74741 enumeration_literal_specification *note 3.5.1::
74742 enumeration_type_definition *note 3.5.1::
74743
74744 enumeration_representation_clause *note 13.4::
74745 aspect_clause *note 13.1::
74746
74747 enumeration_type_definition *note 3.5.1::
74748 type_definition *note 3.2.1::
74749
74750 exception_choice *note 11.2::
74751 exception_handler *note 11.2::
74752
74753 exception_declaration *note 11.1::
74754 basic_declaration *note 3.1::
74755
74756 exception_handler *note 11.2::
74757 handled_sequence_of_statements *note 11.2::
74758
74759 exception_renaming_declaration *note 8.5.2::
74760 renaming_declaration *note 8.5::
74761
74762 exit_statement *note 5.7::
74763 simple_statement *note 5.1::
74764
74765 explicit_actual_parameter *note 6.4::
74766 parameter_association *note 6.4::
74767
74768 explicit_dereference *note 4.1::
74769 name *note 4.1::
74770
74771 explicit_generic_actual_parameter *note 12.3::
74772 generic_association *note 12.3::
74773
74774 exponent *note 2.4.1::
74775 based_literal *note 2.4.2::
74776 decimal_literal *note 2.4.1::
74777
74778 expression *note 4.4::
74779 ancestor_part *note 4.3.2::
74780 array_component_association *note 4.3.3::
74781 aspect_definition *note 13.1.1::
74782 assignment_statement *note 5.2::
74783 at_clause *note J.7::
74784 attribute_definition_clause *note 13.3::
74785 attribute_designator *note 4.1.4::
74786 case_expression *note 4.5.7::
74787 case_expression_alternative *note 4.5.7::
74788 case_statement *note 5.4::
74789 condition *note 4.5.7::
74790 decimal_fixed_point_definition *note 3.5.9::
74791 default_expression *note 3.7::
74792 delay_relative_statement *note 9.6::
74793 delay_until_statement *note 9.6::
74794 delta_constraint *note J.3::
74795 digits_constraint *note 3.5.9::
74796 discriminant_association *note 3.7.1::
74797 entry_index *note 9.5.2::
74798 explicit_actual_parameter *note 6.4::
74799 explicit_generic_actual_parameter *note 12.3::
74800 expression_function_declaration *note 6.8::
74801 extended_return_object_declaration *note 6.5::
74802 floating_point_definition *note 3.5.7::
74803 if_expression *note 4.5.7::
74804 indexed_component *note 4.1.1::
74805 mod_clause *note J.8::
74806 modular_type_definition *note 3.5.4::
74807 number_declaration *note 3.3.2::
74808 object_declaration *note 3.3.1::
74809 ordinary_fixed_point_definition *note 3.5.9::
74810 position *note 13.5.1::
74811 positional_array_aggregate *note 4.3.3::
74812 pragma_argument_association *note 2.8::
74813 predicate *note 4.5.8::
74814 primary *note 4.4::
74815 qualified_expression *note 4.7::
74816 raise_statement *note 11.3::
74817 range_attribute_designator *note 4.1.4::
74818 record_component_association *note 4.3.1::
74819 restriction_parameter_argument *note 13.12::
74820 simple_return_statement *note 6.5::
74821 type_conversion *note 4.6::
74822
74823 expression_function_declaration *note 6.8::
74824 basic_declaration *note 3.1::
74825
74826 extended_digit *note 2.4.2::
74827 based_numeral *note 2.4.2::
74828
74829 extended_return_object_declaration *note 6.5::
74830 extended_return_statement *note 6.5::
74831
74832 extended_return_statement *note 6.5::
74833 compound_statement *note 5.1::
74834
74835 extension_aggregate *note 4.3.2::
74836 aggregate *note 4.3::
74837
74838 factor *note 4.4::
74839 term *note 4.4::
74840
74841 first_bit *note 13.5.1::
74842 component_clause *note 13.5.1::
74843
74844 fixed_point_definition *note 3.5.9::
74845 real_type_definition *note 3.5.6::
74846
74847 floating_point_definition *note 3.5.7::
74848 real_type_definition *note 3.5.6::
74849
74850 formal_abstract_subprogram_declaration *note 12.6::
74851 formal_subprogram_declaration *note 12.6::
74852
74853 formal_access_type_definition *note 12.5.4::
74854 formal_type_definition *note 12.5::
74855
74856 formal_array_type_definition *note 12.5.3::
74857 formal_type_definition *note 12.5::
74858
74859 formal_complete_type_declaration *note 12.5::
74860 formal_type_declaration *note 12.5::
74861
74862 formal_concrete_subprogram_declaration *note 12.6::
74863 formal_subprogram_declaration *note 12.6::
74864
74865 formal_decimal_fixed_point_definition *note 12.5.2::
74866 formal_type_definition *note 12.5::
74867
74868 formal_derived_type_definition *note 12.5.1::
74869 formal_type_definition *note 12.5::
74870
74871 formal_discrete_type_definition *note 12.5.2::
74872 formal_type_definition *note 12.5::
74873
74874 formal_floating_point_definition *note 12.5.2::
74875 formal_type_definition *note 12.5::
74876
74877 formal_incomplete_type_declaration *note 12.5::
74878 formal_type_declaration *note 12.5::
74879
74880 formal_interface_type_definition *note 12.5.5::
74881 formal_type_definition *note 12.5::
74882
74883 formal_modular_type_definition *note 12.5.2::
74884 formal_type_definition *note 12.5::
74885
74886 formal_object_declaration *note 12.4::
74887 generic_formal_parameter_declaration *note 12.1::
74888
74889 formal_ordinary_fixed_point_definition *note 12.5.2::
74890 formal_type_definition *note 12.5::
74891
74892 formal_package_actual_part *note 12.7::
74893 formal_package_declaration *note 12.7::
74894
74895 formal_package_association *note 12.7::
74896 formal_package_actual_part *note 12.7::
74897
74898 formal_package_declaration *note 12.7::
74899 generic_formal_parameter_declaration *note 12.1::
74900
74901 formal_part *note 6.1::
74902 parameter_and_result_profile *note 6.1::
74903 parameter_profile *note 6.1::
74904
74905 formal_private_type_definition *note 12.5.1::
74906 formal_type_definition *note 12.5::
74907
74908 formal_signed_integer_type_definition *note 12.5.2::
74909 formal_type_definition *note 12.5::
74910
74911 formal_subprogram_declaration *note 12.6::
74912 generic_formal_parameter_declaration *note 12.1::
74913
74914 formal_type_declaration *note 12.5::
74915 generic_formal_parameter_declaration *note 12.1::
74916
74917 formal_type_definition *note 12.5::
74918 formal_complete_type_declaration *note 12.5::
74919
74920 full_type_declaration *note 3.2.1::
74921 type_declaration *note 3.2.1::
74922
74923 function_call *note 6.4::
74924 name *note 4.1::
74925
74926 function_specification *note 6.1::
74927 expression_function_declaration *note 6.8::
74928 subprogram_specification *note 6.1::
74929
74930 general_access_modifier *note 3.10::
74931 access_to_object_definition *note 3.10::
74932
74933 generalized_indexing *note 4.1.6::
74934 name *note 4.1::
74935
74936 generalized_reference *note 4.1.5::
74937 name *note 4.1::
74938
74939 generic_actual_part *note 12.3::
74940 formal_package_actual_part *note 12.7::
74941 generic_instantiation *note 12.3::
74942
74943 generic_association *note 12.3::
74944 formal_package_association *note 12.7::
74945 generic_actual_part *note 12.3::
74946
74947 generic_declaration *note 12.1::
74948 basic_declaration *note 3.1::
74949 library_unit_declaration *note 10.1.1::
74950
74951 generic_formal_parameter_declaration *note 12.1::
74952 generic_formal_part *note 12.1::
74953
74954 generic_formal_part *note 12.1::
74955 generic_package_declaration *note 12.1::
74956 generic_subprogram_declaration *note 12.1::
74957
74958 generic_instantiation *note 12.3::
74959 basic_declaration *note 3.1::
74960 library_unit_declaration *note 10.1.1::
74961
74962 generic_package_declaration *note 12.1::
74963 generic_declaration *note 12.1::
74964
74965 generic_renaming_declaration *note 8.5.5::
74966 library_unit_renaming_declaration *note 10.1.1::
74967 renaming_declaration *note 8.5::
74968
74969 generic_subprogram_declaration *note 12.1::
74970 generic_declaration *note 12.1::
74971
74972 goto_statement *note 5.8::
74973 simple_statement *note 5.1::
74974
74975 graphic_character *note 2.1::
74976 character_literal *note 2.5::
74977 string_element *note 2.6::
74978
74979 guard *note 9.7.1::
74980 selective_accept *note 9.7.1::
74981
74982 handled_sequence_of_statements *note 11.2::
74983 accept_statement *note 9.5.2::
74984 block_statement *note 5.6::
74985 entry_body *note 9.5.2::
74986 extended_return_statement *note 6.5::
74987 package_body *note 7.2::
74988 subprogram_body *note 6.3::
74989 task_body *note 9.1::
74990
74991 identifier *note 2.3::
74992 accept_statement *note 9.5.2::
74993 aspect_definition *note 13.1.1::
74994 aspect_mark *note 13.1.1::
74995 attribute_designator *note 4.1.4::
74996 block_statement *note 5.6::
74997 defining_identifier *note 3.1::
74998 designator *note 6.1::
74999 direct_name *note 4.1::
75000 entry_body *note 9.5.2::
75001 loop_statement *note 5.5::
75002 package_body *note 7.2::
75003 package_specification *note 7.1::
75004 pragma *note 2.8::
75005 pragma_argument_association *note 2.8::
75006 protected_body *note 9.4::
75007 protected_definition *note 9.4::
75008 restriction *note 13.12::
75009 selector_name *note 4.1.3::
75010 task_body *note 9.1::
75011 task_definition *note 9.1::
75012
75013 identifier_extend *note 2.3::
75014 identifier *note 2.3::
75015
75016 identifier_start *note 2.3::
75017 identifier *note 2.3::
75018
75019 if_expression *note 4.5.7::
75020 conditional_expression *note 4.5.7::
75021
75022 if_statement *note 5.3::
75023 compound_statement *note 5.1::
75024
75025 implicit_dereference *note 4.1::
75026 prefix *note 4.1::
75027
75028 incomplete_type_declaration *note 3.10.1::
75029 type_declaration *note 3.2.1::
75030
75031 index_constraint *note 3.6.1::
75032 composite_constraint *note 3.2.2::
75033
75034 index_subtype_definition *note 3.6::
75035 unconstrained_array_definition *note 3.6::
75036
75037 indexed_component *note 4.1.1::
75038 name *note 4.1::
75039
75040 integer_type_definition *note 3.5.4::
75041 type_definition *note 3.2.1::
75042
75043 interface_list *note 3.9.4::
75044 derived_type_definition *note 3.4::
75045 formal_derived_type_definition *note 12.5.1::
75046 interface_type_definition *note 3.9.4::
75047 private_extension_declaration *note 7.3::
75048 protected_type_declaration *note 9.4::
75049 single_protected_declaration *note 9.4::
75050 single_task_declaration *note 9.1::
75051 task_type_declaration *note 9.1::
75052
75053 interface_type_definition *note 3.9.4::
75054 formal_interface_type_definition *note 12.5.5::
75055 type_definition *note 3.2.1::
75056
75057 iteration_scheme *note 5.5::
75058 loop_statement *note 5.5::
75059
75060 iterator_specification *note 5.5.2::
75061 iteration_scheme *note 5.5::
75062 quantified_expression *note 4.5.8::
75063
75064 known_discriminant_part *note 3.7::
75065 discriminant_part *note 3.7::
75066 full_type_declaration *note 3.2.1::
75067 protected_type_declaration *note 9.4::
75068 task_type_declaration *note 9.1::
75069
75070 label *note 5.1::
75071 sequence_of_statements *note 5.1::
75072 statement *note 5.1::
75073
75074 last_bit *note 13.5.1::
75075 component_clause *note 13.5.1::
75076
75077 letter_lowercase ...
75078 identifier_start *note 2.3::
75079
75080 letter_modifier ...
75081 identifier_start *note 2.3::
75082
75083 letter_other ...
75084 identifier_start *note 2.3::
75085
75086 letter_titlecase ...
75087 identifier_start *note 2.3::
75088
75089 letter_uppercase ...
75090 identifier_start *note 2.3::
75091
75092 library_item *note 10.1.1::
75093 compilation_unit *note 10.1.1::
75094
75095 library_unit_body *note 10.1.1::
75096 library_item *note 10.1.1::
75097
75098 library_unit_declaration *note 10.1.1::
75099 library_item *note 10.1.1::
75100
75101 library_unit_renaming_declaration *note 10.1.1::
75102 library_item *note 10.1.1::
75103
75104 limited_with_clause *note 10.1.2::
75105 with_clause *note 10.1.2::
75106
75107 local_name *note 13.1::
75108 attribute_definition_clause *note 13.3::
75109 component_clause *note 13.5.1::
75110 enumeration_representation_clause *note 13.4::
75111 record_representation_clause *note 13.5.1::
75112
75113 loop_parameter_specification *note 5.5::
75114 iteration_scheme *note 5.5::
75115 quantified_expression *note 4.5.8::
75116
75117 loop_statement *note 5.5::
75118 compound_statement *note 5.1::
75119
75120 mark_non_spacing ...
75121 identifier_extend *note 2.3::
75122
75123 mark_spacing_combining ...
75124 identifier_extend *note 2.3::
75125
75126 membership_choice *note 4.4::
75127 membership_choice_list *note 4.4::
75128
75129 membership_choice_list *note 4.4::
75130 relation *note 4.4::
75131
75132 mod_clause *note J.8::
75133 record_representation_clause *note 13.5.1::
75134
75135 mode *note 6.1::
75136 formal_object_declaration *note 12.4::
75137 parameter_specification *note 6.1::
75138
75139 modular_type_definition *note 3.5.4::
75140 integer_type_definition *note 3.5.4::
75141
75142 multiplying_operator *note 4.5::
75143 term *note 4.4::
75144
75145 name *note 4.1::
75146 abort_statement *note 9.8::
75147 aspect_definition *note 13.1.1::
75148 assignment_statement *note 5.2::
75149 attribute_definition_clause *note 13.3::
75150 default_name *note 12.6::
75151 entry_call_statement *note 9.5.3::
75152 exception_choice *note 11.2::
75153 exception_renaming_declaration *note 8.5.2::
75154 exit_statement *note 5.7::
75155 explicit_actual_parameter *note 6.4::
75156 explicit_dereference *note 4.1::
75157 explicit_generic_actual_parameter *note 12.3::
75158 formal_package_declaration *note 12.7::
75159 function_call *note 6.4::
75160 generalized_reference *note 4.1.5::
75161 generic_instantiation *note 12.3::
75162 generic_renaming_declaration *note 8.5.5::
75163 goto_statement *note 5.8::
75164 implicit_dereference *note 4.1::
75165 iterator_specification *note 5.5.2::
75166 limited_with_clause *note 10.1.2::
75167 local_name *note 13.1::
75168 nonlimited_with_clause *note 10.1.2::
75169 object_renaming_declaration *note 8.5.1::
75170 package_renaming_declaration *note 8.5.3::
75171 parent_unit_name *note 10.1.1::
75172 pragma_argument_association *note 2.8::
75173 prefix *note 4.1::
75174 primary *note 4.4::
75175 procedure_call_statement *note 6.4::
75176 raise_statement *note 11.3::
75177 requeue_statement *note 9.5.4::
75178 restriction_parameter_argument *note 13.12::
75179 storage_pool_indicator *note 13.11.3::
75180 subpool_specification *note 4.8::
75181 subprogram_renaming_declaration *note 8.5.4::
75182 subtype_mark *note 3.2.2::
75183 type_conversion *note 4.6::
75184 use_package_clause *note 8.4::
75185
75186 named_array_aggregate *note 4.3.3::
75187 array_aggregate *note 4.3.3::
75188
75189 nonlimited_with_clause *note 10.1.2::
75190 with_clause *note 10.1.2::
75191
75192 null_exclusion *note 3.10::
75193 access_definition *note 3.10::
75194 access_type_definition *note 3.10::
75195 discriminant_specification *note 3.7::
75196 formal_object_declaration *note 12.4::
75197 object_renaming_declaration *note 8.5.1::
75198 parameter_and_result_profile *note 6.1::
75199 parameter_specification *note 6.1::
75200 subtype_indication *note 3.2.2::
75201
75202 null_procedure_declaration *note 6.7::
75203 basic_declaration *note 3.1::
75204
75205 null_statement *note 5.1::
75206 simple_statement *note 5.1::
75207
75208 number_decimal ...
75209 identifier_extend *note 2.3::
75210
75211 number_declaration *note 3.3.2::
75212 basic_declaration *note 3.1::
75213
75214 number_letter ...
75215 identifier_start *note 2.3::
75216
75217 numeral *note 2.4.1::
75218 base *note 2.4.2::
75219 decimal_literal *note 2.4.1::
75220 exponent *note 2.4.1::
75221
75222 numeric_literal *note 2.4::
75223 primary *note 4.4::
75224
75225 object_declaration *note 3.3.1::
75226 basic_declaration *note 3.1::
75227
75228 object_renaming_declaration *note 8.5.1::
75229 renaming_declaration *note 8.5::
75230
75231 operator_symbol *note 6.1::
75232 defining_operator_symbol *note 6.1::
75233 designator *note 6.1::
75234 direct_name *note 4.1::
75235 selector_name *note 4.1.3::
75236
75237 ordinary_fixed_point_definition *note 3.5.9::
75238 fixed_point_definition *note 3.5.9::
75239
75240 overriding_indicator *note 8.3.1::
75241 abstract_subprogram_declaration *note 3.9.3::
75242 entry_declaration *note 9.5.2::
75243 expression_function_declaration *note 6.8::
75244 generic_instantiation *note 12.3::
75245 null_procedure_declaration *note 6.7::
75246 subprogram_body *note 6.3::
75247 subprogram_body_stub *note 10.1.3::
75248 subprogram_declaration *note 6.1::
75249 subprogram_renaming_declaration *note 8.5.4::
75250
75251 package_body *note 7.2::
75252 library_unit_body *note 10.1.1::
75253 proper_body *note 3.11::
75254
75255 package_body_stub *note 10.1.3::
75256 body_stub *note 10.1.3::
75257
75258 package_declaration *note 7.1::
75259 basic_declaration *note 3.1::
75260 library_unit_declaration *note 10.1.1::
75261
75262 package_renaming_declaration *note 8.5.3::
75263 library_unit_renaming_declaration *note 10.1.1::
75264 renaming_declaration *note 8.5::
75265
75266 package_specification *note 7.1::
75267 generic_package_declaration *note 12.1::
75268 package_declaration *note 7.1::
75269
75270 parameter_and_result_profile *note 6.1::
75271 access_definition *note 3.10::
75272 access_to_subprogram_definition *note 3.10::
75273 function_specification *note 6.1::
75274
75275 parameter_association *note 6.4::
75276 actual_parameter_part *note 6.4::
75277
75278 parameter_profile *note 6.1::
75279 accept_statement *note 9.5.2::
75280 access_definition *note 3.10::
75281 access_to_subprogram_definition *note 3.10::
75282 entry_body_formal_part *note 9.5.2::
75283 entry_declaration *note 9.5.2::
75284 procedure_specification *note 6.1::
75285
75286 parameter_specification *note 6.1::
75287 formal_part *note 6.1::
75288
75289 parent_unit_name *note 10.1.1::
75290 defining_program_unit_name *note 6.1::
75291 designator *note 6.1::
75292 package_body *note 7.2::
75293 package_specification *note 7.1::
75294 subunit *note 10.1.3::
75295
75296 position *note 13.5.1::
75297 component_clause *note 13.5.1::
75298
75299 positional_array_aggregate *note 4.3.3::
75300 array_aggregate *note 4.3.3::
75301
75302 pragma_argument_association *note 2.8::
75303 pragma *note 2.8::
75304
75305 predicate *note 4.5.8::
75306 quantified_expression *note 4.5.8::
75307
75308 prefix *note 4.1::
75309 attribute_reference *note 4.1.4::
75310 function_call *note 6.4::
75311 generalized_indexing *note 4.1.6::
75312 indexed_component *note 4.1.1::
75313 procedure_call_statement *note 6.4::
75314 range_attribute_reference *note 4.1.4::
75315 selected_component *note 4.1.3::
75316 slice *note 4.1.2::
75317
75318 primary *note 4.4::
75319 factor *note 4.4::
75320
75321 private_extension_declaration *note 7.3::
75322 type_declaration *note 3.2.1::
75323
75324 private_type_declaration *note 7.3::
75325 type_declaration *note 3.2.1::
75326
75327 procedure_call_statement *note 6.4::
75328 procedure_or_entry_call *note 9.7.2::
75329 simple_statement *note 5.1::
75330
75331 procedure_or_entry_call *note 9.7.2::
75332 entry_call_alternative *note 9.7.2::
75333 triggering_statement *note 9.7.4::
75334
75335 procedure_specification *note 6.1::
75336 null_procedure_declaration *note 6.7::
75337 subprogram_specification *note 6.1::
75338
75339 proper_body *note 3.11::
75340 body *note 3.11::
75341 subunit *note 10.1.3::
75342
75343 protected_body *note 9.4::
75344 proper_body *note 3.11::
75345
75346 protected_body_stub *note 10.1.3::
75347 body_stub *note 10.1.3::
75348
75349 protected_definition *note 9.4::
75350 protected_type_declaration *note 9.4::
75351 single_protected_declaration *note 9.4::
75352
75353 protected_element_declaration *note 9.4::
75354 protected_definition *note 9.4::
75355
75356 protected_operation_declaration *note 9.4::
75357 protected_definition *note 9.4::
75358 protected_element_declaration *note 9.4::
75359
75360 protected_operation_item *note 9.4::
75361 protected_body *note 9.4::
75362
75363 protected_type_declaration *note 9.4::
75364 full_type_declaration *note 3.2.1::
75365
75366 punctuation_connector ...
75367 identifier_extend *note 2.3::
75368
75369 qualified_expression *note 4.7::
75370 allocator *note 4.8::
75371 code_statement *note 13.8::
75372 name *note 4.1::
75373
75374 quantified_expression *note 4.5.8::
75375 primary *note 4.4::
75376
75377 quantifier *note 4.5.8::
75378 quantified_expression *note 4.5.8::
75379
75380 raise_statement *note 11.3::
75381 simple_statement *note 5.1::
75382
75383 range *note 3.5::
75384 discrete_choice *note 3.8.1::
75385 discrete_range *note 3.6.1::
75386 discrete_subtype_definition *note 3.6::
75387 membership_choice *note 4.4::
75388 range_constraint *note 3.5::
75389
75390 range_attribute_designator *note 4.1.4::
75391 range_attribute_reference *note 4.1.4::
75392
75393 range_attribute_reference *note 4.1.4::
75394 range *note 3.5::
75395
75396 range_constraint *note 3.5::
75397 delta_constraint *note J.3::
75398 digits_constraint *note 3.5.9::
75399 scalar_constraint *note 3.2.2::
75400
75401 real_range_specification *note 3.5.7::
75402 decimal_fixed_point_definition *note 3.5.9::
75403 floating_point_definition *note 3.5.7::
75404 ordinary_fixed_point_definition *note 3.5.9::
75405
75406 real_type_definition *note 3.5.6::
75407 type_definition *note 3.2.1::
75408
75409 record_aggregate *note 4.3.1::
75410 aggregate *note 4.3::
75411
75412 record_component_association *note 4.3.1::
75413 record_component_association_list *note 4.3.1::
75414
75415 record_component_association_list *note 4.3.1::
75416 extension_aggregate *note 4.3.2::
75417 record_aggregate *note 4.3.1::
75418
75419 record_definition *note 3.8::
75420 record_extension_part *note 3.9.1::
75421 record_type_definition *note 3.8::
75422
75423 record_extension_part *note 3.9.1::
75424 derived_type_definition *note 3.4::
75425
75426 record_representation_clause *note 13.5.1::
75427 aspect_clause *note 13.1::
75428
75429 record_type_definition *note 3.8::
75430 type_definition *note 3.2.1::
75431
75432 relation *note 4.4::
75433 expression *note 4.4::
75434
75435 relational_operator *note 4.5::
75436 choice_relation *note 4.4::
75437 relation *note 4.4::
75438
75439 renaming_declaration *note 8.5::
75440 basic_declaration *note 3.1::
75441
75442 requeue_statement *note 9.5.4::
75443 simple_statement *note 5.1::
75444
75445 restriction_parameter_argument *note 13.12::
75446 restriction *note 13.12::
75447
75448 return_subtype_indication *note 6.5::
75449 extended_return_object_declaration *note 6.5::
75450
75451 scalar_constraint *note 3.2.2::
75452 constraint *note 3.2.2::
75453
75454 select_alternative *note 9.7.1::
75455 selective_accept *note 9.7.1::
75456
75457 select_statement *note 9.7::
75458 compound_statement *note 5.1::
75459
75460 selected_component *note 4.1.3::
75461 name *note 4.1::
75462
75463 selective_accept *note 9.7.1::
75464 select_statement *note 9.7::
75465
75466 selector_name *note 4.1.3::
75467 component_choice_list *note 4.3.1::
75468 discriminant_association *note 3.7.1::
75469 formal_package_association *note 12.7::
75470 generic_association *note 12.3::
75471 parameter_association *note 6.4::
75472 selected_component *note 4.1.3::
75473
75474 sequence_of_statements *note 5.1::
75475 abortable_part *note 9.7.4::
75476 accept_alternative *note 9.7.1::
75477 case_statement_alternative *note 5.4::
75478 conditional_entry_call *note 9.7.3::
75479 delay_alternative *note 9.7.1::
75480 entry_call_alternative *note 9.7.2::
75481 exception_handler *note 11.2::
75482 handled_sequence_of_statements *note 11.2::
75483 if_statement *note 5.3::
75484 loop_statement *note 5.5::
75485 selective_accept *note 9.7.1::
75486 triggering_alternative *note 9.7.4::
75487
75488 signed_integer_type_definition *note 3.5.4::
75489 integer_type_definition *note 3.5.4::
75490
75491 simple_expression *note 4.4::
75492 choice_relation *note 4.4::
75493 first_bit *note 13.5.1::
75494 last_bit *note 13.5.1::
75495 range *note 3.5::
75496 real_range_specification *note 3.5.7::
75497 relation *note 4.4::
75498 signed_integer_type_definition *note 3.5.4::
75499
75500 simple_return_statement *note 6.5::
75501 simple_statement *note 5.1::
75502
75503 simple_statement *note 5.1::
75504 statement *note 5.1::
75505
75506 single_protected_declaration *note 9.4::
75507 object_declaration *note 3.3.1::
75508
75509 single_task_declaration *note 9.1::
75510 object_declaration *note 3.3.1::
75511
75512 slice *note 4.1.2::
75513 name *note 4.1::
75514
75515 statement *note 5.1::
75516 sequence_of_statements *note 5.1::
75517
75518 statement_identifier *note 5.1::
75519 block_statement *note 5.6::
75520 label *note 5.1::
75521 loop_statement *note 5.5::
75522
75523 string_element *note 2.6::
75524 string_literal *note 2.6::
75525
75526 string_literal *note 2.6::
75527 operator_symbol *note 6.1::
75528 primary *note 4.4::
75529
75530 subpool_specification *note 4.8::
75531 allocator *note 4.8::
75532
75533 subprogram_body *note 6.3::
75534 library_unit_body *note 10.1.1::
75535 proper_body *note 3.11::
75536 protected_operation_item *note 9.4::
75537
75538 subprogram_body_stub *note 10.1.3::
75539 body_stub *note 10.1.3::
75540
75541 subprogram_declaration *note 6.1::
75542 basic_declaration *note 3.1::
75543 library_unit_declaration *note 10.1.1::
75544 protected_operation_declaration *note 9.4::
75545 protected_operation_item *note 9.4::
75546
75547 subprogram_default *note 12.6::
75548 formal_abstract_subprogram_declaration *note 12.6::
75549 formal_concrete_subprogram_declaration *note 12.6::
75550
75551 subprogram_renaming_declaration *note 8.5.4::
75552 library_unit_renaming_declaration *note 10.1.1::
75553 renaming_declaration *note 8.5::
75554
75555 subprogram_specification *note 6.1::
75556 abstract_subprogram_declaration *note 3.9.3::
75557 formal_abstract_subprogram_declaration *note 12.6::
75558 formal_concrete_subprogram_declaration *note 12.6::
75559 generic_subprogram_declaration *note 12.1::
75560 subprogram_body *note 6.3::
75561 subprogram_body_stub *note 10.1.3::
75562 subprogram_declaration *note 6.1::
75563 subprogram_renaming_declaration *note 8.5.4::
75564
75565 subtype_declaration *note 3.2.2::
75566 basic_declaration *note 3.1::
75567
75568 subtype_indication *note 3.2.2::
75569 access_to_object_definition *note 3.10::
75570 allocator *note 4.8::
75571 component_definition *note 3.6::
75572 derived_type_definition *note 3.4::
75573 discrete_choice *note 3.8.1::
75574 discrete_range *note 3.6.1::
75575 discrete_subtype_definition *note 3.6::
75576 iterator_specification *note 5.5.2::
75577 object_declaration *note 3.3.1::
75578 private_extension_declaration *note 7.3::
75579 return_subtype_indication *note 6.5::
75580 subtype_declaration *note 3.2.2::
75581
75582 subtype_mark *note 3.2.2::
75583 access_definition *note 3.10::
75584 ancestor_part *note 4.3.2::
75585 discriminant_specification *note 3.7::
75586 explicit_generic_actual_parameter *note 12.3::
75587 formal_derived_type_definition *note 12.5.1::
75588 formal_object_declaration *note 12.4::
75589 index_subtype_definition *note 3.6::
75590 interface_list *note 3.9.4::
75591 membership_choice *note 4.4::
75592 object_renaming_declaration *note 8.5.1::
75593 parameter_and_result_profile *note 6.1::
75594 parameter_specification *note 6.1::
75595 qualified_expression *note 4.7::
75596 subtype_indication *note 3.2.2::
75597 type_conversion *note 4.6::
75598 use_type_clause *note 8.4::
75599
75600 subunit *note 10.1.3::
75601 compilation_unit *note 10.1.1::
75602
75603 task_body *note 9.1::
75604 proper_body *note 3.11::
75605
75606 task_body_stub *note 10.1.3::
75607 body_stub *note 10.1.3::
75608
75609 task_definition *note 9.1::
75610 single_task_declaration *note 9.1::
75611 task_type_declaration *note 9.1::
75612
75613 task_item *note 9.1::
75614 task_definition *note 9.1::
75615
75616 task_type_declaration *note 9.1::
75617 full_type_declaration *note 3.2.1::
75618
75619 term *note 4.4::
75620 simple_expression *note 4.4::
75621
75622 terminate_alternative *note 9.7.1::
75623 select_alternative *note 9.7.1::
75624
75625 timed_entry_call *note 9.7.2::
75626 select_statement *note 9.7::
75627
75628 triggering_alternative *note 9.7.4::
75629 asynchronous_select *note 9.7.4::
75630
75631 triggering_statement *note 9.7.4::
75632 triggering_alternative *note 9.7.4::
75633
75634 type_conversion *note 4.6::
75635 name *note 4.1::
75636
75637 type_declaration *note 3.2.1::
75638 basic_declaration *note 3.1::
75639
75640 type_definition *note 3.2.1::
75641 full_type_declaration *note 3.2.1::
75642
75643 unary_adding_operator *note 4.5::
75644 simple_expression *note 4.4::
75645
75646 unconstrained_array_definition *note 3.6::
75647 array_type_definition *note 3.6::
75648
75649 underline ...
75650 based_numeral *note 2.4.2::
75651 numeral *note 2.4.1::
75652
75653 unknown_discriminant_part *note 3.7::
75654 discriminant_part *note 3.7::
75655
75656 use_clause *note 8.4::
75657 basic_declarative_item *note 3.11::
75658 context_item *note 10.1.2::
75659 generic_formal_part *note 12.1::
75660
75661 use_package_clause *note 8.4::
75662 use_clause *note 8.4::
75663
75664 use_type_clause *note 8.4::
75665 use_clause *note 8.4::
75666
75667 variant *note 3.8.1::
75668 variant_part *note 3.8.1::
75669
75670 variant_part *note 3.8.1::
75671 component_list *note 3.8::
75672
75673 with_clause *note 10.1.2::
75674 context_item *note 10.1.2::
75675
75676 \1f
75677 File: arm2012.info, Node: Annex Q, Next: Index, Prev: Annex P, Up: Top
75678
75679 Annex Q Language-Defined Entities
75680 *********************************
75681
75682 1/2
75683 This annex lists the language-defined entities of the language. A list
75684 of language-defined library units can be found in *note Annex A::,
75685 "*note Annex A:: Predefined Language Environment".
75686
75687 * Menu:
75688
75689 * Q.1 :: Language-Defined Packages
75690 * Q.2 :: Language-Defined Types and Subtypes
75691 * Q.3 :: Language-Defined Subprograms
75692 * Q.4 :: Language-Defined Exceptions
75693 * Q.5 :: Language-Defined Objects
75694
75695 \1f
75696 File: arm2012.info, Node: Q.1, Next: Q.2, Up: Annex Q
75697
75698 Q.1 Language-Defined Packages
75699 =============================
75700
75701 1/3
75702 This subclause lists all language-defined packages.
75703
75704
75705
75706 Ada *note A.2(2): 5403.
75707
75708 Address_To_Access_Conversions
75709 child of System *note 13.7.2(2): 5109.
75710
75711 Arithmetic
75712 child of Ada.Calendar *note 9.6.1(8/2): 4148.
75713
75714 ASCII
75715 in Standard *note A.1(36.3/2): 5392.
75716
75717 Assertions
75718 child of Ada *note 11.4.2(12/2): 4576.
75719
75720 Asynchronous_Task_Control
75721 child of Ada *note D.11(3/2): 7913.
75722
75723 Bounded
75724 child of Ada.Strings *note A.4.4(3): 5790.
75725
75726 Bounded_IO
75727 child of Ada.Text_IO *note A.10.11(3/2): 6482.
75728 child of Ada.Wide_Text_IO *note A.11(4/3): 6506.
75729 child of Ada.Wide_Wide_Text_IO *note A.11(4/3): 6507.
75730
75731 Bounded_Priority_Queues
75732 child of Ada.Containers *note A.18.31(2/3): 7305.
75733
75734 Bounded_Synchronized_Queues
75735 child of Ada.Containers *note A.18.29(2/3): 7292.
75736
75737 C
75738 child of Interfaces *note B.3(4): 7368.
75739
75740 Calendar
75741 child of Ada *note 9.6(10): 4120.
75742
75743 Characters
75744 child of Ada *note A.3.1(2): 5404.
75745
75746 COBOL
75747 child of Interfaces *note B.4(7): 7479.
75748
75749 Command_Line
75750 child of Ada *note A.15(3): 6571.
75751
75752 Complex_Arrays
75753 child of Ada.Numerics *note G.3.2(53/2): 8343.
75754
75755 Complex_Elementary_Functions
75756 child of Ada.Numerics *note G.1.2(9/1): 8227.
75757
75758 Complex_Text_IO
75759 child of Ada *note G.1.3(9.1/2): 8245.
75760
75761 Complex_Types
75762 child of Ada.Numerics *note G.1.1(25/1): 8200.
75763
75764 Complex_IO
75765 child of Ada.Text_IO *note G.1.3(3): 8235.
75766 child of Ada.Wide_Text_IO *note G.1.4(1): 8247.
75767 child of Ada.Wide_Wide_Text_IO *note G.1.5(1/2): 8249.
75768
75769 Constants
75770 child of Ada.Strings.Maps *note A.4.6(3/2): 5901.
75771
75772 Containers
75773 child of Ada *note A.18.1(3/2): 6659.
75774
75775 Conversions
75776 child of Ada.Characters *note A.3.4(2/2): 5676.
75777 child of Ada.Strings.UTF_Encoding *note A.4.11(15/3): 6022.
75778
75779 Decimal
75780 child of Ada *note F.2(2): 8144.
75781
75782 Decimal_Conversions
75783 in Interfaces.COBOL *note B.4(31): 7513.
75784
75785 Decimal_IO
75786 in Ada.Text_IO *note A.10.1(73): 6446.
75787
75788 Decimal_Output
75789 in Ada.Text_IO.Editing *note F.3.3(11): 8167.
75790
75791 Direct_IO
75792 child of Ada *note A.8.4(2): 6269.
75793
75794 Directories
75795 child of Ada *note A.16(3/2): 6580.
75796
75797 Discrete_Random
75798 child of Ada.Numerics *note A.5.2(17): 6107.
75799
75800 Dispatching
75801 child of Ada *note D.2.1(1.2/3): 7698.
75802
75803 Dispatching_Domains
75804 child of System.Multiprocessors *note D.16.1(3/3): 8002.
75805
75806 Doubly_Linked_Lists
75807 child of Ada.Containers *note A.18.3(5/3): 6766.
75808
75809 Dynamic_Priorities
75810 child of Ada *note D.5.1(3/2): 7794.
75811
75812 EDF
75813 child of Ada.Dispatching *note D.2.6(9/2): 7750.
75814 child of Ada.Synchronous_Task_Control *note D.10(5.2/3): 7904.
75815
75816 Editing
75817 child of Ada.Text_IO *note F.3.3(3): 8155.
75818 child of Ada.Wide_Text_IO *note F.3.4(1): 8175.
75819 child of Ada.Wide_Wide_Text_IO *note F.3.5(1/2): 8177.
75820
75821 Elementary_Functions
75822 child of Ada.Numerics *note A.5.1(9/1): 6086.
75823
75824 Enumeration_IO
75825 in Ada.Text_IO *note A.10.1(79): 6456.
75826
75827 Environment_Variables
75828 child of Ada *note A.17(3/2): 6644.
75829
75830 Exceptions
75831 child of Ada *note 11.4.1(2/2): 4536.
75832
75833 Execution_Time
75834 child of Ada *note D.14(3/2): 7924.
75835
75836 Finalization
75837 child of Ada *note 7.6(4/3): 3642.
75838
75839 Fixed
75840 child of Ada.Strings *note A.4.3(5): 5754.
75841
75842 Fixed_IO
75843 in Ada.Text_IO *note A.10.1(68): 6436.
75844
75845 Float_Random
75846 child of Ada.Numerics *note A.5.2(5): 6094.
75847
75848 Float_Text_IO
75849 child of Ada *note A.10.9(33): 6481.
75850
75851 Float_Wide_Text_IO
75852 child of Ada *note A.11(2/2): 6502.
75853
75854 Float_Wide_Wide_Text_IO
75855 child of Ada *note A.11(3/2): 6505.
75856
75857 Float_IO
75858 in Ada.Text_IO *note A.10.1(63): 6426.
75859
75860 Formatting
75861 child of Ada.Calendar *note 9.6.1(15/2): 4152.
75862
75863 Fortran
75864 child of Interfaces *note B.5(4): 7533.
75865
75866 Generic_Complex_Arrays
75867 child of Ada.Numerics *note G.3.2(2/2): 8307.
75868
75869 Generic_Complex_Elementary_Functions
75870 child of Ada.Numerics *note G.1.2(2/2): 8206.
75871
75872 Generic_Complex_Types
75873 child of Ada.Numerics *note G.1.1(2/1): 8179.
75874
75875 Generic_Dispatching_Constructor
75876 child of Ada.Tags *note 3.9(18.2/3): 2118.
75877
75878 Generic_Elementary_Functions
75879 child of Ada.Numerics *note A.5.1(3): 6057.
75880
75881 Generic_Bounded_Length
75882 in Ada.Strings.Bounded *note A.4.4(4): 5791.
75883
75884 Generic_Keys
75885 in Ada.Containers.Hashed_Sets *note A.18.8(50/2): 7031.
75886 in Ada.Containers.Ordered_Sets *note A.18.9(62/2): 7109.
75887
75888 Generic_Real_Arrays
75889 child of Ada.Numerics *note G.3.1(2/2): 8291.
75890
75891 Generic_Sorting
75892 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(47/2): 6813.
75893 in Ada.Containers.Vectors *note A.18.2(75/2): 6741.
75894
75895 Group_Budgets
75896 child of Ada.Execution_Time *note D.14.2(3/3): 7955.
75897
75898 Handling
75899 child of Ada.Characters *note A.3.2(2/2): 5407.
75900 child of Ada.Wide_Characters *note A.3.5(3/3): 5695.
75901 child of Ada.Wide_Wide_Characters *note A.3.6(1/3): 5716.
75902
75903 Hashed_Maps
75904 child of Ada.Containers *note A.18.5(2/3): 6852.
75905
75906 Hashed_Sets
75907 child of Ada.Containers *note A.18.8(2/3): 6984.
75908
75909 Hierarchical_File_Names
75910 child of Ada.Directories *note A.16.1(3/3): 6631.
75911
75912 Indefinite_Doubly_Linked_Lists
75913 child of Ada.Containers *note A.18.12(2/3): 7220.
75914
75915 Indefinite_Hashed_Maps
75916 child of Ada.Containers *note A.18.13(2/3): 7221.
75917
75918 Indefinite_Hashed_Sets
75919 child of Ada.Containers *note A.18.15(2/3): 7223.
75920
75921 Indefinite_Holders
75922 child of Ada.Containers *note A.18.18(5/3): 7227.
75923
75924 Indefinite_Multiway_Trees
75925 child of Ada.Containers *note A.18.17(2/3): 7225.
75926
75927 Indefinite_Ordered_Maps
75928 child of Ada.Containers *note A.18.14(2/3): 7222.
75929
75930 Indefinite_Ordered_Sets
75931 child of Ada.Containers *note A.18.16(2/3): 7224.
75932
75933 Indefinite_Vectors
75934 child of Ada.Containers *note A.18.11(2/3): 7219.
75935
75936 Information
75937 child of Ada.Directories *note A.16(124/2): 6630.
75938
75939 Integer_Text_IO
75940 child of Ada *note A.10.8(21): 6480.
75941
75942 Integer_Wide_Text_IO
75943 child of Ada *note A.11(2/2): 6501.
75944
75945 Integer_Wide_Wide_Text_IO
75946 child of Ada *note A.11(3/2): 6504.
75947
75948 Integer_IO
75949 in Ada.Text_IO *note A.10.1(52): 6408.
75950
75951 Interfaces *note B.2(3): 7363.
75952
75953 Interrupts
75954 child of Ada *note C.3.2(2/3): 7593.
75955 child of Ada.Execution_Time *note D.14.3(3/3): 7980.
75956
75957 IO_Exceptions
75958 child of Ada *note A.13(3): 6558.
75959
75960 Iterator_Interfaces
75961 child of Ada *note 5.5.1(2/3): 3202.
75962
75963 Latin_1
75964 child of Ada.Characters *note A.3.3(3): 5445.
75965
75966 List_Iterator_Interfaces
75967 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(9.2/3): 6772.
75968
75969 Locales
75970 child of Ada *note A.19(3/3): 7313.
75971
75972 Machine_Code
75973 child of System *note 13.8(7): 5118.
75974
75975 Map_Iterator_Interfaces
75976 in Ada.Containers.Hashed_Maps *note A.18.5(6.2/3): 6858.
75977 in Ada.Containers.Ordered_Maps *note A.18.6(7.2/3): 6911.
75978
75979 Maps
75980 child of Ada.Strings *note A.4.2(3/2): 5730.
75981
75982 Modular_IO
75983 in Ada.Text_IO *note A.10.1(57): 6417.
75984
75985 Multiprocessors
75986 child of System *note D.16(3/3): 7995.
75987
75988 Multiway_Trees
75989 child of Ada.Containers *note A.18.10(7/3): 7144.
75990
75991 Names
75992 child of Ada.Interrupts *note C.3.2(12): 7604.
75993
75994 Non_Preemptive
75995 child of Ada.Dispatching *note D.2.4(2.2/3): 7735.
75996
75997 Numerics
75998 child of Ada *note A.5(3/2): 6053.
75999
76000 Ordered_Maps
76001 child of Ada.Containers *note A.18.6(2/3): 6904.
76002
76003 Ordered_Sets
76004 child of Ada.Containers *note A.18.9(2/3): 7056.
76005
76006 Pointers
76007 child of Interfaces.C *note B.3.2(4): 7452.
76008
76009 Real_Arrays
76010 child of Ada.Numerics *note G.3.1(31/2): 8303.
76011
76012 Real_Time
76013 child of Ada *note D.8(3): 7866.
76014
76015 Round_Robin
76016 child of Ada.Dispatching *note D.2.5(4/2): 7742.
76017
76018 RPC
76019 child of System *note E.5(3): 8125.
76020
76021 Sequential_IO
76022 child of Ada *note A.8.1(2): 6245.
76023
76024 Set_Iterator_Interfaces
76025 in Ada.Containers.Hashed_Sets *note A.18.8(6.2/3): 6990.
76026 in Ada.Containers.Ordered_Sets *note A.18.9(7.2/3): 7063.
76027
76028 Single_Precision_Complex_Types
76029 in Interfaces.Fortran *note B.5(8): 7538.
76030
76031 Standard *note A.1(4): 5383.
76032
76033 Storage_Elements
76034 child of System *note 13.7.1(2/2): 5097.
76035
76036 Storage_IO
76037 child of Ada *note A.9(3): 6300.
76038
76039 Storage_Pools
76040 child of System *note 13.11(5): 5152.
76041
76042 Stream_IO
76043 child of Ada.Streams *note A.12.1(3/3): 6513.
76044
76045 Streams
76046 child of Ada *note 13.13.1(2): 5291.
76047
76048 Strings
76049 child of Ada *note A.4.1(3): 5717.
76050 child of Ada.Strings.UTF_Encoding *note A.4.11(22/3): 6028.
76051 child of Interfaces.C *note B.3.1(3): 7430.
76052
76053 Subpools
76054 child of System.Storage_Pools *note 13.11.4(3/3): 5216.
76055
76056 Synchronized_Queue_Interfaces
76057 child of Ada.Containers *note A.18.27(3/3): 7279.
76058
76059 Synchronous_Barriers
76060 child of Ada *note D.10.1(3/3): 7909.
76061
76062 Synchronous_Task_Control
76063 child of Ada *note D.10(3/2): 7898.
76064
76065 System *note 13.7(3/2): 5070.
76066
76067 Tags
76068 child of Ada *note 3.9(6/2): 2093.
76069
76070 Task_Attributes
76071 child of Ada *note C.7.2(2): 7657.
76072
76073 Task_Identification
76074 child of Ada *note C.7.1(2/2): 7637.
76075
76076 Task_Termination
76077 child of Ada *note C.7.3(2/2): 7669.
76078
76079 Text_Streams
76080 child of Ada.Text_IO *note A.12.2(3): 6549.
76081 child of Ada.Wide_Text_IO *note A.12.3(3): 6552.
76082 child of Ada.Wide_Wide_Text_IO *note A.12.4(3/2): 6555.
76083
76084 Text_IO
76085 child of Ada *note A.10.1(2): 6319.
76086
76087 Time_Zones
76088 child of Ada.Calendar *note 9.6.1(2/2): 4144.
76089
76090 Timers
76091 child of Ada.Execution_Time *note D.14.1(3/2): 7940.
76092
76093 Timing_Events
76094 child of Ada.Real_Time *note D.15(3/2): 7983.
76095
76096 Tree_Iterator_Interfaces
76097 in Ada.Containers.Multiway_Trees *note A.18.10(13/3): 7150.
76098
76099 Unbounded
76100 child of Ada.Strings *note A.4.5(3): 5849.
76101
76102 Unbounded_IO
76103 child of Ada.Text_IO *note A.10.12(3/2): 6491.
76104 child of Ada.Wide_Text_IO *note A.11(5/3): 6508.
76105 child of Ada.Wide_Wide_Text_IO *note A.11(5/3): 6509.
76106
76107 Unbounded_Priority_Queues
76108 child of Ada.Containers *note A.18.30(2/3): 7298.
76109
76110 Unbounded_Synchronized_Queues
76111 child of Ada.Containers *note A.18.28(2/3): 7286.
76112
76113 UTF_Encoding
76114 child of Ada.Strings *note A.4.11(3/3): 6011.
76115
76116 Vector_Iterator_Interfaces
76117 in Ada.Containers.Vectors *note A.18.2(11.2/3): 6676.
76118
76119 Vectors
76120 child of Ada.Containers *note A.18.2(6/3): 6668.
76121
76122 Wide_Bounded
76123 child of Ada.Strings *note A.4.7(1/3): 5917.
76124
76125 Wide_Constants
76126 child of Ada.Strings.Wide_Maps *note A.4.7(1/3): 5931, *note
76127 A.4.8(28/2): 5992.
76128
76129 Wide_Equal_Case_Insensitive
76130 child of Ada.Strings *note A.4.7(1/3): 5923.
76131
76132 Wide_Fixed
76133 child of Ada.Strings *note A.4.7(1/3): 5916.
76134
76135 Wide_Hash
76136 child of Ada.Strings *note A.4.7(1/3): 5919.
76137
76138 Wide_Hash_Case_Insensitive
76139 child of Ada.Strings *note A.4.7(1/3): 5927.
76140
76141 Wide_Maps
76142 child of Ada.Strings *note A.4.7(3): 5932.
76143
76144 Wide_Text_IO
76145 child of Ada *note A.11(2/2): 6500.
76146
76147 Wide_Unbounded
76148 child of Ada.Strings *note A.4.7(1/3): 5918.
76149
76150 Wide_Characters
76151 child of Ada *note A.3.1(4/2): 5405.
76152
76153 Wide_Strings
76154 child of Ada.Strings.UTF_Encoding *note A.4.11(30/3): 6035.
76155
76156 Wide_Wide_Constants
76157 child of Ada.Strings.Wide_Wide_Maps *note A.4.8(1/3): 5970.
76158
76159 Wide_Wide_Equal_Case_Insensitive
76160 child of Ada.Strings *note A.4.8(1/3): 5962.
76161
76162 Wide_Wide_Hash
76163 child of Ada.Strings *note A.4.8(1/3): 5958.
76164
76165 Wide_Wide_Hash_Case_Insensitive
76166 child of Ada.Strings *note A.4.8(1/3): 5966.
76167
76168 Wide_Wide_Text_IO
76169 child of Ada *note A.11(3/2): 6503.
76170
76171 Wide_Wide_Bounded
76172 child of Ada.Strings *note A.4.8(1/3): 5956.
76173
76174 Wide_Wide_Characters
76175 child of Ada *note A.3.1(6/2): 5406.
76176
76177 Wide_Wide_Fixed
76178 child of Ada.Strings *note A.4.8(1/3): 5955.
76179
76180 Wide_Wide_Maps
76181 child of Ada.Strings *note A.4.8(3/2): 5971.
76182
76183 Wide_Wide_Strings
76184 child of Ada.Strings.UTF_Encoding *note A.4.11(38/3): 6042.
76185
76186 Wide_Wide_Unbounded
76187 child of Ada.Strings *note A.4.8(1/3): 5957.
76188
76189 \1f
76190 File: arm2012.info, Node: Q.2, Next: Q.3, Prev: Q.1, Up: Annex Q
76191
76192 Q.2 Language-Defined Types and Subtypes
76193 =======================================
76194
76195 1/3
76196 This subclause lists all language-defined types and subtypes.
76197
76198
76199
76200 Address
76201 in System *note 13.7(12): 5082.
76202
76203 Alignment
76204 in Ada.Strings *note A.4.1(6): 5725.
76205
76206 Alphanumeric
76207 in Interfaces.COBOL *note B.4(16/3): 7491.
76208
76209 Any_Priority subtype of Integer
76210 in System *note 13.7(16): 5092.
76211
76212 Attribute_Handle
76213 in Ada.Task_Attributes *note C.7.2(3): 7658.
76214
76215 Barrier_Limit subtype of Positive
76216 in Ada.Synchronous_Barriers *note D.10.1(4/3): 7910.
76217
76218 Binary
76219 in Interfaces.COBOL *note B.4(10): 7482.
76220
76221 Binary_Format
76222 in Interfaces.COBOL *note B.4(24): 7503.
76223
76224 Bit_Order
76225 in System *note 13.7(15/2): 5088.
76226
76227 Boolean
76228 in Standard *note A.1(5): 5384.
76229
76230 Bounded_String
76231 in Ada.Strings.Bounded *note A.4.4(6): 5793.
76232
76233 Buffer_Type subtype of Storage_Array
76234 in Ada.Storage_IO *note A.9(4): 6302.
76235
76236 Byte
76237 in Interfaces.COBOL *note B.4(29/3): 7510.
76238
76239 Byte_Array
76240 in Interfaces.COBOL *note B.4(29/3): 7511.
76241
76242 C_float
76243 in Interfaces.C *note B.3(15): 7384.
76244
76245 Cause_Of_Termination
76246 in Ada.Task_Termination *note C.7.3(3/2): 7670.
76247
76248 char
76249 in Interfaces.C *note B.3(19): 7387.
76250
76251 char16_array
76252 in Interfaces.C *note B.3(39.5/3): 7411.
76253
76254 char16_t
76255 in Interfaces.C *note B.3(39.2/2): 7407.
76256
76257 char32_array
76258 in Interfaces.C *note B.3(39.14/3): 7421.
76259
76260 char32_t
76261 in Interfaces.C *note B.3(39.11/2): 7417.
76262
76263 char_array
76264 in Interfaces.C *note B.3(23/3): 7391.
76265
76266 char_array_access
76267 in Interfaces.C.Strings *note B.3.1(4): 7431.
76268
76269 Character
76270 in Standard *note A.1(35/3): 5389.
76271
76272 Character_Mapping
76273 in Ada.Strings.Maps *note A.4.2(20/2): 5744.
76274
76275 Character_Mapping_Function
76276 in Ada.Strings.Maps *note A.4.2(25): 5750.
76277
76278 Character_Range
76279 in Ada.Strings.Maps *note A.4.2(6): 5733.
76280
76281 Character_Ranges
76282 in Ada.Strings.Maps *note A.4.2(7): 5734.
76283
76284 Character_Sequence subtype of String
76285 in Ada.Strings.Maps *note A.4.2(16): 5740.
76286
76287 Character_Set
76288 in Ada.Strings.Maps *note A.4.2(4/2): 5731.
76289 in Interfaces.Fortran *note B.5(11): 7543.
76290
76291 chars_ptr
76292 in Interfaces.C.Strings *note B.3.1(5/2): 7432.
76293
76294 chars_ptr_array
76295 in Interfaces.C.Strings *note B.3.1(6/2): 7433.
76296
76297 COBOL_Character
76298 in Interfaces.COBOL *note B.4(13): 7488.
76299
76300 Complex
76301 in Ada.Numerics.Generic_Complex_Types *note G.1.1(3): 8180.
76302 in Interfaces.Fortran *note B.5(9): 7539.
76303
76304 Complex_Matrix
76305 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(4/2): 8309.
76306
76307 Complex_Vector
76308 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(4/2): 8308.
76309
76310 Constant_Reference_Type
76311 in Ada.Containers.Indefinite_Holders *note A.18.18(16/3): 7237.
76312 in Ada.Containers.Multiway_Trees *note A.18.10(28/3): 7164.
76313
76314 Controlled
76315 in Ada.Finalization *note 7.6(5/2): 3643.
76316
76317 Count
76318 in Ada.Direct_IO *note A.8.4(4): 6272.
76319 in Ada.Streams.Stream_IO *note A.12.1(7): 6517.
76320 in Ada.Text_IO *note A.10.1(5): 6322.
76321
76322 Count_Type
76323 in Ada.Containers *note A.18.1(5/2): 6661.
76324
76325 Country_Code
76326 in Ada.Locales *note A.19(4/3): 7315.
76327
76328 CPU subtype of CPU_Range
76329 in System.Multiprocessors *note D.16(4/3): 7998.
76330
76331 CPU_Range
76332 in System.Multiprocessors *note D.16(4/3): 7996.
76333
76334 CPU_Time
76335 in Ada.Execution_Time *note D.14(4/2): 7925.
76336
76337 Cursor
76338 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(7/2): 6768.
76339 in Ada.Containers.Hashed_Maps *note A.18.5(4/2): 6854.
76340 in Ada.Containers.Hashed_Sets *note A.18.8(4/2): 6986.
76341 in Ada.Containers.Multiway_Trees *note A.18.10(9/3): 7146.
76342 in Ada.Containers.Ordered_Maps *note A.18.6(5/2): 6907.
76343 in Ada.Containers.Ordered_Sets *note A.18.9(5/2): 7059.
76344 in Ada.Containers.Vectors *note A.18.2(9/2): 6672.
76345
76346 Day_Count
76347 in Ada.Calendar.Arithmetic *note 9.6.1(10/2): 4149.
76348
76349 Day_Duration subtype of Duration
76350 in Ada.Calendar *note 9.6(11/2): 4125.
76351
76352 Day_Name
76353 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4153.
76354
76355 Day_Number subtype of Integer
76356 in Ada.Calendar *note 9.6(11/2): 4124.
76357
76358 Deadline subtype of Time
76359 in Ada.Dispatching.EDF *note D.2.6(9/2): 7751.
76360
76361 Decimal_Element
76362 in Interfaces.COBOL *note B.4(12/3): 7486.
76363
76364 Direction
76365 in Ada.Strings *note A.4.1(6): 5728.
76366
76367 Directory_Entry_Type
76368 in Ada.Directories *note A.16(29/2): 6604.
76369
76370 Dispatching_Domain
76371 in System.Multiprocessors.Dispatching_Domains *note D.16.1(5/3):
76372 8004.
76373
76374 Display_Format
76375 in Interfaces.COBOL *note B.4(22): 7497.
76376
76377 double
76378 in Interfaces.C *note B.3(16): 7385.
76379
76380 Double_Precision
76381 in Interfaces.Fortran *note B.5(6): 7536.
76382
76383 Duration
76384 in Standard *note A.1(43): 5397.
76385
76386 Encoding_Scheme
76387 in Ada.Strings.UTF_Encoding *note A.4.11(4/3): 6012.
76388
76389 Exception_Id
76390 in Ada.Exceptions *note 11.4.1(2/2): 4537.
76391
76392 Exception_Occurrence
76393 in Ada.Exceptions *note 11.4.1(3/2): 4542.
76394
76395 Exception_Occurrence_Access
76396 in Ada.Exceptions *note 11.4.1(3/2): 4543.
76397
76398 Exit_Status
76399 in Ada.Command_Line *note A.15(7): 6575.
76400
76401 Extended_Index subtype of Index_Type'Base
76402 in Ada.Containers.Vectors *note A.18.2(7/2): 6669.
76403
76404 Field subtype of Integer
76405 in Ada.Text_IO *note A.10.1(6): 6325.
76406
76407 File_Access
76408 in Ada.Text_IO *note A.10.1(18): 6347.
76409
76410 File_Kind
76411 in Ada.Directories *note A.16(22/2): 6598.
76412
76413 File_Mode
76414 in Ada.Direct_IO *note A.8.4(4): 6271.
76415 in Ada.Sequential_IO *note A.8.1(4): 6247.
76416 in Ada.Streams.Stream_IO *note A.12.1(6): 6516.
76417 in Ada.Text_IO *note A.10.1(4): 6321.
76418
76419 File_Size
76420 in Ada.Directories *note A.16(23/2): 6599.
76421
76422 File_Type
76423 in Ada.Direct_IO *note A.8.4(3): 6270.
76424 in Ada.Sequential_IO *note A.8.1(3): 6246.
76425 in Ada.Streams.Stream_IO *note A.12.1(5): 6515.
76426 in Ada.Text_IO *note A.10.1(3): 6320.
76427
76428 Filter_Type
76429 in Ada.Directories *note A.16(30/2): 6605.
76430
76431 Float
76432 in Standard *note A.1(21): 5388.
76433
76434 Floating
76435 in Interfaces.COBOL *note B.4(9): 7480.
76436
76437 Fortran_Character
76438 in Interfaces.Fortran *note B.5(12/3): 7544.
76439
76440 Fortran_Integer
76441 in Interfaces.Fortran *note B.5(5): 7534.
76442
76443 Forward_Iterator
76444 in Ada.Iterator_Interfaces *note 5.5.1(3/3): 3203.
76445
76446 Generator
76447 in Ada.Numerics.Discrete_Random *note A.5.2(19): 6108.
76448 in Ada.Numerics.Float_Random *note A.5.2(7): 6095.
76449
76450 Group_Budget
76451 in Ada.Execution_Time.Group_Budgets *note D.14.2(4/3): 7956.
76452
76453 Group_Budget_Handler
76454 in Ada.Execution_Time.Group_Budgets *note D.14.2(5/2): 7957.
76455
76456 Hash_Type
76457 in Ada.Containers *note A.18.1(4/2): 6660.
76458
76459 Holder
76460 in Ada.Containers.Indefinite_Holders *note A.18.18(6/3): 7228.
76461
76462 Hour_Number subtype of Natural
76463 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4162.
76464
76465 Imaginary
76466 in Ada.Numerics.Generic_Complex_Types *note G.1.1(4/2): 8181.
76467
76468 Imaginary subtype of Imaginary
76469 in Interfaces.Fortran *note B.5(10): 7540.
76470
76471 int
76472 in Interfaces.C *note B.3(7): 7373.
76473
76474 Integer
76475 in Standard *note A.1(12): 5385.
76476
76477 Integer_Address
76478 in System.Storage_Elements *note 13.7.1(10/3): 5103.
76479
76480 Interrupt_Id
76481 in Ada.Interrupts *note C.3.2(2/3): 7594.
76482
76483 Interrupt_Priority subtype of Any_Priority
76484 in System *note 13.7(16): 5094.
76485
76486 ISO_646 subtype of Character
76487 in Ada.Characters.Handling *note A.3.2(9): 5430.
76488
76489 Language_Code
76490 in Ada.Locales *note A.19(4/3): 7314.
76491
76492 Leap_Seconds_Count subtype of Integer
76493 in Ada.Calendar.Arithmetic *note 9.6.1(11/2): 4150.
76494
76495 Length_Range subtype of Natural
76496 in Ada.Strings.Bounded *note A.4.4(8): 5795.
76497
76498 Limited_Controlled
76499 in Ada.Finalization *note 7.6(7/2): 3647.
76500
76501 List
76502 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(6/3): 6767.
76503
76504 Logical
76505 in Interfaces.Fortran *note B.5(7): 7537.
76506
76507 long
76508 in Interfaces.C *note B.3(7): 7375.
76509
76510 Long_Binary
76511 in Interfaces.COBOL *note B.4(10): 7483.
76512
76513 long_double
76514 in Interfaces.C *note B.3(17): 7386.
76515
76516 Long_Floating
76517 in Interfaces.COBOL *note B.4(9): 7481.
76518
76519 Map
76520 in Ada.Containers.Hashed_Maps *note A.18.5(3/3): 6853.
76521 in Ada.Containers.Ordered_Maps *note A.18.6(4/3): 6906.
76522
76523 Membership
76524 in Ada.Strings *note A.4.1(6): 5727.
76525
76526 Minute_Number subtype of Natural
76527 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4163.
76528
76529 Month_Number subtype of Integer
76530 in Ada.Calendar *note 9.6(11/2): 4123.
76531
76532 Name
76533 in System *note 13.7(4): 5071.
76534
76535 Name_Case_Kind
76536 in Ada.Directories *note A.16(20.1/3): 6596.
76537
76538 Natural subtype of Integer
76539 in Standard *note A.1(13): 5386.
76540
76541 Number_Base subtype of Integer
76542 in Ada.Text_IO *note A.10.1(6): 6326.
76543
76544 Numeric
76545 in Interfaces.COBOL *note B.4(20/3): 7496.
76546
76547 Packed_Decimal
76548 in Interfaces.COBOL *note B.4(12/3): 7487.
76549
76550 Packed_Format
76551 in Interfaces.COBOL *note B.4(26): 7507.
76552
76553 Parameterless_Handler
76554 in Ada.Interrupts *note C.3.2(2/3): 7595.
76555
76556 Params_Stream_Type
76557 in System.RPC *note E.5(6): 8128.
76558
76559 Partition_Id
76560 in System.RPC *note E.5(4): 8126.
76561
76562 Picture
76563 in Ada.Text_IO.Editing *note F.3.3(4): 8156.
76564
76565 plain_char
76566 in Interfaces.C *note B.3(11): 7381.
76567
76568 Pointer
76569 in Interfaces.C.Pointers *note B.3.2(5): 7453.
76570
76571 Positive subtype of Integer
76572 in Standard *note A.1(13): 5387.
76573
76574 Positive_Count subtype of Count
76575 in Ada.Direct_IO *note A.8.4(4): 6273.
76576 in Ada.Streams.Stream_IO *note A.12.1(7): 6518.
76577 in Ada.Text_IO *note A.10.1(5): 6323.
76578
76579 Priority subtype of Any_Priority
76580 in System *note 13.7(16): 5093.
76581
76582 ptrdiff_t
76583 in Interfaces.C *note B.3(12): 7382.
76584
76585 Queue
76586 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(4/3): 7306.
76587 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(4/3):
76588 7293.
76589 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(4/3):
76590 7280.
76591 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(4/3):
76592 7299.
76593 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(4/3):
76594 7287.
76595
76596 Real
76597 in Interfaces.Fortran *note B.5(6): 7535.
76598
76599 Real_Matrix
76600 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(4/2): 8293.
76601
76602 Real_Vector
76603 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(4/2): 8292.
76604
76605 Reference_Type
76606 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.2/3): 6780.
76607 in Ada.Containers.Hashed_Maps *note A.18.5(17.2/3): 6869.
76608 in Ada.Containers.Hashed_Sets *note A.18.8(58.1/3): 7040.
76609 in Ada.Containers.Indefinite_Holders *note A.18.18(17/3): 7238.
76610 in Ada.Containers.Multiway_Trees *note A.18.10(29/3): 7165.
76611 in Ada.Containers.Ordered_Maps *note A.18.6(16.2/3): 6920.
76612 in Ada.Containers.Ordered_Sets *note A.18.9(73.1/3): 7121.
76613 in Ada.Containers.Vectors *note A.18.2(34.2/3): 6695.
76614
76615 Reversible_Iterator
76616 in Ada.Iterator_Interfaces *note 5.5.1(4/3): 3206.
76617
76618 Root_Storage_Pool
76619 in System.Storage_Pools *note 13.11(6/2): 5153.
76620
76621 Root_Storage_Pool_With_Subpools
76622 in System.Storage_Pools.Subpools *note 13.11.4(4/3): 5217.
76623
76624 Root_Stream_Type
76625 in Ada.Streams *note 13.13.1(3/2): 5293.
76626
76627 Root_Subpool
76628 in System.Storage_Pools.Subpools *note 13.11.4(5/3): 5218.
76629
76630 RPC_Receiver
76631 in System.RPC *note E.5(11): 8133.
76632
76633 Search_Type
76634 in Ada.Directories *note A.16(31/2): 6606.
76635
76636 Second_Duration subtype of Day_Duration
76637 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4165.
76638
76639 Second_Number subtype of Natural
76640 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4164.
76641
76642 Seconds_Count
76643 in Ada.Real_Time *note D.8(15): 7885.
76644
76645 Set
76646 in Ada.Containers.Hashed_Sets *note A.18.8(3/3): 6985.
76647 in Ada.Containers.Ordered_Sets *note A.18.9(4/3): 7058.
76648
76649 short
76650 in Interfaces.C *note B.3(7): 7374.
76651
76652 signed_char
76653 in Interfaces.C *note B.3(8): 7376.
76654
76655 size_t
76656 in Interfaces.C *note B.3(13): 7383.
76657
76658 State
76659 in Ada.Numerics.Discrete_Random *note A.5.2(23): 6112.
76660 in Ada.Numerics.Float_Random *note A.5.2(11): 6100.
76661
76662 Storage_Array
76663 in System.Storage_Elements *note 13.7.1(5): 5101.
76664
76665 Storage_Count subtype of Storage_Offset
76666 in System.Storage_Elements *note 13.7.1(4): 5099.
76667
76668 Storage_Element
76669 in System.Storage_Elements *note 13.7.1(5): 5100.
76670
76671 Storage_Offset
76672 in System.Storage_Elements *note 13.7.1(3): 5098.
76673
76674 Stream_Access
76675 in Ada.Streams.Stream_IO *note A.12.1(4): 6514.
76676 in Ada.Text_IO.Text_Streams *note A.12.2(3): 6550.
76677 in Ada.Wide_Text_IO.Text_Streams *note A.12.3(3): 6553.
76678 in Ada.Wide_Wide_Text_IO.Text_Streams *note A.12.4(3/2): 6556.
76679
76680 Stream_Element
76681 in Ada.Streams *note 13.13.1(4/1): 5294.
76682
76683 Stream_Element_Array
76684 in Ada.Streams *note 13.13.1(4/1): 5297.
76685
76686 Stream_Element_Count subtype of Stream_Element_Offset
76687 in Ada.Streams *note 13.13.1(4/1): 5296.
76688
76689 Stream_Element_Offset
76690 in Ada.Streams *note 13.13.1(4/1): 5295.
76691
76692 String
76693 in Standard *note A.1(37/3): 5394.
76694
76695 String_Access
76696 in Ada.Strings.Unbounded *note A.4.5(7): 5853.
76697
76698 Subpool_Handle
76699 in System.Storage_Pools.Subpools *note 13.11.4(6/3): 5219.
76700
76701 Suspension_Object
76702 in Ada.Synchronous_Task_Control *note D.10(4): 7899.
76703
76704 Synchronous_Barrier
76705 in Ada.Synchronous_Barriers *note D.10.1(5/3): 7911.
76706
76707 Tag
76708 in Ada.Tags *note 3.9(6/2): 2094.
76709
76710 Tag_Array
76711 in Ada.Tags *note 3.9(7.3/2): 2104.
76712
76713 Task_Array
76714 in Ada.Execution_Time.Group_Budgets *note D.14.2(6/2): 7958.
76715
76716 Task_Id
76717 in Ada.Task_Identification *note C.7.1(2/2): 7638.
76718
76719 Termination_Handler
76720 in Ada.Task_Termination *note C.7.3(4/2): 7671.
76721
76722 Time
76723 in Ada.Calendar *note 9.6(10): 4121.
76724 in Ada.Real_Time *note D.8(4): 7867.
76725
76726 Time_Offset
76727 in Ada.Calendar.Time_Zones *note 9.6.1(4/2): 4145.
76728
76729 Time_Span
76730 in Ada.Real_Time *note D.8(5): 7871.
76731
76732 Timer
76733 in Ada.Execution_Time.Timers *note D.14.1(4/2): 7941.
76734
76735 Timer_Handler
76736 in Ada.Execution_Time.Timers *note D.14.1(5/2): 7942.
76737
76738 Timing_Event
76739 in Ada.Real_Time.Timing_Events *note D.15(4/2): 7984.
76740
76741 Timing_Event_Handler
76742 in Ada.Real_Time.Timing_Events *note D.15(4/2): 7985.
76743
76744 Tree
76745 in Ada.Containers.Multiway_Trees *note A.18.10(8/3): 7145.
76746
76747 Trim_End
76748 in Ada.Strings *note A.4.1(6): 5729.
76749
76750 Truncation
76751 in Ada.Strings *note A.4.1(6): 5726.
76752
76753 Type_Set
76754 in Ada.Text_IO *note A.10.1(7): 6327.
76755
76756 Unbounded_String
76757 in Ada.Strings.Unbounded *note A.4.5(4/2): 5850.
76758
76759 Uniformly_Distributed subtype of Float
76760 in Ada.Numerics.Float_Random *note A.5.2(8): 6096.
76761
76762 unsigned
76763 in Interfaces.C *note B.3(9): 7377.
76764
76765 unsigned_char
76766 in Interfaces.C *note B.3(10): 7380.
76767
76768 unsigned_long
76769 in Interfaces.C *note B.3(9): 7379.
76770
76771 unsigned_short
76772 in Interfaces.C *note B.3(9): 7378.
76773
76774 UTF_16_Wide_String subtype of Wide_String
76775 in Ada.Strings.UTF_Encoding *note A.4.11(7/3): 6015.
76776
76777 UTF_8_String subtype of String
76778 in Ada.Strings.UTF_Encoding *note A.4.11(6/3): 6014.
76779
76780 UTF_String subtype of String
76781 in Ada.Strings.UTF_Encoding *note A.4.11(5/3): 6013.
76782
76783 Vector
76784 in Ada.Containers.Vectors *note A.18.2(8/3): 6671.
76785
76786 wchar_array
76787 in Interfaces.C *note B.3(33/3): 7401.
76788
76789 wchar_t
76790 in Interfaces.C *note B.3(30/1): 7397.
76791
76792 Wide_Character
76793 in Standard *note A.1(36.1/3): 5390.
76794
76795 Wide_Character_Mapping
76796 in Ada.Strings.Wide_Maps *note A.4.7(20/2): 5946.
76797
76798 Wide_Character_Mapping_Function
76799 in Ada.Strings.Wide_Maps *note A.4.7(26): 5952.
76800
76801 Wide_Character_Range
76802 in Ada.Strings.Wide_Maps *note A.4.7(6): 5935.
76803
76804 Wide_Character_Ranges
76805 in Ada.Strings.Wide_Maps *note A.4.7(7): 5936.
76806
76807 Wide_Character_Sequence subtype of Wide_String
76808 in Ada.Strings.Wide_Maps *note A.4.7(16): 5942.
76809
76810 Wide_Character_Set
76811 in Ada.Strings.Wide_Maps *note A.4.7(4/2): 5933.
76812
76813 Wide_String
76814 in Standard *note A.1(41/3): 5395.
76815
76816 Wide_Wide_Character
76817 in Standard *note A.1(36.2/3): 5391.
76818
76819 Wide_Wide_Character_Mapping
76820 in Ada.Strings.Wide_Wide_Maps *note A.4.8(20/2): 5985.
76821
76822 Wide_Wide_Character_Mapping_Function
76823 in Ada.Strings.Wide_Wide_Maps *note A.4.8(26/2): 5991.
76824
76825 Wide_Wide_Character_Range
76826 in Ada.Strings.Wide_Wide_Maps *note A.4.8(6/2): 5974.
76827
76828 Wide_Wide_Character_Ranges
76829 in Ada.Strings.Wide_Wide_Maps *note A.4.8(7/2): 5975.
76830
76831 Wide_Wide_Character_Sequence subtype of Wide_Wide_String
76832 in Ada.Strings.Wide_Wide_Maps *note A.4.8(16/2): 5981.
76833
76834 Wide_Wide_Character_Set
76835 in Ada.Strings.Wide_Wide_Maps *note A.4.8(4/2): 5972.
76836
76837 Wide_Wide_String
76838 in Standard *note A.1(42.1/3): 5396.
76839
76840 Year_Number subtype of Integer
76841 in Ada.Calendar *note 9.6(11/2): 4122.
76842
76843 \1f
76844 File: arm2012.info, Node: Q.3, Next: Q.4, Prev: Q.2, Up: Annex Q
76845
76846 Q.3 Language-Defined Subprograms
76847 ================================
76848
76849 1/3
76850 This subclause lists all language-defined subprograms.
76851
76852
76853
76854 Abort_Task in Ada.Task_Identification *note C.7.1(3/3): 7643.
76855
76856 Activation_Is_Complete
76857 in Ada.Task_Identification *note C.7.1(4/3): 7646.
76858
76859 Actual_Quantum
76860 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7746.
76861
76862 Ada.Unchecked_Deallocate_Subpool
76863 child of Ada *note 13.11.5(3/3): 5246.
76864
76865 Add
76866 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7966.
76867
76868 Add_Task
76869 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7960.
76870
76871 Adjust in Ada.Finalization *note 7.6(6/2): 3645.
76872
76873 Allocate
76874 in System.Storage_Pools *note 13.11(7): 5154.
76875 in System.Storage_Pools.Subpools *note 13.11.4(14/3): 5226.
76876
76877 Allocate_From_Subpool
76878 in System.Storage_Pools.Subpools *note 13.11.4(11/3): 5223.
76879
76880 Ancestor_Find
76881 in Ada.Containers.Multiway_Trees *note A.18.10(40/3): 7176.
76882
76883 Append
76884 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(23/2): 6790.
76885 in Ada.Containers.Vectors *note A.18.2(46/2): 6713, *note
76886 A.18.2(47/2): 6714.
76887 in Ada.Strings.Bounded *note A.4.4(13): 5800, *note A.4.4(14):
76888 5801, *note A.4.4(15): 5802, *note A.4.4(16): 5803, *note A.4.4(17):
76889 5804, *note A.4.4(18): 5805, *note A.4.4(19): 5806, *note A.4.4(20):
76890 5807.
76891 in Ada.Strings.Unbounded *note A.4.5(12): 5859, *note A.4.5(13):
76892 5860, *note A.4.5(14): 5861.
76893
76894 Append_Child
76895 in Ada.Containers.Multiway_Trees *note A.18.10(52/3): 7188.
76896
76897 Arccos
76898 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76899 G.1.2(5): 8216.
76900 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6072.
76901
76902 Arccosh
76903 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76904 G.1.2(7): 8224.
76905 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6083.
76906
76907 Arccot
76908 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76909 G.1.2(5): 8218.
76910 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6077.
76911
76912 Arccoth
76913 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76914 G.1.2(7): 8226.
76915 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6085.
76916
76917 Arcsin
76918 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76919 G.1.2(5): 8215.
76920 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6071.
76921
76922 Arcsinh
76923 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76924 G.1.2(7): 8223.
76925 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6082.
76926
76927 Arctan
76928 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76929 G.1.2(5): 8217.
76930 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6074.
76931
76932 Arctanh
76933 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
76934 G.1.2(7): 8225.
76935 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6084.
76936
76937 Argument
76938 in Ada.Command_Line *note A.15(5): 6573.
76939 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(10/2): 8318,
76940 *note G.3.2(31/2): 8330.
76941 in Ada.Numerics.Generic_Complex_Types *note G.1.1(10): 8194.
76942
76943 Argument_Count in Ada.Command_Line *note A.15(4): 6572.
76944
76945 Assert in Ada.Assertions *note 11.4.2(14/2): 4579.
76946
76947 Assign
76948 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.5/3): 6783.
76949 in Ada.Containers.Hashed_Maps *note A.18.5(17.7/3): 6874.
76950 in Ada.Containers.Hashed_Sets *note A.18.8(17.3/3): 7002.
76951 in Ada.Containers.Indefinite_Holders *note A.18.18(20/3): 7241.
76952 in Ada.Containers.Multiway_Trees *note A.18.10(32/3): 7168.
76953 in Ada.Containers.Ordered_Maps *note A.18.6(16.7/3): 6925.
76954 in Ada.Containers.Ordered_Sets *note A.18.9(16.3/3): 7073.
76955 in Ada.Containers.Vectors *note A.18.2(34.7/3): 6700.
76956
76957 Assign_Task
76958 in System.Multiprocessors.Dispatching_Domains *note D.16.1(11/3):
76959 8010.
76960
76961 Attach_Handler in Ada.Interrupts *note C.3.2(7): 7599.
76962
76963 Base_Name in Ada.Directories *note A.16(19/2): 6594.
76964
76965 Blank_When_Zero
76966 in Ada.Text_IO.Editing *note F.3.3(7): 8160.
76967
76968 Bounded_Slice in Ada.Strings.Bounded *note A.4.4(28.1/2): 5811, *note
76969 A.4.4(28.2/2): 5812.
76970
76971 Budget_Has_Expired
76972 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7967.
76973
76974 Budget_Remaining
76975 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7968.
76976
76977 Cancel_Handler
76978 in Ada.Execution_Time.Group_Budgets *note D.14.2(10/2): 7971.
76979 in Ada.Execution_Time.Timers *note D.14.1(7/2): 7947.
76980 in Ada.Real_Time.Timing_Events *note D.15(5/2): 7989.
76981
76982 Capacity
76983 in Ada.Containers.Hashed_Maps *note A.18.5(8/2): 6859.
76984 in Ada.Containers.Hashed_Sets *note A.18.8(10/2): 6993.
76985 in Ada.Containers.Vectors *note A.18.2(19/2): 6679.
76986
76987 Ceiling
76988 in Ada.Containers.Ordered_Maps *note A.18.6(41/2): 6951.
76989 in Ada.Containers.Ordered_Sets *note A.18.9(51/2): 7105, *note
76990 A.18.9(71/2): 7118.
76991
76992 Character_Set_Version
76993 in Ada.Wide_Characters.Handling *note A.3.5(4/3): 5696.
76994
76995 Child_Count
76996 in Ada.Containers.Multiway_Trees *note A.18.10(46/3): 7182.
76997
76998 Child_Depth
76999 in Ada.Containers.Multiway_Trees *note A.18.10(47/3): 7183.
77000
77001 Clear
77002 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(13/2): 6775.
77003 in Ada.Containers.Hashed_Maps *note A.18.5(12/2): 6863.
77004 in Ada.Containers.Hashed_Sets *note A.18.8(14/2): 6997.
77005 in Ada.Containers.Indefinite_Holders *note A.18.18(11/3): 7232.
77006 in Ada.Containers.Multiway_Trees *note A.18.10(23/3): 7159.
77007 in Ada.Containers.Ordered_Maps *note A.18.6(11/2): 6914.
77008 in Ada.Containers.Ordered_Sets *note A.18.9(13/2): 7068.
77009 in Ada.Containers.Vectors *note A.18.2(24/2): 6684.
77010 in Ada.Environment_Variables *note A.17(7/2): 6650.
77011
77012 Clock
77013 in Ada.Calendar *note 9.6(12): 4126.
77014 in Ada.Execution_Time *note D.14(5/2): 7930.
77015 in Ada.Execution_Time.Interrupts *note D.14.3(3/3): 7981.
77016 in Ada.Real_Time *note D.8(6): 7877.
77017
77018 Clock_For_Interrupts
77019 in Ada.Execution_Time *note D.14(9.3/3): 7935.
77020
77021 Close
77022 in Ada.Direct_IO *note A.8.4(8): 6276.
77023 in Ada.Sequential_IO *note A.8.1(8): 6250.
77024 in Ada.Streams.Stream_IO *note A.12.1(10): 6521.
77025 in Ada.Text_IO *note A.10.1(11): 6330.
77026
77027 Col in Ada.Text_IO *note A.10.1(37): 6383.
77028
77029 Command_Name in Ada.Command_Line *note A.15(6): 6574.
77030
77031 Compose
77032 in Ada.Directories *note A.16(20/2): 6595.
77033 in Ada.Directories.Hierarchical_File_Names *note A.16.1(14/3):
77034 6642.
77035
77036 Compose_From_Cartesian
77037 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(9/2): 8314,
77038 *note G.3.2(29/2): 8328.
77039 in Ada.Numerics.Generic_Complex_Types *note G.1.1(8): 8192.
77040
77041 Compose_From_Polar
77042 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(11/2): 8320,
77043 *note G.3.2(32/2): 8333.
77044 in Ada.Numerics.Generic_Complex_Types *note G.1.1(11): 8197.
77045
77046 Conjugate
77047 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(13/2): 8321,
77048 *note G.3.2(34/2): 8334.
77049 in Ada.Numerics.Generic_Complex_Types *note G.1.1(12): 8198, *note
77050 G.1.1(15): 8199.
77051
77052 Constant_Reference
77053 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.3/3): 6781.
77054 in Ada.Containers.Hashed_Maps *note A.18.5(17.3/3): 6870, *note
77055 A.18.5(17.5/3): 6872.
77056 in Ada.Containers.Hashed_Sets *note A.18.8(17.2/3): 7001, *note
77057 A.18.8(58.3/3): 7042.
77058 in Ada.Containers.Indefinite_Holders *note A.18.18(18/3): 7239.
77059 in Ada.Containers.Multiway_Trees *note A.18.10(30/3): 7166.
77060 in Ada.Containers.Ordered_Maps *note A.18.6(16.3/3): 6921, *note
77061 A.18.6(16.5/3): 6923.
77062 in Ada.Containers.Ordered_Sets *note A.18.9(16.2/3): 7072, *note
77063 A.18.9(73.3/3): 7123.
77064 in Ada.Containers.Vectors *note A.18.2(34.3/3): 6696, *note
77065 A.18.2(34.5/3): 6698.
77066
77067 Containing_Directory
77068 in Ada.Directories *note A.16(17/2): 6592.
77069 in Ada.Directories.Hierarchical_File_Names *note A.16.1(11/3):
77070 6639.
77071
77072 Contains
77073 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(43/2): 6810.
77074 in Ada.Containers.Hashed_Maps *note A.18.5(32/2): 6890.
77075 in Ada.Containers.Hashed_Sets *note A.18.8(44/2): 7026, *note
77076 A.18.8(57/2): 7038.
77077 in Ada.Containers.Multiway_Trees *note A.18.10(41/3): 7177.
77078 in Ada.Containers.Ordered_Maps *note A.18.6(42/2): 6952.
77079 in Ada.Containers.Ordered_Sets *note A.18.9(52/2): 7106, *note
77080 A.18.9(72/2): 7119.
77081 in Ada.Containers.Vectors *note A.18.2(71/2): 6738.
77082
77083 Continue
77084 in Ada.Asynchronous_Task_Control *note D.11(3/2): 7915.
77085
77086 Convert
77087 in Ada.Strings.UTF_Encoding.Conversions *note A.4.11(16/3): 6023,
77088 *note A.4.11(17/3): 6024, *note A.4.11(18/3): 6025, *note A.4.11(19/3):
77089 6026, *note A.4.11(20/3): 6027.
77090
77091 Copy
77092 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.6/3): 6784.
77093 in Ada.Containers.Hashed_Maps *note A.18.5(17.8/3): 6875.
77094 in Ada.Containers.Hashed_Sets *note A.18.8(17.4/3): 7003.
77095 in Ada.Containers.Indefinite_Holders *note A.18.18(21/3): 7242,
77096 *note A.18.20(10/3): 7254, *note A.18.21(13/3): 7258, *note
77097 A.18.22(10/3): 7261, *note A.18.23(13/3): 7265, *note A.18.24(10/3):
77098 7268.
77099 in Ada.Containers.Multiway_Trees *note A.18.10(33/3): 7169.
77100 in Ada.Containers.Ordered_Maps *note A.18.6(16.8/3): 6926.
77101 in Ada.Containers.Ordered_Sets *note A.18.9(16.4/3): 7074.
77102 in Ada.Containers.Vectors *note A.18.2(34.8/3): 6701.
77103
77104 Copy_Array in Interfaces.C.Pointers *note B.3.2(15): 7461.
77105
77106 Copy_File in Ada.Directories *note A.16(13/2): 6589.
77107
77108 Copy_Subtree
77109 in Ada.Containers.Multiway_Trees *note A.18.10(54/3): 7190.
77110
77111 Copy_Terminated_Array
77112 in Interfaces.C.Pointers *note B.3.2(14): 7460.
77113
77114 Cos
77115 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
77116 G.1.2(4): 8212.
77117 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6065.
77118
77119 Cosh
77120 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
77121 G.1.2(6): 8220.
77122 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6079.
77123
77124 Cot
77125 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
77126 G.1.2(4): 8214.
77127 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6069.
77128
77129 Coth
77130 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
77131 G.1.2(6): 8222.
77132 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6081.
77133
77134 Count
77135 in Ada.Strings.Bounded *note A.4.4(48): 5821, *note A.4.4(49):
77136 5822, *note A.4.4(50): 5823.
77137 in Ada.Strings.Fixed *note A.4.3(13): 5764, *note A.4.3(14): 5765,
77138 *note A.4.3(15): 5766.
77139 in Ada.Strings.Unbounded *note A.4.5(43): 5875, *note A.4.5(44):
77140 5876, *note A.4.5(45): 5877.
77141
77142 Country in Ada.Locales *note A.19(6/3): 7319.
77143
77144 Create
77145 in Ada.Direct_IO *note A.8.4(6): 6274.
77146 in Ada.Sequential_IO *note A.8.1(6): 6248.
77147 in Ada.Streams.Stream_IO *note A.12.1(8): 6519.
77148 in Ada.Text_IO *note A.10.1(9): 6328.
77149 in System.Multiprocessors.Dispatching_Domains *note D.16.1(7/3):
77150 8006.
77151
77152 Create_Directory in Ada.Directories *note A.16(7/2): 6583.
77153
77154 Create_Path in Ada.Directories *note A.16(9/2): 6585.
77155
77156 Create_Subpool
77157 in System.Storage_Pools.Subpools *note 13.11.4(7/3): 5220.
77158
77159 Current_Directory in Ada.Directories *note A.16(5/2): 6581.
77160
77161 Current_Error in Ada.Text_IO *note A.10.1(17): 6346, *note A.10.1(20):
77162 6353.
77163
77164 Current_Handler
77165 in Ada.Execution_Time.Group_Budgets *note D.14.2(10/2): 7970.
77166 in Ada.Execution_Time.Timers *note D.14.1(7/2): 7946.
77167 in Ada.Interrupts *note C.3.2(6): 7598.
77168 in Ada.Real_Time.Timing_Events *note D.15(5/2): 7988.
77169
77170 Current_Input in Ada.Text_IO *note A.10.1(17): 6344, *note A.10.1(20):
77171 6351.
77172
77173 Current_Output in Ada.Text_IO *note A.10.1(17): 6345, *note
77174 A.10.1(20): 6352.
77175
77176 Current_State
77177 in Ada.Synchronous_Task_Control *note D.10(4): 7902.
77178
77179 Current_Task
77180 in Ada.Task_Identification *note C.7.1(3/3): 7641.
77181
77182 Current_Task_Fallback_Handler
77183 in Ada.Task_Termination *note C.7.3(5/2): 7673.
77184
77185 Current_Use
77186 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(7/3): 7310.
77187 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(6/3):
77188 7296.
77189 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(7/3):
77190 7283.
77191 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(7/3):
77192 7303.
77193 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(6/3):
77194 7290.
77195
77196 Day
77197 in Ada.Calendar *note 9.6(13): 4129.
77198 in Ada.Calendar.Formatting *note 9.6.1(23/2): 4168.
77199
77200 Day_of_Week
77201 in Ada.Calendar.Formatting *note 9.6.1(18/2): 4161.
77202
77203 Deallocate
77204 in System.Storage_Pools *note 13.11(8): 5155.
77205 in System.Storage_Pools.Subpools *note 13.11.4(15/3): 5227.
77206
77207 Deallocate_Subpool
77208 in System.Storage_Pools.Subpools *note 13.11.4(12/3): 5224.
77209
77210 Decode
77211 in Ada.Strings.UTF_Encoding.Strings *note A.4.11(26/3): 6032, *note
77212 A.4.11(27/3): 6033, *note A.4.11(28/3): 6034.
77213 in Ada.Strings.UTF_Encoding.Wide_Strings *note A.4.11(34/3): 6039,
77214 *note A.4.11(35/3): 6040, *note A.4.11(36/3): 6041.
77215 in Ada.Strings.UTF_Encoding.Wide_Wide_Strings *note A.4.11(42/3):
77216 6046, *note A.4.11(43/3): 6047, *note A.4.11(44/3): 6048.
77217
77218 Decrement in Interfaces.C.Pointers *note B.3.2(11/3): 7458.
77219
77220 Default_Modulus
77221 in Ada.Containers.Indefinite_Holders *note A.18.21(10/3): 7257,
77222 *note A.18.23(10/3): 7264.
77223
77224 Default_Subpool_for_Pool
77225 in System.Storage_Pools.Subpools *note 13.11.4(13/3): 5225.
77226
77227 Delay_Until_And_Set_CPU
77228 in System.Multiprocessors.Dispatching_Domains *note D.16.1(14/3):
77229 8013.
77230
77231 Delay_Until_And_Set_Deadline
77232 in Ada.Dispatching.EDF *note D.2.6(9/2): 7754.
77233
77234 Delete
77235 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(24/2): 6791.
77236 in Ada.Containers.Hashed_Maps *note A.18.5(25/2): 6883, *note
77237 A.18.5(26/2): 6884.
77238 in Ada.Containers.Hashed_Sets *note A.18.8(24/2): 7010, *note
77239 A.18.8(25/2): 7011, *note A.18.8(55/2): 7036.
77240 in Ada.Containers.Ordered_Maps *note A.18.6(24/2): 6934, *note
77241 A.18.6(25/2): 6935.
77242 in Ada.Containers.Ordered_Sets *note A.18.9(23/2): 7081, *note
77243 A.18.9(24/2): 7082, *note A.18.9(68/2): 7115.
77244 in Ada.Containers.Vectors *note A.18.2(50/2): 6717, *note
77245 A.18.2(51/2): 6718.
77246 in Ada.Direct_IO *note A.8.4(8): 6277.
77247 in Ada.Sequential_IO *note A.8.1(8): 6251.
77248 in Ada.Streams.Stream_IO *note A.12.1(10): 6522.
77249 in Ada.Strings.Bounded *note A.4.4(64): 5836, *note A.4.4(65):
77250 5837.
77251 in Ada.Strings.Fixed *note A.4.3(29): 5779, *note A.4.3(30): 5780.
77252 in Ada.Strings.Unbounded *note A.4.5(59): 5890, *note A.4.5(60):
77253 5891.
77254 in Ada.Text_IO *note A.10.1(11): 6331.
77255
77256 Delete_Children
77257 in Ada.Containers.Multiway_Trees *note A.18.10(53/3): 7189.
77258
77259 Delete_Directory in Ada.Directories *note A.16(8/2): 6584.
77260
77261 Delete_File in Ada.Directories *note A.16(11/2): 6587.
77262
77263 Delete_First
77264 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(25/2): 6792.
77265 in Ada.Containers.Ordered_Maps *note A.18.6(26/2): 6936.
77266 in Ada.Containers.Ordered_Sets *note A.18.9(25/2): 7083.
77267 in Ada.Containers.Vectors *note A.18.2(52/2): 6719.
77268
77269 Delete_Last
77270 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(26/2): 6793.
77271 in Ada.Containers.Ordered_Maps *note A.18.6(27/2): 6937.
77272 in Ada.Containers.Ordered_Sets *note A.18.9(26/2): 7084.
77273 in Ada.Containers.Vectors *note A.18.2(53/2): 6720.
77274
77275 Delete_Leaf
77276 in Ada.Containers.Multiway_Trees *note A.18.10(35/3): 7171.
77277
77278 Delete_Subtree
77279 in Ada.Containers.Multiway_Trees *note A.18.10(36/3): 7172.
77280
77281 Delete_Tree in Ada.Directories *note A.16(10/2): 6586.
77282
77283 Depth
77284 in Ada.Containers.Multiway_Trees *note A.18.10(19/3): 7155.
77285
77286 Dequeue
77287 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(5/3): 7308.
77288 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(5/3):
77289 7295.
77290 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(6/3):
77291 7282.
77292 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(5/3):
77293 7301.
77294 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(5/3):
77295 7289.
77296
77297 Dequeue_Only_High_Priority
77298 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(6/3): 7309.
77299 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(6/3):
77300 7302.
77301
77302 Dereference_Error
77303 in Interfaces.C.Strings *note B.3.1(12): 7439.
77304
77305 Descendant_Tag in Ada.Tags *note 3.9(7.1/2): 2101.
77306
77307 Detach_Handler in Ada.Interrupts *note C.3.2(9): 7601.
77308
77309 Determinant
77310 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(46/2): 8339.
77311 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(24/2): 8299.
77312
77313 Difference
77314 in Ada.Calendar.Arithmetic *note 9.6.1(12/2): 4151.
77315 in Ada.Containers.Hashed_Sets *note A.18.8(32/2): 7016, *note
77316 A.18.8(33/2): 7017.
77317 in Ada.Containers.Ordered_Sets *note A.18.9(33/2): 7089, *note
77318 A.18.9(34/2): 7090.
77319
77320 Divide in Ada.Decimal *note F.2(6/3): 8150.
77321
77322 Do_APC in System.RPC *note E.5(10): 8132.
77323
77324 Do_RPC in System.RPC *note E.5(9): 8131.
77325
77326 Eigensystem
77327 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(49/2): 8341.
77328 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(27/2): 8301.
77329
77330 Eigenvalues
77331 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(48/2): 8340.
77332 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(26/2): 8300.
77333
77334 Element
77335 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(14/2): 6776.
77336 in Ada.Containers.Hashed_Maps *note A.18.5(14/2): 6865, *note
77337 A.18.5(31/2): 6889.
77338 in Ada.Containers.Hashed_Sets *note A.18.8(15/2): 6998, *note
77339 A.18.8(52/2): 7033.
77340 in Ada.Containers.Indefinite_Holders *note A.18.18(12/3): 7233.
77341 in Ada.Containers.Multiway_Trees *note A.18.10(24/3): 7160.
77342 in Ada.Containers.Ordered_Maps *note A.18.6(13/2): 6916, *note
77343 A.18.6(39/2): 6949.
77344 in Ada.Containers.Ordered_Sets *note A.18.9(14/2): 7069, *note
77345 A.18.9(65/2): 7112.
77346 in Ada.Containers.Vectors *note A.18.2(27/2): 6687, *note
77347 A.18.2(28/2): 6688.
77348 in Ada.Strings.Bounded *note A.4.4(26): 5808.
77349 in Ada.Strings.Unbounded *note A.4.5(20): 5862.
77350
77351 Encode
77352 in Ada.Strings.UTF_Encoding.Strings *note A.4.11(23/3): 6029, *note
77353 A.4.11(24/3): 6030, *note A.4.11(25/3): 6031.
77354 in Ada.Strings.UTF_Encoding.Wide_Strings *note A.4.11(31/3): 6036,
77355 *note A.4.11(32/3): 6037, *note A.4.11(33/3): 6038.
77356 in Ada.Strings.UTF_Encoding.Wide_Wide_Strings *note A.4.11(39/3):
77357 6043, *note A.4.11(40/3): 6044, *note A.4.11(41/3): 6045.
77358
77359 Encoding in Ada.Strings.UTF_Encoding *note A.4.11(13/3): 6021.
77360
77361 End_Of_File
77362 in Ada.Direct_IO *note A.8.4(16): 6291.
77363 in Ada.Sequential_IO *note A.8.1(13): 6260.
77364 in Ada.Streams.Stream_IO *note A.12.1(12): 6529.
77365 in Ada.Text_IO *note A.10.1(34): 6376.
77366
77367 End_Of_Line in Ada.Text_IO *note A.10.1(30): 6369.
77368
77369 End_Of_Page in Ada.Text_IO *note A.10.1(33): 6374.
77370
77371 End_Search in Ada.Directories *note A.16(33/2): 6608.
77372
77373 Enqueue
77374 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(5/3): 7307.
77375 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(5/3):
77376 7294.
77377 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(5/3):
77378 7281.
77379 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(5/3):
77380 7300.
77381 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(5/3):
77382 7288.
77383
77384 Environment_Task
77385 in Ada.Task_Identification *note C.7.1(3/3): 7642.
77386
77387 Equal_Case_Insensitive
77388 child of Ada.Strings *note A.4.10(2/3): 6003.
77389 child of Ada.Strings.Bounded *note A.4.10(7/3): 6005.
77390 child of Ada.Strings.Fixed *note A.4.10(5/3): 6004.
77391 child of Ada.Strings.Unbounded *note A.4.10(10/3): 6006.
77392
77393 Equal_Subtree
77394 in Ada.Containers.Multiway_Trees *note A.18.10(14/3): 7151.
77395
77396 Equivalent_Elements
77397 in Ada.Containers.Hashed_Sets *note A.18.8(46/2): 7027, *note
77398 A.18.8(47/2): 7028, *note A.18.8(48/2): 7029.
77399 in Ada.Containers.Ordered_Sets *note A.18.9(3/2): 7057.
77400
77401 Equivalent_Keys
77402 in Ada.Containers.Hashed_Maps *note A.18.5(34/2): 6891, *note
77403 A.18.5(35/2): 6892, *note A.18.5(36/2): 6893.
77404 in Ada.Containers.Ordered_Maps *note A.18.6(3/2): 6905.
77405 in Ada.Containers.Ordered_Sets *note A.18.9(63/2): 7110.
77406
77407 Equivalent_Sets
77408 in Ada.Containers.Hashed_Sets *note A.18.8(8/2): 6991.
77409 in Ada.Containers.Ordered_Sets *note A.18.9(9/2): 7064.
77410
77411 Establish_RPC_Receiver in System.RPC *note E.5(12): 8134.
77412
77413 Exception_Identity in Ada.Exceptions *note 11.4.1(5/2): 4548.
77414
77415 Exception_Information
77416 in Ada.Exceptions *note 11.4.1(5/2): 4552.
77417
77418 Exception_Message in Ada.Exceptions *note 11.4.1(4/3): 4546.
77419
77420 Exception_Name in Ada.Exceptions *note 11.4.1(2/2): 4539, *note
77421 11.4.1(5/2): 4549.
77422
77423 Exchange_Handler in Ada.Interrupts *note C.3.2(8): 7600.
77424
77425 Exclude
77426 in Ada.Containers.Hashed_Maps *note A.18.5(24/2): 6882.
77427 in Ada.Containers.Hashed_Sets *note A.18.8(23/2): 7009, *note
77428 A.18.8(54/2): 7035.
77429 in Ada.Containers.Ordered_Maps *note A.18.6(23/2): 6933.
77430 in Ada.Containers.Ordered_Sets *note A.18.9(22/2): 7080, *note
77431 A.18.9(67/2): 7114.
77432
77433 Exists
77434 in Ada.Directories *note A.16(24/2): 6600.
77435 in Ada.Environment_Variables *note A.17(5/2): 6647.
77436
77437 Exp
77438 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
77439 G.1.2(3): 8210.
77440 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(4): 6061.
77441
77442 Expanded_Name in Ada.Tags *note 3.9(7/2): 2096.
77443
77444 Extension in Ada.Directories *note A.16(18/2): 6593.
77445
77446 External_Tag in Ada.Tags *note 3.9(7/2): 2099.
77447
77448 Finalize in Ada.Finalization *note 7.6(6/2): 3646, *note 7.6(8/2):
77449 3649.
77450
77451 Find
77452 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(41/2): 6808.
77453 in Ada.Containers.Hashed_Maps *note A.18.5(30/2): 6888.
77454 in Ada.Containers.Hashed_Sets *note A.18.8(43/2): 7025, *note
77455 A.18.8(56/2): 7037.
77456 in Ada.Containers.Multiway_Trees *note A.18.10(38/3): 7174.
77457 in Ada.Containers.Ordered_Maps *note A.18.6(38/2): 6948.
77458 in Ada.Containers.Ordered_Sets *note A.18.9(49/2): 7103, *note
77459 A.18.9(69/2): 7116.
77460 in Ada.Containers.Vectors *note A.18.2(68/2): 6735.
77461
77462 Find_In_Subtree
77463 in Ada.Containers.Multiway_Trees *note A.18.10(39/3): 7175.
77464
77465 Find_Index in Ada.Containers.Vectors *note A.18.2(67/2): 6734.
77466
77467 Find_Token
77468 in Ada.Strings.Bounded *note A.4.4(50.1/3): 5824, *note A.4.4(51):
77469 5825.
77470 in Ada.Strings.Fixed *note A.4.3(15.1/3): 5767, *note A.4.3(16):
77471 5768.
77472 in Ada.Strings.Unbounded *note A.4.5(45.1/3): 5878, *note
77473 A.4.5(46): 5879.
77474
77475 First
77476 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(33/2): 6800.
77477 in Ada.Containers.Hashed_Maps *note A.18.5(27/2): 6885.
77478 in Ada.Containers.Hashed_Sets *note A.18.8(40/2): 7022.
77479 in Ada.Containers.Ordered_Maps *note A.18.6(28/2): 6938.
77480 in Ada.Containers.Ordered_Sets *note A.18.9(41/2): 7095.
77481 in Ada.Containers.Vectors *note A.18.2(58/2): 6725.
77482 in Ada.Iterator_Interfaces *note 5.5.1(3/3): 3204.
77483
77484 First_Child
77485 in Ada.Containers.Multiway_Trees *note A.18.10(60/3): 7196.
77486
77487 First_Child_Element
77488 in Ada.Containers.Multiway_Trees *note A.18.10(61/3): 7197.
77489
77490 First_Element
77491 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(34/2): 6801.
77492 in Ada.Containers.Ordered_Maps *note A.18.6(29/2): 6939.
77493 in Ada.Containers.Ordered_Sets *note A.18.9(42/2): 7096.
77494 in Ada.Containers.Vectors *note A.18.2(59/2): 6726.
77495
77496 First_Index in Ada.Containers.Vectors *note A.18.2(57/2): 6724.
77497
77498 First_Key
77499 in Ada.Containers.Ordered_Maps *note A.18.6(30/2): 6940.
77500
77501 Floor
77502 in Ada.Containers.Ordered_Maps *note A.18.6(40/2): 6950.
77503 in Ada.Containers.Ordered_Sets *note A.18.9(50/2): 7104, *note
77504 A.18.9(70/2): 7117.
77505
77506 Flush
77507 in Ada.Streams.Stream_IO *note A.12.1(25/1): 6539.
77508 in Ada.Text_IO *note A.10.1(21/1): 6355.
77509
77510 Form
77511 in Ada.Direct_IO *note A.8.4(9): 6282.
77512 in Ada.Sequential_IO *note A.8.1(9): 6256.
77513 in Ada.Streams.Stream_IO *note A.12.1(11): 6527.
77514 in Ada.Text_IO *note A.10.1(12): 6336.
77515
77516 Free
77517 in Ada.Strings.Unbounded *note A.4.5(7): 5854.
77518 in Interfaces.C.Strings *note B.3.1(11): 7438.
77519
77520 Full_Name in Ada.Directories *note A.16(15/2): 6590, *note A.16(39/2):
77521 6612.
77522
77523 Generic_Array_Sort
77524 child of Ada.Containers *note A.18.26(3/2): 7273.
77525
77526 Generic_Constrained_Array_Sort
77527 child of Ada.Containers *note A.18.26(7/2): 7275.
77528
77529 Generic_Sort
77530 child of Ada.Containers *note A.18.26(9.2/3): 7277.
77531
77532 Get
77533 in Ada.Text_IO *note A.10.1(41): 6388, *note A.10.1(47): 6398,
77534 *note A.10.1(54): 6412, *note A.10.1(55): 6415, *note A.10.1(59): 6420,
77535 *note A.10.1(60): 6424, *note A.10.1(65): 6431, *note A.10.1(67): 6434,
77536 *note A.10.1(70): 6440, *note A.10.1(72): 6444, *note A.10.1(75): 6451,
77537 *note A.10.1(77): 6454, *note A.10.1(81): 6460, *note A.10.1(83): 6463.
77538 in Ada.Text_IO.Complex_IO *note G.1.3(6): 8239, *note G.1.3(8):
77539 8243.
77540
77541 Get_CPU
77542 in Ada.Interrupts *note C.3.2(10.1/3): 7603.
77543 in System.Multiprocessors.Dispatching_Domains *note D.16.1(13/3):
77544 8012.
77545
77546 Get_Deadline in Ada.Dispatching.EDF *note D.2.6(9/2): 7755.
77547
77548 Get_Dispatching_Domain
77549 in System.Multiprocessors.Dispatching_Domains *note D.16.1(10/3):
77550 8009.
77551
77552 Get_First_CPU
77553 in System.Multiprocessors.Dispatching_Domains *note D.16.1(8/3):
77554 8007.
77555
77556 Get_Immediate in Ada.Text_IO *note A.10.1(44): 6395, *note A.10.1(45):
77557 6396.
77558
77559 Get_Last_CPU
77560 in System.Multiprocessors.Dispatching_Domains *note D.16.1(9/3):
77561 8008.
77562
77563 Get_Line
77564 in Ada.Text_IO *note A.10.1(49): 6403, *note A.10.1(49.1/2): 6405.
77565 in Ada.Text_IO.Bounded_IO *note A.10.11(8/2): 6487, *note
77566 A.10.11(9/2): 6488, *note A.10.11(10/2): 6489, *note A.10.11(11/2):
77567 6490.
77568 in Ada.Text_IO.Unbounded_IO *note A.10.12(8/2): 6496, *note
77569 A.10.12(9/2): 6497, *note A.10.12(10/2): 6498, *note A.10.12(11/2):
77570 6499.
77571
77572 Get_Next_Entry in Ada.Directories *note A.16(35/2): 6610.
77573
77574 Get_Priority
77575 in Ada.Dynamic_Priorities *note D.5.1(5): 7796.
77576
77577 Has_Element
77578 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(9.1/3): 6771.
77579 in Ada.Containers.Hashed_Maps *note A.18.5(6.1/3): 6857.
77580 in Ada.Containers.Hashed_Sets *note A.18.8(6.1/3): 6989.
77581 in Ada.Containers.Multiway_Trees *note A.18.10(12/3): 7149.
77582 in Ada.Containers.Ordered_Maps *note A.18.6(7.1/3): 6910.
77583 in Ada.Containers.Ordered_Sets *note A.18.9(7.1/3): 7062.
77584 in Ada.Containers.Vectors *note A.18.2(11.1/3): 6675.
77585
77586 Hash
77587 child of Ada.Strings *note A.4.9(2/3): 5996.
77588 child of Ada.Strings.Bounded *note A.4.9(7/3): 5997.
77589 child of Ada.Strings.Unbounded *note A.4.9(10/3): 5998.
77590
77591 Hash_Case_Insensitive
77592 child of Ada.Strings *note A.4.9(11.2/3): 5999.
77593 child of Ada.Strings.Bounded *note A.4.9(11.7/3): 6001.
77594 child of Ada.Strings.Fixed *note A.4.9(11.5/3): 6000.
77595 child of Ada.Strings.Unbounded *note A.4.9(11.10/3): 6002.
77596
77597 Head
77598 in Ada.Strings.Bounded *note A.4.4(70): 5842, *note A.4.4(71):
77599 5843.
77600 in Ada.Strings.Fixed *note A.4.3(35): 5785, *note A.4.3(36): 5786.
77601 in Ada.Strings.Unbounded *note A.4.5(65): 5896, *note A.4.5(66):
77602 5897.
77603
77604 Hold in Ada.Asynchronous_Task_Control *note D.11(3/2): 7914.
77605
77606 Hour in Ada.Calendar.Formatting *note 9.6.1(24/2): 4169.
77607
77608 Im
77609 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(7/2): 8311,
77610 *note G.3.2(27/2): 8324.
77611 in Ada.Numerics.Generic_Complex_Types *note G.1.1(6): 8185.
77612
77613 Image
77614 in Ada.Calendar.Formatting *note 9.6.1(35/2): 4180, *note
77615 9.6.1(37/2): 4182.
77616 in Ada.Numerics.Discrete_Random *note A.5.2(26): 6116.
77617 in Ada.Numerics.Float_Random *note A.5.2(14): 6104.
77618 in Ada.Task_Identification *note C.7.1(3/3): 7640.
77619 in Ada.Text_IO.Editing *note F.3.3(13): 8170.
77620
77621 Include
77622 in Ada.Containers.Hashed_Maps *note A.18.5(22/2): 6880.
77623 in Ada.Containers.Hashed_Sets *note A.18.8(21/2): 7007.
77624 in Ada.Containers.Ordered_Maps *note A.18.6(21/2): 6931.
77625 in Ada.Containers.Ordered_Sets *note A.18.9(20/2): 7078.
77626
77627 Increment in Interfaces.C.Pointers *note B.3.2(11/3): 7457.
77628
77629 Index
77630 in Ada.Direct_IO *note A.8.4(15): 6289.
77631 in Ada.Streams.Stream_IO *note A.12.1(23): 6536.
77632 in Ada.Strings.Bounded *note A.4.4(43.1/2): 5813, *note
77633 A.4.4(43.2/2): 5814, *note A.4.4(44): 5815, *note A.4.4(45): 5816, *note
77634 A.4.4(45.1/2): 5817, *note A.4.4(46): 5818.
77635 in Ada.Strings.Fixed *note A.4.3(8.1/2): 5756, *note A.4.3(8.2/2):
77636 5757, *note A.4.3(9): 5758, *note A.4.3(10): 5759, *note A.4.3(10.1/2):
77637 5760, *note A.4.3(11): 5761.
77638 in Ada.Strings.Unbounded *note A.4.5(38.1/2): 5867, *note
77639 A.4.5(38.2/2): 5868, *note A.4.5(39): 5869, *note A.4.5(40): 5870, *note
77640 A.4.5(40.1/2): 5871, *note A.4.5(41): 5872.
77641
77642 Index_Non_Blank
77643 in Ada.Strings.Bounded *note A.4.4(46.1/2): 5819, *note A.4.4(47):
77644 5820.
77645 in Ada.Strings.Fixed *note A.4.3(11.1/2): 5762, *note A.4.3(12):
77646 5763.
77647 in Ada.Strings.Unbounded *note A.4.5(41.1/2): 5873, *note
77648 A.4.5(42): 5874.
77649
77650 Initial_Directory
77651 in Ada.Directories.Hierarchical_File_Names *note A.16.1(12/3):
77652 6640.
77653
77654 Initialize in Ada.Finalization *note 7.6(6/2): 3644, *note 7.6(8/2):
77655 3648.
77656
77657 Insert
77658 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(19/2): 6786,
77659 *note A.18.3(20/2): 6787, *note A.18.3(21/2): 6788.
77660 in Ada.Containers.Hashed_Maps *note A.18.5(19/2): 6877, *note
77661 A.18.5(20/2): 6878, *note A.18.5(21/2): 6879.
77662 in Ada.Containers.Hashed_Sets *note A.18.8(19/2): 7005, *note
77663 A.18.8(20/2): 7006.
77664 in Ada.Containers.Ordered_Maps *note A.18.6(18/2): 6928, *note
77665 A.18.6(19/2): 6929, *note A.18.6(20/2): 6930.
77666 in Ada.Containers.Ordered_Sets *note A.18.9(18/2): 7076, *note
77667 A.18.9(19/2): 7077.
77668 in Ada.Containers.Vectors *note A.18.2(36/2): 6703, *note
77669 A.18.2(37/2): 6704, *note A.18.2(38/2): 6705, *note A.18.2(39/2): 6706,
77670 *note A.18.2(40/2): 6707, *note A.18.2(41/2): 6708, *note A.18.2(42/2):
77671 6709, *note A.18.2(43/2): 6710.
77672 in Ada.Strings.Bounded *note A.4.4(60): 5832, *note A.4.4(61):
77673 5833.
77674 in Ada.Strings.Fixed *note A.4.3(25): 5775, *note A.4.3(26): 5776.
77675 in Ada.Strings.Unbounded *note A.4.5(55): 5886, *note A.4.5(56):
77676 5887.
77677
77678 Insert_Child
77679 in Ada.Containers.Multiway_Trees *note A.18.10(48/3): 7184, *note
77680 A.18.10(49/3): 7185, *note A.18.10(50/3): 7186.
77681
77682 Insert_Space
77683 in Ada.Containers.Vectors *note A.18.2(48/2): 6715, *note
77684 A.18.2(49/2): 6716.
77685
77686 Interface_Ancestor_Tags in Ada.Tags *note 3.9(7.4/2): 2105.
77687
77688 Internal_Tag in Ada.Tags *note 3.9(7/2): 2100.
77689
77690 Intersection
77691 in Ada.Containers.Hashed_Sets *note A.18.8(29/2): 7014, *note
77692 A.18.8(30/2): 7015.
77693 in Ada.Containers.Ordered_Sets *note A.18.9(30/2): 7087, *note
77694 A.18.9(31/2): 7088.
77695
77696 Inverse
77697 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(46/2): 8338.
77698 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(24/2): 8298.
77699
77700 Is_A_Group_Member
77701 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7963.
77702
77703 Is_Abstract in Ada.Tags *note 3.9(7.5/3): 2106.
77704
77705 Is_Alphanumeric
77706 in Ada.Characters.Handling *note A.3.2(4/3): 5417.
77707 in Ada.Wide_Characters.Handling *note A.3.5(12/3): 5704.
77708
77709 Is_Attached in Ada.Interrupts *note C.3.2(5): 7597.
77710
77711 Is_Basic in Ada.Characters.Handling *note A.3.2(4/3): 5413.
77712
77713 Is_Callable
77714 in Ada.Task_Identification *note C.7.1(4/3): 7645.
77715
77716 Is_Character
77717 in Ada.Characters.Conversions *note A.3.4(3/2): 5679.
77718
77719 Is_Control
77720 in Ada.Characters.Handling *note A.3.2(4/3): 5408.
77721 in Ada.Wide_Characters.Handling *note A.3.5(5/3): 5697.
77722
77723 Is_Current_Directory_Name
77724 in Ada.Directories.Hierarchical_File_Names *note A.16.1(7/3): 6635.
77725
77726 Is_Decimal_Digit
77727 in Ada.Characters.Handling *note A.3.2(4/3): 5415.
77728 in Ada.Wide_Characters.Handling *note A.3.5(10/3): 5702.
77729
77730 Is_Descendant_At_Same_Level
77731 in Ada.Tags *note 3.9(7.1/2): 2102.
77732
77733 Is_Digit
77734 in Ada.Characters.Handling *note A.3.2(4/3): 5414.
77735 in Ada.Wide_Characters.Handling *note A.3.5(9/3): 5701.
77736
77737 Is_Empty
77738 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(12/2): 6774.
77739 in Ada.Containers.Hashed_Maps *note A.18.5(11/2): 6862.
77740 in Ada.Containers.Hashed_Sets *note A.18.8(13/2): 6996.
77741 in Ada.Containers.Indefinite_Holders *note A.18.18(10/3): 7231.
77742 in Ada.Containers.Multiway_Trees *note A.18.10(16/3): 7152.
77743 in Ada.Containers.Ordered_Maps *note A.18.6(10/2): 6913.
77744 in Ada.Containers.Ordered_Sets *note A.18.9(12/2): 7067.
77745 in Ada.Containers.Vectors *note A.18.2(23/2): 6683.
77746
77747 Is_Full_Name
77748 in Ada.Directories.Hierarchical_File_Names *note A.16.1(8/3): 6636.
77749
77750 Is_Graphic
77751 in Ada.Characters.Handling *note A.3.2(4/3): 5409.
77752 in Ada.Wide_Characters.Handling *note A.3.5(19/3): 5711.
77753
77754 Is_Held
77755 in Ada.Asynchronous_Task_Control *note D.11(3/2): 7916.
77756
77757 Is_Hexadecimal_Digit
77758 in Ada.Characters.Handling *note A.3.2(4/3): 5416.
77759 in Ada.Wide_Characters.Handling *note A.3.5(11/3): 5703.
77760
77761 Is_In
77762 in Ada.Strings.Maps *note A.4.2(13): 5738.
77763 in Ada.Strings.Wide_Maps *note A.4.7(13): 5940.
77764 in Ada.Strings.Wide_Wide_Maps *note A.4.8(13/2): 5979.
77765
77766 Is_ISO_646 in Ada.Characters.Handling *note A.3.2(10): 5432.
77767
77768 Is_Leaf
77769 in Ada.Containers.Multiway_Trees *note A.18.10(21/3): 7157.
77770
77771 Is_Letter
77772 in Ada.Characters.Handling *note A.3.2(4/3): 5410.
77773 in Ada.Wide_Characters.Handling *note A.3.5(6/3): 5698.
77774
77775 Is_Line_Terminator
77776 in Ada.Characters.Handling *note A.3.2(4/3): 5419.
77777 in Ada.Wide_Characters.Handling *note A.3.5(14/3): 5706.
77778
77779 Is_Lower
77780 in Ada.Characters.Handling *note A.3.2(4/3): 5411.
77781 in Ada.Wide_Characters.Handling *note A.3.5(7/3): 5699.
77782
77783 Is_Mark
77784 in Ada.Characters.Handling *note A.3.2(4/3): 5420.
77785 in Ada.Wide_Characters.Handling *note A.3.5(15/3): 5707.
77786
77787 Is_Member
77788 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7962.
77789
77790 Is_Nul_Terminated in Interfaces.C *note B.3(24): 7392, *note B.3(35):
77791 7402, *note B.3(39.16/2): 7422, *note B.3(39.7/2): 7412.
77792
77793 Is_Open
77794 in Ada.Direct_IO *note A.8.4(10): 6283.
77795 in Ada.Sequential_IO *note A.8.1(10): 6257.
77796 in Ada.Streams.Stream_IO *note A.12.1(12): 6528.
77797 in Ada.Text_IO *note A.10.1(13): 6337.
77798
77799 Is_Other_Format
77800 in Ada.Characters.Handling *note A.3.2(4/3): 5421.
77801 in Ada.Wide_Characters.Handling *note A.3.5(16/3): 5708.
77802
77803 Is_Parent_Directory_Name
77804 in Ada.Directories.Hierarchical_File_Names *note A.16.1(6/3): 6634.
77805
77806 Is_Punctuation_Connector
77807 in Ada.Characters.Handling *note A.3.2(4/3): 5422.
77808 in Ada.Wide_Characters.Handling *note A.3.5(17/3): 5709.
77809
77810 Is_Relative_Name
77811 in Ada.Directories.Hierarchical_File_Names *note A.16.1(9/3): 6637.
77812
77813 Is_Reserved in Ada.Interrupts *note C.3.2(4): 7596.
77814
77815 Is_Root
77816 in Ada.Containers.Multiway_Trees *note A.18.10(20/3): 7156.
77817
77818 Is_Root_Directory_Name
77819 in Ada.Directories.Hierarchical_File_Names *note A.16.1(5/3): 6633.
77820
77821 Is_Round_Robin
77822 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7747.
77823
77824 Is_Simple_Name
77825 in Ada.Directories.Hierarchical_File_Names *note A.16.1(4/3): 6632.
77826
77827 Is_Sorted
77828 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(48/2): 6814.
77829 in Ada.Containers.Vectors *note A.18.2(76/2): 6742.
77830
77831 Is_Space
77832 in Ada.Characters.Handling *note A.3.2(4/3): 5423.
77833 in Ada.Wide_Characters.Handling *note A.3.5(18/3): 5710.
77834
77835 Is_Special
77836 in Ada.Characters.Handling *note A.3.2(4/3): 5418.
77837 in Ada.Wide_Characters.Handling *note A.3.5(13/3): 5705.
77838
77839 Is_String
77840 in Ada.Characters.Conversions *note A.3.4(3/2): 5680.
77841
77842 Is_Subset
77843 in Ada.Containers.Hashed_Sets *note A.18.8(39/2): 7021.
77844 in Ada.Containers.Ordered_Sets *note A.18.9(40/2): 7094.
77845 in Ada.Strings.Maps *note A.4.2(14): 5739.
77846 in Ada.Strings.Wide_Maps *note A.4.7(14): 5941.
77847 in Ada.Strings.Wide_Wide_Maps *note A.4.8(14/2): 5980.
77848
77849 Is_Terminated
77850 in Ada.Task_Identification *note C.7.1(4/3): 7644.
77851
77852 Is_Upper
77853 in Ada.Characters.Handling *note A.3.2(4/3): 5412.
77854 in Ada.Wide_Characters.Handling *note A.3.5(8/3): 5700.
77855
77856 Is_Wide_Character
77857 in Ada.Characters.Conversions *note A.3.4(3/2): 5681.
77858
77859 Is_Wide_String
77860 in Ada.Characters.Conversions *note A.3.4(3/2): 5682.
77861
77862 Iterate
77863 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(45/2): 6811.
77864 in Ada.Containers.Hashed_Maps *note A.18.5(37/2): 6894.
77865 in Ada.Containers.Hashed_Sets *note A.18.8(49/2): 7030.
77866 in Ada.Containers.Multiway_Trees *note A.18.10(42/3): 7178, *note
77867 A.18.10(44/3): 7180.
77868 in Ada.Containers.Ordered_Maps *note A.18.6(50/2): 6953.
77869 in Ada.Containers.Ordered_Sets *note A.18.9(60/2): 7107.
77870 in Ada.Containers.Vectors *note A.18.2(73/2): 6739.
77871 in Ada.Environment_Variables *note A.17(8/3): 6651.
77872
77873 Iterate_Children
77874 in Ada.Containers.Multiway_Trees *note A.18.10(68/3): 7204, *note
77875 A.18.10(70/3): 7206.
77876
77877 Iterate_Subtree
77878 in Ada.Containers.Multiway_Trees *note A.18.10(43/3): 7179, *note
77879 A.18.10(45/3): 7181.
77880
77881 Key
77882 in Ada.Containers.Hashed_Maps *note A.18.5(13/2): 6864.
77883 in Ada.Containers.Hashed_Sets *note A.18.8(51/2): 7032.
77884 in Ada.Containers.Ordered_Maps *note A.18.6(12/2): 6915.
77885 in Ada.Containers.Ordered_Sets *note A.18.9(64/2): 7111.
77886
77887 Kind in Ada.Directories *note A.16(25/2): 6601, *note A.16(40/2):
77888 6613.
77889
77890 Language in Ada.Locales *note A.19(6/3): 7318.
77891
77892 Last
77893 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(35/2): 6802.
77894 in Ada.Containers.Ordered_Maps *note A.18.6(31/2): 6941.
77895 in Ada.Containers.Ordered_Sets *note A.18.9(43/2): 7097.
77896 in Ada.Containers.Vectors *note A.18.2(61/2): 6728.
77897 in Ada.Iterator_Interfaces *note 5.5.1(4/3): 3207.
77898
77899 Last_Child
77900 in Ada.Containers.Multiway_Trees *note A.18.10(62/3): 7198.
77901
77902 Last_Child_Element
77903 in Ada.Containers.Multiway_Trees *note A.18.10(63/3): 7199.
77904
77905 Last_Element
77906 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(36/2): 6803.
77907 in Ada.Containers.Ordered_Maps *note A.18.6(32/2): 6942.
77908 in Ada.Containers.Ordered_Sets *note A.18.9(44/2): 7098.
77909 in Ada.Containers.Vectors *note A.18.2(62/2): 6729.
77910
77911 Last_Index in Ada.Containers.Vectors *note A.18.2(60/2): 6727.
77912
77913 Last_Key
77914 in Ada.Containers.Ordered_Maps *note A.18.6(33/2): 6943.
77915
77916 Length
77917 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(11/2): 6773.
77918 in Ada.Containers.Hashed_Maps *note A.18.5(10/2): 6861.
77919 in Ada.Containers.Hashed_Sets *note A.18.8(12/2): 6995.
77920 in Ada.Containers.Ordered_Maps *note A.18.6(9/2): 6912.
77921 in Ada.Containers.Ordered_Sets *note A.18.9(11/2): 7066.
77922 in Ada.Containers.Vectors *note A.18.2(21/2): 6681.
77923 in Ada.Strings.Bounded *note A.4.4(9): 5796.
77924 in Ada.Strings.Unbounded *note A.4.5(6): 5852.
77925 in Ada.Text_IO.Editing *note F.3.3(11): 8168.
77926 in Interfaces.COBOL *note B.4(34): 7515, *note B.4(39): 7519, *note
77927 B.4(44): 7523.
77928
77929 Less_Case_Insensitive
77930 child of Ada.Strings *note A.4.10(13/3): 6007.
77931 child of Ada.Strings.Bounded *note A.4.10(18/3): 6009.
77932 child of Ada.Strings.Fixed *note A.4.10(16/3): 6008.
77933 child of Ada.Strings.Unbounded *note A.4.10(21/3): 6010.
77934
77935 Line in Ada.Text_IO *note A.10.1(38): 6385.
77936
77937 Line_Length in Ada.Text_IO *note A.10.1(25): 6361.
77938
77939 Log
77940 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
77941 G.1.2(3): 8208.
77942 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(4): 6059.
77943
77944 Look_Ahead in Ada.Text_IO *note A.10.1(43): 6392.
77945
77946 Members
77947 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7964.
77948
77949 Merge
77950 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(50/2): 6816.
77951 in Ada.Containers.Vectors *note A.18.2(78/2): 6744.
77952
77953 Microseconds in Ada.Real_Time *note D.8(14/2): 7881.
77954
77955 Milliseconds in Ada.Real_Time *note D.8(14/2): 7882.
77956
77957 Minute in Ada.Calendar.Formatting *note 9.6.1(25/2): 4170.
77958
77959 Minutes in Ada.Real_Time *note D.8(14/2): 7884.
77960
77961 Mode
77962 in Ada.Direct_IO *note A.8.4(9): 6280.
77963 in Ada.Sequential_IO *note A.8.1(9): 6254.
77964 in Ada.Streams.Stream_IO *note A.12.1(11): 6525.
77965 in Ada.Text_IO *note A.10.1(12): 6334.
77966
77967 Modification_Time in Ada.Directories *note A.16(27/2): 6603, *note
77968 A.16(42/2): 6615.
77969
77970 Modulus
77971 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(10/2): 8316,
77972 *note G.3.2(30/2): 8329.
77973 in Ada.Numerics.Generic_Complex_Types *note G.1.1(9): 8193.
77974
77975 Month
77976 in Ada.Calendar *note 9.6(13): 4128.
77977 in Ada.Calendar.Formatting *note 9.6.1(22/2): 4167.
77978
77979 More_Entries in Ada.Directories *note A.16(34/2): 6609.
77980
77981 Move
77982 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(18/2): 6785.
77983 in Ada.Containers.Hashed_Maps *note A.18.5(18/2): 6876.
77984 in Ada.Containers.Hashed_Sets *note A.18.8(18/2): 7004.
77985 in Ada.Containers.Indefinite_Holders *note A.18.18(22/3): 7243.
77986 in Ada.Containers.Multiway_Trees *note A.18.10(34/3): 7170.
77987 in Ada.Containers.Ordered_Maps *note A.18.6(17/2): 6927.
77988 in Ada.Containers.Ordered_Sets *note A.18.9(17/2): 7075.
77989 in Ada.Containers.Vectors *note A.18.2(35/2): 6702.
77990 in Ada.Strings.Fixed *note A.4.3(7): 5755.
77991
77992 Name
77993 in Ada.Direct_IO *note A.8.4(9): 6281.
77994 in Ada.Sequential_IO *note A.8.1(9): 6255.
77995 in Ada.Streams.Stream_IO *note A.12.1(11): 6526.
77996 in Ada.Text_IO *note A.10.1(12): 6335.
77997
77998 Name_Case_Equivalence
77999 in Ada.Directories *note A.16(20.2/3): 6597.
78000
78001 Nanoseconds in Ada.Real_Time *note D.8(14/2): 7880.
78002
78003 New_Char_Array
78004 in Interfaces.C.Strings *note B.3.1(9): 7436.
78005
78006 New_Line in Ada.Text_IO *note A.10.1(28): 6365.
78007
78008 New_Page in Ada.Text_IO *note A.10.1(31): 6370.
78009
78010 New_String in Interfaces.C.Strings *note B.3.1(10): 7437.
78011
78012 Next
78013 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(37/2): 6804,
78014 *note A.18.3(39/2): 6806.
78015 in Ada.Containers.Hashed_Maps *note A.18.5(28/2): 6886, *note
78016 A.18.5(29/2): 6887.
78017 in Ada.Containers.Hashed_Sets *note A.18.8(41/2): 7023, *note
78018 A.18.8(42/2): 7024.
78019 in Ada.Containers.Ordered_Maps *note A.18.6(34/2): 6944, *note
78020 A.18.6(35/2): 6945.
78021 in Ada.Containers.Ordered_Sets *note A.18.9(45/2): 7099, *note
78022 A.18.9(46/2): 7100.
78023 in Ada.Containers.Vectors *note A.18.2(63/2): 6730, *note
78024 A.18.2(64/2): 6731.
78025 in Ada.Iterator_Interfaces *note 5.5.1(3/3): 3205.
78026
78027 Next_Sibling
78028 in Ada.Containers.Multiway_Trees *note A.18.10(64/3): 7200, *note
78029 A.18.10(66/3): 7202.
78030
78031 Node_Count
78032 in Ada.Containers.Multiway_Trees *note A.18.10(17/3): 7153.
78033
78034 Null_Task_Id
78035 in Ada.Task_Identification *note C.7.1(2/2): 7639.
78036
78037 Number_Of_CPUs
78038 in System.Multiprocessors *note D.16(5/3): 7999.
78039
78040 Open
78041 in Ada.Direct_IO *note A.8.4(7): 6275.
78042 in Ada.Sequential_IO *note A.8.1(7): 6249.
78043 in Ada.Streams.Stream_IO *note A.12.1(9): 6520.
78044 in Ada.Text_IO *note A.10.1(10): 6329.
78045
78046 Overlap
78047 in Ada.Containers.Hashed_Sets *note A.18.8(38/2): 7020.
78048 in Ada.Containers.Ordered_Sets *note A.18.9(39/2): 7093.
78049
78050 Overwrite
78051 in Ada.Strings.Bounded *note A.4.4(62): 5834, *note A.4.4(63):
78052 5835.
78053 in Ada.Strings.Fixed *note A.4.3(27): 5777, *note A.4.3(28): 5778.
78054 in Ada.Strings.Unbounded *note A.4.5(57): 5888, *note A.4.5(58):
78055 5889.
78056
78057 Page in Ada.Text_IO *note A.10.1(39): 6387.
78058
78059 Page_Length in Ada.Text_IO *note A.10.1(26): 6362.
78060
78061 Parent
78062 in Ada.Containers.Multiway_Trees *note A.18.10(59/3): 7195.
78063
78064 Parent_Tag in Ada.Tags *note 3.9(7.2/2): 2103.
78065
78066 Peak_Use
78067 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(7/3): 7311.
78068 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(6/3):
78069 7297.
78070 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(7/3):
78071 7284.
78072 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(7/3):
78073 7304.
78074 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(6/3):
78075 7291.
78076
78077 Pic_String in Ada.Text_IO.Editing *note F.3.3(7): 8159.
78078
78079 Pool_of_Subpool
78080 in System.Storage_Pools.Subpools *note 13.11.4(9/3): 5221.
78081
78082 Prepend
78083 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(22/2): 6789.
78084 in Ada.Containers.Vectors *note A.18.2(44/2): 6711, *note
78085 A.18.2(45/2): 6712.
78086
78087 Prepend_Child
78088 in Ada.Containers.Multiway_Trees *note A.18.10(51/3): 7187.
78089
78090 Previous
78091 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(38/2): 6805,
78092 *note A.18.3(40/2): 6807.
78093 in Ada.Containers.Ordered_Maps *note A.18.6(36/2): 6946, *note
78094 A.18.6(37/2): 6947.
78095 in Ada.Containers.Ordered_Sets *note A.18.9(47/2): 7101, *note
78096 A.18.9(48/2): 7102.
78097 in Ada.Containers.Vectors *note A.18.2(65/2): 6732, *note
78098 A.18.2(66/2): 6733.
78099 in Ada.Iterator_Interfaces *note 5.5.1(4/3): 3208.
78100
78101 Previous_Sibling
78102 in Ada.Containers.Multiway_Trees *note A.18.10(65/3): 7201, *note
78103 A.18.10(67/3): 7203.
78104
78105 Put
78106 in Ada.Text_IO *note A.10.1(42): 6390, *note A.10.1(48): 6400,
78107 *note A.10.1(55): 6416, *note A.10.1(60): 6422, *note A.10.1(66): 6432,
78108 *note A.10.1(67): 6435, *note A.10.1(71): 6443, *note A.10.1(72): 6445,
78109 *note A.10.1(76): 6453, *note A.10.1(77): 6455, *note A.10.1(82): 6461,
78110 *note A.10.1(83): 6464.
78111 in Ada.Text_IO.Bounded_IO *note A.10.11(4/2): 6483, *note
78112 A.10.11(5/2): 6484.
78113 in Ada.Text_IO.Complex_IO *note G.1.3(7): 8242, *note G.1.3(8):
78114 8244.
78115 in Ada.Text_IO.Editing *note F.3.3(14): 8171, *note F.3.3(15):
78116 8172, *note F.3.3(16): 8173.
78117 in Ada.Text_IO.Unbounded_IO *note A.10.12(4/2): 6492, *note
78118 A.10.12(5/2): 6493.
78119
78120 Put_Line
78121 in Ada.Text_IO *note A.10.1(50): 6407.
78122 in Ada.Text_IO.Bounded_IO *note A.10.11(6/2): 6485, *note
78123 A.10.11(7/2): 6486.
78124 in Ada.Text_IO.Unbounded_IO *note A.10.12(6/2): 6494, *note
78125 A.10.12(7/2): 6495.
78126
78127 Query_Element
78128 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(16/2): 6778.
78129 in Ada.Containers.Hashed_Maps *note A.18.5(16/2): 6867.
78130 in Ada.Containers.Hashed_Sets *note A.18.8(17/2): 7000.
78131 in Ada.Containers.Indefinite_Holders *note A.18.18(14/3): 7235.
78132 in Ada.Containers.Multiway_Trees *note A.18.10(26/3): 7162.
78133 in Ada.Containers.Ordered_Maps *note A.18.6(15/2): 6918.
78134 in Ada.Containers.Ordered_Sets *note A.18.9(16/2): 7071.
78135 in Ada.Containers.Vectors *note A.18.2(31/2): 6691, *note
78136 A.18.2(32/2): 6692.
78137
78138 Raise_Exception in Ada.Exceptions *note 11.4.1(4/3): 4545.
78139
78140 Random
78141 in Ada.Numerics.Discrete_Random *note A.5.2(20): 6109.
78142 in Ada.Numerics.Float_Random *note A.5.2(8): 6097.
78143
78144 Re
78145 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(7/2): 8310,
78146 *note G.3.2(27/2): 8323.
78147 in Ada.Numerics.Generic_Complex_Types *note G.1.1(6): 8184.
78148
78149 Read
78150 in Ada.Direct_IO *note A.8.4(12): 6284.
78151 in Ada.Sequential_IO *note A.8.1(12): 6258.
78152 in Ada.Storage_IO *note A.9(6): 6303.
78153 in Ada.Streams *note 13.13.1(5): 5298.
78154 in Ada.Streams.Stream_IO *note A.12.1(15): 6531, *note A.12.1(16):
78155 6532.
78156 in System.RPC *note E.5(7): 8129.
78157
78158 Reference
78159 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.4/3): 6782.
78160 in Ada.Containers.Hashed_Maps *note A.18.5(17.4/3): 6871, *note
78161 A.18.5(17.6/3): 6873.
78162 in Ada.Containers.Indefinite_Holders *note A.18.18(19/3): 7240.
78163 in Ada.Containers.Multiway_Trees *note A.18.10(31/3): 7167.
78164 in Ada.Containers.Ordered_Maps *note A.18.6(16.4/3): 6922, *note
78165 A.18.6(16.6/3): 6924.
78166 in Ada.Containers.Vectors *note A.18.2(34.4/3): 6697, *note
78167 A.18.2(34.6/3): 6699.
78168 in Ada.Interrupts *note C.3.2(10): 7602.
78169 in Ada.Task_Attributes *note C.7.2(5): 7660.
78170
78171 Reference_Preserving_Key
78172 in Ada.Containers.Hashed_Sets *note A.18.8(58.2/3): 7041, *note
78173 A.18.8(58.4/3): 7043.
78174 in Ada.Containers.Ordered_Sets *note A.18.9(73.2/3): 7122, *note
78175 A.18.9(73.4/3): 7124.
78176
78177 Reinitialize in Ada.Task_Attributes *note C.7.2(6): 7662.
78178
78179 Relative_Name
78180 in Ada.Directories.Hierarchical_File_Names *note A.16.1(13/3):
78181 6641.
78182
78183 Remove_Task
78184 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7961.
78185
78186 Rename in Ada.Directories *note A.16(12/2): 6588.
78187
78188 Replace
78189 in Ada.Containers.Hashed_Maps *note A.18.5(23/2): 6881.
78190 in Ada.Containers.Hashed_Sets *note A.18.8(22/2): 7008, *note
78191 A.18.8(53/2): 7034.
78192 in Ada.Containers.Ordered_Maps *note A.18.6(22/2): 6932.
78193 in Ada.Containers.Ordered_Sets *note A.18.9(21/2): 7079, *note
78194 A.18.9(66/2): 7113.
78195
78196 Replace_Element
78197 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(15/2): 6777.
78198 in Ada.Containers.Hashed_Maps *note A.18.5(15/2): 6866.
78199 in Ada.Containers.Hashed_Sets *note A.18.8(16/2): 6999.
78200 in Ada.Containers.Indefinite_Holders *note A.18.18(13/3): 7234.
78201 in Ada.Containers.Multiway_Trees *note A.18.10(25/3): 7161.
78202 in Ada.Containers.Ordered_Maps *note A.18.6(14/2): 6917.
78203 in Ada.Containers.Ordered_Sets *note A.18.9(15/2): 7070.
78204 in Ada.Containers.Vectors *note A.18.2(29/2): 6689, *note
78205 A.18.2(30/2): 6690.
78206 in Ada.Strings.Bounded *note A.4.4(27): 5809.
78207 in Ada.Strings.Unbounded *note A.4.5(21): 5863.
78208
78209 Replace_Slice
78210 in Ada.Strings.Bounded *note A.4.4(58): 5830, *note A.4.4(59):
78211 5831.
78212 in Ada.Strings.Fixed *note A.4.3(23): 5773, *note A.4.3(24): 5774.
78213 in Ada.Strings.Unbounded *note A.4.5(53): 5884, *note A.4.5(54):
78214 5885.
78215
78216 Replenish
78217 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7965.
78218
78219 Replicate in Ada.Strings.Bounded *note A.4.4(78): 5846, *note
78220 A.4.4(79): 5847, *note A.4.4(80): 5848.
78221
78222 Reraise_Occurrence in Ada.Exceptions *note 11.4.1(4/3): 4547.
78223
78224 Reserve_Capacity
78225 in Ada.Containers.Hashed_Maps *note A.18.5(9/2): 6860.
78226 in Ada.Containers.Hashed_Sets *note A.18.8(11/2): 6994.
78227 in Ada.Containers.Vectors *note A.18.2(20/2): 6680.
78228
78229 Reset
78230 in Ada.Direct_IO *note A.8.4(8): 6279.
78231 in Ada.Numerics.Discrete_Random *note A.5.2(21): 6111, *note
78232 A.5.2(24): 6114.
78233 in Ada.Numerics.Float_Random *note A.5.2(9): 6099, *note A.5.2(12):
78234 6102.
78235 in Ada.Sequential_IO *note A.8.1(8): 6252.
78236 in Ada.Streams.Stream_IO *note A.12.1(10): 6524.
78237 in Ada.Text_IO *note A.10.1(11): 6333.
78238
78239 Reverse_Elements
78240 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(27/2): 6794.
78241 in Ada.Containers.Vectors *note A.18.2(54/2): 6721.
78242
78243 Reverse_Find
78244 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(42/2): 6809.
78245 in Ada.Containers.Vectors *note A.18.2(70/2): 6737.
78246
78247 Reverse_Find_Index
78248 in Ada.Containers.Vectors *note A.18.2(69/2): 6736.
78249
78250 Reverse_Iterate
78251 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(46/2): 6812.
78252 in Ada.Containers.Ordered_Maps *note A.18.6(51/2): 6954.
78253 in Ada.Containers.Ordered_Sets *note A.18.9(61/2): 7108.
78254 in Ada.Containers.Vectors *note A.18.2(74/2): 6740.
78255
78256 Reverse_Iterate_Children
78257 in Ada.Containers.Multiway_Trees *note A.18.10(69/3): 7205.
78258
78259 Root in Ada.Containers.Multiway_Trees *note A.18.10(22/3): 7158.
78260
78261 Save
78262 in Ada.Numerics.Discrete_Random *note A.5.2(24): 6113.
78263 in Ada.Numerics.Float_Random *note A.5.2(12): 6101.
78264
78265 Save_Occurrence in Ada.Exceptions *note 11.4.1(6/2): 4553.
78266
78267 Second in Ada.Calendar.Formatting *note 9.6.1(26/2): 4171.
78268
78269 Seconds
78270 in Ada.Calendar *note 9.6(13): 4130.
78271 in Ada.Real_Time *note D.8(14/2): 7883.
78272
78273 Seconds_Of in Ada.Calendar.Formatting *note 9.6.1(28/2): 4173.
78274
78275 Set in Ada.Environment_Variables *note A.17(6/2): 6648.
78276
78277 Set_Bounded_String
78278 in Ada.Strings.Bounded *note A.4.4(12.1/2): 5799.
78279
78280 Set_Col in Ada.Text_IO *note A.10.1(35): 6379.
78281
78282 Set_CPU
78283 in System.Multiprocessors.Dispatching_Domains *note D.16.1(12/3):
78284 8011.
78285
78286 Set_Deadline in Ada.Dispatching.EDF *note D.2.6(9/2): 7753.
78287
78288 Set_Dependents_Fallback_Handler
78289 in Ada.Task_Termination *note C.7.3(5/2): 7672.
78290
78291 Set_Directory in Ada.Directories *note A.16(6/2): 6582.
78292
78293 Set_Error in Ada.Text_IO *note A.10.1(15): 6340.
78294
78295 Set_Exit_Status in Ada.Command_Line *note A.15(9): 6578.
78296
78297 Set_False
78298 in Ada.Synchronous_Task_Control *note D.10(4): 7901.
78299
78300 Set_Handler
78301 in Ada.Execution_Time.Group_Budgets *note D.14.2(10/2): 7969.
78302 in Ada.Execution_Time.Timers *note D.14.1(7/2): 7944.
78303 in Ada.Real_Time.Timing_Events *note D.15(5/2): 7987.
78304
78305 Set_Im
78306 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(8/2): 8313,
78307 *note G.3.2(28/2): 8326.
78308 in Ada.Numerics.Generic_Complex_Types *note G.1.1(7): 8189.
78309
78310 Set_Index
78311 in Ada.Direct_IO *note A.8.4(14): 6288.
78312 in Ada.Streams.Stream_IO *note A.12.1(22): 6535.
78313
78314 Set_Input in Ada.Text_IO *note A.10.1(15): 6338.
78315
78316 Set_Length in Ada.Containers.Vectors *note A.18.2(22/2): 6682.
78317
78318 Set_Line in Ada.Text_IO *note A.10.1(36): 6381.
78319
78320 Set_Line_Length in Ada.Text_IO *note A.10.1(23): 6356.
78321
78322 Set_Mode in Ada.Streams.Stream_IO *note A.12.1(24): 6538.
78323
78324 Set_Output in Ada.Text_IO *note A.10.1(15): 6339.
78325
78326 Set_Page_Length in Ada.Text_IO *note A.10.1(24): 6358.
78327
78328 Set_Pool_of_Subpool
78329 in System.Storage_Pools.Subpools *note 13.11.4(10/3): 5222.
78330
78331 Set_Priority
78332 in Ada.Dynamic_Priorities *note D.5.1(4): 7795.
78333
78334 Set_Quantum
78335 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7744.
78336
78337 Set_Re
78338 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(8/2): 8312,
78339 *note G.3.2(28/2): 8325.
78340 in Ada.Numerics.Generic_Complex_Types *note G.1.1(7): 8187.
78341
78342 Set_Specific_Handler
78343 in Ada.Task_Termination *note C.7.3(6/2): 7674.
78344
78345 Set_True
78346 in Ada.Synchronous_Task_Control *note D.10(4): 7900.
78347
78348 Set_Unbounded_String
78349 in Ada.Strings.Unbounded *note A.4.5(11.1/2): 5858.
78350
78351 Set_Value in Ada.Task_Attributes *note C.7.2(6): 7661.
78352
78353 Simple_Name
78354 in Ada.Directories *note A.16(16/2): 6591, *note A.16(38/2): 6611.
78355 in Ada.Directories.Hierarchical_File_Names *note A.16.1(10/3):
78356 6638.
78357
78358 Sin
78359 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
78360 G.1.2(4): 8211.
78361 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6062.
78362
78363 Sinh
78364 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
78365 G.1.2(6): 8219.
78366 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6078.
78367
78368 Size
78369 in Ada.Direct_IO *note A.8.4(15): 6290.
78370 in Ada.Directories *note A.16(26/2): 6602, *note A.16(41/2): 6614.
78371 in Ada.Streams.Stream_IO *note A.12.1(23): 6537.
78372
78373 Skip_Line in Ada.Text_IO *note A.10.1(29): 6367.
78374
78375 Skip_Page in Ada.Text_IO *note A.10.1(32): 6373.
78376
78377 Slice
78378 in Ada.Strings.Bounded *note A.4.4(28): 5810.
78379 in Ada.Strings.Unbounded *note A.4.5(22): 5864.
78380
78381 Solve
78382 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(46/2): 8337.
78383 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(24/2): 8297.
78384
78385 Sort
78386 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(49/2): 6815.
78387 in Ada.Containers.Vectors *note A.18.2(77/2): 6743.
78388
78389 Specific_Handler
78390 in Ada.Task_Termination *note C.7.3(6/2): 7675.
78391
78392 Splice
78393 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(30/2): 6797,
78394 *note A.18.3(31/2): 6798, *note A.18.3(32/2): 6799.
78395
78396 Splice_Children
78397 in Ada.Containers.Multiway_Trees *note A.18.10(57/3): 7193, *note
78398 A.18.10(58/3): 7194.
78399
78400 Splice_Subtree
78401 in Ada.Containers.Multiway_Trees *note A.18.10(55/3): 7191, *note
78402 A.18.10(56/3): 7192.
78403
78404 Split
78405 in Ada.Calendar *note 9.6(14): 4131.
78406 in Ada.Calendar.Formatting *note 9.6.1(29/2): 4174, *note
78407 9.6.1(32/2): 4177, *note 9.6.1(33/2): 4178, *note 9.6.1(34/2): 4179.
78408 in Ada.Execution_Time *note D.14(8/2): 7931.
78409 in Ada.Real_Time *note D.8(16): 7886.
78410
78411 Sqrt
78412 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
78413 G.1.2(3): 8207.
78414 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(4): 6058.
78415
78416 Standard_Error in Ada.Text_IO *note A.10.1(16): 6343, *note
78417 A.10.1(19): 6350.
78418
78419 Standard_Input in Ada.Text_IO *note A.10.1(16): 6341, *note
78420 A.10.1(19): 6348.
78421
78422 Standard_Output in Ada.Text_IO *note A.10.1(16): 6342, *note
78423 A.10.1(19): 6349.
78424
78425 Start_Search in Ada.Directories *note A.16(32/2): 6607.
78426
78427 Storage_Size
78428 in System.Storage_Pools *note 13.11(9): 5156.
78429 in System.Storage_Pools.Subpools *note 13.11.4(16/3): 5228.
78430
78431 Stream
78432 in Ada.Streams.Stream_IO *note A.12.1(13): 6530.
78433 in Ada.Text_IO.Text_Streams *note A.12.2(4): 6551.
78434 in Ada.Wide_Text_IO.Text_Streams *note A.12.3(4): 6554.
78435 in Ada.Wide_Wide_Text_IO.Text_Streams *note A.12.4(4/2): 6557.
78436
78437 Strlen in Interfaces.C.Strings *note B.3.1(17): 7444.
78438
78439 Sub_Second in Ada.Calendar.Formatting *note 9.6.1(27/2): 4172.
78440
78441 Subtree_Node_Count
78442 in Ada.Containers.Multiway_Trees *note A.18.10(18/3): 7154.
78443
78444 Supported
78445 in Ada.Execution_Time.Interrupts *note D.14.3(3/3): 7982.
78446
78447 Suspend_Until_True
78448 in Ada.Synchronous_Task_Control *note D.10(4): 7903.
78449
78450 Suspend_Until_True_And_Set_Deadline
78451 in Ada.Synchronous_Task_Control.EDF *note D.10(5.2/3): 7905.
78452
78453 Swap
78454 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(28/2): 6795.
78455 in Ada.Containers.Multiway_Trees *note A.18.10(37/3): 7173.
78456 in Ada.Containers.Vectors *note A.18.2(55/2): 6722, *note
78457 A.18.2(56/2): 6723.
78458
78459 Swap_Links
78460 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(29/2): 6796.
78461
78462 Symmetric_Difference
78463 in Ada.Containers.Hashed_Sets *note A.18.8(35/2): 7018, *note
78464 A.18.8(36/2): 7019.
78465 in Ada.Containers.Ordered_Sets *note A.18.9(36/2): 7091, *note
78466 A.18.9(37/2): 7092.
78467
78468 Tail
78469 in Ada.Strings.Bounded *note A.4.4(72): 5844, *note A.4.4(73):
78470 5845.
78471 in Ada.Strings.Fixed *note A.4.3(37): 5787, *note A.4.3(38): 5788.
78472 in Ada.Strings.Unbounded *note A.4.5(67): 5898, *note A.4.5(68):
78473 5899.
78474
78475 Tan
78476 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
78477 G.1.2(4): 8213.
78478 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6066.
78479
78480 Tanh
78481 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
78482 G.1.2(6): 8221.
78483 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6080.
78484
78485 Time_Of
78486 in Ada.Calendar *note 9.6(15): 4132.
78487 in Ada.Calendar.Formatting *note 9.6.1(30/2): 4175, *note
78488 9.6.1(31/2): 4176.
78489 in Ada.Execution_Time *note D.14(9/2): 7932.
78490 in Ada.Real_Time *note D.8(16): 7887.
78491
78492 Time_Of_Event
78493 in Ada.Real_Time.Timing_Events *note D.15(6/2): 7990.
78494
78495 Time_Remaining
78496 in Ada.Execution_Time.Timers *note D.14.1(8/2): 7948.
78497
78498 To_Ada
78499 in Interfaces.C *note B.3(22): 7390, *note B.3(26): 7394, *note
78500 B.3(28): 7396, *note B.3(32): 7400, *note B.3(37): 7404, *note B.3(39):
78501 7406, *note B.3(39.10/2): 7416, *note B.3(39.13/2): 7420, *note
78502 B.3(39.17/2): 7424, *note B.3(39.19/2): 7426, *note B.3(39.4/2): 7410,
78503 *note B.3(39.8/2): 7414.
78504 in Interfaces.COBOL *note B.4(17): 7493, *note B.4(19): 7495.
78505 in Interfaces.Fortran *note B.5(13): 7546, *note B.5(14): 7548,
78506 *note B.5(16): 7550.
78507
78508 To_Address
78509 in System.Address_To_Access_Conversions *note 13.7.2(3/3): 5111.
78510 in System.Storage_Elements *note 13.7.1(10/3): 5104.
78511
78512 To_Basic in Ada.Characters.Handling *note A.3.2(6): 5426, *note
78513 A.3.2(7): 5429.
78514
78515 To_Binary in Interfaces.COBOL *note B.4(45): 7525, *note B.4(48):
78516 7528.
78517
78518 To_Bounded_String
78519 in Ada.Strings.Bounded *note A.4.4(11): 5797.
78520
78521 To_C in Interfaces.C *note B.3(21): 7389, *note B.3(25): 7393, *note
78522 B.3(27): 7395, *note B.3(32): 7399, *note B.3(36): 7403, *note B.3(38):
78523 7405, *note B.3(39.13/2): 7419, *note B.3(39.16/2): 7423, *note
78524 B.3(39.18/2): 7425, *note B.3(39.4/2): 7409, *note B.3(39.7/2): 7413,
78525 *note B.3(39.9/2): 7415.
78526
78527 To_Character
78528 in Ada.Characters.Conversions *note A.3.4(5/2): 5691.
78529
78530 To_Chars_Ptr in Interfaces.C.Strings *note B.3.1(8): 7435.
78531
78532 To_COBOL in Interfaces.COBOL *note B.4(17): 7492, *note B.4(18): 7494.
78533
78534 To_Cursor in Ada.Containers.Vectors *note A.18.2(25/2): 6685.
78535
78536 To_Decimal in Interfaces.COBOL *note B.4(35): 7516, *note B.4(40):
78537 7520, *note B.4(44): 7524, *note B.4(47): 7526.
78538
78539 To_Display in Interfaces.COBOL *note B.4(36): 7517.
78540
78541 To_Domain
78542 in Ada.Strings.Maps *note A.4.2(24): 5748.
78543 in Ada.Strings.Wide_Maps *note A.4.7(24): 5950.
78544 in Ada.Strings.Wide_Wide_Maps *note A.4.8(24/2): 5989.
78545
78546 To_Duration in Ada.Real_Time *note D.8(13): 7878.
78547
78548 To_Fortran in Interfaces.Fortran *note B.5(13): 7545, *note B.5(14):
78549 7547, *note B.5(15): 7549.
78550
78551 To_Holder
78552 in Ada.Containers.Indefinite_Holders *note A.18.18(9/3): 7230.
78553
78554 To_Index in Ada.Containers.Vectors *note A.18.2(26/2): 6686.
78555
78556 To_Integer in System.Storage_Elements *note 13.7.1(10/3): 5105.
78557
78558 To_ISO_646 in Ada.Characters.Handling *note A.3.2(11): 5433, *note
78559 A.3.2(12): 5434.
78560
78561 To_Long_Binary in Interfaces.COBOL *note B.4(48): 7529.
78562
78563 To_Lower
78564 in Ada.Characters.Handling *note A.3.2(6): 5424, *note A.3.2(7):
78565 5427.
78566 in Ada.Wide_Characters.Handling *note A.3.5(20/3): 5712, *note
78567 A.3.5(21/3): 5714.
78568
78569 To_Mapping
78570 in Ada.Strings.Maps *note A.4.2(23): 5747.
78571 in Ada.Strings.Wide_Maps *note A.4.7(23): 5949.
78572 in Ada.Strings.Wide_Wide_Maps *note A.4.8(23/2): 5988.
78573
78574 To_Packed in Interfaces.COBOL *note B.4(41): 7521.
78575
78576 To_Picture in Ada.Text_IO.Editing *note F.3.3(6): 8158.
78577
78578 To_Pointer
78579 in System.Address_To_Access_Conversions *note 13.7.2(3/3): 5110.
78580
78581 To_Range
78582 in Ada.Strings.Maps *note A.4.2(24): 5749.
78583 in Ada.Strings.Wide_Maps *note A.4.7(25): 5951.
78584 in Ada.Strings.Wide_Wide_Maps *note A.4.8(25/2): 5990.
78585
78586 To_Ranges
78587 in Ada.Strings.Maps *note A.4.2(10): 5737.
78588 in Ada.Strings.Wide_Maps *note A.4.7(10): 5939.
78589 in Ada.Strings.Wide_Wide_Maps *note A.4.8(10/2): 5978.
78590
78591 To_Sequence
78592 in Ada.Strings.Maps *note A.4.2(19): 5743.
78593 in Ada.Strings.Wide_Maps *note A.4.7(19): 5945.
78594 in Ada.Strings.Wide_Wide_Maps *note A.4.8(19/2): 5984.
78595
78596 To_Set
78597 in Ada.Containers.Hashed_Sets *note A.18.8(9/2): 6992.
78598 in Ada.Containers.Ordered_Sets *note A.18.9(10/2): 7065.
78599 in Ada.Strings.Maps *note A.4.2(8): 5735, *note A.4.2(9): 5736,
78600 *note A.4.2(17): 5741, *note A.4.2(18): 5742.
78601 in Ada.Strings.Wide_Maps *note A.4.7(8): 5937, *note A.4.7(9):
78602 5938, *note A.4.7(17): 5943, *note A.4.7(18): 5944.
78603 in Ada.Strings.Wide_Wide_Maps *note A.4.8(8/2): 5976, *note
78604 A.4.8(9/2): 5977, *note A.4.8(17/2): 5982, *note A.4.8(18/2): 5983.
78605
78606 To_String
78607 in Ada.Characters.Conversions *note A.3.4(5/2): 5690.
78608 in Ada.Strings.Bounded *note A.4.4(12): 5798.
78609 in Ada.Strings.Unbounded *note A.4.5(11): 5857.
78610
78611 To_Time_Span in Ada.Real_Time *note D.8(13): 7879.
78612
78613 To_Unbounded_String
78614 in Ada.Strings.Unbounded *note A.4.5(9): 5855, *note A.4.5(10):
78615 5856.
78616
78617 To_Upper
78618 in Ada.Characters.Handling *note A.3.2(6): 5425, *note A.3.2(7):
78619 5428.
78620 in Ada.Wide_Characters.Handling *note A.3.5(20/3): 5713, *note
78621 A.3.5(21/3): 5715.
78622
78623 To_Vector in Ada.Containers.Vectors *note A.18.2(13/2): 6677, *note
78624 A.18.2(14/2): 6678.
78625
78626 To_Wide_Character
78627 in Ada.Characters.Conversions *note A.3.4(4/2): 5683, *note
78628 A.3.4(5/2): 5693.
78629
78630 To_Wide_String
78631 in Ada.Characters.Conversions *note A.3.4(4/2): 5684, *note
78632 A.3.4(5/2): 5694.
78633
78634 To_Wide_Wide_Character
78635 in Ada.Characters.Conversions *note A.3.4(4/2): 5687.
78636
78637 To_Wide_Wide_String
78638 in Ada.Characters.Conversions *note A.3.4(4/2): 5688.
78639
78640 Translate
78641 in Ada.Strings.Bounded *note A.4.4(53): 5826, *note A.4.4(54):
78642 5827, *note A.4.4(55): 5828, *note A.4.4(56): 5829.
78643 in Ada.Strings.Fixed *note A.4.3(18): 5769, *note A.4.3(19): 5770,
78644 *note A.4.3(20): 5771, *note A.4.3(21): 5772.
78645 in Ada.Strings.Unbounded *note A.4.5(48): 5880, *note A.4.5(49):
78646 5881, *note A.4.5(50): 5882, *note A.4.5(51): 5883.
78647
78648 Transpose
78649 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(34/2): 8335.
78650 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(17/2): 8295.
78651
78652 Trim
78653 in Ada.Strings.Bounded *note A.4.4(67): 5838, *note A.4.4(68):
78654 5840, *note A.4.4(69): 5841.
78655 in Ada.Strings.Fixed *note A.4.3(31): 5781, *note A.4.3(32): 5782,
78656 *note A.4.3(33): 5783, *note A.4.3(34): 5784.
78657 in Ada.Strings.Unbounded *note A.4.5(61): 5892, *note A.4.5(62):
78658 5893, *note A.4.5(63): 5894, *note A.4.5(64): 5895.
78659
78660 Unbounded_Slice
78661 in Ada.Strings.Unbounded *note A.4.5(22.1/2): 5865, *note
78662 A.4.5(22.2/2): 5866.
78663
78664 Unchecked_Conversion
78665 child of Ada *note 13.9(3/3): 5124.
78666
78667 Unchecked_Deallocation
78668 child of Ada *note 13.11.2(3/3): 5193.
78669
78670 Union
78671 in Ada.Containers.Hashed_Sets *note A.18.8(26/2): 7012, *note
78672 A.18.8(27/2): 7013.
78673 in Ada.Containers.Ordered_Sets *note A.18.9(27/2): 7085, *note
78674 A.18.9(28/2): 7086.
78675
78676 Unit_Matrix
78677 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(51/2): 8342.
78678 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(29/2): 8302.
78679
78680 Unit_Vector
78681 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(24/2): 8322.
78682 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(14/2): 8294.
78683
78684 Update in Interfaces.C.Strings *note B.3.1(18): 7445, *note B.3.1(19):
78685 7446.
78686
78687 Update_Element
78688 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17/2): 6779.
78689 in Ada.Containers.Hashed_Maps *note A.18.5(17/2): 6868.
78690 in Ada.Containers.Indefinite_Holders *note A.18.18(15/3): 7236.
78691 in Ada.Containers.Multiway_Trees *note A.18.10(27/3): 7163.
78692 in Ada.Containers.Ordered_Maps *note A.18.6(16/2): 6919.
78693 in Ada.Containers.Vectors *note A.18.2(33/2): 6693, *note
78694 A.18.2(34/2): 6694.
78695
78696 Update_Element_Preserving_Key
78697 in Ada.Containers.Hashed_Sets *note A.18.8(58/2): 7039.
78698 in Ada.Containers.Ordered_Sets *note A.18.9(73/2): 7120.
78699
78700 Update_Error in Interfaces.C.Strings *note B.3.1(20): 7447.
78701
78702 UTC_Time_Offset
78703 in Ada.Calendar.Time_Zones *note 9.6.1(6/2): 4147.
78704
78705 Valid
78706 in Ada.Text_IO.Editing *note F.3.3(5): 8157, *note F.3.3(12): 8169.
78707 in Interfaces.COBOL *note B.4(33): 7514, *note B.4(38): 7518, *note
78708 B.4(43): 7522.
78709
78710 Value
78711 in Ada.Calendar.Formatting *note 9.6.1(36/2): 4181, *note
78712 9.6.1(38/2): 4183.
78713 in Ada.Environment_Variables *note A.17(4.1/3): 6646, *note
78714 A.17(4/2): 6645.
78715 in Ada.Numerics.Discrete_Random *note A.5.2(26): 6117.
78716 in Ada.Numerics.Float_Random *note A.5.2(14): 6105.
78717 in Ada.Strings.Maps *note A.4.2(21): 5745.
78718 in Ada.Strings.Wide_Maps *note A.4.7(21): 5947.
78719 in Ada.Strings.Wide_Wide_Maps *note A.4.8(21/2): 5986.
78720 in Ada.Task_Attributes *note C.7.2(4): 7659.
78721 in Interfaces.C.Pointers *note B.3.2(6): 7454, *note B.3.2(7):
78722 7455.
78723 in Interfaces.C.Strings *note B.3.1(13): 7440, *note B.3.1(14):
78724 7441, *note B.3.1(15): 7442, *note B.3.1(16): 7443.
78725
78726 Virtual_Length
78727 in Interfaces.C.Pointers *note B.3.2(13): 7459.
78728
78729 Wait_For_Release
78730 in Ada.Synchronous_Barriers *note D.10.1(6/3): 7912.
78731
78732 Wide_Equal_Case_Insensitive
78733 child of Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5925.
78734 child of Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5924.
78735 child of Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5926.
78736
78737 Wide_Hash
78738 child of Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5921.
78739 child of Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5920.
78740 child of Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5922.
78741
78742 Wide_Hash_Case_Insensitive
78743 child of Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5929.
78744 child of Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5928.
78745 child of Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5930.
78746
78747 Wide_Exception_Name in Ada.Exceptions *note 11.4.1(2/2): 4540, *note
78748 11.4.1(5/2): 4550.
78749
78750 Wide_Expanded_Name in Ada.Tags *note 3.9(7/2): 2097.
78751
78752 Wide_Wide_Equal_Case_Insensitive
78753 child of Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5964.
78754 child of Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5963.
78755 child of Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5965.
78756
78757 Wide_Wide_Hash
78758 child of Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5960.
78759 child of Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5959.
78760 child of Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5961.
78761
78762 Wide_Wide_Hash_Case_Insensitive
78763 child of Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5968.
78764 child of Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5967.
78765 child of Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5969.
78766
78767 Wide_Wide_Exception_Name
78768 in Ada.Exceptions *note 11.4.1(2/2): 4541, *note 11.4.1(5/2): 4551.
78769
78770 Wide_Wide_Expanded_Name in Ada.Tags *note 3.9(7/2): 2098.
78771
78772 Write
78773 in Ada.Direct_IO *note A.8.4(13): 6286.
78774 in Ada.Sequential_IO *note A.8.1(12): 6259.
78775 in Ada.Storage_IO *note A.9(7): 6304.
78776 in Ada.Streams *note 13.13.1(6): 5299.
78777 in Ada.Streams.Stream_IO *note A.12.1(18): 6533, *note A.12.1(19):
78778 6534.
78779 in System.RPC *note E.5(8): 8130.
78780
78781 Year
78782 in Ada.Calendar *note 9.6(13): 4127.
78783 in Ada.Calendar.Formatting *note 9.6.1(21/2): 4166.
78784
78785 Yield in Ada.Dispatching *note D.2.1(1.3/3): 7699.
78786
78787 Yield_To_Higher
78788 in Ada.Dispatching.Non_Preemptive *note D.2.4(2.2/3): 7736.
78789
78790 Yield_To_Same_Or_Higher
78791 in Ada.Dispatching.Non_Preemptive *note D.2.4(2.2/3): 7737.
78792
78793 \1f
78794 File: arm2012.info, Node: Q.4, Next: Q.5, Prev: Q.3, Up: Annex Q
78795
78796 Q.4 Language-Defined Exceptions
78797 ===============================
78798
78799 1/3
78800 This subclause lists all language-defined exceptions.
78801
78802
78803
78804 Argument_Error
78805 in Ada.Numerics *note A.5(3/2): 6054.
78806
78807 Assertion_Error
78808 in Ada.Assertions *note 11.4.2(13/2): 4577.
78809
78810 Capacity_Error
78811 in Ada.Containers *note A.18.1(5.1/3): 6662.
78812
78813 Communication_Error
78814 in System.RPC *note E.5(5): 8127.
78815
78816 Constraint_Error
78817 in Standard *note A.1(46): 5398.
78818
78819 Conversion_Error
78820 in Interfaces.COBOL *note B.4(30): 7512.
78821
78822 Data_Error
78823 in Ada.Direct_IO *note A.8.4(18): 6298.
78824 in Ada.IO_Exceptions *note A.13(4): 6565.
78825 in Ada.Sequential_IO *note A.8.1(15): 6267.
78826 in Ada.Storage_IO *note A.9(9): 6305.
78827 in Ada.Streams.Stream_IO *note A.12.1(26): 6546.
78828 in Ada.Text_IO *note A.10.1(85): 6471.
78829
78830 Device_Error
78831 in Ada.Direct_IO *note A.8.4(18): 6296.
78832 in Ada.Directories *note A.16(43/2): 6619.
78833 in Ada.IO_Exceptions *note A.13(4): 6563.
78834 in Ada.Sequential_IO *note A.8.1(15): 6265.
78835 in Ada.Streams.Stream_IO *note A.12.1(26): 6544.
78836 in Ada.Text_IO *note A.10.1(85): 6469.
78837
78838 Dispatching_Domain_Error
78839 in System.Multiprocessors.Dispatching_Domains *note D.16.1(4/3):
78840 8003.
78841
78842 Dispatching_Policy_Error
78843 in Ada.Dispatching *note D.2.1(1.4/3): 7700.
78844
78845 Encoding_Error
78846 in Ada.Strings.UTF_Encoding *note A.4.11(8/3): 6016.
78847
78848 End_Error
78849 in Ada.Direct_IO *note A.8.4(18): 6297.
78850 in Ada.IO_Exceptions *note A.13(4): 6564.
78851 in Ada.Sequential_IO *note A.8.1(15): 6266.
78852 in Ada.Streams.Stream_IO *note A.12.1(26): 6545.
78853 in Ada.Text_IO *note A.10.1(85): 6470.
78854
78855 Group_Budget_Error
78856 in Ada.Execution_Time.Group_Budgets *note D.14.2(11/2): 7972.
78857
78858 Index_Error
78859 in Ada.Strings *note A.4.1(5): 5723.
78860
78861 Layout_Error
78862 in Ada.IO_Exceptions *note A.13(4): 6566.
78863 in Ada.Text_IO *note A.10.1(85): 6472.
78864
78865 Length_Error
78866 in Ada.Strings *note A.4.1(5): 5721.
78867
78868 Mode_Error
78869 in Ada.Direct_IO *note A.8.4(18): 6293.
78870 in Ada.IO_Exceptions *note A.13(4): 6560.
78871 in Ada.Sequential_IO *note A.8.1(15): 6262.
78872 in Ada.Streams.Stream_IO *note A.12.1(26): 6541.
78873 in Ada.Text_IO *note A.10.1(85): 6466.
78874
78875 Name_Error
78876 in Ada.Direct_IO *note A.8.4(18): 6294.
78877 in Ada.Directories *note A.16(43/2): 6617.
78878 in Ada.IO_Exceptions *note A.13(4): 6561.
78879 in Ada.Sequential_IO *note A.8.1(15): 6263.
78880 in Ada.Streams.Stream_IO *note A.12.1(26): 6542.
78881 in Ada.Text_IO *note A.10.1(85): 6467.
78882
78883 Pattern_Error
78884 in Ada.Strings *note A.4.1(5): 5722.
78885
78886 Picture_Error
78887 in Ada.Text_IO.Editing *note F.3.3(9): 8162.
78888
78889 Pointer_Error
78890 in Interfaces.C.Pointers *note B.3.2(8): 7456.
78891
78892 Program_Error
78893 in Standard *note A.1(46): 5399.
78894
78895 Status_Error
78896 in Ada.Direct_IO *note A.8.4(18): 6292.
78897 in Ada.Directories *note A.16(43/2): 6616.
78898 in Ada.IO_Exceptions *note A.13(4): 6559.
78899 in Ada.Sequential_IO *note A.8.1(15): 6261.
78900 in Ada.Streams.Stream_IO *note A.12.1(26): 6540.
78901 in Ada.Text_IO *note A.10.1(85): 6465.
78902
78903 Storage_Error
78904 in Standard *note A.1(46): 5400.
78905
78906 Tag_Error
78907 in Ada.Tags *note 3.9(8): 2107.
78908
78909 Tasking_Error
78910 in Standard *note A.1(46): 5401.
78911
78912 Terminator_Error
78913 in Interfaces.C *note B.3(40): 7427.
78914
78915 Time_Error
78916 in Ada.Calendar *note 9.6(18): 4133.
78917
78918 Timer_Resource_Error
78919 in Ada.Execution_Time.Timers *note D.14.1(9/2): 7949.
78920
78921 Translation_Error
78922 in Ada.Strings *note A.4.1(5): 5724.
78923
78924 Unknown_Zone_Error
78925 in Ada.Calendar.Time_Zones *note 9.6.1(5/2): 4146.
78926
78927 Use_Error
78928 in Ada.Direct_IO *note A.8.4(18): 6295.
78929 in Ada.Directories *note A.16(43/2): 6618.
78930 in Ada.IO_Exceptions *note A.13(4): 6562.
78931 in Ada.Sequential_IO *note A.8.1(15): 6264.
78932 in Ada.Streams.Stream_IO *note A.12.1(26): 6543.
78933 in Ada.Text_IO *note A.10.1(85): 6468.
78934
78935 \1f
78936 File: arm2012.info, Node: Q.5, Prev: Q.4, Up: Annex Q
78937
78938 Q.5 Language-Defined Objects
78939 ============================
78940
78941 1/3
78942 This subclause lists all language-defined constants, variables, named
78943 numbers, and enumeration literals.
78944
78945
78946
78947 ACK in Ada.Characters.Latin_1 *note A.3.3(5): 5453.
78948
78949 Acute in Ada.Characters.Latin_1 *note A.3.3(22): 5599.
78950
78951 Ada_To_COBOL in Interfaces.COBOL *note B.4(14): 7489.
78952
78953 Alphanumeric_Set
78954 in Ada.Strings.Maps.Constants *note A.4.6(4): 5910.
78955
78956 Ampersand in Ada.Characters.Latin_1 *note A.3.3(8): 5485.
78957
78958 APC in Ada.Characters.Latin_1 *note A.3.3(19): 5576.
78959
78960 Apostrophe in Ada.Characters.Latin_1 *note A.3.3(8): 5486.
78961
78962 Asterisk in Ada.Characters.Latin_1 *note A.3.3(8): 5489.
78963
78964 Basic_Map
78965 in Ada.Strings.Maps.Constants *note A.4.6(5): 5915.
78966
78967 Basic_Set
78968 in Ada.Strings.Maps.Constants *note A.4.6(4): 5907.
78969
78970 BEL in Ada.Characters.Latin_1 *note A.3.3(5): 5454.
78971
78972 BOM_16 in Ada.Strings.UTF_Encoding *note A.4.11(12/3): 6020.
78973
78974 BOM_16BE in Ada.Strings.UTF_Encoding *note A.4.11(10/3): 6018.
78975
78976 BOM_16LE in Ada.Strings.UTF_Encoding *note A.4.11(11/3): 6019.
78977
78978 BOM_8 in Ada.Strings.UTF_Encoding *note A.4.11(9/3): 6017.
78979
78980 BPH in Ada.Characters.Latin_1 *note A.3.3(17): 5547.
78981
78982 Broken_Bar in Ada.Characters.Latin_1 *note A.3.3(21/3): 5584.
78983
78984 BS in Ada.Characters.Latin_1 *note A.3.3(5): 5455.
78985
78986 Buffer_Size in Ada.Storage_IO *note A.9(4): 6301.
78987
78988 CAN in Ada.Characters.Latin_1 *note A.3.3(6): 5471.
78989
78990 CCH in Ada.Characters.Latin_1 *note A.3.3(18): 5565.
78991
78992 Cedilla in Ada.Characters.Latin_1 *note A.3.3(22): 5604.
78993
78994 Cent_Sign in Ada.Characters.Latin_1 *note A.3.3(21/3): 5580.
78995
78996 char16_nul in Interfaces.C *note B.3(39.3/2): 7408.
78997
78998 char32_nul in Interfaces.C *note B.3(39.12/2): 7418.
78999
79000 CHAR_BIT in Interfaces.C *note B.3(6): 7369.
79001
79002 Character_Set
79003 in Ada.Strings.Wide_Maps *note A.4.7(46/2): 5953.
79004 in Ada.Strings.Wide_Maps.Wide_Constants *note A.4.8(48/2): 5993.
79005
79006 Circumflex in Ada.Characters.Latin_1 *note A.3.3(12): 5506.
79007
79008 COBOL_To_Ada in Interfaces.COBOL *note B.4(15): 7490.
79009
79010 Colon in Ada.Characters.Latin_1 *note A.3.3(10): 5496.
79011
79012 Comma in Ada.Characters.Latin_1 *note A.3.3(8): 5491.
79013
79014 Commercial_At
79015 in Ada.Characters.Latin_1 *note A.3.3(10): 5502.
79016
79017 Control_Set
79018 in Ada.Strings.Maps.Constants *note A.4.6(4): 5902.
79019
79020 Copyright_Sign
79021 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5587.
79022
79023 Country_Unknown in Ada.Locales *note A.19(5/3): 7317.
79024
79025 CPU_Tick in Ada.Execution_Time *note D.14(4/2): 7929.
79026
79027 CPU_Time_First in Ada.Execution_Time *note D.14(4/2): 7926.
79028
79029 CPU_Time_Last in Ada.Execution_Time *note D.14(4/2): 7927.
79030
79031 CPU_Time_Unit in Ada.Execution_Time *note D.14(4/2): 7928.
79032
79033 CR in Ada.Characters.Latin_1 *note A.3.3(5): 5460.
79034
79035 CSI in Ada.Characters.Latin_1 *note A.3.3(19): 5572.
79036
79037 Currency_Sign
79038 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5582.
79039
79040 DC1 in Ada.Characters.Latin_1 *note A.3.3(6): 5464.
79041
79042 DC2 in Ada.Characters.Latin_1 *note A.3.3(6): 5465.
79043
79044 DC3 in Ada.Characters.Latin_1 *note A.3.3(6): 5466.
79045
79046 DC4 in Ada.Characters.Latin_1 *note A.3.3(6): 5467.
79047
79048 DCS in Ada.Characters.Latin_1 *note A.3.3(18): 5561.
79049
79050 Decimal_Digit_Set
79051 in Ada.Strings.Maps.Constants *note A.4.6(4): 5908.
79052
79053 Default_Aft
79054 in Ada.Text_IO *note A.10.1(64): 6428, *note A.10.1(69): 6438,
79055 *note A.10.1(74): 6448.
79056 in Ada.Text_IO.Complex_IO *note G.1.3(5): 8237.
79057
79058 Default_Base in Ada.Text_IO *note A.10.1(53): 6410, *note A.10.1(58):
79059 6419.
79060
79061 Default_Bit_Order in System *note 13.7(15/2): 5091.
79062
79063 Default_Currency
79064 in Ada.Text_IO.Editing *note F.3.3(10): 8163.
79065
79066 Default_Deadline
79067 in Ada.Dispatching.EDF *note D.2.6(9/2): 7752.
79068
79069 Default_Exp
79070 in Ada.Text_IO *note A.10.1(64): 6429, *note A.10.1(69): 6439,
79071 *note A.10.1(74): 6449.
79072 in Ada.Text_IO.Complex_IO *note G.1.3(5): 8238.
79073
79074 Default_Fill in Ada.Text_IO.Editing *note F.3.3(10): 8164.
79075
79076 Default_Fore
79077 in Ada.Text_IO *note A.10.1(64): 6427, *note A.10.1(69): 6437,
79078 *note A.10.1(74): 6447.
79079 in Ada.Text_IO.Complex_IO *note G.1.3(5): 8236.
79080
79081 Default_Priority in System *note 13.7(17): 5095.
79082
79083 Default_Quantum
79084 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7743.
79085
79086 Default_Radix_Mark
79087 in Ada.Text_IO.Editing *note F.3.3(10): 8166.
79088
79089 Default_Separator
79090 in Ada.Text_IO.Editing *note F.3.3(10): 8165.
79091
79092 Default_Setting in Ada.Text_IO *note A.10.1(80): 6458.
79093
79094 Default_Width in Ada.Text_IO *note A.10.1(53): 6409, *note A.10.1(58):
79095 6418, *note A.10.1(80): 6457.
79096
79097 Degree_Sign in Ada.Characters.Latin_1 *note A.3.3(22): 5594.
79098
79099 DEL in Ada.Characters.Latin_1 *note A.3.3(14): 5539.
79100
79101 Diaeresis in Ada.Characters.Latin_1 *note A.3.3(21/3): 5586.
79102
79103 Division_Sign
79104 in Ada.Characters.Latin_1 *note A.3.3(26): 5667.
79105
79106 DLE in Ada.Characters.Latin_1 *note A.3.3(6): 5463.
79107
79108 Dollar_Sign in Ada.Characters.Latin_1 *note A.3.3(8): 5483.
79109
79110 e in Ada.Numerics *note A.5(3/2): 6056.
79111
79112 EM in Ada.Characters.Latin_1 *note A.3.3(6): 5472.
79113
79114 Empty_Holder
79115 in Ada.Containers.Indefinite_Holders *note A.18.18(7/3): 7229.
79116
79117 Empty_List
79118 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(8/2): 6769.
79119
79120 Empty_Map
79121 in Ada.Containers.Hashed_Maps *note A.18.5(5/2): 6855.
79122 in Ada.Containers.Ordered_Maps *note A.18.6(6/2): 6908.
79123
79124 Empty_Set
79125 in Ada.Containers.Hashed_Sets *note A.18.8(5/2): 6987.
79126 in Ada.Containers.Ordered_Sets *note A.18.9(6/2): 7060.
79127
79128 Empty_Tree
79129 in Ada.Containers.Multiway_Trees *note A.18.10(10/3): 7147.
79130
79131 Empty_Vector
79132 in Ada.Containers.Vectors *note A.18.2(10/2): 6673.
79133
79134 ENQ in Ada.Characters.Latin_1 *note A.3.3(5): 5452.
79135
79136 EOT in Ada.Characters.Latin_1 *note A.3.3(5): 5451.
79137
79138 EPA in Ada.Characters.Latin_1 *note A.3.3(18): 5568.
79139
79140 Equals_Sign in Ada.Characters.Latin_1 *note A.3.3(10): 5499.
79141
79142 ESA in Ada.Characters.Latin_1 *note A.3.3(17): 5552.
79143
79144 ESC in Ada.Characters.Latin_1 *note A.3.3(6): 5474.
79145
79146 ETB in Ada.Characters.Latin_1 *note A.3.3(6): 5470.
79147
79148 ETX in Ada.Characters.Latin_1 *note A.3.3(5): 5450.
79149
79150 Exclamation in Ada.Characters.Latin_1 *note A.3.3(8): 5480.
79151
79152 Failure in Ada.Command_Line *note A.15(8): 6577.
79153
79154 Feminine_Ordinal_Indicator
79155 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5588.
79156
79157 FF in Ada.Characters.Latin_1 *note A.3.3(5): 5459.
79158
79159 Fine_Delta in System *note 13.7(9): 5080.
79160
79161 Fraction_One_Half
79162 in Ada.Characters.Latin_1 *note A.3.3(22): 5609.
79163
79164 Fraction_One_Quarter
79165 in Ada.Characters.Latin_1 *note A.3.3(22): 5608.
79166
79167 Fraction_Three_Quarters
79168 in Ada.Characters.Latin_1 *note A.3.3(22): 5610.
79169
79170 Friday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4158.
79171
79172 FS in Ada.Characters.Latin_1 *note A.3.3(6): 5475.
79173
79174 Full_Stop in Ada.Characters.Latin_1 *note A.3.3(8): 5494.
79175
79176 Graphic_Set
79177 in Ada.Strings.Maps.Constants *note A.4.6(4): 5903.
79178
79179 Grave in Ada.Characters.Latin_1 *note A.3.3(13): 5508.
79180
79181 Greater_Than_Sign
79182 in Ada.Characters.Latin_1 *note A.3.3(10): 5500.
79183
79184 GS in Ada.Characters.Latin_1 *note A.3.3(6): 5476.
79185
79186 Hexadecimal_Digit_Set
79187 in Ada.Strings.Maps.Constants *note A.4.6(4): 5909.
79188
79189 High_Order_First
79190 in Interfaces.COBOL *note B.4(25): 7504.
79191 in System *note 13.7(15/2): 5089.
79192
79193 HT in Ada.Characters.Latin_1 *note A.3.3(5): 5456.
79194
79195 HTJ in Ada.Characters.Latin_1 *note A.3.3(17): 5554.
79196
79197 HTS in Ada.Characters.Latin_1 *note A.3.3(17): 5553.
79198
79199 Hyphen in Ada.Characters.Latin_1 *note A.3.3(8): 5492.
79200
79201 i
79202 in Ada.Numerics.Generic_Complex_Types *note G.1.1(5): 8182.
79203 in Interfaces.Fortran *note B.5(10): 7541.
79204
79205 Identity
79206 in Ada.Strings.Maps *note A.4.2(22): 5746.
79207 in Ada.Strings.Wide_Maps *note A.4.7(22): 5948.
79208 in Ada.Strings.Wide_Wide_Maps *note A.4.8(22/2): 5987.
79209
79210 Interrupt_Clocks_Supported
79211 in Ada.Execution_Time *note D.14(9.1/3): 7933.
79212
79213 Inverted_Exclamation
79214 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5579.
79215
79216 Inverted_Question
79217 in Ada.Characters.Latin_1 *note A.3.3(22): 5611.
79218
79219 IS1 in Ada.Characters.Latin_1 *note A.3.3(16): 5544.
79220
79221 IS2 in Ada.Characters.Latin_1 *note A.3.3(16): 5543.
79222
79223 IS3 in Ada.Characters.Latin_1 *note A.3.3(16): 5542.
79224
79225 IS4 in Ada.Characters.Latin_1 *note A.3.3(16): 5541.
79226
79227 ISO_646_Set
79228 in Ada.Strings.Maps.Constants *note A.4.6(4): 5912.
79229
79230 j
79231 in Ada.Numerics.Generic_Complex_Types *note G.1.1(5): 8183.
79232 in Interfaces.Fortran *note B.5(10): 7542.
79233
79234 Language_Unknown in Ada.Locales *note A.19(5/3): 7316.
79235
79236 LC_A in Ada.Characters.Latin_1 *note A.3.3(13): 5509.
79237
79238 LC_A_Acute in Ada.Characters.Latin_1 *note A.3.3(25): 5645.
79239
79240 LC_A_Circumflex
79241 in Ada.Characters.Latin_1 *note A.3.3(25): 5646.
79242
79243 LC_A_Diaeresis
79244 in Ada.Characters.Latin_1 *note A.3.3(25): 5648.
79245
79246 LC_A_Grave in Ada.Characters.Latin_1 *note A.3.3(25): 5644.
79247
79248 LC_A_Ring in Ada.Characters.Latin_1 *note A.3.3(25): 5649.
79249
79250 LC_A_Tilde in Ada.Characters.Latin_1 *note A.3.3(25): 5647.
79251
79252 LC_AE_Diphthong
79253 in Ada.Characters.Latin_1 *note A.3.3(25): 5650.
79254
79255 LC_B in Ada.Characters.Latin_1 *note A.3.3(13): 5510.
79256
79257 LC_C in Ada.Characters.Latin_1 *note A.3.3(13): 5511.
79258
79259 LC_C_Cedilla
79260 in Ada.Characters.Latin_1 *note A.3.3(25): 5651.
79261
79262 LC_D in Ada.Characters.Latin_1 *note A.3.3(13): 5512.
79263
79264 LC_E in Ada.Characters.Latin_1 *note A.3.3(13): 5513.
79265
79266 LC_E_Acute in Ada.Characters.Latin_1 *note A.3.3(25): 5653.
79267
79268 LC_E_Circumflex
79269 in Ada.Characters.Latin_1 *note A.3.3(25): 5654.
79270
79271 LC_E_Diaeresis
79272 in Ada.Characters.Latin_1 *note A.3.3(25): 5655.
79273
79274 LC_E_Grave in Ada.Characters.Latin_1 *note A.3.3(25): 5652.
79275
79276 LC_F in Ada.Characters.Latin_1 *note A.3.3(13): 5514.
79277
79278 LC_G in Ada.Characters.Latin_1 *note A.3.3(13): 5515.
79279
79280 LC_German_Sharp_S
79281 in Ada.Characters.Latin_1 *note A.3.3(24): 5643.
79282
79283 LC_H in Ada.Characters.Latin_1 *note A.3.3(13): 5516.
79284
79285 LC_I in Ada.Characters.Latin_1 *note A.3.3(13): 5517.
79286
79287 LC_I_Acute in Ada.Characters.Latin_1 *note A.3.3(25): 5657.
79288
79289 LC_I_Circumflex
79290 in Ada.Characters.Latin_1 *note A.3.3(25): 5658.
79291
79292 LC_I_Diaeresis
79293 in Ada.Characters.Latin_1 *note A.3.3(25): 5659.
79294
79295 LC_I_Grave in Ada.Characters.Latin_1 *note A.3.3(25): 5656.
79296
79297 LC_Icelandic_Eth
79298 in Ada.Characters.Latin_1 *note A.3.3(26): 5660.
79299
79300 LC_Icelandic_Thorn
79301 in Ada.Characters.Latin_1 *note A.3.3(26): 5674.
79302
79303 LC_J in Ada.Characters.Latin_1 *note A.3.3(13): 5518.
79304
79305 LC_K in Ada.Characters.Latin_1 *note A.3.3(13): 5519.
79306
79307 LC_L in Ada.Characters.Latin_1 *note A.3.3(13): 5520.
79308
79309 LC_M in Ada.Characters.Latin_1 *note A.3.3(13): 5521.
79310
79311 LC_N in Ada.Characters.Latin_1 *note A.3.3(13): 5522.
79312
79313 LC_N_Tilde in Ada.Characters.Latin_1 *note A.3.3(26): 5661.
79314
79315 LC_O in Ada.Characters.Latin_1 *note A.3.3(13): 5523.
79316
79317 LC_O_Acute in Ada.Characters.Latin_1 *note A.3.3(26): 5663.
79318
79319 LC_O_Circumflex
79320 in Ada.Characters.Latin_1 *note A.3.3(26): 5664.
79321
79322 LC_O_Diaeresis
79323 in Ada.Characters.Latin_1 *note A.3.3(26): 5666.
79324
79325 LC_O_Grave in Ada.Characters.Latin_1 *note A.3.3(26): 5662.
79326
79327 LC_O_Oblique_Stroke
79328 in Ada.Characters.Latin_1 *note A.3.3(26): 5668.
79329
79330 LC_O_Tilde in Ada.Characters.Latin_1 *note A.3.3(26): 5665.
79331
79332 LC_P in Ada.Characters.Latin_1 *note A.3.3(14): 5524.
79333
79334 LC_Q in Ada.Characters.Latin_1 *note A.3.3(14): 5525.
79335
79336 LC_R in Ada.Characters.Latin_1 *note A.3.3(14): 5526.
79337
79338 LC_S in Ada.Characters.Latin_1 *note A.3.3(14): 5527.
79339
79340 LC_T in Ada.Characters.Latin_1 *note A.3.3(14): 5528.
79341
79342 LC_U in Ada.Characters.Latin_1 *note A.3.3(14): 5529.
79343
79344 LC_U_Acute in Ada.Characters.Latin_1 *note A.3.3(26): 5670.
79345
79346 LC_U_Circumflex
79347 in Ada.Characters.Latin_1 *note A.3.3(26): 5671.
79348
79349 LC_U_Diaeresis
79350 in Ada.Characters.Latin_1 *note A.3.3(26): 5672.
79351
79352 LC_U_Grave in Ada.Characters.Latin_1 *note A.3.3(26): 5669.
79353
79354 LC_V in Ada.Characters.Latin_1 *note A.3.3(14): 5530.
79355
79356 LC_W in Ada.Characters.Latin_1 *note A.3.3(14): 5531.
79357
79358 LC_X in Ada.Characters.Latin_1 *note A.3.3(14): 5532.
79359
79360 LC_Y in Ada.Characters.Latin_1 *note A.3.3(14): 5533.
79361
79362 LC_Y_Acute in Ada.Characters.Latin_1 *note A.3.3(26): 5673.
79363
79364 LC_Y_Diaeresis
79365 in Ada.Characters.Latin_1 *note A.3.3(26): 5675.
79366
79367 LC_Z in Ada.Characters.Latin_1 *note A.3.3(14): 5534.
79368
79369 Leading_Nonseparate
79370 in Interfaces.COBOL *note B.4(23): 7501.
79371
79372 Leading_Separate in Interfaces.COBOL *note B.4(23): 7499.
79373
79374 Left_Angle_Quotation
79375 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5589.
79376
79377 Left_Curly_Bracket
79378 in Ada.Characters.Latin_1 *note A.3.3(14): 5535.
79379
79380 Left_Parenthesis
79381 in Ada.Characters.Latin_1 *note A.3.3(8): 5487.
79382
79383 Left_Square_Bracket
79384 in Ada.Characters.Latin_1 *note A.3.3(12): 5503.
79385
79386 Less_Than_Sign
79387 in Ada.Characters.Latin_1 *note A.3.3(10): 5498.
79388
79389 Letter_Set
79390 in Ada.Strings.Maps.Constants *note A.4.6(4): 5904.
79391
79392 LF in Ada.Characters.Latin_1 *note A.3.3(5): 5457.
79393
79394 Low_Line in Ada.Characters.Latin_1 *note A.3.3(12): 5507.
79395
79396 Low_Order_First
79397 in Interfaces.COBOL *note B.4(25): 7505.
79398 in System *note 13.7(15/2): 5090.
79399
79400 Lower_Case_Map
79401 in Ada.Strings.Maps.Constants *note A.4.6(5): 5913.
79402
79403 Lower_Set
79404 in Ada.Strings.Maps.Constants *note A.4.6(4): 5905.
79405
79406 Macron in Ada.Characters.Latin_1 *note A.3.3(21/3): 5593.
79407
79408 Masculine_Ordinal_Indicator
79409 in Ada.Characters.Latin_1 *note A.3.3(22): 5606.
79410
79411 Max_Base_Digits in System *note 13.7(8): 5077.
79412
79413 Max_Binary_Modulus in System *note 13.7(7): 5075.
79414
79415 Max_Decimal_Digits in Ada.Decimal *note F.2(5): 8149.
79416
79417 Max_Delta in Ada.Decimal *note F.2(4): 8148.
79418
79419 Max_Digits in System *note 13.7(8): 5078.
79420
79421 Max_Digits_Binary in Interfaces.COBOL *note B.4(11): 7484.
79422
79423 Max_Digits_Long_Binary
79424 in Interfaces.COBOL *note B.4(11): 7485.
79425
79426 Max_Image_Width
79427 in Ada.Numerics.Discrete_Random *note A.5.2(25): 6115.
79428 in Ada.Numerics.Float_Random *note A.5.2(13): 6103.
79429
79430 Max_Int in System *note 13.7(6): 5074.
79431
79432 Max_Length in Ada.Strings.Bounded *note A.4.4(5): 5792.
79433
79434 Max_Mantissa in System *note 13.7(9): 5079.
79435
79436 Max_Nonbinary_Modulus in System *note 13.7(7): 5076.
79437
79438 Max_Picture_Length
79439 in Ada.Text_IO.Editing *note F.3.3(8): 8161.
79440
79441 Max_Scale in Ada.Decimal *note F.2(3): 8145.
79442
79443 Memory_Size in System *note 13.7(13): 5086.
79444
79445 Micro_Sign in Ada.Characters.Latin_1 *note A.3.3(22): 5600.
79446
79447 Middle_Dot in Ada.Characters.Latin_1 *note A.3.3(22): 5603.
79448
79449 Min_Delta in Ada.Decimal *note F.2(4): 8147.
79450
79451 Min_Handler_Ceiling
79452 in Ada.Execution_Time.Group_Budgets *note D.14.2(7/2): 7959.
79453 in Ada.Execution_Time.Timers *note D.14.1(6/2): 7943.
79454
79455 Min_Int in System *note 13.7(6): 5073.
79456
79457 Min_Scale in Ada.Decimal *note F.2(3): 8146.
79458
79459 Minus_Sign in Ada.Characters.Latin_1 *note A.3.3(8): 5493.
79460
79461 Monday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4154.
79462
79463 Multiplication_Sign
79464 in Ada.Characters.Latin_1 *note A.3.3(24): 5635.
79465
79466 MW in Ada.Characters.Latin_1 *note A.3.3(18): 5566.
79467
79468 NAK in Ada.Characters.Latin_1 *note A.3.3(6): 5468.
79469
79470 Native_Binary in Interfaces.COBOL *note B.4(25): 7506.
79471
79472 NBH in Ada.Characters.Latin_1 *note A.3.3(17): 5548.
79473
79474 NBSP in Ada.Characters.Latin_1 *note A.3.3(21/3): 5578.
79475
79476 NEL in Ada.Characters.Latin_1 *note A.3.3(17): 5550.
79477
79478 No_Break_Space
79479 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5577.
79480
79481 No_Element
79482 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(9/2): 6770.
79483 in Ada.Containers.Hashed_Maps *note A.18.5(6/2): 6856.
79484 in Ada.Containers.Hashed_Sets *note A.18.8(6/2): 6988.
79485 in Ada.Containers.Multiway_Trees *note A.18.10(11/3): 7148.
79486 in Ada.Containers.Ordered_Maps *note A.18.6(7/2): 6909.
79487 in Ada.Containers.Ordered_Sets *note A.18.9(7/2): 7061.
79488 in Ada.Containers.Vectors *note A.18.2(11/2): 6674.
79489
79490 No_Index in Ada.Containers.Vectors *note A.18.2(7/2): 6670.
79491
79492 No_Tag in Ada.Tags *note 3.9(6.1/2): 2095.
79493
79494 Not_A_Specific_CPU
79495 in System.Multiprocessors *note D.16(4/3): 7997.
79496
79497 Not_Sign in Ada.Characters.Latin_1 *note A.3.3(21/3): 5590.
79498
79499 NUL
79500 in Ada.Characters.Latin_1 *note A.3.3(5): 5447.
79501 in Interfaces.C *note B.3(20/1): 7388.
79502
79503 Null_Address in System *note 13.7(12): 5083.
79504
79505 Null_Bounded_String
79506 in Ada.Strings.Bounded *note A.4.4(7): 5794.
79507
79508 Null_Id in Ada.Exceptions *note 11.4.1(2/2): 4538.
79509
79510 Null_Occurrence in Ada.Exceptions *note 11.4.1(3/2): 4544.
79511
79512 Null_Ptr in Interfaces.C.Strings *note B.3.1(7): 7434.
79513
79514 Null_Set
79515 in Ada.Strings.Maps *note A.4.2(5): 5732.
79516 in Ada.Strings.Wide_Maps *note A.4.7(5): 5934.
79517 in Ada.Strings.Wide_Wide_Maps *note A.4.8(5/2): 5973.
79518
79519 Null_Unbounded_String
79520 in Ada.Strings.Unbounded *note A.4.5(5): 5851.
79521
79522 Number_Sign in Ada.Characters.Latin_1 *note A.3.3(8): 5482.
79523
79524 OSC in Ada.Characters.Latin_1 *note A.3.3(19): 5574.
79525
79526 Packed_Signed in Interfaces.COBOL *note B.4(27): 7509.
79527
79528 Packed_Unsigned in Interfaces.COBOL *note B.4(27): 7508.
79529
79530 Paragraph_Sign
79531 in Ada.Characters.Latin_1 *note A.3.3(22): 5602.
79532
79533 Percent_Sign
79534 in Ada.Characters.Latin_1 *note A.3.3(8): 5484.
79535
79536 Pi in Ada.Numerics *note A.5(3/2): 6055.
79537
79538 Pilcrow_Sign
79539 in Ada.Characters.Latin_1 *note A.3.3(22): 5601.
79540
79541 PLD in Ada.Characters.Latin_1 *note A.3.3(17): 5556.
79542
79543 PLU in Ada.Characters.Latin_1 *note A.3.3(17): 5557.
79544
79545 Plus_Minus_Sign
79546 in Ada.Characters.Latin_1 *note A.3.3(22): 5596.
79547
79548 Plus_Sign in Ada.Characters.Latin_1 *note A.3.3(8): 5490.
79549
79550 PM in Ada.Characters.Latin_1 *note A.3.3(19): 5575.
79551
79552 Pound_Sign in Ada.Characters.Latin_1 *note A.3.3(21/3): 5581.
79553
79554 PU1 in Ada.Characters.Latin_1 *note A.3.3(18): 5562.
79555
79556 PU2 in Ada.Characters.Latin_1 *note A.3.3(18): 5563.
79557
79558 Question in Ada.Characters.Latin_1 *note A.3.3(10): 5501.
79559
79560 Quotation in Ada.Characters.Latin_1 *note A.3.3(8): 5481.
79561
79562 Registered_Trade_Mark_Sign
79563 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5592.
79564
79565 Reserved_128
79566 in Ada.Characters.Latin_1 *note A.3.3(17): 5545.
79567
79568 Reserved_129
79569 in Ada.Characters.Latin_1 *note A.3.3(17): 5546.
79570
79571 Reserved_132
79572 in Ada.Characters.Latin_1 *note A.3.3(17): 5549.
79573
79574 Reserved_153
79575 in Ada.Characters.Latin_1 *note A.3.3(19): 5570.
79576
79577 Reverse_Solidus
79578 in Ada.Characters.Latin_1 *note A.3.3(12): 5504.
79579
79580 RI in Ada.Characters.Latin_1 *note A.3.3(17): 5558.
79581
79582 Right_Angle_Quotation
79583 in Ada.Characters.Latin_1 *note A.3.3(22): 5607.
79584
79585 Right_Curly_Bracket
79586 in Ada.Characters.Latin_1 *note A.3.3(14): 5537.
79587
79588 Right_Parenthesis
79589 in Ada.Characters.Latin_1 *note A.3.3(8): 5488.
79590
79591 Right_Square_Bracket
79592 in Ada.Characters.Latin_1 *note A.3.3(12): 5505.
79593
79594 Ring_Above in Ada.Characters.Latin_1 *note A.3.3(22): 5595.
79595
79596 RS in Ada.Characters.Latin_1 *note A.3.3(6): 5477.
79597
79598 Saturday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4159.
79599
79600 SCHAR_MAX in Interfaces.C *note B.3(6): 7371.
79601
79602 SCHAR_MIN in Interfaces.C *note B.3(6): 7370.
79603
79604 SCI in Ada.Characters.Latin_1 *note A.3.3(19): 5571.
79605
79606 Section_Sign
79607 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5585.
79608
79609 Semicolon in Ada.Characters.Latin_1 *note A.3.3(10): 5497.
79610
79611 Separate_Interrupt_Clocks_Supported
79612 in Ada.Execution_Time *note D.14(9.2/3): 7934.
79613
79614 SI in Ada.Characters.Latin_1 *note A.3.3(5): 5462.
79615
79616 SO in Ada.Characters.Latin_1 *note A.3.3(5): 5461.
79617
79618 Soft_Hyphen in Ada.Characters.Latin_1 *note A.3.3(21/3): 5591.
79619
79620 SOH in Ada.Characters.Latin_1 *note A.3.3(5): 5448.
79621
79622 Solidus in Ada.Characters.Latin_1 *note A.3.3(8): 5495.
79623
79624 SOS in Ada.Characters.Latin_1 *note A.3.3(19): 5569.
79625
79626 SPA in Ada.Characters.Latin_1 *note A.3.3(18): 5567.
79627
79628 Space
79629 in Ada.Characters.Latin_1 *note A.3.3(8): 5479.
79630 in Ada.Strings *note A.4.1(4/2): 5718.
79631
79632 Special_Set
79633 in Ada.Strings.Maps.Constants *note A.4.6(4): 5911.
79634
79635 SS2 in Ada.Characters.Latin_1 *note A.3.3(17): 5559.
79636
79637 SS3 in Ada.Characters.Latin_1 *note A.3.3(17): 5560.
79638
79639 SSA in Ada.Characters.Latin_1 *note A.3.3(17): 5551.
79640
79641 ST in Ada.Characters.Latin_1 *note A.3.3(19): 5573.
79642
79643 Storage_Unit in System *note 13.7(13): 5084.
79644
79645 STS in Ada.Characters.Latin_1 *note A.3.3(18): 5564.
79646
79647 STX in Ada.Characters.Latin_1 *note A.3.3(5): 5449.
79648
79649 SUB in Ada.Characters.Latin_1 *note A.3.3(6): 5473.
79650
79651 Success in Ada.Command_Line *note A.15(8): 6576.
79652
79653 Sunday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4160.
79654
79655 Superscript_One
79656 in Ada.Characters.Latin_1 *note A.3.3(22): 5605.
79657
79658 Superscript_Three
79659 in Ada.Characters.Latin_1 *note A.3.3(22): 5598.
79660
79661 Superscript_Two
79662 in Ada.Characters.Latin_1 *note A.3.3(22): 5597.
79663
79664 SYN in Ada.Characters.Latin_1 *note A.3.3(6): 5469.
79665
79666 System_Dispatching_Domain
79667 in System.Multiprocessors.Dispatching_Domains *note D.16.1(6/3):
79668 8005.
79669
79670 System_Name in System *note 13.7(4): 5072.
79671
79672 Thursday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4157.
79673
79674 Tick
79675 in Ada.Real_Time *note D.8(6): 7876.
79676 in System *note 13.7(10): 5081.
79677
79678 Tilde in Ada.Characters.Latin_1 *note A.3.3(14): 5538.
79679
79680 Time_First in Ada.Real_Time *note D.8(4): 7868.
79681
79682 Time_Last in Ada.Real_Time *note D.8(4): 7869.
79683
79684 Time_Span_First in Ada.Real_Time *note D.8(5): 7872.
79685
79686 Time_Span_Last in Ada.Real_Time *note D.8(5): 7873.
79687
79688 Time_Span_Unit in Ada.Real_Time *note D.8(5): 7875.
79689
79690 Time_Span_Zero in Ada.Real_Time *note D.8(5): 7874.
79691
79692 Time_Unit in Ada.Real_Time *note D.8(4): 7870.
79693
79694 Trailing_Nonseparate
79695 in Interfaces.COBOL *note B.4(23): 7502.
79696
79697 Trailing_Separate in Interfaces.COBOL *note B.4(23): 7500.
79698
79699 Tuesday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4155.
79700
79701 UC_A_Acute in Ada.Characters.Latin_1 *note A.3.3(23): 5613.
79702
79703 UC_A_Circumflex
79704 in Ada.Characters.Latin_1 *note A.3.3(23): 5614.
79705
79706 UC_A_Diaeresis
79707 in Ada.Characters.Latin_1 *note A.3.3(23): 5616.
79708
79709 UC_A_Grave in Ada.Characters.Latin_1 *note A.3.3(23): 5612.
79710
79711 UC_A_Ring in Ada.Characters.Latin_1 *note A.3.3(23): 5617.
79712
79713 UC_A_Tilde in Ada.Characters.Latin_1 *note A.3.3(23): 5615.
79714
79715 UC_AE_Diphthong
79716 in Ada.Characters.Latin_1 *note A.3.3(23): 5618.
79717
79718 UC_C_Cedilla
79719 in Ada.Characters.Latin_1 *note A.3.3(23): 5619.
79720
79721 UC_E_Acute in Ada.Characters.Latin_1 *note A.3.3(23): 5621.
79722
79723 UC_E_Circumflex
79724 in Ada.Characters.Latin_1 *note A.3.3(23): 5622.
79725
79726 UC_E_Diaeresis
79727 in Ada.Characters.Latin_1 *note A.3.3(23): 5623.
79728
79729 UC_E_Grave in Ada.Characters.Latin_1 *note A.3.3(23): 5620.
79730
79731 UC_I_Acute in Ada.Characters.Latin_1 *note A.3.3(23): 5625.
79732
79733 UC_I_Circumflex
79734 in Ada.Characters.Latin_1 *note A.3.3(23): 5626.
79735
79736 UC_I_Diaeresis
79737 in Ada.Characters.Latin_1 *note A.3.3(23): 5627.
79738
79739 UC_I_Grave in Ada.Characters.Latin_1 *note A.3.3(23): 5624.
79740
79741 UC_Icelandic_Eth
79742 in Ada.Characters.Latin_1 *note A.3.3(24): 5628.
79743
79744 UC_Icelandic_Thorn
79745 in Ada.Characters.Latin_1 *note A.3.3(24): 5642.
79746
79747 UC_N_Tilde in Ada.Characters.Latin_1 *note A.3.3(24): 5629.
79748
79749 UC_O_Acute in Ada.Characters.Latin_1 *note A.3.3(24): 5631.
79750
79751 UC_O_Circumflex
79752 in Ada.Characters.Latin_1 *note A.3.3(24): 5632.
79753
79754 UC_O_Diaeresis
79755 in Ada.Characters.Latin_1 *note A.3.3(24): 5634.
79756
79757 UC_O_Grave in Ada.Characters.Latin_1 *note A.3.3(24): 5630.
79758
79759 UC_O_Oblique_Stroke
79760 in Ada.Characters.Latin_1 *note A.3.3(24): 5636.
79761
79762 UC_O_Tilde in Ada.Characters.Latin_1 *note A.3.3(24): 5633.
79763
79764 UC_U_Acute in Ada.Characters.Latin_1 *note A.3.3(24): 5638.
79765
79766 UC_U_Circumflex
79767 in Ada.Characters.Latin_1 *note A.3.3(24): 5639.
79768
79769 UC_U_Diaeresis
79770 in Ada.Characters.Latin_1 *note A.3.3(24): 5640.
79771
79772 UC_U_Grave in Ada.Characters.Latin_1 *note A.3.3(24): 5637.
79773
79774 UC_Y_Acute in Ada.Characters.Latin_1 *note A.3.3(24): 5641.
79775
79776 UCHAR_MAX in Interfaces.C *note B.3(6): 7372.
79777
79778 Unbounded in Ada.Text_IO *note A.10.1(5): 6324.
79779
79780 Unsigned in Interfaces.COBOL *note B.4(23): 7498.
79781
79782 Upper_Case_Map
79783 in Ada.Strings.Maps.Constants *note A.4.6(5): 5914.
79784
79785 Upper_Set
79786 in Ada.Strings.Maps.Constants *note A.4.6(4): 5906.
79787
79788 US in Ada.Characters.Latin_1 *note A.3.3(6): 5478.
79789
79790 Vertical_Line
79791 in Ada.Characters.Latin_1 *note A.3.3(14): 5536.
79792
79793 VT in Ada.Characters.Latin_1 *note A.3.3(5): 5458.
79794
79795 VTS in Ada.Characters.Latin_1 *note A.3.3(17): 5555.
79796
79797 Wednesday in Ada.Calendar.Formatting *note 9.6.1(17/2): 4156.
79798
79799 Wide_Character_Set
79800 in Ada.Strings.Wide_Maps.Wide_Constants *note A.4.8(48/2): 5994.
79801
79802 wide_nul in Interfaces.C *note B.3(31/1): 7398.
79803
79804 Wide_Space in Ada.Strings *note A.4.1(4/2): 5719.
79805
79806 Wide_Wide_Space in Ada.Strings *note A.4.1(4/2): 5720.
79807
79808 Word_Size in System *note 13.7(13): 5085.
79809
79810 Yen_Sign in Ada.Characters.Latin_1 *note A.3.3(21/3): 5583.
79811
79812 \1f
79813 File: arm2012.info, Node: Index, Prev: Annex Q, Up: Top
79814
79815 Index
79816 *****
79817
79818 Index entries are given by paragraph number.
79819 * Menu:
79820
79821 * operators::
79822 * A::
79823 * B::
79824 * C::
79825 * D::
79826 * E::
79827 * F::
79828 * G::
79829 * H::
79830 * I::
79831 * J::
79832 * K::
79833 * L::
79834 * M::
79835 * N::
79836 * O::
79837 * P::
79838 * Q::
79839 * R::
79840 * S::
79841 * T::
79842 * U::
79843 * V::
79844 * W::
79845 * X::
79846 * Y::
79847
79848 \1f
79849 File: arm2012.info, Node: operators, Next: A, Up: Index
79850
79851 operators
79852 =========
79853
79854
79855
79856 & operator *note 4.4(1/3): 2619, *note 4.5.3(3): 2808.
79857
79858 * operator *note 4.4(1/3): 2626, *note 4.5.5(1): 2833.
79859 ** operator *note 4.4(1/3): 2640, *note 4.5.6(7): 2864.
79860
79861 + operator *note 4.4(1/3): 2611, *note 4.5.3(1): 2800, *note 4.5.4(1):
79862 2823.
79863
79864 - operator *note 4.4(1/3): 2615, *note 4.5.3(1): 2804, *note 4.5.4(1):
79865 2827.
79866
79867 / operator *note 4.4(1/3): 2632, *note 4.5.5(1): 2839.
79868 /= operator *note 4.4(1/3): 2589, *note 4.5.2(1): 2762, *note
79869 6.6(6/3): 3530.
79870
79871 10646:2011, ISO/IEC standard *note 1.2(8/3): 1115.
79872 14882:2011, ISO/IEC standard *note 1.2(9/3): 1118.
79873 1539-1:2004, ISO/IEC standard *note 1.2(3/2): 1095.
79874 19769:2004, ISO/IEC technical report *note 1.2(10/2): 1121.
79875 1989:2002, ISO standard *note 1.2(4/2): 1098.
79876
79877 3166-1:2006, ISO/IEC standard *note 1.2(4.1/3): 1101.
79878
79879 639-3:2007, ISO standard *note 1.2(1.1/3): 1089.
79880 6429:1992, ISO/IEC standard *note 1.2(5): 1104.
79881 646:1991, ISO/IEC standard *note 1.2(2): 1092.
79882
79883 8859-1:1998, ISO/IEC standard *note 1.2(6/3): 1109.
79884
79885 9899:2011, ISO/IEC standard *note 1.2(7/3): 1112.
79886
79887 < operator *note 4.4(1/3): 2593, *note 4.5.2(1): 2766.
79888 <= operator *note 4.4(1/3): 2597, *note 4.5.2(1): 2770.
79889
79890 = operator *note 4.4(1/3): 2585, *note 4.5.2(1): 2758.
79891
79892 > operator *note 4.4(1/3): 2601, *note 4.5.2(1): 2774.
79893 >= operator *note 4.4(1/3): 2605, *note 4.5.2(1): 2778.
79894
79895
79896 \1f
79897 File: arm2012.info, Node: A, Next: B, Prev: operators, Up: Index
79898
79899 A
79900 ==
79901
79902
79903
79904 AARM *note 0.2(5/3): 1002.
79905 abnormal completion *note 7.6.1(2/2): 3672.
79906 abnormal state of an object *note 13.9.1(4): 5132.
79907 [partial] *note 9.8(21): 4269, *note 11.6(6/3): 4632, *note
79908 A.13(17): 6569.
79909 abnormal task *note 9.8(4): 4259.
79910 abort
79911 of a partition *note E.1(7): 8026.
79912 of a task *note 9.8(4): 4258.
79913 of the execution of a construct *note 9.8(5): 4262.
79914 abort completion point *note 9.8(15): 4265.
79915 abort-deferred operation *note 9.8(5): 4263.
79916 abort_statement *note 9.8(2): 4252.
79917 used *note 5.1(4/2): 3124, *note P: 9286.
79918 Abort_Task
79919 in Ada.Task_Identification *note C.7.1(3/3): 7643.
79920 abortable_part *note 9.7.4(5): 4239.
79921 used *note 9.7.4(2): 4232, *note P: 9557.
79922 abs operator *note 4.4(1/3): 2644, *note 4.5.6(1): 2853.
79923 absolute value *note 4.4(1/3): 2646, *note 4.5.6(1): 2855.
79924 abstract data type (ADT)
79925 See private types and private extensions *note 7.3(1): 3581.
79926 See also abstract type *note 3.9.3(1/2): 2173.
79927 abstract subprogram *note 3.9.3(1/2): 2176, *note 3.9.3(3/2): 2184.
79928 abstract type *note 3.9.3(1.2/2): 2182, *note 3.9.3(1/2): 2172, *note
79929 N(1.1/2): 8801.
79930 abstract_subprogram_declaration *note 3.9.3(1.1/3): 2178.
79931 used *note 3.1(3/3): 1298, *note P: 8935.
79932 accept_alternative *note 9.7.1(5): 4202.
79933 used *note 9.7.1(4): 4199, *note P: 9541.
79934 accept_statement *note 9.5.2(3): 4019.
79935 used *note 5.1(5/2): 3133, *note 9.7.1(5): 4203, *note P: 9294.
79936 acceptable interpretation *note 8.6(14): 3832.
79937 Access attribute *note 3.10.2(24/1): 2300, *note 3.10.2(32/3): 2310.
79938 See also Unchecked_Access attribute *note 13.10(3): 5147.
79939 access discriminant *note 3.7(9/2): 1979.
79940 access parameter *note 6.1(24/2): 3333.
79941 access paths
79942 distinct *note 6.2(12/3): 3389.
79943 access result type *note 6.1(24/2): 3334.
79944 access type *note 3.10(1): 2215, *note N(2): 8802.
79945 subpool *note 13.11.4(22/3): 5236.
79946 access types
79947 input-output unspecified *note A.7(6): 6231.
79948 access value *note 3.10(1): 2216.
79949 access-to-constant type *note 3.10(10): 2251.
79950 access-to-object type *note 3.10(7/1): 2240.
79951 access-to-subprogram type *note 3.10(7/1): 2241, *note 3.10(11): 2253.
79952 access-to-variable type *note 3.10(10): 2252.
79953 Access_Check *note 11.5(11/2): 4601.
79954 [partial] *note 4.1(13): 2383, *note 4.1.5(8/3): 2452, *note
79955 4.6(51/3): 2998, *note 4.8(10.4/3): 3071.
79956 access_definition *note 3.10(6/2): 2233.
79957 used *note 3.3.1(2/3): 1484, *note 3.6(7/2): 1898, *note 3.7(5/2):
79958 1973, *note 6.1(13/2): 3308, *note 6.1(15/3): 3319, *note 6.5(2.3/2):
79959 3496, *note 8.5.1(2/3): 3785, *note 12.4(2/3): 4722, *note P: 9038.
79960 access_to_object_definition *note 3.10(3): 2225.
79961 used *note 3.10(2/2): 2222, *note P: 9090.
79962 access_to_subprogram_definition *note 3.10(5): 2229.
79963 used *note 3.10(2/2): 2224, *note P: 9092.
79964 access_type_definition *note 3.10(2/2): 2220.
79965 used *note 3.2.1(4/2): 1385, *note 12.5.4(2): 4793, *note P: 8959.
79966 accessibility
79967 distributed *note 3.10.2(32.1/3): 2315.
79968 from shared passive library units *note E.2.1(8): 8051.
79969 accessibility level *note 3.10.2(3/2): 2282.
79970 accessibility rule
79971 Access attribute *note 3.10.2(28/3): 2303, *note 3.10.2(32/3):
79972 2311.
79973 requeue statement *note 9.5.4(6/3): 4100.
79974 type conversion *note 4.6(24.17/3): 2948, *note 4.6(24.21/2): 2955.
79975 type conversion, array components *note 4.6(24.6/2): 2943.
79976 Accessibility_Check *note 11.5(19.1/2): 4610.
79977 [partial] *note 3.10.2(29): 2305, *note 4.6(39.1/2): 2976, *note
79978 4.6(48/3): 2990, *note 4.8(10.1/3): 3062, *note 6.5(8/3): 3514, *note
79979 6.5(21/3): 3520, *note 13.11.4(25/3): 5238, *note 13.11.4(26/3): 5240,
79980 *note E.4(18/1): 8113.
79981 accessible partition *note E.1(7): 8028.
79982 accuracy *note 4.6(32): 2966, *note G.2(1): 8250.
79983 ACK
79984 in Ada.Characters.Latin_1 *note A.3.3(5): 5453.
79985 acquire
79986 execution resource associated with protected object *note 9.5.1(5):
79987 4006.
79988 activation
79989 of a task *note 9.2(1): 3915.
79990 activation failure *note 9.2(1): 3917.
79991 Activation_Is_Complete
79992 in Ada.Task_Identification *note C.7.1(4/3): 7646.
79993 activator
79994 of a task *note 9.2(5): 3918.
79995 active locale *note A.19(8/3): 7320.
79996 active partition *note 10.2(28/3): 4435, *note E.1(2): 8021.
79997 active priority *note D.1(15): 7694.
79998 actual *note 12.3(7/3): 4698.
79999 actual duration *note D.9(12): 7897.
80000 actual parameter
80001 for a formal parameter *note 6.4.1(3): 3466.
80002 actual subtype *note 3.3(23/3): 1465, *note 12.5(4): 4763.
80003 of an object *note 3.3.1(9/2): 1505.
80004 actual type *note 12.5(4): 4765.
80005 actual_parameter_part *note 6.4(4): 3445.
80006 used *note 4.1.6(10/3): 2464, *note 6.4(2): 3440, *note 6.4(3):
80007 3444, *note 9.5.3(2): 4069, *note P: 9525.
80008 Actual_Quantum
80009 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7746.
80010 Acute
80011 in Ada.Characters.Latin_1 *note A.3.3(22): 5599.
80012 Ada *note A.2(2): 5403.
80013 Ada calling convention *note 6.3.1(3/3): 3410.
80014 Ada.Ada.Unchecked_Deallocate_Subpool *note 13.11.5(3/3): 5246.
80015 Ada.Assertions *note 11.4.2(12/2): 4576.
80016 Ada.Asynchronous_Task_Control *note D.11(3/2): 7913.
80017 Ada.Calendar *note 9.6(10): 4120.
80018 Ada.Calendar.Arithmetic *note 9.6.1(8/2): 4148.
80019 Ada.Calendar.Formatting *note 9.6.1(15/2): 4152.
80020 Ada.Calendar.Time_Zones *note 9.6.1(2/2): 4144.
80021 Ada.Characters *note A.3.1(2): 5404.
80022 Ada.Characters.Conversions *note A.3.4(2/2): 5676.
80023 Ada.Characters.Handling *note A.3.2(2/2): 5407.
80024 Ada.Characters.Latin_1 *note A.3.3(3): 5445.
80025 Ada.Command_Line *note A.15(3): 6571.
80026 Ada.Complex_Text_IO *note G.1.3(9.1/2): 8245.
80027 Ada.Containers *note A.18.1(3/2): 6659.
80028 Ada.Containers.Bounded_Priority_Queues *note A.18.31(2/3): 7305.
80029 Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(2/3): 7292.
80030 Ada.Containers.Doubly_Linked_Lists *note A.18.3(5/3): 6766.
80031 Ada.Containers.Generic_Array_Sort *note A.18.26(3/2): 7273.
80032 Ada.Containers.Generic_Constrained_Array_Sort *note A.18.26(7/2):
80033 7275.
80034 Ada.Containers.Generic_Sort *note A.18.26(9.2/3): 7277.
80035 Ada.Containers.Hashed_Maps *note A.18.5(2/3): 6852.
80036 Ada.Containers.Hashed_Sets *note A.18.8(2/3): 6984.
80037 Ada.Containers.Indefinite_Doubly_Linked_Lists *note A.18.12(2/3):
80038 7220.
80039 Ada.Containers.Indefinite_Hashed_Maps *note A.18.13(2/3): 7221.
80040 Ada.Containers.Indefinite_Hashed_Sets *note A.18.15(2/3): 7223.
80041 Ada.Containers.Indefinite_Holders *note A.18.18(5/3): 7227.
80042 Ada.Containers.Indefinite_Multiway_Trees *note A.18.17(2/3): 7225.
80043 Ada.Containers.Indefinite_Ordered_Maps *note A.18.14(2/3): 7222.
80044 Ada.Containers.Indefinite_Ordered_Sets *note A.18.16(2/3): 7224.
80045 Ada.Containers.Indefinite_Vectors *note A.18.11(2/3): 7219.
80046 Ada.Containers.Multiway_Trees *note A.18.10(7/3): 7144.
80047 Ada.Containers.Ordered_Maps *note A.18.6(2/3): 6904.
80048 Ada.Containers.Ordered_Sets *note A.18.9(2/3): 7056.
80049 Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(3/3): 7279.
80050 Ada.Containers.Unbounded_Priority_Queues *note A.18.30(2/3): 7298.
80051 Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(2/3): 7286.
80052 Ada.Containers.Vectors *note A.18.2(6/3): 6668.
80053 Ada.Decimal *note F.2(2): 8144.
80054 Ada.Direct_IO *note A.8.4(2): 6269.
80055 Ada.Directories *note A.16(3/2): 6580.
80056 Ada.Directories.Hierarchical_File_Names *note A.16.1(3/3): 6631.
80057 Ada.Directories.Information *note A.16(124/2): 6630.
80058 Ada.Dispatching *note D.2.1(1.2/3): 7698.
80059 Ada.Dispatching.EDF *note D.2.6(9/2): 7750.
80060 Ada.Dispatching.Non_Preemptive *note D.2.4(2.2/3): 7735.
80061 Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7742.
80062 Ada.Dynamic_Priorities *note D.5.1(3/2): 7794.
80063 Ada.Environment_Variables *note A.17(3/2): 6644.
80064 Ada.Exceptions *note 11.4.1(2/2): 4536.
80065 Ada.Execution_Time *note D.14(3/2): 7924.
80066 Ada.Execution_Time.Group_Budgets *note D.14.2(3/3): 7955.
80067 Ada.Execution_Time.Interrupts *note D.14.3(3/3): 7980.
80068 Ada.Execution_Time.Timers *note D.14.1(3/2): 7940.
80069 Ada.Finalization *note 7.6(4/3): 3642.
80070 Ada.Float_Text_IO *note A.10.9(33): 6481.
80071 Ada.Float_Wide_Text_IO *note A.11(2/2): 6502.
80072 Ada.Float_Wide_Wide_Text_IO *note A.11(3/2): 6505.
80073 Ada.Integer_Text_IO *note A.10.8(21): 6480.
80074 Ada.Integer_Wide_Text_IO *note A.11(2/2): 6501.
80075 Ada.Integer_Wide_Wide_Text_IO *note A.11(3/2): 6504.
80076 Ada.Interrupts *note C.3.2(2/3): 7593.
80077 Ada.Interrupts.Names *note C.3.2(12): 7604.
80078 Ada.IO_Exceptions *note A.13(3): 6558.
80079 Ada.Iterator_Interfaces *note 5.5.1(2/3): 3202.
80080 Ada.Locales *note A.19(3/3): 7313.
80081 Ada.Numerics *note A.5(3/2): 6053.
80082 Ada.Numerics.Complex_Arrays *note G.3.2(53/2): 8343.
80083 Ada.Numerics.Complex_Elementary_Functions *note G.1.2(9/1): 8227.
80084 Ada.Numerics.Complex_Types *note G.1.1(25/1): 8200.
80085 Ada.Numerics.Discrete_Random *note A.5.2(17): 6107.
80086 Ada.Numerics.Elementary_Functions *note A.5.1(9/1): 6086.
80087 Ada.Numerics.Float_Random *note A.5.2(5): 6094.
80088 Ada.Numerics.Generic_Complex_Arrays *note G.3.2(2/2): 8307.
80089 Ada.Numerics.Generic_Complex_Elementary_Functions *note G.1.2(2/2):
80090 8206.
80091 Ada.Numerics.Generic_Complex_Types *note G.1.1(2/1): 8179.
80092 Ada.Numerics.Generic_Elementary_Functions *note A.5.1(3): 6057.
80093 Ada.Numerics.Generic_Real_Arrays *note G.3.1(2/2): 8291.
80094 Ada.Numerics.Real_Arrays *note G.3.1(31/2): 8303.
80095 Ada.Real_Time *note D.8(3): 7866.
80096 Ada.Real_Time.Timing_Events *note D.15(3/2): 7983.
80097 Ada.Sequential_IO *note A.8.1(2): 6245.
80098 Ada.Storage_IO *note A.9(3): 6300.
80099 Ada.Streams *note 13.13.1(2): 5291.
80100 Ada.Streams.Stream_IO *note A.12.1(3/3): 6513.
80101 Ada.Strings *note A.4.1(3): 5717.
80102 Ada.Strings.Bounded *note A.4.4(3): 5790.
80103 Ada.Strings.Bounded.Equal_Case_Insensitive *note A.4.10(7/3): 6005.
80104 Ada.Strings.Bounded.Hash *note A.4.9(7/3): 5997.
80105 Ada.Strings.Bounded.Hash_Case_Insensitive *note A.4.9(11.7/3): 6001.
80106 Ada.Strings.Bounded.Less_Case_Insensitive *note A.4.10(18/3): 6009.
80107 Ada.Strings.Equal_Case_Insensitive *note A.4.10(2/3): 6003.
80108 Ada.Strings.Fixed *note A.4.3(5): 5754.
80109 Ada.Strings.Fixed.Equal_Case_Insensitive *note A.4.10(5/3): 6004.
80110 Ada.Strings.Fixed.Hash_Case_Insensitive *note A.4.9(11.5/3): 6000.
80111 Ada.Strings.Fixed.Less_Case_Insensitive *note A.4.10(16/3): 6008.
80112 Ada.Strings.Hash *note A.4.9(2/3): 5996.
80113 Ada.Strings.Hash_Case_Insensitive *note A.4.9(11.2/3): 5999.
80114 Ada.Strings.Less_Case_Insensitive *note A.4.10(13/3): 6007.
80115 Ada.Strings.Maps *note A.4.2(3/2): 5730.
80116 Ada.Strings.Maps.Constants *note A.4.6(3/2): 5901.
80117 Ada.Strings.Unbounded *note A.4.5(3): 5849.
80118 Ada.Strings.Unbounded.Equal_Case_Insensitive *note A.4.10(10/3): 6006.
80119 Ada.Strings.Unbounded.Hash *note A.4.9(10/3): 5998.
80120 Ada.Strings.Unbounded.Hash_Case_Insensitive *note A.4.9(11.10/3):
80121 6002.
80122 Ada.Strings.Unbounded.Less_Case_Insensitive *note A.4.10(21/3): 6010.
80123 Ada.Strings.UTF_Encoding *note A.4.11(3/3): 6011.
80124 Ada.Strings.UTF_Encoding.Conversions *note A.4.11(15/3): 6022.
80125 Ada.Strings.UTF_Encoding.Strings *note A.4.11(22/3): 6028.
80126 Ada.Strings.UTF_Encoding.Wide_Strings *note A.4.11(30/3): 6035.
80127 Ada.Strings.UTF_Encoding.Wide_Wide_Strings *note A.4.11(38/3): 6042.
80128 Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5917.
80129 Ada.Strings.Wide_Bounded.Wide_Equal_Case_Insensitive *note A.4.7(1/3):
80130 5925.
80131 Ada.Strings.Wide_Bounded.Wide_Hash *note A.4.7(1/3): 5921.
80132 Ada.Strings.Wide_Bounded.Wide_Hash_Case_Insensitive *note A.4.7(1/3):
80133 5929.
80134 Ada.Strings.Wide_Equal_Case_Insensitive *note A.4.7(1/3): 5923.
80135 Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5916.
80136 Ada.Strings.Wide_Fixed.Wide_Equal_Case_Insensitive *note A.4.7(1/3):
80137 5924.
80138 Ada.Strings.Wide_Fixed.Wide_Hash *note A.4.7(1/3): 5920.
80139 Ada.Strings.Wide_Fixed.Wide_Hash_Case_Insensitive *note A.4.7(1/3):
80140 5928.
80141 Ada.Strings.Wide_Hash *note A.4.7(1/3): 5919.
80142 Ada.Strings.Wide_Hash_Case_Insensitive *note A.4.7(1/3): 5927.
80143 Ada.Strings.Wide_Maps *note A.4.7(3): 5932.
80144 Ada.Strings.Wide_Maps.Wide_Constants *note A.4.7(1/3): 5931, *note
80145 A.4.8(28/2): 5992.
80146 Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5918.
80147 Ada.Strings.Wide_Unbounded.Wide_Equal_Case_Insensitive *note
80148 A.4.7(1/3): 5926.
80149 Ada.Strings.Wide_Unbounded.Wide_Hash *note A.4.7(1/3): 5922.
80150 Ada.Strings.Wide_Unbounded.Wide_Hash_Case_Insensitive *note
80151 A.4.7(1/3): 5930.
80152 Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5956.
80153 Ada.Strings.Wide_Wide_Bounded.Wide_Wide_Equal_Case_Insensitive *note
80154 A.4.8(1/3): 5964.
80155 Ada.Strings.Wide_Wide_Bounded.Wide_Wide_Hash *note A.4.8(1/3): 5960.
80156 Ada.Strings.Wide_Wide_Bounded.Wide_Wide_Hash_Case_Insensitive *note
80157 A.4.8(1/3): 5968.
80158 Ada.Strings.Wide_Wide_Equal_Case_Insensitive *note A.4.8(1/3): 5962.
80159 Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5955.
80160 Ada.Strings.Wide_Wide_Fixed.Wide_Wide_Equal_Case_Insensitive *note
80161 A.4.8(1/3): 5963.
80162 Ada.Strings.Wide_Wide_Fixed.Wide_Wide_Hash *note A.4.8(1/3): 5959.
80163 Ada.Strings.Wide_Wide_Fixed.Wide_Wide_Hash_Case_Insensitive *note
80164 A.4.8(1/3): 5967.
80165 Ada.Strings.Wide_Wide_Hash *note A.4.8(1/3): 5958.
80166 Ada.Strings.Wide_Wide_Hash_Case_Insensitive *note A.4.8(1/3): 5966.
80167 Ada.Strings.Wide_Wide_Maps *note A.4.8(3/2): 5971.
80168 Ada.Strings.Wide_Wide_Maps.Wide_Wide_Constants *note A.4.8(1/3): 5970.
80169 Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5957.
80170 Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Equal_Case_Insensitive *note
80171 A.4.8(1/3): 5965.
80172 Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Hash *note A.4.8(1/3): 5961.
80173 Ada.Strings.Wide_Wide_Unbounded.Wide_Wide_Hash_Case_Insensitive *note
80174 A.4.8(1/3): 5969.
80175 Ada.Synchronous_Barriers *note D.10.1(3/3): 7909.
80176 Ada.Synchronous_Task_Control *note D.10(3/2): 7898.
80177 Ada.Synchronous_Task_Control.EDF *note D.10(5.2/3): 7904.
80178 Ada.Tags *note 3.9(6/2): 2093.
80179 Ada.Tags.Generic_Dispatching_Constructor *note 3.9(18.2/3): 2118.
80180 Ada.Task_Attributes *note C.7.2(2): 7657.
80181 Ada.Task_Identification *note C.7.1(2/2): 7637.
80182 Ada.Task_Termination *note C.7.3(2/2): 7669.
80183 Ada.Text_IO *note A.10.1(2): 6319.
80184 Ada.Text_IO.Bounded_IO *note A.10.11(3/2): 6482.
80185 Ada.Text_IO.Complex_IO *note G.1.3(3): 8235.
80186 Ada.Text_IO.Editing *note F.3.3(3): 8155.
80187 Ada.Text_IO.Text_Streams *note A.12.2(3): 6549.
80188 Ada.Text_IO.Unbounded_IO *note A.10.12(3/2): 6491.
80189 Ada.Unchecked_Conversion *note 13.9(3/3): 5124.
80190 Ada.Unchecked_Deallocate_Subpool
80191 child of Ada *note 13.11.5(3/3): 5246.
80192 Ada.Unchecked_Deallocation *note 13.11.2(3/3): 5193.
80193 Ada.Wide_Characters *note A.3.1(4/2): 5405.
80194 Ada.Wide_Characters.Handling *note A.3.5(3/3): 5695.
80195 Ada.Wide_Text_IO *note A.11(2/2): 6500.
80196 Ada.Wide_Text_IO.Bounded_IO *note A.11(4/3): 6506.
80197 Ada.Wide_Text_IO.Complex_IO *note G.1.4(1): 8247.
80198 Ada.Wide_Text_IO.Editing *note F.3.4(1): 8174.
80199 Ada.Wide_Text_IO.Text_Streams *note A.12.3(3): 6552.
80200 Ada.Wide_Text_IO.Unbounded_IO *note A.11(5/3): 6508.
80201 Ada.Wide_Wide_Characters *note A.3.1(6/2): 5406.
80202 Ada.Wide_Wide_Characters.Handling *note A.3.6(1/3): 5716.
80203 Ada.Wide_Wide_Text_IO *note A.11(3/2): 6503.
80204 Ada.Wide_Wide_Text_IO.Bounded_IO *note A.11(4/3): 6507.
80205 Ada.Wide_Wide_Text_IO.Complex_IO *note G.1.5(1/2): 8248.
80206 Ada.Wide_Wide_Text_IO.Editing *note F.3.5(1/2): 8177.
80207 Ada.Wide_Wide_Text_IO.Text_Streams *note A.12.4(3/2): 6555.
80208 Ada.Wide_Wide_Text_IO.Unbounded_IO *note A.11(5/3): 6509.
80209 Ada_To_COBOL
80210 in Interfaces.COBOL *note B.4(14): 7489.
80211 adafinal *note B.1(39/3): 7360.
80212 adainit *note B.1(39/3): 7359.
80213 Add
80214 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7966.
80215 Add_Task
80216 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7960.
80217 address
80218 arithmetic *note 13.7.1(6): 5102.
80219 comparison *note 13.7(14/3): 5087.
80220 in System *note 13.7(12): 5082.
80221 Address aspect *note 13.3(12): 4948.
80222 Address attribute *note 13.3(11): 4944, *note J.7.1(5): 8431.
80223 Address clause *note 13.3(7/2): 4924, *note 13.3(12): 4946.
80224 Address_To_Access_Conversions
80225 child of System *note 13.7.2(2): 5109.
80226 Adjacent attribute *note A.5.3(48): 6184.
80227 Adjust *note 7.6(2): 3641.
80228 in Ada.Finalization *note 7.6(6/2): 3645.
80229 adjusting the value of an object *note 7.6(15): 3655, *note 7.6(16/3):
80230 3657.
80231 adjustment *note 7.6(15): 3656, *note 7.6(16/3): 3658.
80232 as part of assignment *note 5.2(14/3): 3161.
80233 ADT (abstract data type)
80234 See private types and private extensions *note 7.3(1): 3582.
80235 See also abstract type *note 3.9.3(1/2): 2174.
80236 advice *note 1.1.2(37): 1048.
80237 Aft attribute *note 3.5.10(5): 1868.
80238 aggregate *note 4.3(1): 2486, *note 4.3(2): 2488.
80239 used *note 4.4(7/3): 2705, *note 4.7(2): 3022, *note P: 9264.
80240 See also composite type *note 3.2(2/2): 1338.
80241 aliased *note 3.10(9/3): 2248, *note N(3): 8803.
80242 aliasing
80243 See distinct access paths *note 6.2(12/3): 3390.
80244 Alignment
80245 in Ada.Strings *note A.4.1(6): 5725.
80246 Alignment (subtype) aspect *note 13.3(26.4/2): 4960.
80247 Alignment attribute *note 13.3(23/2): 4952, *note 13.3(26.2/2): 4956.
80248 Alignment clause *note 13.3(7/2): 4925, *note 13.3(25/2): 4954, *note
80249 13.3(26.4/2): 4958.
80250 All_Calls_Remote aspect *note E.2.3(16/3): 8086.
80251 All_Calls_Remote pragma *note E.2.3(5): 8074, *note L(2): 8618.
80252 All_Checks *note 11.5(25/3): 4615.
80253 Allocate
80254 in System.Storage_Pools *note 13.11(7): 5154.
80255 in System.Storage_Pools.Subpools *note 13.11.4(14/3): 5226.
80256 Allocate_From_Subpool
80257 in System.Storage_Pools.Subpools *note 13.11.4(11/3): 5223.
80258 Allocation_Check *note 11.5(19.2/2): 4611.
80259 [partial] *note 4.8(10.2/2): 3065, *note 4.8(10.3/2): 3068, *note
80260 4.8(10.4/3): 3073, *note 13.11.4(30/3): 5243.
80261 allocator *note 4.8(2/3): 3036.
80262 used *note 4.4(7/3): 2707, *note P: 9233.
80263 Alphanumeric
80264 in Interfaces.COBOL *note B.4(16/3): 7491.
80265 alphanumeric character
80266 a category of Character *note A.3.2(31): 5443.
80267 Alphanumeric_Set
80268 in Ada.Strings.Maps.Constants *note A.4.6(4): 5910.
80269 ambiguous *note 8.6(30): 3852.
80270 ambiguous cursor
80271 of a vector *note A.18.2(240/2): 6755.
80272 ampersand *note 2.1(15/3): 1153.
80273 in Ada.Characters.Latin_1 *note A.3.3(8): 5485.
80274 ampersand operator *note 4.4(1/3): 2621, *note 4.5.3(3): 2810.
80275 ancestor *note N(3.1/2): 8804.
80276 of a library unit *note 10.1.1(11): 4332.
80277 of a tree node *note A.18.10(4/3): 7141.
80278 of a type *note 3.4.1(10/2): 1576.
80279 ultimate *note 3.4.1(10/2): 1578.
80280 ancestor subtype
80281 of a formal derived type *note 12.5.1(5/3): 4776.
80282 of a private_extension_declaration *note 7.3(8): 3595.
80283 ancestor type
80284 of an extension_aggregate *note 4.3.2(5/3): 2529.
80285 Ancestor_Find
80286 in Ada.Containers.Multiway_Trees *note A.18.10(40/3): 7176.
80287 ancestor_part *note 4.3.2(3): 2524.
80288 used *note 4.3.2(2): 2522, *note P: 9166.
80289 and operator *note 4.4(1/3): 2577, *note 4.5.1(2): 2738.
80290 and then (short-circuit control form) *note 4.4(1/3): 2583, *note
80291 4.5.1(1): 2733.
80292 angle threshold *note G.2.4(10): 8284.
80293 Annex
80294 informative *note 1.1.2(18): 1013.
80295 normative *note 1.1.2(14): 1010.
80296 Specialized Needs *note 1.1.2(7): 1007.
80297 Annotated Ada Reference Manual *note 0.2(5/3): 1001.
80298 anonymous access type *note 3.10(12/3): 2256.
80299 anonymous allocator *note 3.10.2(14/3): 2293.
80300 anonymous array type *note 3.3.1(1/3): 1475.
80301 anonymous protected type *note 3.3.1(1/3): 1477.
80302 anonymous task type *note 3.3.1(1/3): 1476.
80303 anonymous type *note 3.2.1(7/2): 1390.
80304 Any_Priority subtype of Integer
80305 in System *note 13.7(16): 5092.
80306 APC
80307 in Ada.Characters.Latin_1 *note A.3.3(19): 5576.
80308 apostrophe *note 2.1(15/3): 1154.
80309 in Ada.Characters.Latin_1 *note A.3.3(8): 5486.
80310 Append
80311 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(23/2): 6790.
80312 in Ada.Containers.Vectors *note A.18.2(46/2): 6713, *note
80313 A.18.2(47/2): 6714.
80314 in Ada.Strings.Bounded *note A.4.4(13): 5800, *note A.4.4(14):
80315 5801, *note A.4.4(15): 5802, *note A.4.4(16): 5803, *note A.4.4(17):
80316 5804, *note A.4.4(18): 5805, *note A.4.4(19): 5806, *note A.4.4(20):
80317 5807.
80318 in Ada.Strings.Unbounded *note A.4.5(12): 5859, *note A.4.5(13):
80319 5860, *note A.4.5(14): 5861.
80320 Append_Child
80321 in Ada.Containers.Multiway_Trees *note A.18.10(52/3): 7188.
80322 applicable index constraint *note 4.3.3(10): 2562.
80323 application areas *note 1.1.2(7): 1008.
80324 applies
80325 aspect *note 13.1.1(23/3): 4899, *note 13.1.1(27/3): 4900, *note
80326 13.1.1(29/3): 4901, *note 13.1.1(30/3): 4902.
80327 apply
80328 to a callable construct by a return statement *note 6.5(4/2): 3500.
80329 to a loop_statement by an exit_statement *note 5.7(4): 3262.
80330 to a program unit by a program unit pragma *note 10.1.5(2): 4396.
80331 arbitrary order *note 1.1.4(18): 1069.
80332 allowed *note 2.8(12): 1280, *note 3.3.1(20/2): 1518, *note 3.5(9):
80333 1608, *note 3.6(22/2): 1921, *note 3.11(10/1): 2342, *note 3.11(11/3):
80334 2343, *note 3.11(13): 2344, *note 4.1.1(7): 2394, *note 4.1.2(7): 2405,
80335 *note 4.3(5): 2495, *note 4.3.1(19): 2520, *note 4.3.2(7): 2532, *note
80336 4.3.3(22): 2564, *note 4.3.3(23): 2567, *note 4.5.2(27/3): 2796, *note
80337 4.8(10/2): 3061, *note 5.2(7): 3153, *note 6.1.1(26/3): 3362, *note
80338 6.1.1(34/3): 3371, *note 6.1.1(35/3): 3376, *note 6.4(10/2): 3457, *note
80339 6.4.1(17): 3482, *note 7.6(12): 3653, *note 7.6(16/3): 3659, *note
80340 7.6.1(9/3): 3679, *note 7.6.1(11.1/3): 3685, *note 7.6.1(20.2/3): 3693,
80341 *note 9.7.1(15): 4212, *note 9.8(4): 4257, *note 12.3(20): 4709, *note
80342 13.11.5(7/3): 5247, *note K.2(164.2/3): 8593.
80343 Arccos
80344 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80345 G.1.2(5): 8216.
80346 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6072.
80347 Arccosh
80348 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80349 G.1.2(7): 8224.
80350 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6083.
80351 Arccot
80352 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80353 G.1.2(5): 8218.
80354 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6076.
80355 Arccoth
80356 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80357 G.1.2(7): 8226.
80358 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6085.
80359 Arcsin
80360 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80361 G.1.2(5): 8215.
80362 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6070.
80363 Arcsinh
80364 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80365 G.1.2(7): 8223.
80366 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6082.
80367 Arctan
80368 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80369 G.1.2(5): 8217.
80370 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(6): 6074.
80371 Arctanh
80372 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
80373 G.1.2(7): 8225.
80374 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6084.
80375 Argument
80376 in Ada.Command_Line *note A.15(5): 6573.
80377 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(10/2): 8317,
80378 *note G.3.2(31/2): 8330.
80379 in Ada.Numerics.Generic_Complex_Types *note G.1.1(10): 8195.
80380 argument of a pragma *note 2.8(9): 1275.
80381 Argument_Count
80382 in Ada.Command_Line *note A.15(4): 6572.
80383 Argument_Error
80384 in Ada.Numerics *note A.5(3/2): 6054.
80385 Arithmetic
80386 child of Ada.Calendar *note 9.6.1(8/2): 4148.
80387 array *note 3.6(1): 1878.
80388 array component expression *note 4.3.3(6): 2557.
80389 array component iterator *note 5.5.2(3/3): 3238.
80390 array for a loop *note 5.5.2(11/3): 3248.
80391 array indexing
80392 See indexed_component *note 4.1.1(1): 2386.
80393 array slice *note 4.1.2(1): 2399.
80394 array type *note 3.6(1): 1879, *note N(4): 8805.
80395 array_aggregate *note 4.3.3(2): 2536.
80396 used *note 4.3(2): 2491, *note 13.4(3): 5007, *note P: 9735.
80397 array_component_association *note 4.3.3(5/2): 2551.
80398 used *note 4.3.3(4): 2550, *note P: 9181.
80399 array_type_definition *note 3.6(2): 1880.
80400 used *note 3.2.1(4/2): 1383, *note 3.3.1(2/3): 1488, *note
80401 12.5.3(2): 4789, *note P: 8985.
80402 ASCII
80403 package physically nested within the declaration of Standard *note
80404 A.1(36.3/2): 5393.
80405 in Standard *note A.1(36.3/2): 5392.
80406 aspect *note 13.1(0.1/3): 4839, *note K.1(1/3): 8569, *note N(4.1/3):
80407 8806.
80408 interfacing *note B.1(0.1/3): 7326.
80409 predicate *note 3.2.4(1/3): 1434.
80410 aspect of representation *note 13.1(8/3): 4858.
80411 aspect_clause *note 13.1(2/1): 4844.
80412 used *note 3.8(5/1): 2028, *note 3.11(4/1): 2327, *note 9.1(5/1):
80413 3890, *note 9.4(5/1): 3953, *note 9.4(8/1): 3966, *note P: 9067.
80414 aspect_definition *note 13.1.1(4/3): 4890.
80415 used *note 13.1.1(2/3): 4885, *note P: 9720.
80416 aspect_mark *note 13.1.1(3/3): 4888.
80417 used *note 2.8(3/3): 1268, *note 11.4.2(6.1/3): 4570, *note
80418 13.1.1(2/3): 4886, *note L(2.3/3): 8629, *note P: 8926.
80419 aspect_specification *note 13.1.1(2/3): 4883.
80420 used *note 3.2.1(3/3): 1376, *note 3.2.2(2/3): 1402, *note
80421 3.3.1(2/3): 1486, *note 3.8(6/3): 2033, *note 3.9.3(1.1/3): 2181, *note
80422 6.1(2/3): 3277, *note 6.3(2/3): 3396, *note 6.7(2/3): 3534, *note
80423 6.8(2/3): 3543, *note 7.1(3/3): 3558, *note 7.2(2/3): 3571, *note
80424 7.3(2/3): 3586, *note 7.3(3/3): 3592, *note 8.5.1(2/3): 3783, *note
80425 8.5.2(2/3): 3795, *note 8.5.3(2/3): 3799, *note 8.5.4(2/3): 3806, *note
80426 8.5.5(2/3): 3824, *note 9.1(2/3): 3876, *note 9.1(3/3): 3881, *note
80427 9.1(6/3): 3893, *note 9.4(2/3): 3938, *note 9.4(3/3): 3943, *note
80428 9.4(7/3): 3959, *note 9.5.2(2/3): 4018, *note 10.1.3(3/3): 4370, *note
80429 10.1.3(4): 4373, *note 10.1.3(5): 4376, *note 10.1.3(6): 4379, *note
80430 11.1(2/3): 4492, *note 12.1(3/3): 4645, *note 12.3(2/3): 4670, *note
80431 12.4(2/3): 4719, *note 12.5(2.1/3): 4746, *note 12.6(2.1/3): 4806, *note
80432 12.6(2.2/3): 4810, *note 12.7(2/3): 4828, *note P: 9600.
80433 aspects
80434 Address *note 13.3(12): 4947.
80435 Alignment (subtype) *note 13.3(26.4/2): 4959.
80436 All_Calls_Remote *note E.2.3(16/3): 8085.
80437 Asynchronous *note E.4.1(8.1/3): 8119.
80438 Atomic *note C.6(6.2/3): 7617.
80439 Atomic_Components *note C.6(6.6/3): 7623.
80440 Attach_Handler *note C.3.1(6.3/3): 7577.
80441 Bit_Order *note 13.5.3(4): 5064.
80442 Coding *note 13.4(7): 5011.
80443 Component_Size *note 13.3(70): 4990.
80444 Constant_Indexing *note 4.1.6(2/3): 2455.
80445 Convention *note B.1(2/3): 7340.
80446 CPU *note D.16(8/3): 8000.
80447 Default_Component_Value *note 3.6(22.2/3): 1922.
80448 Default_Iterator *note 5.5.1(8/3): 3217.
80449 Default_Storage_Pool *note 13.11.3(5/3): 5214.
80450 Default_Value *note 3.5(56.3/3): 1676.
80451 Dispatching_Domain *note D.16.1(18/3): 8014.
80452 Dynamic_Predicate *note 3.2.4(1/3): 1437.
80453 Elaborate_Body *note 10.2.1(26.1/3): 4479.
80454 Export *note B.1(1/3): 7329.
80455 External_Name *note B.1(1/3): 7333.
80456 External_Tag *note 13.3(75/3): 5001, *note K.2(65): 8584.
80457 Implicit_Dereference *note 4.1.5(2/3): 2443.
80458 Import *note B.1(1/3): 7327.
80459 Independent *note C.6(6.3/3): 7619.
80460 Independent_Components *note C.6(6.9/3): 7627.
80461 Inline *note 6.3.2(5.1/3): 3434.
80462 Input *note 13.13.2(38/3): 5338.
80463 Interrupt_Handler *note C.3.1(6.2/3): 7575.
80464 Interrupt_Priority *note D.1(6.3/3): 7688.
80465 Iterator_Element *note 5.5.1(9/3): 3220.
80466 Layout *note 13.5(1): 5014.
80467 Link_Name *note B.1(1/3): 7331.
80468 Machine_Radix *note F.1(1): 8142.
80469 No_Return *note 6.5.1(3.2/3): 3523.
80470 Output *note 13.13.2(38/3): 5340.
80471 Pack *note 13.2(5.1/3): 4904.
80472 Post *note 6.1.1(4/3): 3348.
80473 Post'Class *note 6.1.1(5/3): 3352.
80474 Pre *note 6.1.1(2/3): 3340.
80475 Pre'Class *note 6.1.1(3/3): 3344.
80476 Preelaborate *note 10.2.1(11/3): 4448.
80477 Priority *note D.1(6.2/3): 7686.
80478 Pure *note 10.2.1(17/3): 4461.
80479 Read *note 13.13.2(38/3): 5334.
80480 Record layout *note 13.5(1): 5018.
80481 Relative_Deadline *note D.2.6(9.2/3): 7756.
80482 Remote_Call_Interface *note E.2.3(7/3): 8083.
80483 Remote_Types *note E.2.2(4/3): 8063.
80484 Shared_Passive *note E.2.1(4/3): 8049.
80485 Size (object) *note 13.3(41): 4969.
80486 Size (subtype) *note 13.3(48): 4976.
80487 Small *note 3.5.10(2/1): 1861.
80488 Static_Predicate *note 3.2.4(1/3): 1435.
80489 Storage_Pool *note 13.11(15): 5170.
80490 Storage_Size (access) *note 13.11(15): 5172.
80491 Storage_Size (task) *note 13.3(65.2/3): 4981.
80492 Stream_Size *note 13.13.2(1.5/2): 5302.
80493 Synchronization *note 9.5(12/3): 3997.
80494 Type_Invariant *note 7.3.2(2/3): 3612.
80495 Type_Invariant'Class *note 7.3.2(3/3): 3614.
80496 Unchecked_Union *note B.3.3(3.2/3): 7469.
80497 Variable_Indexing *note 4.1.6(3/3): 2457.
80498 Volatile *note C.6(6.4/3): 7621.
80499 Volatile_Components *note C.6(6.7/3): 7625.
80500 Write *note 13.13.2(38/3): 5336.
80501 assembly language *note C.1(4/3): 7561.
80502 Assert
80503 in Ada.Assertions *note 11.4.2(14/2): 4579.
80504 Assert pragma *note 11.4.2(3/2): 4562, *note L(2.1/2): 8621.
80505 assertion *note N(4.2/3): 8807.
80506 assertion expressions *note 11.4.2(1.1/3): 4560.
80507 assertion policy
80508 Assert pragma *note 11.4.2(18/3): 4580.
80509 Assertion_Error
80510 raised by failure of assertion *note 11.4.2(18/3): 4581.
80511 raised by failure of run-time check *note 3.2.4(31/3): 1451, *note
80512 4.6(57/3): 3013, *note 6.1.1(32/3): 3365, *note 6.1.1(33/3): 3368, *note
80513 6.1.1(35/3): 3375, *note 7.3.2(22/3): 3620.
80514 in Ada.Assertions *note 11.4.2(13/2): 4577.
80515 Assertion_Policy pragma *note 11.4.2(6.1/3): 4569, *note 11.4.2(6/2):
80516 4566, *note L(2.2/2): 8625, *note L(2.3/3): 8628.
80517 assertions *note 11.4.2(1.1/3): 4559.
80518 child of Ada *note 11.4.2(12/2): 4576.
80519 Assign
80520 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.5/3): 6783.
80521 in Ada.Containers.Hashed_Maps *note A.18.5(17.7/3): 6874.
80522 in Ada.Containers.Hashed_Sets *note A.18.8(17.3/3): 7002.
80523 in Ada.Containers.Indefinite_Holders *note A.18.18(20/3): 7241.
80524 in Ada.Containers.Multiway_Trees *note A.18.10(32/3): 7168.
80525 in Ada.Containers.Ordered_Maps *note A.18.6(16.7/3): 6925.
80526 in Ada.Containers.Ordered_Sets *note A.18.9(16.3/3): 7073.
80527 in Ada.Containers.Vectors *note A.18.2(34.7/3): 6700.
80528 See assignment operation *note 5.2(3): 3147.
80529 Assign_Task
80530 in System.Multiprocessors.Dispatching_Domains *note D.16.1(11/3):
80531 8010.
80532 assigning back of parameters *note 6.4.1(17): 3479.
80533 assignment
80534 user-defined *note 7.6(1): 3634.
80535 assignment operation *note 5.2(3): 3146, *note 5.2(12): 3159, *note
80536 7.6(13): 3654.
80537 during elaboration of an object_declaration *note 3.3.1(18/2):
80538 1516.
80539 during evaluation of a generic_association for a formal object of
80540 mode in *note 12.4(11): 4737.
80541 during evaluation of a parameter_association *note 6.4.1(11): 3472.
80542 during evaluation of an aggregate *note 4.3(5): 2494.
80543 during evaluation of an initialized allocator *note 4.8(7/2): 3052.
80544 during evaluation of an uninitialized allocator *note 4.8(9/2):
80545 3055.
80546 during evaluation of concatenation *note 4.5.3(10): 2820.
80547 during execution of a for loop *note 5.5(9/3): 3201.
80548 during execution of an assignment_statement *note 5.2(12): 3160.
80549 during parameter copy back *note 6.4.1(17): 3480.
80550 assignment_statement *note 5.2(2): 3143.
80551 used *note 5.1(4/2): 3116, *note P: 9278.
80552 associated components
80553 of a record_component_association *note 4.3.1(10): 2516.
80554 associated declaration
80555 of an aspect specification *note 13.1.1(1/3): 4882.
80556 associated discriminants
80557 of a named discriminant_association *note 3.7.1(5): 2003.
80558 of a positional discriminant_association *note 3.7.1(5): 2004.
80559 associated entity
80560 of an aspect specification *note 13.1.1(5/3): 4894.
80561 associated object
80562 of a value of a by-reference type *note 6.2(10/3): 3386.
80563 asterisk *note 2.1(15/3): 1158.
80564 in Ada.Characters.Latin_1 *note A.3.3(8): 5489.
80565 asynchronous
80566 remote procedure call *note E.4.1(9/3): 8122.
80567 Asynchronous aspect *note E.4.1(8.1/3): 8120.
80568 Asynchronous pragma *note J.15.13(2/3): 8567, *note L(3.1/3): 8634.
80569 asynchronous remote procedure call *note E.4(1): 8100.
80570 asynchronous_select *note 9.7.4(2): 4230.
80571 used *note 9.7(2): 4188, *note P: 9534.
80572 Asynchronous_Task_Control
80573 child of Ada *note D.11(3/2): 7913.
80574 at-most-once execution *note E.4(11): 8109.
80575 at_clause *note J.7(1): 8426.
80576 used *note 13.1(2/1): 4848, *note P: 9714.
80577 atomic *note C.6(7/3): 7629.
80578 Atomic aspect *note C.6(6.2/3): 7618.
80579 Atomic pragma *note J.15.8(2/3): 8519, *note L(4.1/3): 8637.
80580 Atomic_Components aspect *note C.6(6.6/3): 7624.
80581 Atomic_Components pragma *note J.15.8(5/3): 8528, *note L(5.1/3):
80582 8640.
80583 Attach_Handler
80584 in Ada.Interrupts *note C.3.2(7): 7599.
80585 Attach_Handler aspect *note C.3.1(6.3/3): 7578.
80586 Attach_Handler pragma *note J.15.7(4/3): 8513, *note L(6.1/3): 8643.
80587 attaching
80588 to an interrupt *note C.3(2): 7570.
80589 attribute *note 4.1.4(1): 2426, *note K.2(1/3): 8570.
80590 representation *note 13.3(1/1): 4908.
80591 specifiable *note 13.3(5/3): 4920.
80592 specifying *note 13.3(1/1): 4909.
80593 attribute_definition_clause *note 13.3(2): 4910.
80594 used *note 13.1(2/1): 4845, *note P: 9711.
80595 attribute_designator *note 4.1.4(3/2): 2430.
80596 used *note 4.1.4(2): 2429, *note 13.1(3): 4852, *note 13.3(2):
80597 4915, *note P: 9728.
80598 Attribute_Handle
80599 in Ada.Task_Attributes *note C.7.2(3): 7658.
80600 attribute_reference *note 4.1.4(2): 2427.
80601 used *note 4.1(2/3): 2358, *note P: 9122.
80602 attributes
80603 Access *note 3.10.2(24/1): 2299, *note 3.10.2(32/3): 2309.
80604 Address *note 13.3(11): 4943, *note J.7.1(5): 8430.
80605 Adjacent *note A.5.3(48): 6183.
80606 Aft *note 3.5.10(5): 1867.
80607 Alignment *note 13.3(23/2): 4951, *note 13.3(26.2/2): 4955.
80608 Base *note 3.5(15): 1616.
80609 Bit_Order *note 13.5.3(4): 5060.
80610 Body_Version *note E.3(4): 8092.
80611 Callable *note 9.9(2): 4272.
80612 Caller *note C.7.1(14/3): 7649.
80613 Ceiling *note A.5.3(33): 6167.
80614 Class *note 3.9(14): 2110, *note 7.3.1(9): 3609, *note J.11(2/2):
80615 8446.
80616 Component_Size *note 13.3(69): 4986.
80617 Compose *note A.5.3(24): 6155.
80618 Constrained *note 3.7.2(3/3): 2011, *note J.4(2): 8424.
80619 Copy_Sign *note A.5.3(51): 6188.
80620 Count *note 9.9(5): 4278.
80621 Definite *note 12.5.1(23/3): 4779.
80622 Delta *note 3.5.10(3): 1863.
80623 Denorm *note A.5.3(9): 6137.
80624 Digits *note 3.5.8(2/1): 1815, *note 3.5.10(7): 1869.
80625 Exponent *note A.5.3(18): 6151.
80626 External_Tag *note 13.3(75/3): 4997.
80627 First *note 3.5(12): 1610, *note 3.6.2(3): 1939.
80628 First(N) *note 3.6.2(4): 1941.
80629 First_Bit *note 13.5.2(3/2): 5047.
80630 First_Valid *note 3.5.5(7.2/3): 1771.
80631 Floor *note A.5.3(30): 6165.
80632 Fore *note 3.5.10(4): 1865.
80633 Fraction *note A.5.3(21): 6153.
80634 Has_Same_Storage *note 13.3(73.2/3): 4993.
80635 Identity *note 11.4.1(9): 4555, *note C.7.1(12): 7647.
80636 Image *note 3.5(35): 1644.
80637 Input *note 13.13.2(22): 5315, *note 13.13.2(32): 5319.
80638 Last *note 3.5(13): 1612, *note 3.6.2(5): 1943.
80639 Last(N) *note 3.6.2(6): 1945.
80640 Last_Bit *note 13.5.2(4/2): 5049.
80641 Last_Valid *note 3.5.5(7.3/3): 1773.
80642 Leading_Part *note A.5.3(54): 6193.
80643 Length *note 3.6.2(9): 1951.
80644 Length(N) *note 3.6.2(10): 1953.
80645 Machine *note A.5.3(60): 6198.
80646 Machine_Emax *note A.5.3(8): 6135.
80647 Machine_Emin *note A.5.3(7): 6133.
80648 Machine_Mantissa *note A.5.3(6): 6131.
80649 Machine_Overflows *note A.5.3(12): 6145, *note A.5.4(4): 6223.
80650 Machine_Radix *note A.5.3(2): 6128, *note A.5.4(2): 6219.
80651 Machine_Rounding *note A.5.3(41.1/2): 6173.
80652 Machine_Rounds *note A.5.3(11): 6143, *note A.5.4(3): 6221.
80653 Max *note 3.5(19): 1621.
80654 Max_Alignment_For_Allocation *note 13.11.1(4/3): 5186.
80655 Max_Size_In_Storage_Elements *note 13.11.1(3/3): 5184.
80656 Min *note 3.5(16): 1619.
80657 Mod *note 3.5.4(16.1/2): 1742.
80658 Model *note A.5.3(68): 6212, *note G.2.2(7): 8270.
80659 Model_Emin *note A.5.3(65): 6206, *note G.2.2(4): 8263.
80660 Model_Epsilon *note A.5.3(66): 6208.
80661 Model_Mantissa *note A.5.3(64): 6204, *note G.2.2(3/2): 8261.
80662 Model_Small *note A.5.3(67): 6210.
80663 Modulus *note 3.5.4(17): 1744.
80664 Old *note 6.1.1(26/3): 3360.
80665 Output *note 13.13.2(19): 5313, *note 13.13.2(29): 5317.
80666 Overlaps_Storage *note 13.3(73.6/3): 4995.
80667 Partition_Id *note E.1(9): 8029.
80668 Pos *note 3.5.5(2): 1763.
80669 Position *note 13.5.2(2/2): 5045.
80670 Pred *note 3.5(25): 1630.
80671 Priority *note D.5.2(3/2): 7800.
80672 Range *note 3.5(14): 1614, *note 3.6.2(7): 1947.
80673 Range(N) *note 3.6.2(8): 1949.
80674 Read *note 13.13.2(6): 5307, *note 13.13.2(14): 5311.
80675 Remainder *note A.5.3(45): 6178.
80676 Result *note 6.1.1(29/3): 3363.
80677 Round *note 3.5.10(12): 1875.
80678 Rounding *note A.5.3(36): 6169.
80679 Safe_First *note A.5.3(71): 6214, *note G.2.2(5): 8265.
80680 Safe_Last *note A.5.3(72): 6216, *note G.2.2(6): 8267.
80681 Scale *note 3.5.10(11): 1872.
80682 Scaling *note A.5.3(27): 6160.
80683 Signed_Zeros *note A.5.3(13): 6147.
80684 Size *note 13.3(40): 4965, *note 13.3(45): 4972.
80685 Small *note 3.5.10(2/1): 1857.
80686 Storage_Pool *note 13.11(13): 5162.
80687 Storage_Size *note 13.3(60/3): 4979, *note 13.11(14): 5164, *note
80688 J.9(2): 8439.
80689 Stream_Size *note 13.13.2(1.2/3): 5300.
80690 Succ *note 3.5(22): 1623.
80691 Tag *note 3.9(16): 2114, *note 3.9(18): 2116.
80692 Terminated *note 9.9(3): 4276.
80693 Truncation *note A.5.3(42): 6176.
80694 Unbiased_Rounding *note A.5.3(39): 6171.
80695 Unchecked_Access *note 13.10(3): 5145, *note H.4(18): 8391.
80696 Val *note 3.5.5(5): 1765.
80697 Valid *note 13.9.2(3/3): 5142, *note H(6): 8350.
80698 Value *note 3.5(52): 1670.
80699 Version *note E.3(3): 8090.
80700 Wide_Image *note 3.5(28): 1641.
80701 Wide_Value *note 3.5(40): 1664.
80702 Wide_Wide_Image *note 3.5(27.1/2): 1637.
80703 Wide_Wide_Value *note 3.5(39.1/2): 1652.
80704 Wide_Wide_Width *note 3.5(37.1/2): 1646.
80705 Wide_Width *note 3.5(38): 1648.
80706 Width *note 3.5(39): 1650.
80707 Write *note 13.13.2(3): 5305, *note 13.13.2(11): 5309.
80708 available
80709 stream attribute *note 13.13.2(39/2): 5342.
80710
80711
80712 \1f
80713 File: arm2012.info, Node: B, Next: C, Prev: A, Up: Index
80714
80715 B
80716 ==
80717
80718
80719
80720 Backus-Naur Form (BNF)
80721 complete listing *note P: 8882.
80722 cross reference *note P: 9762.
80723 notation *note 1.1.4(3): 1064.
80724 under Syntax heading *note 1.1.2(25): 1018.
80725 Barrier_Limit subtype of Positive
80726 in Ada.Synchronous_Barriers *note D.10.1(4/3): 7910.
80727 base *note 2.4.2(3): 1238, *note 2.4.2(6): 1246.
80728 used *note 2.4.2(2): 1234, *note P: 8906.
80729 base 16 literal *note 2.4.2(1): 1231.
80730 base 2 literal *note 2.4.2(1): 1225.
80731 base 8 literal *note 2.4.2(1): 1228.
80732 Base attribute *note 3.5(15): 1617.
80733 base decimal precision
80734 of a floating point type *note 3.5.7(9): 1801.
80735 of a floating point type *note 3.5.7(10): 1803.
80736 base priority *note D.1(15): 7693.
80737 base range
80738 of a decimal fixed point type *note 3.5.9(16): 1847.
80739 of a fixed point type *note 3.5.9(12): 1842.
80740 of a floating point type *note 3.5.7(8): 1800, *note 3.5.7(10):
80741 1805.
80742 of a modular type *note 3.5.4(10): 1730.
80743 of a scalar type *note 3.5(6): 1600.
80744 of a signed integer type *note 3.5.4(9): 1727.
80745 of an ordinary fixed point type *note 3.5.9(13): 1843.
80746 base subtype
80747 of a type *note 3.5(15): 1618.
80748 Base_Name
80749 in Ada.Directories *note A.16(19/2): 6594.
80750 based_literal *note 2.4.2(2): 1233.
80751 used *note 2.4(2): 1209, *note P: 8897.
80752 based_numeral *note 2.4.2(4): 1240.
80753 used *note 2.4.2(2): 1235, *note P: 8908.
80754 basic letter
80755 a category of Character *note A.3.2(27): 5440.
80756 basic_declaration *note 3.1(3/3): 1292.
80757 used *note 3.11(4/1): 2326, *note P: 9108.
80758 basic_declarative_item *note 3.11(4/1): 2325.
80759 used *note 3.11(3): 2323, *note 7.1(3/3): 3560, *note P: 9402.
80760 Basic_Map
80761 in Ada.Strings.Maps.Constants *note A.4.6(5): 5915.
80762 Basic_Set
80763 in Ada.Strings.Maps.Constants *note A.4.6(4): 5907.
80764 become nonlimited *note 7.3.1(5/1): 3604, *note 7.5(16): 3630.
80765 BEL
80766 in Ada.Characters.Latin_1 *note A.3.3(5): 5454.
80767 belong
80768 to a range *note 3.5(4): 1595.
80769 to a subtype *note 3.2(8/2): 1358.
80770 belongs
80771 subpool to a pool *note 13.11.4(20/3): 5234.
80772 bibliography *note 1.2(1/3): 1087.
80773 big endian *note 13.5.3(2): 5055.
80774 binary
80775 literal *note 2.4.2(1): 1226.
80776 in Interfaces.COBOL *note B.4(10): 7482.
80777 binary adding operator *note 4.5.3(1): 2798.
80778 binary literal *note 2.4.2(1): 1224.
80779 binary operator *note 4.5(9): 2725.
80780 binary_adding_operator *note 4.5(4): 2719.
80781 used *note 4.4(4): 2691, *note P: 9220.
80782 Binary_Format
80783 in Interfaces.COBOL *note B.4(24): 7503.
80784 bit field
80785 See record_representation_clause *note 13.5.1(1): 5023.
80786 bit ordering *note 13.5.3(2): 5053.
80787 bit string
80788 See logical operators on boolean arrays *note 4.5.1(2): 2744.
80789 Bit_Order
80790 in System *note 13.7(15/2): 5088.
80791 Bit_Order aspect *note 13.5.3(4): 5065.
80792 Bit_Order attribute *note 13.5.3(4): 5061.
80793 Bit_Order clause *note 13.3(7/2): 4930, *note 13.5.3(4): 5063.
80794 blank
80795 in text input for enumeration and numeric types *note A.10.6(5/2):
80796 6475.
80797 Blank_When_Zero
80798 in Ada.Text_IO.Editing *note F.3.3(7): 8160.
80799 block_statement *note 5.6(2): 3253.
80800 used *note 5.1(5/2): 3131, *note P: 9292.
80801 blocked
80802 [partial] *note D.2.1(11/3): 7712.
80803 a task state *note 9(10): 3866.
80804 during an entry call *note 9.5.3(19): 4089.
80805 execution of a selective_accept *note 9.7.1(16): 4213.
80806 on a delay_statement *note 9.6(21): 4138.
80807 on an accept_statement *note 9.5.2(24): 4060.
80808 waiting for activations to complete *note 9.2(5): 3919.
80809 waiting for dependents to terminate *note 9.3(5): 3926.
80810 blocked interrupt *note C.3(2): 7569.
80811 blocking, potentially *note 9.5.1(8): 4011.
80812 Abort_Task *note C.7.1(16): 7653.
80813 delay_statement *note 9.6(34): 4141, *note D.9(5): 7895.
80814 remote subprogram call *note E.4(17): 8112.
80815 RPC operations *note E.5(23): 8138.
80816 Suspend_Until_True *note D.10(10): 7907.
80817 BMP *note 3.5.2(2/3): 1696, *note 3.5.2(3/3): 1702.
80818 BNF (Backus-Naur Form)
80819 complete listing *note P: 8881.
80820 cross reference *note P: 9761.
80821 notation *note 1.1.4(3): 1063.
80822 under Syntax heading *note 1.1.2(25): 1017.
80823 body *note 3.11(5): 2329, *note 3.11.1(1/3): 2348.
80824 used *note 3.11(3): 2324, *note P: 9107.
80825 body_stub *note 10.1.3(2): 4362.
80826 used *note 3.11(5): 2331, *note P: 9112.
80827 Body_Version attribute *note E.3(4): 8093.
80828 BOM_16
80829 in Ada.Strings.UTF_Encoding *note A.4.11(12/3): 6020.
80830 BOM_16BE
80831 in Ada.Strings.UTF_Encoding *note A.4.11(10/3): 6018.
80832 BOM_16LE
80833 in Ada.Strings.UTF_Encoding *note A.4.11(11/3): 6019.
80834 BOM_8
80835 in Ada.Strings.UTF_Encoding *note A.4.11(9/3): 6017.
80836 Boolean *note 3.5.3(1): 1706.
80837 in Standard *note A.1(5): 5384.
80838 boolean type *note 3.5.3(1): 1709.
80839 Bounded
80840 child of Ada.Strings *note A.4.4(3): 5790.
80841 bounded error *note 1.1.2(31): 1039, *note 1.1.5(8): 1078.
80842 cause *note 4.8(11.1/2): 3077, *note 6.2(12/3): 3391, *note
80843 7.6.1(14/1): 3687, *note 9.4(20.1/2): 3987, *note 9.5.1(8): 4009, *note
80844 9.8(20/3): 4266, *note 10.2(26): 4432, *note 13.9.1(9): 5137, *note
80845 13.11.2(11): 5199, *note A.17(25/2): 6652, *note A.18.2(238/3): 6753,
80846 *note A.18.2(239/2): 6754, *note A.18.2(243/2): 6757, *note
80847 A.18.3(152.1/3): 6826, *note A.18.3(152.2/3): 6827, *note A.18.3(152/2):
80848 6825, *note A.18.4(75.1/3): 6846, *note A.18.4(75.2/3): 6847, *note
80849 A.18.7(96.13/3): 6978, *note A.18.7(96.14/3): 6979, *note
80850 A.18.10(220/3): 7214, *note A.18.10(221/3): 7215, *note A.18.18(68/3):
80851 7249, *note A.18.18(69/3): 7250, *note A.18.19(10/3): 7252, *note
80852 A.18.20(14/3): 7255, *note A.18.21(15/3): 7259, *note A.18.22(12/3):
80853 7262, *note A.18.23(15/3): 7266, *note A.18.24(12/3): 7269, *note
80854 A.18.25(14/3): 7271, *note C.7.1(17/3): 7654, *note C.7.2(13.2/1): 7665,
80855 *note D.2.6(30/2): 7758, *note D.3(13.1/2): 7777, *note E.1(10/2): 8031,
80856 *note E.3(6): 8096, *note J.7.1(11): 8436.
80857 Bounded_IO
80858 child of Ada.Text_IO *note A.10.11(3/2): 6482.
80859 child of Ada.Wide_Text_IO *note A.11(4/3): 6506.
80860 child of Ada.Wide_Wide_Text_IO *note A.11(4/3): 6507.
80861 Bounded_Priority_Queues
80862 child of Ada.Containers *note A.18.31(2/3): 7305.
80863 Bounded_Slice
80864 in Ada.Strings.Bounded *note A.4.4(28.1/2): 5811, *note
80865 A.4.4(28.2/2): 5812.
80866 Bounded_String
80867 in Ada.Strings.Bounded *note A.4.4(6): 5793.
80868 Bounded_Synchronized_Queues
80869 child of Ada.Containers *note A.18.29(2/3): 7292.
80870 bounds
80871 of a discrete_range *note 3.6.1(6): 1933.
80872 of an array *note 3.6(13): 1907.
80873 of the index range of an array_aggregate *note 4.3.3(24): 2568.
80874 box
80875 compound delimiter *note 3.6(15): 1912.
80876 BPH
80877 in Ada.Characters.Latin_1 *note A.3.3(17): 5547.
80878 broadcast signal
80879 See protected object *note 9.4(1): 3934.
80880 See requeue *note 9.5.4(1): 4094.
80881 Broken_Bar
80882 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5584.
80883 BS
80884 in Ada.Characters.Latin_1 *note A.3.3(5): 5455.
80885 budget *note D.14.2(14/2): 7974.
80886 Budget_Has_Expired
80887 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7967.
80888 Budget_Remaining
80889 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7968.
80890 Buffer_Size
80891 in Ada.Storage_IO *note A.9(4): 6301.
80892 Buffer_Type subtype of Storage_Array
80893 in Ada.Storage_IO *note A.9(4): 6302.
80894 build-in-place
80895 See built in place
80896 built in place *note 7.6(17.1/3): 3661.
80897 by copy parameter passing *note 6.2(2): 3379.
80898 by reference parameter passing *note 6.2(2): 3382.
80899 by-copy type *note 6.2(3/3): 3384.
80900 by-reference type *note 6.2(4): 3385.
80901 atomic or volatile *note C.6(18): 7635.
80902 Byte
80903 in Interfaces.COBOL *note B.4(29/3): 7510.
80904 See storage element *note 13.3(8): 4940.
80905 byte sex
80906 See ordering of storage elements in a word *note 13.5.3(5): 5066.
80907 Byte_Array
80908 in Interfaces.COBOL *note B.4(29/3): 7511.
80909
80910
80911 \1f
80912 File: arm2012.info, Node: C, Next: D, Prev: B, Up: Index
80913
80914 C
80915 ==
80916
80917
80918
80919 C
80920 child of Interfaces *note B.3(4): 7368.
80921 C interface *note B.3(1/3): 7367.
80922 C standard *note 1.2(7/3): 1113.
80923 C++ standard *note 1.2(9/3): 1119.
80924 C_float
80925 in Interfaces.C *note B.3(15): 7384.
80926 Calendar
80927 child of Ada *note 9.6(10): 4120.
80928 call *note 6(2/3): 3272.
80929 master of *note 3.10.2(10.1/3): 2291.
80930 call on a dispatching operation *note 3.9.2(2/3): 2152.
80931 callable *note 9.9(2): 4275.
80932 Callable attribute *note 9.9(2): 4273.
80933 callable construct *note 6(2/3): 3273.
80934 callable entity *note 6(2/3): 3271.
80935 called partition *note E.4(1): 8102.
80936 Caller attribute *note C.7.1(14/3): 7650.
80937 calling convention *note 6.3.1(2/1): 3409, *note B.1(11/3): 7348.
80938 Ada *note 6.3.1(3/3): 3411.
80939 associated with a designated profile *note 3.10(11): 2255.
80940 entry *note 6.3.1(13): 3417.
80941 Intrinsic *note 6.3.1(4): 3413.
80942 protected *note 6.3.1(12): 3415.
80943 calling partition *note E.4(1): 8101.
80944 calling stub *note E.4(10): 8107.
80945 CAN
80946 in Ada.Characters.Latin_1 *note A.3.3(6): 5471.
80947 Cancel_Handler
80948 in Ada.Execution_Time.Group_Budgets *note D.14.2(10/2): 7971.
80949 in Ada.Execution_Time.Timers *note D.14.1(7/2): 7947.
80950 in Ada.Real_Time.Timing_Events *note D.15(5/2): 7989.
80951 cancellation
80952 of a delay_statement *note 9.6(22/3): 4139.
80953 of an entry call *note 9.5.3(20): 4090.
80954 cancellation of a remote subprogram call *note E.4(13): 8110.
80955 canonical form *note A.5.3(3): 6130.
80956 canonical order of array components *note 5.5.2(11/3): 3249.
80957 canonical semantics *note 11.6(2/3): 4626.
80958 canonical-form representation *note A.5.3(10): 6142.
80959 capacity
80960 of a hashed map *note A.18.5(41/2): 6895.
80961 of a hashed set *note A.18.8(63/2): 7044.
80962 of a queue *note A.18.27(10/3): 7285.
80963 of a vector *note A.18.2(2/2): 6666.
80964 in Ada.Containers.Hashed_Maps *note A.18.5(8/2): 6859.
80965 in Ada.Containers.Hashed_Sets *note A.18.8(10/2): 6993.
80966 in Ada.Containers.Vectors *note A.18.2(19/2): 6679.
80967 Capacity_Error
80968 in Ada.Containers *note A.18.1(5.1/3): 6662.
80969 case insensitive *note 2.3(5/3): 1203.
80970 case_expression *note 4.5.7(5/3): 2882.
80971 used *note 4.5.7(2/3): 2873, *note P: 9238.
80972 case_expression_alternative *note 4.5.7(6/3): 2886.
80973 used *note 4.5.7(5/3): 2885, *note P: 9247.
80974 case_statement *note 5.4(2/3): 3169.
80975 used *note 5.1(5/2): 3129, *note P: 9290.
80976 case_statement_alternative *note 5.4(3): 3173.
80977 used *note 5.4(2/3): 3172, *note P: 9307.
80978 cast
80979 See type conversion *note 4.6(1/3): 2915.
80980 See unchecked type conversion *note 13.9(1): 5123.
80981 catch (an exception)
80982 See handle *note 11(1/3): 4485.
80983 categorization aspect *note E.2(2/3): 8037.
80984 categorization pragma *note E.2(2/3): 8033.
80985 Remote_Call_Interface *note E.2.3(2): 8068.
80986 Remote_Types *note E.2.2(2): 8057.
80987 Shared_Passive *note E.2.1(2): 8043.
80988 categorized library unit *note E.2(2/3): 8038.
80989 category
80990 of types *note 3.2(2/2): 1331, *note 3.4(1.1/2): 1531.
80991 category (of types) *note N(4.3/2): 8808.
80992 category determined for a formal type *note 12.5(6/3): 4771.
80993 catenation operator
80994 See concatenation operator *note 4.4(1/3): 2625.
80995 See concatenation operator *note 4.5.3(3): 2814.
80996 Cause_Of_Termination
80997 in Ada.Task_Termination *note C.7.3(3/2): 7670.
80998 CCH
80999 in Ada.Characters.Latin_1 *note A.3.3(18): 5565.
81000 cease to exist
81001 object *note 7.6.1(11/3): 3682, *note 13.11.2(10/2): 5198.
81002 type *note 7.6.1(11/3): 3683.
81003 Cedilla
81004 in Ada.Characters.Latin_1 *note A.3.3(22): 5604.
81005 Ceiling
81006 in Ada.Containers.Ordered_Maps *note A.18.6(41/2): 6951.
81007 in Ada.Containers.Ordered_Sets *note A.18.9(51/2): 7105, *note
81008 A.18.9(71/2): 7118.
81009 Ceiling attribute *note A.5.3(33): 6168.
81010 ceiling priority
81011 of a protected object *note D.3(8/3): 7773.
81012 Ceiling_Check
81013 [partial] *note C.3.1(11/3): 7586, *note D.3(13): 7774.
81014 Ceiling_Locking locking policy *note D.3(7): 7772.
81015 Cent_Sign
81016 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5580.
81017 change of representation *note 13.6(1/3): 5068.
81018 char
81019 in Interfaces.C *note B.3(19): 7387.
81020 char16_array
81021 in Interfaces.C *note B.3(39.5/3): 7411.
81022 char16_nul
81023 in Interfaces.C *note B.3(39.3/2): 7408.
81024 char16_t
81025 in Interfaces.C *note B.3(39.2/2): 7407.
81026 char32_array
81027 in Interfaces.C *note B.3(39.14/3): 7421.
81028 char32_nul
81029 in Interfaces.C *note B.3(39.12/2): 7418.
81030 char32_t
81031 in Interfaces.C *note B.3(39.11/2): 7417.
81032 char_array
81033 in Interfaces.C *note B.3(23/3): 7391.
81034 char_array_access
81035 in Interfaces.C.Strings *note B.3.1(4): 7431.
81036 CHAR_BIT
81037 in Interfaces.C *note B.3(6): 7369.
81038 Character *note 3.5.2(2/3): 1698.
81039 used *note 2.7(2): 1257, *note P: 8918.
81040 in Standard *note A.1(35/3): 5389.
81041 character encoding *note A.4.11(46/3): 6050.
81042 character plane *note 2.1(1/3): 1129.
81043 character set *note 2.1(1/3): 1127.
81044 character set standard
81045 16 and 32-bit *note 1.2(8/3): 1116.
81046 7-bit *note 1.2(2): 1093.
81047 8-bit *note 1.2(6/3): 1110.
81048 control functions *note 1.2(5): 1105.
81049 character type *note 3.5.2(1): 1694, *note N(5): 8809.
81050 character_literal *note 2.5(2): 1247.
81051 used *note 3.5.1(4): 1687, *note 4.1(2/3): 2361, *note 4.1.3(3):
81052 2416, *note P: 9005.
81053 Character_Mapping
81054 in Ada.Strings.Maps *note A.4.2(20/2): 5744.
81055 Character_Mapping_Function
81056 in Ada.Strings.Maps *note A.4.2(25): 5750.
81057 Character_Range
81058 in Ada.Strings.Maps *note A.4.2(6): 5733.
81059 Character_Ranges
81060 in Ada.Strings.Maps *note A.4.2(7): 5734.
81061 Character_Sequence subtype of String
81062 in Ada.Strings.Maps *note A.4.2(16): 5740.
81063 Character_Set
81064 in Ada.Strings.Maps *note A.4.2(4/2): 5731.
81065 in Ada.Strings.Wide_Maps *note A.4.7(46/2): 5953.
81066 in Ada.Strings.Wide_Maps.Wide_Constants *note A.4.8(48/2): 5993.
81067 in Interfaces.Fortran *note B.5(11): 7543.
81068 Character_Set_Version
81069 in Ada.Wide_Characters.Handling *note A.3.5(4/3): 5696.
81070 characteristics
81071 [partial] *note 3.4(7/3): 1543.
81072 Characters
81073 child of Ada *note A.3.1(2): 5404.
81074 chars_ptr
81075 in Interfaces.C.Strings *note B.3.1(5/2): 7432.
81076 chars_ptr_array
81077 in Interfaces.C.Strings *note B.3.1(6/2): 7433.
81078 check
81079 language-defined *note 11.5(2/3): 4584, *note 11.6(1/3): 4621.
81080 check, language-defined
81081 Access_Check *note 4.1(13): 2384, *note 4.1.5(8/3): 2453, *note
81082 4.6(51/3): 2999, *note 4.8(10.4/3): 3072.
81083 Accessibility_Check *note 3.10.2(29): 2306, *note 4.6(39.1/2):
81084 2977, *note 4.6(48/3): 2991, *note 4.8(10.1/3): 3063, *note 6.5(8/3):
81085 3515, *note 6.5(21/3): 3521, *note 13.11.4(25/3): 5239, *note
81086 13.11.4(26/3): 5241, *note E.4(18/1): 8114.
81087 Allocation_Check *note 4.8(10.2/2): 3066, *note 4.8(10.3/2): 3069,
81088 *note 4.8(10.4/3): 3074, *note 13.11.4(30/3): 5244.
81089 Ceiling_Check *note C.3.1(11/3): 7587, *note D.3(13): 7775.
81090 controlled by assertion policy *note 3.2.4(31/3): 1450, *note
81091 4.6(51/3): 3001, *note 6.1.1(32/3): 3366, *note 6.1.1(33/3): 3369, *note
81092 6.1.1(35/3): 3374, *note 7.3.2(9/3): 3618.
81093 Discriminant_Check *note 4.1.3(15): 2423, *note 4.3(6): 2497, *note
81094 4.3.2(8/3): 2534, *note 4.6(43): 2983, *note 4.6(45): 2985, *note
81095 4.6(51/3): 2995, *note 4.6(52): 3008, *note 4.7(4): 3028, *note
81096 4.8(10/2): 3059, *note 6.5(5.11/3): 3509.
81097 Division_Check *note 3.5.4(20): 1751, *note 4.5.5(22): 2849, *note
81098 A.5.1(28): 6088, *note A.5.3(47): 6182, *note G.1.1(40): 8202, *note
81099 G.1.2(28): 8229, *note K.2(202): 8601.
81100 Elaboration_Check *note 3.11(9): 2341.
81101 Index_Check *note 4.1.1(7): 2397, *note 4.1.2(7): 2407, *note
81102 4.3.3(29/3): 2572, *note 4.3.3(30): 2574, *note 4.5.3(8): 2817, *note
81103 4.6(51/3): 2997, *note 4.7(4): 3030, *note 4.8(10/2): 3057.
81104 Length_Check *note 4.5.1(8): 2747, *note 4.6(37): 2972, *note
81105 4.6(52): 3004.
81106 Overflow_Check *note 3.5.4(20): 1748, *note 4.4(11): 2713, *note
81107 4.5.7(21/3): 2896, *note 5.4(13): 3181, *note G.2.1(11): 8259, *note
81108 G.2.2(7): 8273, *note G.2.3(25): 8277, *note G.2.4(2): 8282, *note
81109 G.2.6(3): 8289.
81110 Partition_Check *note E.4(19): 8117.
81111 Range_Check *note 3.2.2(11): 1423, *note 3.5(24): 1629, *note
81112 3.5(27): 1636, *note 3.5(39.12/3): 1663, *note 3.5(39.4/3): 1657, *note
81113 3.5(39.5/3): 1660, *note 3.5(43/3): 1669, *note 3.5(55/3): 1675, *note
81114 3.5.5(7): 1770, *note 3.5.9(19): 1855, *note 4.2(11): 2484, *note
81115 4.3.3(28): 2570, *note 4.5.1(8): 2749, *note 4.5.6(6): 2860, *note
81116 4.5.6(13): 2869, *note 4.6(28): 2962, *note 4.6(38): 2974, *note
81117 4.6(46): 2987, *note 4.6(51/3): 2993, *note 4.7(4): 3026, *note
81118 13.13.2(35/3): 5322, *note A.5.2(39): 6123, *note A.5.3(26): 6159, *note
81119 A.5.3(29): 6164, *note A.5.3(50): 6187, *note A.5.3(53): 6192, *note
81120 A.5.3(59): 6197, *note A.5.3(62): 6202, *note K.2(11): 8573, *note
81121 K.2(114): 8588, *note K.2(122): 8591, *note K.2(184): 8598, *note
81122 K.2(220): 8605, *note K.2(241): 8610, *note K.2(41): 8578, *note
81123 K.2(47): 8581.
81124 Reserved_Check *note C.3.1(10/3): 7583.
81125 Storage_Check *note 11.1(6): 4500, *note 13.3(67): 4984, *note
81126 13.11(17): 5176, *note D.7(17/1): 7848, *note D.7(18/1): 7853, *note
81127 D.7(19/1): 7858.
81128 Tag_Check *note 3.9.2(16): 2169, *note 4.6(42): 2981, *note
81129 4.6(52): 3006, *note 5.2(10): 3156, *note 6.5(8.1/3): 3517.
81130 checking pragmas *note 11.5(1/2): 4582.
81131 child
81132 of a library unit *note 10.1.1(1): 4296.
81133 Child_Count
81134 in Ada.Containers.Multiway_Trees *note A.18.10(46/3): 7182.
81135 Child_Depth
81136 in Ada.Containers.Multiway_Trees *note A.18.10(47/3): 7183.
81137 choice parameter *note 11.2(9): 4517.
81138 choice_expression *note 4.4(2.1/3): 2660.
81139 used *note 3.8.1(5/3): 2062, *note 4.4(3.2/3): 2685, *note P: 9215.
81140 choice_parameter_specification *note 11.2(4): 4512.
81141 used *note 11.2(3): 4508, *note P: 9612.
81142 choice_relation *note 4.4(2.2/3): 2671.
81143 used *note 4.4(2.1/3): 2668, *note P: 9204.
81144 Circumflex
81145 in Ada.Characters.Latin_1 *note A.3.3(12): 5506.
81146 class
81147 of types *note 3.2(2/2): 1332, *note 3.4(1.1/2): 1530.
81148 See also package *note 7(1): 3553.
81149 See also tag *note 3.9(3): 2091.
81150 class (of types) *note N(6/2): 8810.
81151 Class attribute *note 3.9(14): 2111, *note 7.3.1(9): 3610, *note
81152 J.11(2/2): 8447.
81153 class factory *note 3.9(30/2): 2127.
81154 class-wide postcondition expression *note 6.1.1(5/3): 3350.
81155 class-wide precondition expression *note 6.1.1(3/3): 3342.
81156 class-wide type *note 3.4.1(4): 1565, *note 3.7(26): 1991.
81157 cleanup
81158 See finalization *note 7.6.1(1): 3666.
81159 clear
81160 execution timer object *note D.14.1(12/2): 7951.
81161 group budget object *note D.14.2(15/2): 7978.
81162 timing event object *note D.15(9/2): 7993.
81163 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(13/2): 6775.
81164 in Ada.Containers.Hashed_Maps *note A.18.5(12/2): 6863.
81165 in Ada.Containers.Hashed_Sets *note A.18.8(14/2): 6997.
81166 in Ada.Containers.Indefinite_Holders *note A.18.18(11/3): 7232.
81167 in Ada.Containers.Multiway_Trees *note A.18.10(23/3): 7159.
81168 in Ada.Containers.Ordered_Maps *note A.18.6(11/2): 6914.
81169 in Ada.Containers.Ordered_Sets *note A.18.9(13/2): 7068.
81170 in Ada.Containers.Vectors *note A.18.2(24/2): 6684.
81171 in Ada.Environment_Variables *note A.17(7/2): 6650.
81172 cleared
81173 termination handler *note C.7.3(9/2): 7683.
81174 clock *note 9.6(6/3): 4119.
81175 in Ada.Calendar *note 9.6(12): 4126.
81176 in Ada.Execution_Time *note D.14(5/2): 7930.
81177 in Ada.Execution_Time.Interrupts *note D.14.3(3/3): 7981.
81178 in Ada.Real_Time *note D.8(6): 7877.
81179 clock jump *note D.8(32): 7892.
81180 clock tick *note D.8(23): 7891.
81181 Clock_For_Interrupts
81182 in Ada.Execution_Time *note D.14(9.3/3): 7935.
81183 Close
81184 in Ada.Direct_IO *note A.8.4(8): 6276.
81185 in Ada.Sequential_IO *note A.8.1(8): 6250.
81186 in Ada.Streams.Stream_IO *note A.12.1(10): 6521.
81187 in Ada.Text_IO *note A.10.1(11): 6330.
81188 close result set *note G.2.3(5): 8275.
81189 closed entry *note 9.5.3(5): 4072.
81190 of a protected object *note 9.5.3(7/3): 4077.
81191 of a task *note 9.5.3(6/3): 4075.
81192 closed under derivation *note 3.4(28): 1558, *note N(6/2): 8811.
81193 closure
81194 downward *note 3.10.2(37/2): 2319.
81195 COBOL
81196 child of Interfaces *note B.4(7): 7479.
81197 COBOL interface *note B.4(1/3): 7478.
81198 COBOL standard *note 1.2(4/2): 1099.
81199 COBOL_Character
81200 in Interfaces.COBOL *note B.4(13): 7488.
81201 COBOL_To_Ada
81202 in Interfaces.COBOL *note B.4(15): 7490.
81203 code point
81204 for characters *note 3.5.2(2/3): 1700.
81205 code_statement *note 13.8(2): 5114.
81206 used *note 5.1(4/2): 3126, *note P: 9288.
81207 Coding aspect *note 13.4(7): 5012.
81208 coextension
81209 of an object *note 3.10.2(14.4/3): 2294.
81210 Col
81211 in Ada.Text_IO *note A.10.1(37): 6382.
81212 collection
81213 of an access type *note 7.6.1(11.1/3): 3684.
81214 colon *note 2.1(15/3): 1169.
81215 in Ada.Characters.Latin_1 *note A.3.3(10): 5496.
81216 column number *note A.10(9): 6313.
81217 comma *note 2.1(15/3): 1161.
81218 in Ada.Characters.Latin_1 *note A.3.3(8): 5491.
81219 Command_Line
81220 child of Ada *note A.15(3): 6571.
81221 Command_Name
81222 in Ada.Command_Line *note A.15(6): 6574.
81223 comment *note 2.7(2): 1256.
81224 comments, instructions for submission *note 0.2(58/1): 1004.
81225 Commercial_At
81226 in Ada.Characters.Latin_1 *note A.3.3(10): 5502.
81227 Communication_Error
81228 in System.RPC *note E.5(5): 8127.
81229 comparison operator
81230 See relational operator *note 4.5.2(1): 2753.
81231 compatibility
81232 composite_constraint with an access subtype *note 3.10(15/2): 2264.
81233 constraint with a subtype *note 3.2.2(12): 1424.
81234 delta_constraint with an ordinary fixed point subtype *note J.3(9):
81235 8421.
81236 digits_constraint with a decimal fixed point subtype *note
81237 3.5.9(18): 1852.
81238 digits_constraint with a floating point subtype *note J.3(10):
81239 8422.
81240 discriminant constraint with a subtype *note 3.7.1(10): 2007.
81241 index constraint with a subtype *note 3.6.1(7): 1934.
81242 range with a scalar subtype *note 3.5(8): 1604.
81243 range_constraint with a scalar subtype *note 3.5(8): 1605.
81244 compatible
81245 a type, with a convention *note B.1(12): 7349.
81246 compilation *note 10.1.1(2): 4297.
81247 separate *note 10.1(1): 4291.
81248 Compilation unit *note 10.1(2): 4293, *note 10.1.1(9): 4327, *note
81249 N(7): 8812.
81250 compilation units needed
81251 by a compilation unit *note 10.2(2): 4423.
81252 remote call interface *note E.2.3(18): 8087.
81253 shared passive library unit *note E.2.1(11): 8054.
81254 compilation_unit *note 10.1.1(3): 4299.
81255 used *note 10.1.1(2): 4298, *note P: 9565.
81256 compile-time error *note 1.1.2(27): 1023, *note 1.1.5(4): 1072.
81257 compile-time semantics *note 1.1.2(28): 1028.
81258 complete context *note 8.6(4): 3828.
81259 completely defined *note 3.11.1(8): 2351.
81260 completion
81261 abnormal *note 7.6.1(2/2): 3673.
81262 compile-time concept *note 3.11.1(1/3): 2347.
81263 normal *note 7.6.1(2/2): 3671.
81264 run-time concept *note 7.6.1(2/2): 3669.
81265 completion and leaving (completed and left) *note 7.6.1(2/2): 3668.
81266 completion legality
81267 [partial] *note 3.10.1(13): 2278.
81268 entry_body *note 9.5.2(16): 4048.
81269 Complex
81270 in Ada.Numerics.Generic_Complex_Types *note G.1.1(3): 8180.
81271 in Interfaces.Fortran *note B.5(9): 7539.
81272 Complex_Arrays
81273 child of Ada.Numerics *note G.3.2(53/2): 8343.
81274 Complex_Elementary_Functions
81275 child of Ada.Numerics *note G.1.2(9/1): 8227.
81276 Complex_IO
81277 child of Ada.Text_IO *note G.1.3(3): 8235.
81278 child of Ada.Wide_Text_IO *note G.1.4(1): 8247.
81279 child of Ada.Wide_Wide_Text_IO *note G.1.5(1/2): 8249.
81280 Complex_Matrix
81281 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(4/2): 8309.
81282 Complex_Text_IO
81283 child of Ada *note G.1.3(9.1/2): 8245.
81284 Complex_Types
81285 child of Ada.Numerics *note G.1.1(25/1): 8200.
81286 Complex_Vector
81287 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(4/2): 8308.
81288 component *note 3.2(2/2): 1337.
81289 of a type *note 3.2(6/2): 1350.
81290 component subtype *note 3.6(10): 1902.
81291 component_choice_list *note 4.3.1(5): 2508.
81292 used *note 4.3.1(4/2): 2507, *note P: 9163.
81293 component_clause *note 13.5.1(3): 5028.
81294 used *note 13.5.1(2): 5027, *note P: 9738.
81295 component_declaration *note 3.8(6/3): 2029.
81296 used *note 3.8(5/1): 2027, *note 9.4(6): 3956, *note P: 9493.
81297 component_definition *note 3.6(7/2): 1896.
81298 used *note 3.6(3): 1886, *note 3.6(5): 1892, *note 3.8(6/3): 2031,
81299 *note P: 9030.
81300 component_item *note 3.8(5/1): 2026.
81301 used *note 3.8(4): 2024, *note P: 9064.
81302 component_list *note 3.8(4): 2021.
81303 used *note 3.8(3): 2020, *note 3.8.1(3): 2057, *note P: 9061.
81304 Component_Size aspect *note 13.3(70): 4991.
81305 Component_Size attribute *note 13.3(69): 4987.
81306 Component_Size clause *note 13.3(7/2): 4927, *note 13.3(70): 4989.
81307 components
81308 of a record type *note 3.8(9/2): 2035.
81309 Compose
81310 in Ada.Directories *note A.16(20/2): 6595.
81311 in Ada.Directories.Hierarchical_File_Names *note A.16.1(14/3):
81312 6642.
81313 Compose attribute *note A.5.3(24): 6156.
81314 Compose_From_Cartesian
81315 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(9/2): 8314,
81316 *note G.3.2(29/2): 8328.
81317 in Ada.Numerics.Generic_Complex_Types *note G.1.1(8): 8192.
81318 Compose_From_Polar
81319 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(11/2): 8320,
81320 *note G.3.2(32/2): 8333.
81321 in Ada.Numerics.Generic_Complex_Types *note G.1.1(11): 8197.
81322 composite type *note 3.2(2/2): 1336, *note N(8/2): 8813.
81323 composite_constraint *note 3.2.2(7): 1416.
81324 used *note 3.2.2(5): 1411, *note P: 8970.
81325 compound delimiter *note 2.2(10): 1186.
81326 compound_statement *note 5.1(5/2): 3127.
81327 used *note 5.1(3): 3113, *note P: 9276.
81328 concatenation operator *note 4.4(1/3): 2623, *note 4.5.3(3): 2812.
81329 concrete subprogram
81330 See nonabstract subprogram *note 3.9.3(1/2): 2177.
81331 concrete type
81332 See nonabstract type *note 3.9.3(1/2): 2175.
81333 concurrent processing
81334 See task *note 9(1/3): 3859.
81335 condition *note 4.5.7(4/3): 2880.
81336 used *note 4.5.7(3/3): 2877, *note 5.3(2): 3165, *note 5.5(3/3):
81337 3189, *note 5.7(2): 3261, *note 9.5.2(7): 4038, *note 9.7.1(3): 4197,
81338 *note P: 9241.
81339 See also exception *note 11(1/3): 4482.
81340 conditional_entry_call *note 9.7.3(2): 4226.
81341 used *note 9.7(2): 4187, *note P: 9533.
81342 conditional_expression *note 4.5.7(2/3): 2871.
81343 used *note 4.4(7/3): 2709, *note P: 9235.
81344 configuration
81345 of the partitions of a program *note E(4): 8020.
81346 configuration pragma *note 10.1.5(8): 4401.
81347 Assertion_Policy *note 11.4.2(7/3): 4574.
81348 Detect_Blocking *note H.5(4/2): 8407.
81349 Discard_Names *note C.5(4): 7613.
81350 Locking_Policy *note D.3(5): 7765.
81351 Normalize_Scalars *note H.1(4): 8354.
81352 Partition_Elaboration_Policy *note H.6(5/2): 8412.
81353 Priority_Specific_Dispatching *note D.2.2(5/2): 7723.
81354 Profile *note 13.12(14/3): 5266.
81355 Queuing_Policy *note D.4(5): 7786.
81356 Restrictions *note 13.12(8/3): 5260.
81357 Reviewable *note H.3.1(4): 8359.
81358 Suppress *note 11.5(5/2): 4595.
81359 Task_Dispatching_Policy *note D.2.2(5/2): 7721.
81360 Unsuppress *note 11.5(5/2): 4597.
81361 confirming
81362 aspect specification *note 13.1(18.2/3): 4875.
81363 representation item *note 13.1(18.2/3): 4873.
81364 representation value *note 13.1(18.2/3): 4874.
81365 conformance *note 6.3.1(1): 3403.
81366 of an implementation with the Standard *note 1.1.3(1): 1050.
81367 See also full conformance, mode conformance, subtype conformance,
81368 type conformance
81369 Conjugate
81370 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(13/2): 8321,
81371 *note G.3.2(34/2): 8334.
81372 in Ada.Numerics.Generic_Complex_Types *note G.1.1(12): 8198, *note
81373 G.1.1(15): 8199.
81374 consistency
81375 among compilation units *note 10.1.4(5): 4391.
81376 constant *note 3.3(13/3): 1455.
81377 result of a function_call *note 6.4(12/2): 3460.
81378 See also literal *note 4.2(1): 2471.
81379 See also static *note 4.9(1): 3080.
81380 constant indexing *note 4.1.6(12/3): 2466.
81381 constant object *note 3.3(13/3): 1457.
81382 constant view *note 3.3(13/3): 1459.
81383 Constant_Indexing aspect *note 4.1.6(2/3): 2456.
81384 Constant_Reference
81385 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.3/3): 6781.
81386 in Ada.Containers.Hashed_Maps *note A.18.5(17.3/3): 6870, *note
81387 A.18.5(17.5/3): 6872.
81388 in Ada.Containers.Hashed_Sets *note A.18.8(17.2/3): 7001, *note
81389 A.18.8(58.3/3): 7042.
81390 in Ada.Containers.Indefinite_Holders *note A.18.18(18/3): 7239.
81391 in Ada.Containers.Multiway_Trees *note A.18.10(30/3): 7166.
81392 in Ada.Containers.Ordered_Maps *note A.18.6(16.3/3): 6921, *note
81393 A.18.6(16.5/3): 6923.
81394 in Ada.Containers.Ordered_Sets *note A.18.9(16.2/3): 7072, *note
81395 A.18.9(73.3/3): 7123.
81396 in Ada.Containers.Vectors *note A.18.2(34.3/3): 6696, *note
81397 A.18.2(34.5/3): 6698.
81398 Constant_Reference_Type
81399 in Ada.Containers.Indefinite_Holders *note A.18.18(16/3): 7237.
81400 in Ada.Containers.Multiway_Trees *note A.18.10(28/3): 7164.
81401 Constants
81402 child of Ada.Strings.Maps *note A.4.6(3/2): 5901.
81403 constituent
81404 of a construct *note 1.1.4(17): 1068.
81405 constrained *note 3.2(9): 1361.
81406 known to be *note 3.3(23.1/3): 1470.
81407 object *note 3.3.1(9/2): 1507.
81408 object *note 6.4.1(16): 3474.
81409 subtype *note 3.2(9): 1363, *note 3.4(6): 1540, *note 3.5(7): 1601,
81410 *note 3.5.1(10): 1692, *note 3.5.4(9): 1728, *note 3.5.4(10): 1731,
81411 *note 3.5.7(11): 1806, *note 3.5.9(13): 1844, *note 3.5.9(16): 1848,
81412 *note 3.6(15): 1910, *note 3.6(16): 1913, *note 3.7(26): 1987, *note
81413 3.9(15): 2113.
81414 subtype *note 3.10(14/3): 2262.
81415 subtype *note K.2(33): 8575.
81416 Constrained attribute *note 3.7.2(3/3): 2012, *note J.4(2): 8425.
81417 constrained by its initial value *note 3.3.1(9/2): 1504.
81418 [partial] *note 4.8(6/3): 3049, *note 6.5(5.11/3): 3506.
81419 constrained_array_definition *note 3.6(5): 1889.
81420 used *note 3.6(2): 1882, *note P: 9027.
81421 constraint *note 3.2.2(5): 1409.
81422 [partial] *note 3.2(7/2): 1351.
81423 of a first array subtype *note 3.6(16): 1915.
81424 of a subtype *note 3.2(8/2): 1356.
81425 of an object *note 3.3.1(9/2): 1503.
81426 used *note 3.2.2(3/2): 1406, *note P: 8967.
81427 Constraint_Error
81428 raised by failure of run-time check *note 3.2.2(12): 1425, *note
81429 3.5(24): 1625, *note 3.5(27): 1632, *note 3.5(39.12/3): 1661, *note
81430 3.5(39.4/3): 1655, *note 3.5(39.5/3): 1658, *note 3.5(43/3): 1667, *note
81431 3.5(55/3): 1673, *note 3.5.4(20): 1752, *note 3.5.5(7): 1768, *note
81432 3.5.9(19): 1856, *note 3.9.2(16): 2170, *note 4.1(13): 2385, *note
81433 4.1.1(7): 2398, *note 4.1.2(7): 2409, *note 4.1.3(15): 2424, *note
81434 4.1.5(8/3): 2454, *note 4.2(11): 2485, *note 4.3(6): 2498, *note
81435 4.3.2(8/3): 2535, *note 4.3.3(31): 2575, *note 4.4(11): 2714, *note
81436 4.5(10): 2729, *note 4.5(11): 2730, *note 4.5(12): 2731, *note 4.5.1(8):
81437 2750, *note 4.5.3(8): 2818, *note 4.5.5(22): 2850, *note 4.5.6(6): 2861,
81438 *note 4.5.6(12): 2867, *note 4.5.6(13): 2870, *note 4.5.7(21/3): 2897,
81439 *note 4.6(28): 2963, *note 4.6(57/3): 3012, *note 4.6(60): 3016, *note
81440 4.7(4): 3032, *note 4.8(10.4/3): 3075, *note 4.8(10/2): 3060, *note
81441 5.2(10): 3157, *note 5.4(13): 3182, *note 6.5(5.11/3): 3507, *note
81442 6.5(8.1/3): 3518, *note 11.1(4): 4494, *note 11.4.1(14/2): 4558, *note
81443 11.5(10): 4600, *note 13.9.1(9): 5139, *note 13.13.2(35/3): 5323, *note
81444 A.4.3(109): 5789, *note A.4.7(47): 5954, *note A.4.8(51/2): 5995, *note
81445 A.5.1(28): 6089, *note A.5.1(34): 6090, *note A.5.2(39): 6124, *note
81446 A.5.2(40.1/1): 6126, *note A.5.3(26): 6157, *note A.5.3(29): 6162, *note
81447 A.5.3(47): 6180, *note A.5.3(50): 6185, *note A.5.3(53): 6190, *note
81448 A.5.3(59): 6195, *note A.5.3(62): 6200, *note A.15(14): 6579, *note
81449 B.3(53): 7428, *note B.3(54): 7429, *note B.4(58): 7530, *note E.4(19):
81450 8118, *note G.1.1(40): 8203, *note G.1.2(28): 8230, *note G.2.1(12):
81451 8260, *note G.2.2(7): 8269, *note G.2.3(26): 8278, *note G.2.4(3): 8283,
81452 *note G.2.6(4): 8290, *note K.2(11): 8571, *note K.2(114): 8586, *note
81453 K.2(122): 8589, *note K.2(184): 8594, *note K.2(202): 8599, *note
81454 K.2(220): 8603, *note K.2(241): 8606, *note K.2(261): 8612, *note
81455 K.2(41): 8576, *note K.2(47): 8579.
81456 in Standard *note A.1(46): 5398.
81457 Construct *note 1.1.4(16): 1067, *note N(9): 8814.
81458 constructor
81459 See initialization *note 3.3.1(18/2): 1517.
81460 See initialization *note 7.6(1): 3635.
81461 See initialization expression *note 3.3.1(4): 1498.
81462 See Initialize *note 7.6(1): 3636.
81463 See initialized allocator *note 4.8(4): 3047.
81464 container *note N(9.1/3): 8815.
81465 cursor *note A.18(2/2): 6655.
81466 list *note A.18.3(1/2): 6763.
81467 map *note A.18.4(1/2): 6833.
81468 set *note A.18.7(1/2): 6963.
81469 vector *note A.18.2(1/2): 6664.
81470 container element iterator *note 5.5.2(3/3): 3240.
81471 Containers
81472 child of Ada *note A.18.1(3/2): 6659.
81473 Containing_Directory
81474 in Ada.Directories *note A.16(17/2): 6592.
81475 in Ada.Directories.Hierarchical_File_Names *note A.16.1(11/3):
81476 6639.
81477 Contains
81478 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(43/2): 6810.
81479 in Ada.Containers.Hashed_Maps *note A.18.5(32/2): 6890.
81480 in Ada.Containers.Hashed_Sets *note A.18.8(44/2): 7026, *note
81481 A.18.8(57/2): 7038.
81482 in Ada.Containers.Multiway_Trees *note A.18.10(41/3): 7177.
81483 in Ada.Containers.Ordered_Maps *note A.18.6(42/2): 6952.
81484 in Ada.Containers.Ordered_Sets *note A.18.9(52/2): 7106, *note
81485 A.18.9(72/2): 7119.
81486 in Ada.Containers.Vectors *note A.18.2(71/2): 6738.
81487 context free grammar
81488 complete listing *note P: 8880.
81489 cross reference *note P: 9760.
81490 notation *note 1.1.4(3): 1062.
81491 under Syntax heading *note 1.1.2(25): 1016.
81492 context_clause *note 10.1.2(2): 4343.
81493 used *note 10.1.1(3): 4300, *note P: 9568.
81494 context_item *note 10.1.2(3): 4345.
81495 used *note 10.1.2(2): 4344, *note P: 9583.
81496 contiguous representation
81497 [partial] *note 13.5.2(5): 5051, *note 13.7.1(12): 5106, *note
81498 13.9(9): 5125, *note 13.9(17/3): 5128, *note 13.11(21.6/3): 5182.
81499 Continue
81500 in Ada.Asynchronous_Task_Control *note D.11(3/2): 7915.
81501 control character
81502 a category of Character *note A.3.2(22): 5435.
81503 a category of Character *note A.3.3(4): 5446, *note A.3.3(15):
81504 5540.
81505 See also format_effector *note 2.1(13/3): 1146.
81506 Control_Set
81507 in Ada.Strings.Maps.Constants *note A.4.6(4): 5902.
81508 Controlled
81509 in Ada.Finalization *note 7.6(5/2): 3643.
81510 controlled type *note 7.6(2): 3638, *note 7.6(9/2): 3650, *note N(10):
81511 8816.
81512 controlling access result *note 3.9.2(2/3): 2158.
81513 controlling formal parameter *note 3.9.2(2/3): 2155.
81514 controlling operand *note 3.9.2(2/3): 2154.
81515 controlling result *note 3.9.2(2/3): 2156.
81516 controlling tag
81517 for a call on a dispatching operation *note 3.9.2(1/2): 2146.
81518 controlling tag value *note 3.9.2(14): 2166.
81519 for the expression in an assignment_statement *note 5.2(9): 3154.
81520 controlling type
81521 of a formal_abstract_subprogram_declaration *note 12.6(8.4/3):
81522 4820.
81523 convention *note 6.3.1(2/1): 3408, *note B.1(11/3): 7347.
81524 Convention aspect *note B.1(2/3): 7341.
81525 Convention pragma *note J.15.5(4/3): 8498, *note L(8.1/3): 8647.
81526 conversion *note 4.6(1/3): 2914, *note 4.6(28): 2960.
81527 access *note 4.6(24.11/2): 2945, *note 4.6(24.18/2): 2951, *note
81528 4.6(24.19/2): 2953, *note 4.6(47): 2989.
81529 arbitrary order *note 1.1.4(18): 1071.
81530 array *note 4.6(24.2/2): 2940, *note 4.6(36): 2970.
81531 composite (non-array) *note 4.6(21/3): 2934, *note 4.6(40): 2979.
81532 enumeration *note 4.6(21.1/2): 2936, *note 4.6(34): 2968.
81533 numeric *note 4.6(24.1/2): 2938, *note 4.6(29): 2965.
81534 unchecked *note 13.9(1): 5121.
81535 value *note 4.6(5/2): 2930.
81536 view *note 4.6(5/2): 2928.
81537 Conversion_Error
81538 in Interfaces.COBOL *note B.4(30): 7512.
81539 Conversions
81540 child of Ada.Characters *note A.3.4(2/2): 5676.
81541 child of Ada.Strings.UTF_Encoding *note A.4.11(15/3): 6022.
81542 Convert
81543 in Ada.Strings.UTF_Encoding.Conversions *note A.4.11(16/3): 6023,
81544 *note A.4.11(17/3): 6024, *note A.4.11(18/3): 6025, *note A.4.11(19/3):
81545 6026, *note A.4.11(20/3): 6027.
81546 convertible *note 4.6(4/3): 2926.
81547 required *note 4.6(24.13/2): 2946, *note 4.6(24.4/2): 2941, *note
81548 8.6(27.1/3): 3849.
81549 Copy
81550 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.6/3): 6784.
81551 in Ada.Containers.Hashed_Maps *note A.18.5(17.8/3): 6875.
81552 in Ada.Containers.Hashed_Sets *note A.18.8(17.4/3): 7003.
81553 in Ada.Containers.Indefinite_Holders *note A.18.18(21/3): 7242,
81554 *note A.18.20(10/3): 7254, *note A.18.21(13/3): 7258, *note
81555 A.18.22(10/3): 7261, *note A.18.23(13/3): 7265, *note A.18.24(10/3):
81556 7268.
81557 in Ada.Containers.Multiway_Trees *note A.18.10(33/3): 7169.
81558 in Ada.Containers.Ordered_Maps *note A.18.6(16.8/3): 6926.
81559 in Ada.Containers.Ordered_Sets *note A.18.9(16.4/3): 7074.
81560 in Ada.Containers.Vectors *note A.18.2(34.8/3): 6701.
81561 copy back of parameters *note 6.4.1(17): 3477.
81562 copy parameter passing *note 6.2(2): 3380.
81563 Copy_Array
81564 in Interfaces.C.Pointers *note B.3.2(15): 7461.
81565 Copy_File
81566 in Ada.Directories *note A.16(13/2): 6589.
81567 Copy_Sign attribute *note A.5.3(51): 6189.
81568 Copy_Subtree
81569 in Ada.Containers.Multiway_Trees *note A.18.10(54/3): 7190.
81570 Copy_Terminated_Array
81571 in Interfaces.C.Pointers *note B.3.2(14): 7460.
81572 Copyright_Sign
81573 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5587.
81574 core language *note 1.1.2(2): 1005.
81575 corresponding constraint *note 3.4(6): 1542.
81576 corresponding discriminants *note 3.7(18): 1981.
81577 corresponding index
81578 for an array_aggregate *note 4.3.3(8): 2561.
81579 corresponding subtype *note 3.4(18/3): 1552.
81580 corresponding value
81581 of the target type of a conversion *note 4.6(28): 2959.
81582 Cos
81583 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
81584 G.1.2(4): 8212.
81585 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6064.
81586 Cosh
81587 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
81588 G.1.2(6): 8220.
81589 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6079.
81590 Cot
81591 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
81592 G.1.2(4): 8214.
81593 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6069.
81594 Coth
81595 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
81596 G.1.2(6): 8222.
81597 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6081.
81598 Count
81599 in Ada.Direct_IO *note A.8.4(4): 6272.
81600 in Ada.Streams.Stream_IO *note A.12.1(7): 6517.
81601 in Ada.Strings.Bounded *note A.4.4(48): 5821, *note A.4.4(49):
81602 5822, *note A.4.4(50): 5823.
81603 in Ada.Strings.Fixed *note A.4.3(13): 5764, *note A.4.3(14): 5765,
81604 *note A.4.3(15): 5766.
81605 in Ada.Strings.Unbounded *note A.4.5(43): 5875, *note A.4.5(44):
81606 5876, *note A.4.5(45): 5877.
81607 in Ada.Text_IO *note A.10.1(5): 6322.
81608 Count attribute *note 9.9(5): 4279.
81609 Count_Type
81610 in Ada.Containers *note A.18.1(5/2): 6661.
81611 Country
81612 in Ada.Locales *note A.19(6/3): 7319.
81613 Country code standard *note 1.2(4.1/3): 1102.
81614 Country_Code
81615 in Ada.Locales *note A.19(4/3): 7315.
81616 Country_Unknown
81617 in Ada.Locales *note A.19(5/3): 7317.
81618 cover
81619 a type *note 3.4.1(9): 1574.
81620 of a choice and an exception *note 11.2(6): 4516.
81621 cover a value
81622 by a discrete_choice *note 3.8.1(9): 2067.
81623 by a discrete_choice_list *note 3.8.1(13): 2068.
81624 CPU aspect *note D.16(8/3): 8001.
81625 CPU clock tick *note D.14(15/2): 7938.
81626 CPU pragma *note J.15.9(2/3): 8549, *note L(8.2/3): 8651.
81627 CPU subtype of CPU_Range
81628 in System.Multiprocessors *note D.16(4/3): 7998.
81629 CPU time
81630 of a task *note D.14(11/3): 7937.
81631 CPU_Range
81632 in System.Multiprocessors *note D.16(4/3): 7996.
81633 CPU_Tick
81634 in Ada.Execution_Time *note D.14(4/2): 7929.
81635 CPU_Time
81636 in Ada.Execution_Time *note D.14(4/2): 7925.
81637 CPU_Time_First
81638 in Ada.Execution_Time *note D.14(4/2): 7926.
81639 CPU_Time_Last
81640 in Ada.Execution_Time *note D.14(4/2): 7927.
81641 CPU_Time_Unit
81642 in Ada.Execution_Time *note D.14(4/2): 7928.
81643 CR
81644 in Ada.Characters.Latin_1 *note A.3.3(5): 5460.
81645 create *note 3.1(12): 1327.
81646 in Ada.Direct_IO *note A.8.4(6): 6274.
81647 in Ada.Sequential_IO *note A.8.1(6): 6248.
81648 in Ada.Streams.Stream_IO *note A.12.1(8): 6519.
81649 in Ada.Text_IO *note A.10.1(9): 6328.
81650 in System.Multiprocessors.Dispatching_Domains *note D.16.1(7/3):
81651 8006.
81652 Create_Directory
81653 in Ada.Directories *note A.16(7/2): 6583.
81654 Create_Path
81655 in Ada.Directories *note A.16(9/2): 6585.
81656 Create_Subpool
81657 in System.Storage_Pools.Subpools *note 13.11.4(7/3): 5220.
81658 creation
81659 of a protected object *note C.3.1(10/3): 7580.
81660 of a return object *note 6.5(5.11/3): 3505.
81661 of a tag *note 13.14(20/2): 5377.
81662 of a task object *note D.1(17/3): 7695.
81663 of an object *note 3.3(1): 1453.
81664 critical section
81665 See intertask communication *note 9.5(1): 3989.
81666 CSI
81667 in Ada.Characters.Latin_1 *note A.3.3(19): 5572.
81668 Currency_Sign
81669 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5582.
81670 current column number *note A.10(9): 6314.
81671 current index
81672 of an open direct file *note A.8(4): 6244.
81673 of an open stream file *note A.12.1(1.1/1): 6511.
81674 current instance
81675 of a generic unit *note 8.6(18): 3838.
81676 of a type *note 8.6(17/3): 3837.
81677 current line number *note A.10(9): 6315.
81678 current mode
81679 of an open file *note A.7(7): 6234.
81680 current page number *note A.10(9): 6316.
81681 Current size
81682 of a stream file *note A.12.1(1.1/1): 6512.
81683 of an external file *note A.8(3): 6243.
81684 Current_Directory
81685 in Ada.Directories *note A.16(5/2): 6581.
81686 Current_Error
81687 in Ada.Text_IO *note A.10.1(17): 6346, *note A.10.1(20): 6353.
81688 Current_Handler
81689 in Ada.Execution_Time.Group_Budgets *note D.14.2(10/2): 7970.
81690 in Ada.Execution_Time.Timers *note D.14.1(7/2): 7946.
81691 in Ada.Interrupts *note C.3.2(6): 7598.
81692 in Ada.Real_Time.Timing_Events *note D.15(5/2): 7988.
81693 Current_Input
81694 in Ada.Text_IO *note A.10.1(17): 6344, *note A.10.1(20): 6351.
81695 Current_Output
81696 in Ada.Text_IO *note A.10.1(17): 6345, *note A.10.1(20): 6352.
81697 Current_State
81698 in Ada.Synchronous_Task_Control *note D.10(4): 7902.
81699 Current_Task
81700 in Ada.Task_Identification *note C.7.1(3/3): 7641.
81701 Current_Task_Fallback_Handler
81702 in Ada.Task_Termination *note C.7.3(5/2): 7673.
81703 Current_Use
81704 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(7/3): 7310.
81705 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(6/3):
81706 7296.
81707 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(7/3):
81708 7283.
81709 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(7/3):
81710 7303.
81711 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(6/3):
81712 7290.
81713 cursor
81714 ambiguous *note A.18.2(240/2): 6756.
81715 for a container *note A.18(2/2): 6654.
81716 invalid *note A.18.2(248/2): 6759, *note A.18.3(153/2): 6829, *note
81717 A.18.4(76/2): 6849, *note A.18.7(97/2): 6981, *note A.18.10(222/3):
81718 7217.
81719 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(7/2): 6768.
81720 in Ada.Containers.Hashed_Maps *note A.18.5(4/2): 6854.
81721 in Ada.Containers.Hashed_Sets *note A.18.8(4/2): 6986.
81722 in Ada.Containers.Multiway_Trees *note A.18.10(9/3): 7146.
81723 in Ada.Containers.Ordered_Maps *note A.18.6(5/2): 6907.
81724 in Ada.Containers.Ordered_Sets *note A.18.9(5/2): 7059.
81725 in Ada.Containers.Vectors *note A.18.2(9/2): 6672.
81726
81727
81728 \1f
81729 File: arm2012.info, Node: D, Next: E, Prev: C, Up: Index
81730
81731 D
81732 ==
81733
81734
81735
81736 dangling references
81737 prevention via accessibility rules *note 3.10.2(3/2): 2286.
81738 Data_Error
81739 in Ada.Direct_IO *note A.8.4(18): 6298.
81740 in Ada.IO_Exceptions *note A.13(4): 6565.
81741 in Ada.Sequential_IO *note A.8.1(15): 6267.
81742 in Ada.Storage_IO *note A.9(9): 6305.
81743 in Ada.Streams.Stream_IO *note A.12.1(26): 6546.
81744 in Ada.Text_IO *note A.10.1(85): 6471.
81745 date and time formatting standard *note 1.2(5.1/2): 1107.
81746 Day
81747 in Ada.Calendar *note 9.6(13): 4129.
81748 in Ada.Calendar.Formatting *note 9.6.1(23/2): 4168.
81749 Day_Count
81750 in Ada.Calendar.Arithmetic *note 9.6.1(10/2): 4149.
81751 Day_Duration subtype of Duration
81752 in Ada.Calendar *note 9.6(11/2): 4125.
81753 Day_Name
81754 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4153.
81755 Day_Number subtype of Integer
81756 in Ada.Calendar *note 9.6(11/2): 4124.
81757 Day_of_Week
81758 in Ada.Calendar.Formatting *note 9.6.1(18/2): 4161.
81759 DC1
81760 in Ada.Characters.Latin_1 *note A.3.3(6): 5464.
81761 DC2
81762 in Ada.Characters.Latin_1 *note A.3.3(6): 5465.
81763 DC3
81764 in Ada.Characters.Latin_1 *note A.3.3(6): 5466.
81765 DC4
81766 in Ada.Characters.Latin_1 *note A.3.3(6): 5467.
81767 DCS
81768 in Ada.Characters.Latin_1 *note A.3.3(18): 5561.
81769 Deadline subtype of Time
81770 in Ada.Dispatching.EDF *note D.2.6(9/2): 7751.
81771 Deallocate
81772 in System.Storage_Pools *note 13.11(8): 5155.
81773 in System.Storage_Pools.Subpools *note 13.11.4(15/3): 5227.
81774 Deallocate_Subpool
81775 in System.Storage_Pools.Subpools *note 13.11.4(12/3): 5224.
81776 deallocation of storage *note 13.11.2(1): 5190.
81777 Decimal
81778 child of Ada *note F.2(2): 8144.
81779 decimal digit
81780 a category of Character *note A.3.2(28): 5441.
81781 decimal fixed point type *note 3.5.9(1): 1820, *note 3.5.9(6): 1838.
81782 Decimal_Conversions
81783 in Interfaces.COBOL *note B.4(31): 7513.
81784 Decimal_Digit_Set
81785 in Ada.Strings.Maps.Constants *note A.4.6(4): 5908.
81786 Decimal_Element
81787 in Interfaces.COBOL *note B.4(12/3): 7486.
81788 decimal_fixed_point_definition *note 3.5.9(4): 1828.
81789 used *note 3.5.9(2): 1824, *note P: 9018.
81790 Decimal_IO
81791 in Ada.Text_IO *note A.10.1(73): 6446.
81792 decimal_literal *note 2.4.1(2): 1211.
81793 used *note 2.4(2): 1208, *note P: 8896.
81794 Decimal_Output
81795 in Ada.Text_IO.Editing *note F.3.3(11): 8167.
81796 Declaration *note 3.1(5): 1308, *note 3.1(6/3): 1311, *note N(11):
81797 8817.
81798 declaration list
81799 declarative_part *note 3.11(6.1/2): 2337.
81800 package_specification *note 7.1(6/2): 3567.
81801 declarative region
81802 of a construct *note 8.1(1): 3694.
81803 declarative_item *note 3.11(3): 2322.
81804 used *note 3.11(2): 2321, *note P: 9105.
81805 declarative_part *note 3.11(2): 2320.
81806 used *note 5.6(2): 3255, *note 6.3(2/3): 3397, *note 7.2(2/3):
81807 3572, *note 9.1(6/3): 3894, *note 9.5.2(5): 4031, *note P: 9368.
81808 declare *note 3.1(8): 1320, *note 3.1(12): 1326.
81809 declared pure *note 10.2.1(17/3): 4460.
81810 Decode
81811 in Ada.Strings.UTF_Encoding.Strings *note A.4.11(26/3): 6032, *note
81812 A.4.11(27/3): 6033, *note A.4.11(28/3): 6034.
81813 in Ada.Strings.UTF_Encoding.Wide_Strings *note A.4.11(34/3): 6039,
81814 *note A.4.11(35/3): 6040, *note A.4.11(36/3): 6041.
81815 in Ada.Strings.UTF_Encoding.Wide_Wide_Strings *note A.4.11(42/3):
81816 6046, *note A.4.11(43/3): 6047, *note A.4.11(44/3): 6048.
81817 Decrement
81818 in Interfaces.C.Pointers *note B.3.2(11/3): 7458.
81819 deeper
81820 accessibility level *note 3.10.2(3/2): 2284.
81821 statically *note 3.10.2(4): 2289, *note 3.10.2(17): 2296.
81822 default constant indexing function *note 5.5.1(16/3): 3226.
81823 default cursor subtype *note 5.5.1(8/3): 3216.
81824 default directory *note A.16(48/2): 6627.
81825 default element subtype *note 5.5.1(9/3): 3219.
81826 default entry queuing policy *note 9.5.3(17): 4087.
81827 default iterator function *note 5.5.1(8/3): 3214.
81828 default iterator subtype *note 5.5.1(8/3): 3215.
81829 default pool *note 13.11.3(4.1/3): 5211.
81830 default treatment *note C.3(5): 7574.
81831 default variable indexing function *note 5.5.1(21/3): 3227.
81832 Default_Aft
81833 in Ada.Text_IO *note A.10.1(64): 6428, *note A.10.1(69): 6438,
81834 *note A.10.1(74): 6448.
81835 in Ada.Text_IO.Complex_IO *note G.1.3(5): 8237.
81836 Default_Base
81837 in Ada.Text_IO *note A.10.1(53): 6410, *note A.10.1(58): 6419.
81838 Default_Bit_Order
81839 in System *note 13.7(15/2): 5091.
81840 Default_Component_Value aspect *note 3.6(22.2/3): 1923.
81841 Default_Currency
81842 in Ada.Text_IO.Editing *note F.3.3(10): 8163.
81843 Default_Deadline
81844 in Ada.Dispatching.EDF *note D.2.6(9/2): 7752.
81845 Default_Exp
81846 in Ada.Text_IO *note A.10.1(64): 6429, *note A.10.1(69): 6439,
81847 *note A.10.1(74): 6449.
81848 in Ada.Text_IO.Complex_IO *note G.1.3(5): 8238.
81849 default_expression *note 3.7(6): 1975.
81850 used *note 3.7(5/2): 1974, *note 3.8(6/3): 2032, *note 6.1(15/3):
81851 3320, *note 12.4(2/3): 4718, *note P: 9666.
81852 Default_Fill
81853 in Ada.Text_IO.Editing *note F.3.3(10): 8164.
81854 Default_Fore
81855 in Ada.Text_IO *note A.10.1(64): 6427, *note A.10.1(69): 6437,
81856 *note A.10.1(74): 6447.
81857 in Ada.Text_IO.Complex_IO *note G.1.3(5): 8236.
81858 Default_Iterator aspect *note 5.5.1(8/3): 3218.
81859 Default_Modulus
81860 in Ada.Containers.Indefinite_Holders *note A.18.21(10/3): 7257,
81861 *note A.18.23(10/3): 7264.
81862 default_name *note 12.6(4): 4813.
81863 used *note 12.6(3/2): 4812, *note P: 9700.
81864 Default_Priority
81865 in System *note 13.7(17): 5095.
81866 Default_Quantum
81867 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7743.
81868 Default_Radix_Mark
81869 in Ada.Text_IO.Editing *note F.3.3(10): 8166.
81870 Default_Separator
81871 in Ada.Text_IO.Editing *note F.3.3(10): 8165.
81872 Default_Setting
81873 in Ada.Text_IO *note A.10.1(80): 6458.
81874 Default_Storage_Pool aspect *note 13.11.3(5/3): 5215.
81875 Default_Storage_Pool pragma *note 13.11.3(3/3): 5207, *note L(8.3/3):
81876 8654.
81877 Default_Subpool_for_Pool
81878 in System.Storage_Pools.Subpools *note 13.11.4(13/3): 5225.
81879 Default_Value aspect *note 3.5(56.3/3): 1677.
81880 Default_Width
81881 in Ada.Text_IO *note A.10.1(53): 6409, *note A.10.1(58): 6418,
81882 *note A.10.1(80): 6457.
81883 deferred constant *note 7.4(2/3): 3622.
81884 deferred constant declaration *note 3.3.1(6/3): 1500, *note 7.4(2/3):
81885 3621.
81886 defining name *note 3.1(10): 1321.
81887 defining_character_literal *note 3.5.1(4): 1686.
81888 used *note 3.5.1(3): 1685, *note P: 9004.
81889 defining_designator *note 6.1(6): 3291.
81890 used *note 6.1(4.2/2): 3285, *note 12.3(2/3): 4677, *note P: 9338.
81891 defining_identifier *note 3.1(4): 1306.
81892 used *note 3.2.1(3/3): 1373, *note 3.2.2(2/3): 1400, *note
81893 3.3.1(3): 1495, *note 3.5.1(3): 1684, *note 3.10.1(2/2): 2269, *note
81894 5.5(4): 3193, *note 5.5.2(2/3): 3229, *note 6.1(7): 3296, *note
81895 6.5(2.1/3): 3488, *note 7.3(2/3): 3584, *note 7.3(3/3): 3588, *note
81896 8.5.1(2/3): 3784, *note 8.5.2(2/3): 3793, *note 9.1(2/3): 3874, *note
81897 9.1(3/3): 3880, *note 9.1(6/3): 3892, *note 9.4(2/3): 3936, *note
81898 9.4(3/3): 3942, *note 9.4(7/3): 3958, *note 9.5.2(2/3): 4015, *note
81899 9.5.2(5): 4028, *note 9.5.2(8): 4040, *note 10.1.3(4): 4372, *note
81900 10.1.3(5): 4375, *note 10.1.3(6): 4378, *note 11.2(4): 4513, *note
81901 12.5(2.1/3): 4743, *note 12.5(2.2/3): 4748, *note 12.7(2/3): 4825, *note
81902 P: 9346.
81903 defining_identifier_list *note 3.3.1(3): 1493.
81904 used *note 3.3.1(2/3): 1483, *note 3.3.2(2): 1523, *note 3.7(5/2):
81905 1972, *note 3.8(6/3): 2030, *note 6.1(15/3): 3313, *note 11.1(2/3):
81906 4491, *note 12.4(2/3): 4720, *note P: 9362.
81907 defining_operator_symbol *note 6.1(11): 3299.
81908 used *note 6.1(6): 3293, *note P: 9344.
81909 defining_program_unit_name *note 6.1(7): 3294.
81910 used *note 6.1(4.1/2): 3282, *note 6.1(6): 3292, *note 7.1(3/3):
81911 3557, *note 7.2(2/3): 3570, *note 8.5.3(2/3): 3797, *note 8.5.5(2/3):
81912 3822, *note 12.3(2/3): 4667, *note P: 9399.
81913 Definite attribute *note 12.5.1(23/3): 4780.
81914 definite subtype *note 3.3(23/3): 1468.
81915 definition *note 3.1(7): 1313.
81916 Degree_Sign
81917 in Ada.Characters.Latin_1 *note A.3.3(22): 5594.
81918 DEL
81919 in Ada.Characters.Latin_1 *note A.3.3(14): 5539.
81920 delay_alternative *note 9.7.1(6): 4205.
81921 used *note 9.7.1(4): 4200, *note 9.7.2(2): 4218, *note P: 9549.
81922 delay_relative_statement *note 9.6(4): 4113.
81923 used *note 9.6(2): 4110, *note P: 9528.
81924 delay_statement *note 9.6(2): 4108.
81925 used *note 5.1(4/2): 3123, *note 9.7.1(6): 4206, *note 9.7.4(4/2):
81926 4238, *note P: 9546.
81927 Delay_Until_And_Set_CPU
81928 in System.Multiprocessors.Dispatching_Domains *note D.16.1(14/3):
81929 8013.
81930 Delay_Until_And_Set_Deadline
81931 in Ada.Dispatching.EDF *note D.2.6(9/2): 7754.
81932 delay_until_statement *note 9.6(3): 4111.
81933 used *note 9.6(2): 4109, *note P: 9527.
81934 Delete
81935 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(24/2): 6791.
81936 in Ada.Containers.Hashed_Maps *note A.18.5(25/2): 6883, *note
81937 A.18.5(26/2): 6884.
81938 in Ada.Containers.Hashed_Sets *note A.18.8(24/2): 7010, *note
81939 A.18.8(25/2): 7011, *note A.18.8(55/2): 7036.
81940 in Ada.Containers.Ordered_Maps *note A.18.6(24/2): 6934, *note
81941 A.18.6(25/2): 6935.
81942 in Ada.Containers.Ordered_Sets *note A.18.9(23/2): 7081, *note
81943 A.18.9(24/2): 7082, *note A.18.9(68/2): 7115.
81944 in Ada.Containers.Vectors *note A.18.2(50/2): 6717, *note
81945 A.18.2(51/2): 6718.
81946 in Ada.Direct_IO *note A.8.4(8): 6277.
81947 in Ada.Sequential_IO *note A.8.1(8): 6251.
81948 in Ada.Streams.Stream_IO *note A.12.1(10): 6522.
81949 in Ada.Strings.Bounded *note A.4.4(64): 5836, *note A.4.4(65):
81950 5837.
81951 in Ada.Strings.Fixed *note A.4.3(29): 5779, *note A.4.3(30): 5780.
81952 in Ada.Strings.Unbounded *note A.4.5(59): 5890, *note A.4.5(60):
81953 5891.
81954 in Ada.Text_IO *note A.10.1(11): 6331.
81955 Delete_Children
81956 in Ada.Containers.Multiway_Trees *note A.18.10(53/3): 7189.
81957 Delete_Directory
81958 in Ada.Directories *note A.16(8/2): 6584.
81959 Delete_File
81960 in Ada.Directories *note A.16(11/2): 6587.
81961 Delete_First
81962 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(25/2): 6792.
81963 in Ada.Containers.Ordered_Maps *note A.18.6(26/2): 6936.
81964 in Ada.Containers.Ordered_Sets *note A.18.9(25/2): 7083.
81965 in Ada.Containers.Vectors *note A.18.2(52/2): 6719.
81966 Delete_Last
81967 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(26/2): 6793.
81968 in Ada.Containers.Ordered_Maps *note A.18.6(27/2): 6937.
81969 in Ada.Containers.Ordered_Sets *note A.18.9(26/2): 7084.
81970 in Ada.Containers.Vectors *note A.18.2(53/2): 6720.
81971 Delete_Leaf
81972 in Ada.Containers.Multiway_Trees *note A.18.10(35/3): 7171.
81973 Delete_Subtree
81974 in Ada.Containers.Multiway_Trees *note A.18.10(36/3): 7172.
81975 Delete_Tree
81976 in Ada.Directories *note A.16(10/2): 6586.
81977 delimiter *note 2.2(8/2): 1185.
81978 delivery
81979 of an interrupt *note C.3(2): 7567.
81980 delta
81981 of a fixed point type *note 3.5.9(1): 1821.
81982 Delta attribute *note 3.5.10(3): 1864.
81983 delta_constraint *note J.3(2): 8416.
81984 used *note 3.2.2(6): 1415, *note P: 8973.
81985 Denorm attribute *note A.5.3(9): 6138.
81986 denormalized number *note A.5.3(10): 6139.
81987 denote *note 8.6(16): 3836.
81988 informal definition *note 3.1(8): 1319.
81989 name used as a pragma argument *note 8.6(32): 3853.
81990 depend on a discriminant
81991 for a component *note 3.7(20): 1984.
81992 for a constraint or component_definition *note 3.7(19): 1983.
81993 dependence
81994 elaboration *note 10.2(9): 4428.
81995 of a task on a master *note 9.3(1): 3921.
81996 of a task on another task *note 9.3(4): 3925.
81997 semantic *note 10.1.1(26/2): 4342.
81998 depth
81999 accessibility level *note 3.10.2(3/2): 2285.
82000 in Ada.Containers.Multiway_Trees *note A.18.10(19/3): 7155.
82001 depth-first order *note A.18.10(5/3): 7143.
82002 Dequeue
82003 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(5/3): 7308.
82004 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(5/3):
82005 7295.
82006 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(6/3):
82007 7282.
82008 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(5/3):
82009 7301.
82010 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(5/3):
82011 7289.
82012 Dequeue_Only_High_Priority
82013 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(6/3): 7309.
82014 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(6/3):
82015 7302.
82016 dereference *note 4.1(8): 2375.
82017 Dereference_Error
82018 in Interfaces.C.Strings *note B.3.1(12): 7439.
82019 derivation class
82020 for a type *note 3.4.1(2/2): 1561.
82021 derived from
82022 directly or indirectly *note 3.4.1(2/2): 1560.
82023 derived type *note 3.4(1/2): 1528, *note N(13/2): 8820.
82024 [partial] *note 3.4(24): 1554.
82025 derived_type_definition *note 3.4(2/2): 1532.
82026 used *note 3.2.1(4/2): 1386, *note P: 8960.
82027 descendant *note 10.1.1(11): 4333, *note N(13.1/2): 8821.
82028 at run-time *note 3.9(12.3/3): 2108.
82029 of a tree node *note A.18.10(4/3): 7142.
82030 of a type *note 3.4.1(10/2): 1575.
82031 of an incomplete view *note 7.3.1(5.2/3): 3608.
82032 of the full view of a type *note 7.3.1(5.1/3): 3607.
82033 relationship with scope *note 8.2(4): 3703.
82034 Descendant_Tag
82035 in Ada.Tags *note 3.9(7.1/2): 2101.
82036 designate *note 3.10(1): 2217.
82037 designated profile
82038 of an access-to-subprogram type *note 3.10(11): 2254.
82039 of an anonymous access type *note 3.10(12/3): 2259.
82040 designated subtype
82041 of a named access type *note 3.10(10): 2249.
82042 of an anonymous access type *note 3.10(12/3): 2257.
82043 designated type
82044 of a named access type *note 3.10(10): 2250.
82045 of an anonymous access type *note 3.10(12/3): 2258.
82046 designator *note 6.1(5): 3287.
82047 used *note 6.3(2/3): 3399, *note P: 9370.
82048 destructor
82049 See finalization *note 7.6(1): 3637.
82050 See finalization *note 7.6.1(1): 3667.
82051 Detach_Handler
82052 in Ada.Interrupts *note C.3.2(9): 7601.
82053 Detect_Blocking pragma *note H.5(3/2): 8406, *note L(8.4/2): 8657.
82054 Determinant
82055 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(46/2): 8339.
82056 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(24/2): 8299.
82057 determined category for a formal type *note 12.5(6/3): 4770.
82058 determines
82059 a type by a subtype_mark *note 3.2.2(8): 1419.
82060 Device_Error
82061 in Ada.Direct_IO *note A.8.4(18): 6296.
82062 in Ada.Directories *note A.16(43/2): 6619.
82063 in Ada.IO_Exceptions *note A.13(4): 6563.
82064 in Ada.Sequential_IO *note A.8.1(15): 6265.
82065 in Ada.Streams.Stream_IO *note A.12.1(26): 6544.
82066 in Ada.Text_IO *note A.10.1(85): 6469.
82067 Diaeresis
82068 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5586.
82069 Difference
82070 in Ada.Calendar.Arithmetic *note 9.6.1(12/2): 4151.
82071 in Ada.Containers.Hashed_Sets *note A.18.8(32/2): 7016, *note
82072 A.18.8(33/2): 7017.
82073 in Ada.Containers.Ordered_Sets *note A.18.9(33/2): 7089, *note
82074 A.18.9(34/2): 7090.
82075 digit *note 2.4.1(4.1/2): 1222.
82076 used *note 2.4.1(3): 1216, *note 2.4.2(5): 1245, *note P: 8914.
82077 digits
82078 of a decimal fixed point subtype *note 3.5.9(6): 1837, *note
82079 3.5.10(7): 1871.
82080 Digits attribute *note 3.5.8(2/1): 1816, *note 3.5.10(7): 1870.
82081 digits_constraint *note 3.5.9(5): 1832.
82082 used *note 3.2.2(6): 1414, *note P: 8972.
82083 dimensionality
82084 of an array *note 3.6(12): 1903.
82085 direct access *note A.8(3): 6241.
82086 direct file *note A.8(1/2): 6238.
82087 Direct_IO
82088 child of Ada *note A.8.4(2): 6269.
82089 direct_name *note 4.1(3): 2365.
82090 used *note 3.8.1(2): 2052, *note 4.1(2/3): 2353, *note 5.1(8):
82091 3139, *note 9.5.2(3): 4020, *note 10.2.1(4.2/2): 4444, *note 13.1(3):
82092 4850, *note J.7(1): 8427, *note L(25.2/2): 8733, *note P: 9715.
82093 Direction
82094 in Ada.Strings *note A.4.1(6): 5728.
82095 directly specified
82096 of a representation aspect of an entity *note 13.1(8/3): 4860.
82097 of an operational aspect of an entity *note 13.1(8.1/3): 4866.
82098 directly visible *note 8.3(2): 3716, *note 8.3(21): 3739.
82099 within a pragma in a context_clause *note 10.1.6(3): 4409.
82100 within a pragma that appears at the place of a compilation unit
82101 *note 10.1.6(5): 4413.
82102 within a use_clause in a context_clause *note 10.1.6(3): 4407.
82103 within a with_clause *note 10.1.6(2/2): 4405.
82104 within the parent_unit_name of a library unit *note 10.1.6(2/2):
82105 4403.
82106 within the parent_unit_name of a subunit *note 10.1.6(4): 4411.
82107 Directories
82108 child of Ada *note A.16(3/2): 6580.
82109 directory *note A.16(45/2): 6620.
82110 directory entry *note A.16(49/2): 6628.
82111 directory name *note A.16(46/2): 6623.
82112 Directory_Entry_Type
82113 in Ada.Directories *note A.16(29/2): 6604.
82114 disabled
82115 predicate checks *note 3.2.4(7/3): 1442.
82116 Discard_Names pragma *note C.5(3): 7611, *note L(9): 8659.
82117 discontiguous representation
82118 [partial] *note 13.5.2(5): 5052, *note 13.7.1(12): 5107, *note
82119 13.9(9): 5126, *note 13.9(17/3): 5129, *note 13.11(21.6/3): 5183.
82120 discrete array type *note 4.5.2(1): 2782.
82121 discrete type *note 3.2(3): 1340, *note 3.5(1): 1581, *note N(14):
82122 8822.
82123 discrete_choice *note 3.8.1(5/3): 2061.
82124 used *note 3.8.1(4): 2059, *note P: 9078.
82125 discrete_choice_list *note 3.8.1(4): 2058.
82126 used *note 3.8.1(3): 2056, *note 4.3.3(5/2): 2554, *note
82127 4.5.7(6/3): 2887, *note 5.4(3): 3174, *note P: 9182.
82128 Discrete_Random
82129 child of Ada.Numerics *note A.5.2(17): 6107.
82130 discrete_range *note 3.6.1(3): 1928.
82131 used *note 3.6.1(2): 1927, *note 4.1.2(2): 2402, *note P: 9039.
82132 discrete_subtype_definition *note 3.6(6): 1893.
82133 used *note 3.6(5): 1890, *note 5.5(4): 3194, *note 9.5.2(2/3):
82134 4016, *note 9.5.2(8): 4041, *note P: 9504.
82135 discriminant *note 3.2(5/2): 1346, *note 3.7(1/2): 1957, *note
82136 N(15/2): 8823.
82137 of a variant_part *note 3.8.1(6): 2065.
82138 use in a record definition *note 3.8(12/3): 2036.
82139 discriminant_association *note 3.7.1(3): 1997.
82140 used *note 3.7.1(2): 1996, *note P: 9055.
82141 Discriminant_Check *note 11.5(12): 4602.
82142 [partial] *note 4.1.3(15): 2422, *note 4.3(6): 2496, *note
82143 4.3.2(8/3): 2533, *note 4.6(43): 2982, *note 4.6(45): 2984, *note
82144 4.6(51/3): 2994, *note 4.6(52): 3007, *note 4.7(4): 3027, *note
82145 4.8(10/2): 3058, *note 6.5(5.11/3): 3508.
82146 discriminant_constraint *note 3.7.1(2): 1994.
82147 used *note 3.2.2(7): 1418, *note P: 8975.
82148 discriminant_part *note 3.7(2/2): 1960.
82149 used *note 3.10.1(2/2): 2270, *note 7.3(2/3): 3585, *note 7.3(3/3):
82150 3589, *note 12.5(2.1/3): 4744, *note 12.5(2.2/3): 4749, *note P: 9671.
82151 discriminant_specification *note 3.7(5/2): 1967.
82152 used *note 3.7(4): 1966, *note P: 9045.
82153 discriminants
82154 known *note 3.7(26): 1986.
82155 unknown *note 3.7(26): 1990.
82156 discriminated type *note 3.7(8/2): 1978.
82157 dispatching *note 3.9(3): 2087.
82158 child of Ada *note D.2.1(1.2/3): 7698.
82159 dispatching call
82160 on a dispatching operation *note 3.9.2(1/2): 2140.
82161 dispatching operation *note 3.9.2(1/2): 2139, *note 3.9.2(2/3): 2153.
82162 [partial] *note 3.9(1): 2072.
82163 dispatching point *note D.2.1(4/2): 7704.
82164 [partial] *note D.2.3(8/2): 7730, *note D.2.4(9/3): 7739.
82165 dispatching policy for tasks
82166 [partial] *note D.2.1(5/2): 7710.
82167 dispatching, task *note D.2.1(4/2): 7702.
82168 Dispatching_Domain
82169 in System.Multiprocessors.Dispatching_Domains *note D.16.1(5/3):
82170 8004.
82171 Dispatching_Domain aspect *note D.16.1(18/3): 8015.
82172 Dispatching_Domain pragma *note J.15.10(2/3): 8553, *note L(9.1/3):
82173 8662.
82174 Dispatching_Domain_Error
82175 in System.Multiprocessors.Dispatching_Domains *note D.16.1(4/3):
82176 8003.
82177 Dispatching_Domains
82178 child of System.Multiprocessors *note D.16.1(3/3): 8002.
82179 Dispatching_Policy_Error
82180 in Ada.Dispatching *note D.2.1(1.4/3): 7700.
82181 Display_Format
82182 in Interfaces.COBOL *note B.4(22): 7497.
82183 displayed magnitude (of a decimal value) *note F.3.2(14): 8154.
82184 disruption of an assignment *note 9.8(21): 4270, *note 13.9.1(5):
82185 5133.
82186 [partial] *note 11.6(6/3): 4633.
82187 distinct access paths *note 6.2(12/3): 3388.
82188 distributed accessibility *note 3.10.2(32.1/3): 2314.
82189 distributed program *note E(3): 8019.
82190 distributed system *note E(2): 8018.
82191 distributed systems *note C(1): 7555.
82192 divide *note 2.1(15/3): 1168.
82193 in Ada.Decimal *note F.2(6/3): 8150.
82194 divide operator *note 4.4(1/3): 2634, *note 4.5.5(1): 2841.
82195 Division_Check *note 11.5(13/2): 4603.
82196 [partial] *note 3.5.4(20): 1750, *note 4.5.5(22): 2848, *note
82197 A.5.1(28): 6087, *note A.5.3(47): 6181, *note G.1.1(40): 8201, *note
82198 G.1.2(28): 8228, *note K.2(202): 8600.
82199 Division_Sign
82200 in Ada.Characters.Latin_1 *note A.3.3(26): 5667.
82201 DLE
82202 in Ada.Characters.Latin_1 *note A.3.3(6): 5463.
82203 Do_APC
82204 in System.RPC *note E.5(10): 8132.
82205 Do_RPC
82206 in System.RPC *note E.5(9): 8131.
82207 documentation (required of an implementation) *note 1.1.3(18): 1058,
82208 *note M.1(1/2): 8794, *note M.2(1/2): 8796, *note M.3(1/2): 8799.
82209 documentation requirements *note 1.1.2(34): 1044, *note M(1/3): 8792.
82210 summary of requirements *note M.1(1/2): 8793.
82211 Dollar_Sign
82212 in Ada.Characters.Latin_1 *note A.3.3(8): 5483.
82213 dot *note 2.1(15/3): 1165.
82214 dot selection
82215 See selected_component *note 4.1.3(1): 2410.
82216 double
82217 in Interfaces.C *note B.3(16): 7385.
82218 Double_Precision
82219 in Interfaces.Fortran *note B.5(6): 7536.
82220 Doubly_Linked_Lists
82221 child of Ada.Containers *note A.18.3(5/3): 6766.
82222 downward closure *note 3.10.2(37/2): 2318.
82223 drift rate *note D.8(41): 7893.
82224 Duration
82225 in Standard *note A.1(43): 5397.
82226 dynamic binding
82227 See dispatching operation *note 3.9(1): 2074.
82228 dynamic semantics *note 1.1.2(30): 1035.
82229 Dynamic_Predicate aspect *note 3.2.4(1/3): 1438.
82230 Dynamic_Priorities
82231 child of Ada *note D.5.1(3/2): 7794.
82232 dynamically determined tag *note 3.9.2(1/2): 2143.
82233 dynamically enclosing
82234 of one execution by another *note 11.4(2): 4528.
82235 dynamically tagged *note 3.9.2(5/2): 2161.
82236
82237
82238 \1f
82239 File: arm2012.info, Node: E, Next: F, Prev: D, Up: Index
82240
82241 E
82242 ==
82243
82244
82245
82246 e
82247 in Ada.Numerics *note A.5(3/2): 6056.
82248 EDF
82249 child of Ada.Dispatching *note D.2.6(9/2): 7750.
82250 child of Ada.Synchronous_Task_Control *note D.10(5.2/3): 7904.
82251 EDF_Across_Priorities task dispatching policy *note D.2.6(7/2): 7749.
82252 edited output *note F.3(1/2): 8151.
82253 Editing
82254 child of Ada.Text_IO *note F.3.3(3): 8155.
82255 child of Ada.Wide_Text_IO *note F.3.4(1): 8175.
82256 child of Ada.Wide_Wide_Text_IO *note F.3.5(1/2): 8177.
82257 effect
82258 external *note 1.1.3(8): 1052.
82259 efficiency *note 11.5(29): 4619, *note 11.6(1/3): 4625.
82260 Eigensystem
82261 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(49/2): 8341.
82262 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(27/2): 8301.
82263 Eigenvalues
82264 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(48/2): 8340.
82265 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(26/2): 8300.
82266 Elaborate pragma *note 10.2.1(20): 4465, *note L(10): 8664.
82267 Elaborate_All pragma *note 10.2.1(21): 4469, *note L(11): 8668.
82268 Elaborate_Body aspect *note 10.2.1(26.1/3): 4480.
82269 Elaborate_Body pragma *note 10.2.1(22): 4473, *note L(12): 8672.
82270 elaborated *note 3.11(8): 2339.
82271 elaboration *note 3.1(11): 1324, *note N(15.1/2): 8824, *note N(19):
82272 8832.
82273 abstract_subprogram_declaration *note 3.9.3(11.1/2): 2187.
82274 access_definition *note 3.10(17/2): 2267.
82275 access_type_definition *note 3.10(16): 2266.
82276 array_type_definition *note 3.6(21): 1918.
82277 aspect_clause *note 13.1(19/1): 4879.
82278 choice_parameter_specification *note 11.4(7): 4535.
82279 component_declaration *note 3.8(17): 2044.
82280 component_definition *note 3.6(22/2): 1920, *note 3.8(18/2): 2048.
82281 component_list *note 3.8(17): 2043.
82282 declaration with a True Import aspect *note B.1(38/3): 7356.
82283 declarative_part *note 3.11(7): 2338.
82284 deferred constant declaration *note 7.4(10/3): 3625.
82285 delta_constraint *note J.3(11): 8423.
82286 derived_type_definition *note 3.4(26): 1555.
82287 digits_constraint *note 3.5.9(19): 1853.
82288 discrete_subtype_definition *note 3.6(22/2): 1919.
82289 discriminant_constraint *note 3.7.1(12): 2009.
82290 entry_declaration *note 9.5.2(22/1): 4057.
82291 enumeration_type_definition *note 3.5.1(10): 1691.
82292 exception_declaration *note 11.1(5): 4498.
82293 expression_function_declaration *note 6.8(8/3): 3548.
82294 fixed_point_definition *note 3.5.9(17): 1851.
82295 floating_point_definition *note 3.5.7(13): 1809.
82296 full type definition *note 3.2.1(11): 1398.
82297 full_type_declaration *note 3.2.1(11): 1397.
82298 generic body *note 12.2(2): 4664.
82299 generic_declaration *note 12.1(10): 4662.
82300 generic_instantiation *note 12.3(20): 4708.
82301 incomplete_type_declaration *note 3.10.1(12): 2277.
82302 index_constraint *note 3.6.1(8): 1937.
82303 integer_type_definition *note 3.5.4(18): 1746.
82304 loop_parameter_specification *note 5.5(9/3): 3200.
82305 nongeneric package_body *note 7.2(6): 3577.
82306 nongeneric subprogram_body *note 6.3(6): 3401.
82307 null_procedure_declaration *note 6.7(5/3): 3538.
82308 number_declaration *note 3.3.2(7): 1527.
82309 object_declaration *note 3.3.1(15): 1512.
82310 of library units for a foreign language main subprogram *note
82311 B.1(39/3): 7361.
82312 package_body of Standard *note A.1(50): 5402.
82313 package_declaration *note 7.1(8): 3568.
82314 partition *note E.1(6): 8024.
82315 partition *note E.5(21): 8135.
82316 per-object constraint *note 3.8(18.1/1): 2049.
82317 pragma *note 2.8(12): 1279.
82318 private_extension_declaration *note 7.3(17): 3602.
82319 private_type_declaration *note 7.3(17): 3601.
82320 protected declaration *note 9.4(12): 3979.
82321 protected_body *note 9.4(15): 3983.
82322 protected_definition *note 9.4(13): 3981.
82323 range_constraint *note 3.5(9): 1606.
82324 real_type_definition *note 3.5.6(5): 1785.
82325 record_definition *note 3.8(16): 2042.
82326 record_extension_part *note 3.9.1(5): 2138.
82327 record_type_definition *note 3.8(16): 2041.
82328 renaming_declaration *note 8.5(3): 3775.
82329 single_protected_declaration *note 9.4(12): 3980.
82330 single_task_declaration *note 9.1(10): 3908.
82331 subprogram_declaration *note 6.1(31/2): 3337.
82332 subtype_declaration *note 3.2.2(9): 1420.
82333 subtype_indication *note 3.2.2(9): 1421.
82334 task declaration *note 9.1(10): 3907.
82335 task_body *note 9.1(13): 3911.
82336 task_definition *note 9.1(11): 3909.
82337 use_clause *note 8.4(12): 3768.
82338 variant_part *note 3.8.1(22): 2071.
82339 elaboration control *note 10.2.1(1): 4436.
82340 elaboration dependence
82341 library_item on another *note 10.2(9): 4427.
82342 Elaboration_Check *note 11.5(20): 4612.
82343 [partial] *note 3.11(9): 2340.
82344 element
82345 of a storage pool *note 13.11(11): 5161.
82346 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(14/2): 6776.
82347 in Ada.Containers.Hashed_Maps *note A.18.5(14/2): 6865, *note
82348 A.18.5(31/2): 6889.
82349 in Ada.Containers.Hashed_Sets *note A.18.8(15/2): 6998, *note
82350 A.18.8(52/2): 7033.
82351 in Ada.Containers.Indefinite_Holders *note A.18.18(12/3): 7233.
82352 in Ada.Containers.Multiway_Trees *note A.18.10(24/3): 7160.
82353 in Ada.Containers.Ordered_Maps *note A.18.6(13/2): 6916, *note
82354 A.18.6(39/2): 6949.
82355 in Ada.Containers.Ordered_Sets *note A.18.9(14/2): 7069, *note
82356 A.18.9(65/2): 7112.
82357 in Ada.Containers.Vectors *note A.18.2(27/2): 6687, *note
82358 A.18.2(28/2): 6688.
82359 in Ada.Strings.Bounded *note A.4.4(26): 5808.
82360 in Ada.Strings.Unbounded *note A.4.5(20): 5862.
82361 elementary type *note 3.2(2/2): 1335, *note N(16): 8825.
82362 Elementary_Functions
82363 child of Ada.Numerics *note A.5.1(9/1): 6086.
82364 eligible
82365 a type, for a convention *note B.1(14/3): 7350.
82366 else part
82367 of a selective_accept *note 9.7.1(11): 4209.
82368 EM
82369 in Ada.Characters.Latin_1 *note A.3.3(6): 5472.
82370 embedded systems *note C(1): 7554, *note D(1): 7685.
82371 empty element
82372 of a vector *note A.18.2(4/2): 6667.
82373 empty holder *note A.18.18(3/3): 7226.
82374 Empty_Holder
82375 in Ada.Containers.Indefinite_Holders *note A.18.18(7/3): 7229.
82376 Empty_List
82377 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(8/2): 6769.
82378 Empty_Map
82379 in Ada.Containers.Hashed_Maps *note A.18.5(5/2): 6855.
82380 in Ada.Containers.Ordered_Maps *note A.18.6(6/2): 6908.
82381 Empty_Set
82382 in Ada.Containers.Hashed_Sets *note A.18.8(5/2): 6987.
82383 in Ada.Containers.Ordered_Sets *note A.18.9(6/2): 7060.
82384 Empty_Tree
82385 in Ada.Containers.Multiway_Trees *note A.18.10(10/3): 7147.
82386 Empty_Vector
82387 in Ada.Containers.Vectors *note A.18.2(10/2): 6673.
82388 enabled
82389 invariant expression *note 7.3.2(21/3): 3619.
82390 postcondition expression *note 6.1.1(19/3): 3358.
82391 precondition expression *note 6.1.1(19/3): 3357.
82392 predicate checks *note 3.2.4(7/3): 1441.
82393 encapsulation
82394 See package *note 7(1): 3551.
82395 enclosing
82396 immediately *note 8.1(13): 3699.
82397 Encode
82398 in Ada.Strings.UTF_Encoding.Strings *note A.4.11(23/3): 6029, *note
82399 A.4.11(24/3): 6030, *note A.4.11(25/3): 6031.
82400 in Ada.Strings.UTF_Encoding.Wide_Strings *note A.4.11(31/3): 6036,
82401 *note A.4.11(32/3): 6037, *note A.4.11(33/3): 6038.
82402 in Ada.Strings.UTF_Encoding.Wide_Wide_Strings *note A.4.11(39/3):
82403 6043, *note A.4.11(40/3): 6044, *note A.4.11(41/3): 6045.
82404 Encoding
82405 in Ada.Strings.UTF_Encoding *note A.4.11(13/3): 6021.
82406 encoding scheme *note A.4.11(46/3): 6049.
82407 Encoding_Error
82408 in Ada.Strings.UTF_Encoding *note A.4.11(8/3): 6016.
82409 Encoding_Scheme
82410 in Ada.Strings.UTF_Encoding *note A.4.11(4/3): 6012.
82411 end of a line *note 2.2(2/3): 1183.
82412 End_Error
82413 raised by failure of run-time check *note 13.13.2(37/1): 5325.
82414 in Ada.Direct_IO *note A.8.4(18): 6297.
82415 in Ada.IO_Exceptions *note A.13(4): 6564.
82416 in Ada.Sequential_IO *note A.8.1(15): 6266.
82417 in Ada.Streams.Stream_IO *note A.12.1(26): 6545.
82418 in Ada.Text_IO *note A.10.1(85): 6470.
82419 End_Of_File
82420 in Ada.Direct_IO *note A.8.4(16): 6291.
82421 in Ada.Sequential_IO *note A.8.1(13): 6260.
82422 in Ada.Streams.Stream_IO *note A.12.1(12): 6529.
82423 in Ada.Text_IO *note A.10.1(34): 6377.
82424 End_Of_Line
82425 in Ada.Text_IO *note A.10.1(30): 6368.
82426 End_Of_Page
82427 in Ada.Text_IO *note A.10.1(33): 6374.
82428 End_Search
82429 in Ada.Directories *note A.16(33/2): 6608.
82430 endian
82431 big *note 13.5.3(2): 5056.
82432 little *note 13.5.3(2): 5059.
82433 ENQ
82434 in Ada.Characters.Latin_1 *note A.3.3(5): 5452.
82435 Enqueue
82436 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(5/3): 7307.
82437 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(5/3):
82438 7294.
82439 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(5/3):
82440 7281.
82441 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(5/3):
82442 7300.
82443 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(5/3):
82444 7288.
82445 entity
82446 [partial] *note 3.1(1): 1290.
82447 entry
82448 closed *note 9.5.3(5): 4073.
82449 open *note 9.5.3(5): 4071.
82450 single *note 9.5.2(20): 4055.
82451 entry call *note 9.5.3(1): 4064.
82452 simple *note 9.5.3(1): 4066.
82453 entry calling convention *note 6.3.1(13): 3416.
82454 entry family *note 9.5.2(20): 4052.
82455 entry index subtype *note 3.8(18/2): 2047, *note 9.5.2(20): 4053.
82456 entry queue *note 9.5.3(12): 4082.
82457 entry queuing policy *note 9.5.3(17): 4086.
82458 default policy *note 9.5.3(17): 4088.
82459 entry_barrier *note 9.5.2(7): 4037.
82460 used *note 9.5.2(5): 4030, *note P: 9515.
82461 entry_body *note 9.5.2(5): 4027.
82462 used *note 9.4(8/1): 3965, *note P: 9500.
82463 entry_body_formal_part *note 9.5.2(6): 4034.
82464 used *note 9.5.2(5): 4029, *note P: 9514.
82465 entry_call_alternative *note 9.7.2(3/2): 4219.
82466 used *note 9.7.2(2): 4217, *note 9.7.3(2): 4227, *note P: 9554.
82467 entry_call_statement *note 9.5.3(2): 4067.
82468 used *note 5.1(4/2): 3121, *note 9.7.2(3.1/2): 4224, *note P: 9283.
82469 entry_declaration *note 9.5.2(2/3): 4013.
82470 used *note 9.1(5/1): 3889, *note 9.4(5/1): 3952, *note P: 9490.
82471 entry_index *note 9.5.2(4): 4025.
82472 used *note 9.5.2(3): 4021, *note P: 9508.
82473 entry_index_specification *note 9.5.2(8): 4039.
82474 used *note 9.5.2(6): 4035, *note P: 9519.
82475 enumeration literal *note 3.5.1(6/3): 1688.
82476 enumeration type *note 3.2(3): 1341, *note 3.5.1(1): 1679, *note
82477 N(17): 8826.
82478 enumeration_aggregate *note 13.4(3): 5006.
82479 used *note 13.4(2): 5005, *note P: 9734.
82480 Enumeration_IO
82481 in Ada.Text_IO *note A.10.1(79): 6456.
82482 enumeration_literal_specification *note 3.5.1(3): 1683.
82483 used *note 3.5.1(2): 1682, *note P: 9002.
82484 enumeration_representation_clause *note 13.4(2): 5003.
82485 used *note 13.1(2/1): 4846, *note P: 9712.
82486 enumeration_type_definition *note 3.5.1(2): 1680.
82487 used *note 3.2.1(4/2): 1380, *note P: 8954.
82488 environment *note 10.1.4(1): 4388.
82489 environment declarative_part *note 10.1.4(1): 4389.
82490 for the environment task of a partition *note 10.2(13): 4429.
82491 environment task *note 10.2(8): 4426.
82492 environment variable *note A.17(1/2): 6643.
82493 Environment_Task
82494 in Ada.Task_Identification *note C.7.1(3/3): 7642.
82495 Environment_Variables
82496 child of Ada *note A.17(3/2): 6644.
82497 EOT
82498 in Ada.Characters.Latin_1 *note A.3.3(5): 5451.
82499 EPA
82500 in Ada.Characters.Latin_1 *note A.3.3(18): 5568.
82501 epoch *note D.8(19): 7889.
82502 equal operator *note 4.4(1/3): 2587, *note 4.5.2(1): 2760.
82503 Equal_Case_Insensitive
82504 child of Ada.Strings *note A.4.10(2/3): 6003.
82505 child of Ada.Strings.Bounded *note A.4.10(7/3): 6005.
82506 child of Ada.Strings.Fixed *note A.4.10(5/3): 6004.
82507 child of Ada.Strings.Unbounded *note A.4.10(10/3): 6006.
82508 Equal_Subtree
82509 in Ada.Containers.Multiway_Trees *note A.18.10(14/3): 7151.
82510 equality operator *note 4.5.2(1): 2754.
82511 special inheritance rule for tagged types *note 3.4(17/2): 1550,
82512 *note 4.5.2(14/3): 2790.
82513 equals sign *note 2.1(15/3): 1172.
82514 Equals_Sign
82515 in Ada.Characters.Latin_1 *note A.3.3(10): 5499.
82516 equivalent element
82517 of a hashed set *note A.18.8(64/2): 7045.
82518 of an ordered set *note A.18.9(78/2): 7125.
82519 equivalent key
82520 of a hashed map *note A.18.5(42/2): 6896.
82521 of an ordered map *note A.18.6(55/2): 6955.
82522 Equivalent_Elements
82523 in Ada.Containers.Hashed_Sets *note A.18.8(46/2): 7027, *note
82524 A.18.8(47/2): 7028, *note A.18.8(48/2): 7029.
82525 in Ada.Containers.Ordered_Sets *note A.18.9(3/2): 7057.
82526 Equivalent_Keys
82527 in Ada.Containers.Hashed_Maps *note A.18.5(34/2): 6891, *note
82528 A.18.5(35/2): 6892, *note A.18.5(36/2): 6893.
82529 in Ada.Containers.Ordered_Maps *note A.18.6(3/2): 6905.
82530 in Ada.Containers.Ordered_Sets *note A.18.9(63/2): 7110.
82531 Equivalent_Sets
82532 in Ada.Containers.Hashed_Sets *note A.18.8(8/2): 6991.
82533 in Ada.Containers.Ordered_Sets *note A.18.9(9/2): 7064.
82534 erroneous execution *note 1.1.2(32): 1041, *note 1.1.5(10): 1080.
82535 cause *note 3.7.2(4): 2013, *note 3.9(25.3/2): 2125, *note
82536 6.4.1(18/3): 3483, *note 9.8(21): 4271, *note 9.10(11): 4284, *note
82537 11.5(26): 4616, *note 13.3(13/3): 4949, *note 13.3(27): 4961, *note
82538 13.3(28/2): 4962, *note 13.9.1(8): 5135, *note 13.9.1(12/3): 5140, *note
82539 13.9.1(13/3): 5141, *note 13.11(21): 5180, *note 13.11.2(16/3): 5205,
82540 *note 13.13.2(53/2): 5345, *note A.10.3(22/1): 6474, *note
82541 A.12.1(36.1/1): 6548, *note A.13(17): 6567, *note A.17(28/2): 6653,
82542 *note A.18.2(252/2): 6761, *note A.18.3(157/2): 6831, *note
82543 A.18.4(80/2): 6851, *note A.18.7(101/2): 6983, *note A.18.18(70/3):
82544 7251, *note A.18.19(11/3): 7253, *note A.18.20(15/3): 7256, *note
82545 A.18.21(16/3): 7260, *note A.18.22(13/3): 7263, *note A.18.23(16/3):
82546 7267, *note A.18.24(13/3): 7270, *note A.18.25(15/3): 7272, *note
82547 B.1(38.1/3): 7358, *note B.3.1(51): 7448, *note B.3.1(55): 7449, *note
82548 B.3.1(56): 7450, *note B.3.1(57): 7451, *note B.3.2(35): 7462, *note
82549 B.3.2(36): 7463, *note B.3.2(37): 7464, *note B.3.2(38): 7465, *note
82550 B.3.2(39): 7466, *note B.3.2(42): 7467, *note C.3.1(14): 7590, *note
82551 C.3.1(14.1/3): 7591, *note C.7.1(18): 7656, *note C.7.2(14): 7666, *note
82552 C.7.2(15): 7667, *note C.7.2(15.1/2): 7668, *note D.2.6(31/2): 7759,
82553 *note D.5.1(12): 7799, *note D.11(9): 7922, *note D.14(19/2): 7939,
82554 *note D.14.1(25/2): 7954, *note D.14.2(35/2): 7979, *note H.4(26): 8403,
82555 *note H.4(27): 8404.
82556 error
82557 compile-time *note 1.1.2(27): 1024, *note 1.1.5(4): 1073.
82558 link-time *note 1.1.2(29): 1032, *note 1.1.5(4): 1075.
82559 run-time *note 1.1.2(30): 1038, *note 1.1.5(6): 1077, *note
82560 11.5(2/3): 4587, *note 11.6(1/3): 4623.
82561 See also bounded error, erroneous execution
82562 ESA
82563 in Ada.Characters.Latin_1 *note A.3.3(17): 5552.
82564 ESC
82565 in Ada.Characters.Latin_1 *note A.3.3(6): 5474.
82566 Establish_RPC_Receiver
82567 in System.RPC *note E.5(12): 8134.
82568 ETB
82569 in Ada.Characters.Latin_1 *note A.3.3(6): 5470.
82570 ETX
82571 in Ada.Characters.Latin_1 *note A.3.3(5): 5450.
82572 evaluation *note 3.1(11): 1325, *note N(17.1/2): 8827, *note N(19):
82573 8833.
82574 aggregate *note 4.3(5): 2493.
82575 allocator *note 4.8(7/2): 3050.
82576 array_aggregate *note 4.3.3(21): 2563.
82577 attribute_reference *note 4.1.4(11): 2440.
82578 case_expression *note 4.5.7(21/3): 2898.
82579 concatenation *note 4.5.3(5): 2815.
82580 dereference *note 4.1(13): 2382.
82581 discrete_range *note 3.6.1(8): 1938.
82582 extension_aggregate *note 4.3.2(7): 2531.
82583 generalized_reference *note 4.1.5(8/3): 2451.
82584 generic_association *note 12.3(21): 4710.
82585 generic_association for a formal object of mode in *note 12.4(11):
82586 4736.
82587 if_expression *note 4.5.7(20/3): 2894.
82588 indexed_component *note 4.1.1(7): 2393.
82589 initialized allocator *note 4.8(7/2): 3051.
82590 membership test *note 4.5.2(27/3): 2795.
82591 name *note 4.1(11/2): 2379.
82592 name that has a prefix *note 4.1(12): 2380.
82593 null literal *note 4.2(9): 2479.
82594 numeric literal *note 4.2(9): 2478.
82595 parameter_association *note 6.4.1(7): 3470.
82596 prefix *note 4.1(12): 2381.
82597 primary that is a name *note 4.4(10): 2711.
82598 qualified_expression *note 4.7(4): 3024.
82599 quantified_expression *note 4.5.8(6/3): 2911.
82600 range *note 3.5(9): 1607.
82601 range_attribute_reference *note 4.1.4(11): 2441.
82602 record_aggregate *note 4.3.1(18): 2517.
82603 record_component_association_list *note 4.3.1(19): 2518.
82604 selected_component *note 4.1.3(14): 2421.
82605 short-circuit control form *note 4.5.1(7): 2745.
82606 slice *note 4.1.2(7): 2404.
82607 string_literal *note 4.2(10): 2482.
82608 uninitialized allocator *note 4.8(8): 3054.
82609 Val *note 3.5.5(7): 1767, *note K.2(261): 8611.
82610 Value *note 3.5(55/3): 1672.
82611 value conversion *note 4.6(28): 2958.
82612 view conversion *note 4.6(52): 3002.
82613 Wide_Value *note 3.5(43/3): 1666.
82614 Wide_Wide_Value *note 3.5(39.4/3): 1654.
82615 Exception *note 11(1/3): 4486, *note 11.1(1): 4489, *note N(18): 8828.
82616 exception function *note 6.8(6/3): 3546.
82617 exception occurrence *note 11(1/3): 4481.
82618 exception_choice *note 11.2(5): 4514.
82619 used *note 11.2(3): 4510, *note P: 9613.
82620 exception_declaration *note 11.1(2/3): 4490.
82621 used *note 3.1(3/3): 1303, *note P: 8940.
82622 exception_handler *note 11.2(3): 4507.
82623 used *note 11.2(2): 4505, *note P: 9611.
82624 Exception_Id
82625 in Ada.Exceptions *note 11.4.1(2/2): 4537.
82626 Exception_Identity
82627 in Ada.Exceptions *note 11.4.1(5/2): 4548.
82628 Exception_Information
82629 in Ada.Exceptions *note 11.4.1(5/2): 4552.
82630 Exception_Message
82631 in Ada.Exceptions *note 11.4.1(4/3): 4546.
82632 Exception_Name
82633 in Ada.Exceptions *note 11.4.1(2/2): 4539, *note 11.4.1(5/2): 4549.
82634 Exception_Occurrence
82635 in Ada.Exceptions *note 11.4.1(3/2): 4542.
82636 Exception_Occurrence_Access
82637 in Ada.Exceptions *note 11.4.1(3/2): 4543.
82638 exception_renaming_declaration *note 8.5.2(2/3): 3792.
82639 used *note 8.5(2): 3771, *note P: 9426.
82640 Exceptions
82641 child of Ada *note 11.4.1(2/2): 4536.
82642 Exchange_Handler
82643 in Ada.Interrupts *note C.3.2(8): 7600.
82644 Exclamation
82645 in Ada.Characters.Latin_1 *note A.3.3(8): 5480.
82646 exclamation point *note 2.1(15/3): 1177.
82647 Exclude
82648 in Ada.Containers.Hashed_Maps *note A.18.5(24/2): 6882.
82649 in Ada.Containers.Hashed_Sets *note A.18.8(23/2): 7009, *note
82650 A.18.8(54/2): 7035.
82651 in Ada.Containers.Ordered_Maps *note A.18.6(23/2): 6933.
82652 in Ada.Containers.Ordered_Sets *note A.18.9(22/2): 7080, *note
82653 A.18.9(67/2): 7114.
82654 excludes null
82655 subtype *note 3.10(13.1/2): 2261.
82656 execution *note 3.1(11): 1323, *note N(19): 8831.
82657 abort_statement *note 9.8(4): 4256.
82658 aborting the execution of a construct *note 9.8(5): 4261.
82659 accept_statement *note 9.5.2(24): 4058.
82660 Ada program *note 9(1/3): 3854.
82661 assignment_statement *note 5.2(7): 3152, *note 7.6(17): 3660, *note
82662 7.6.1(12/2): 3686.
82663 asynchronous_select with a delay_statement trigger *note 9.7.4(7):
82664 4243.
82665 asynchronous_select with a procedure call trigger *note 9.7.4(6/2):
82666 4242.
82667 asynchronous_select with an entry call trigger *note 9.7.4(6/2):
82668 4241.
82669 block_statement *note 5.6(5): 3258.
82670 call on a dispatching operation *note 3.9.2(14): 2165.
82671 call on an inherited subprogram *note 3.4(27/2): 1556.
82672 case_statement *note 5.4(11/3): 3179.
82673 conditional_entry_call *note 9.7.3(3): 4229.
82674 delay_statement *note 9.6(20): 4134.
82675 dynamically enclosing *note 11.4(2): 4529.
82676 entry_body *note 9.5.2(26): 4063.
82677 entry_call_statement *note 9.5.3(8): 4079.
82678 exit_statement *note 5.7(5): 3263.
82679 extended_return_statement *note 6.5(5.11/3): 3503.
82680 goto_statement *note 5.8(5): 3267.
82681 handled_sequence_of_statements *note 11.2(10): 4518.
82682 handler *note 11.4(7): 4534.
82683 if_statement *note 5.3(5/3): 3168.
82684 instance of Unchecked_Deallocation *note 7.6.1(10): 3680.
82685 loop_statement *note 5.5(7): 3197.
82686 loop_statement with a for iteration_scheme *note 5.5(9/3): 3199.
82687 loop_statement with a while iteration_scheme *note 5.5(8): 3198.
82688 null_statement *note 5.1(13): 3140.
82689 partition *note 10.2(25): 4431.
82690 pragma *note 2.8(12): 1278.
82691 program *note 10.2(25): 4430.
82692 protected subprogram call *note 9.5.1(3): 4003.
82693 raise_statement with an exception_name *note 11.3(4/2): 4524.
82694 re-raise statement *note 11.3(4/2): 4525.
82695 remote subprogram call *note E.4(9): 8106.
82696 requeue protected entry *note 9.5.4(9): 4103.
82697 requeue task entry *note 9.5.4(8): 4102.
82698 requeue_statement *note 9.5.4(7/3): 4101.
82699 selective_accept *note 9.7.1(15): 4211.
82700 sequence_of_statements *note 5.1(15): 3142.
82701 simple_return_statement *note 6.5(6/2): 3510.
82702 subprogram call *note 6.4(10/2): 3456.
82703 subprogram_body *note 6.3(7): 3402.
82704 task *note 9.2(1): 3912.
82705 task_body *note 9.2(1): 3913.
82706 timed_entry_call *note 9.7.2(4/2): 4225.
82707 execution resource
82708 associated with a protected object *note 9.4(18): 3984.
82709 required for a task to run *note 9(10): 3871.
82710 execution time
82711 of a task *note D.14(11/3): 7936.
82712 Execution_Time
82713 child of Ada *note D.14(3/2): 7924.
82714 exhaust
82715 a budget *note D.14.2(14/2): 7975.
82716 exist
82717 cease to *note 7.6.1(11/3): 3681, *note 13.11.2(10/2): 5197.
82718 Exists
82719 in Ada.Directories *note A.16(24/2): 6600.
82720 in Ada.Environment_Variables *note A.17(5/2): 6647.
82721 exit_statement *note 5.7(2): 3259.
82722 used *note 5.1(4/2): 3117, *note P: 9279.
82723 Exit_Status
82724 in Ada.Command_Line *note A.15(7): 6575.
82725 Exp
82726 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
82727 G.1.2(3): 8209.
82728 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(4): 6061.
82729 expanded name *note 4.1.3(4): 2418.
82730 Expanded_Name
82731 in Ada.Tags *note 3.9(7/2): 2096.
82732 expected profile *note 8.6(26): 3844.
82733 accept_statement entry_direct_name *note 9.5.2(11): 4042.
82734 Access attribute_reference prefix *note 3.10.2(2.3/2): 2280.
82735 attribute_definition_clause name *note 13.3(4): 4918.
82736 character_literal *note 4.2(3): 2473.
82737 formal subprogram actual *note 12.6(6): 4816.
82738 formal subprogram default_name *note 12.6(5): 4815.
82739 name in an aspect_specification *note 13.1.1(8/3): 4898.
82740 subprogram_renaming_declaration *note 8.5.4(3): 3807.
82741 expected type *note 8.6(20/2): 3839.
82742 abort_statement task_name *note 9.8(3): 4255.
82743 access attribute_reference *note 3.10.2(2/2): 2279.
82744 Access attribute_reference prefix *note 3.10.2(2.3/2): 2281.
82745 actual parameter *note 6.4.1(3): 3467.
82746 aggregate *note 4.3(3/2): 2492.
82747 allocator *note 4.8(3/3): 3043.
82748 array_aggregate *note 4.3.3(7/2): 2558.
82749 array_aggregate component expression *note 4.3.3(7/2): 2559.
82750 array_aggregate discrete_choice *note 4.3.3(8): 2560.
82751 assignment_statement expression *note 5.2(4/2): 3151.
82752 assignment_statement variable_name *note 5.2(4/2): 3150.
82753 Attach_Handler pragma second argument *note J.15.7(6/3): 8516.
82754 attribute_definition_clause expression or name *note 13.3(4): 4917.
82755 attribute_designator expression *note 4.1.4(7): 2438.
82756 case_expression selecting_expression *note 4.5.7(15/3): 2891.
82757 case_expression_alternative discrete_choice *note 4.5.7(15/3):
82758 2892.
82759 case_statement selecting_expression *note 5.4(4/3): 3176.
82760 case_statement_alternative discrete_choice *note 5.4(4/3): 3178.
82761 character_literal *note 4.2(3): 2472.
82762 code_statement *note 13.8(4): 5116.
82763 component_clause expressions *note 13.5.1(7): 5039.
82764 component_declaration default_expression *note 3.8(7): 2034.
82765 condition *note 4.5.7(14/3): 2890.
82766 CPU pragma argument *note J.15.9(3/3): 8551.
82767 decimal fixed point type digits *note 3.5.9(6): 1836.
82768 delay_relative_statement expression *note 9.6(5): 4115.
82769 delay_until_statement expression *note 9.6(5): 4116.
82770 delta_constraint expression *note J.3(3): 8419.
82771 dependent_expression *note 4.5.7(8/3): 2889.
82772 dereference name *note 4.1(8): 2376.
82773 discrete_subtype_definition range *note 3.6(8): 1899.
82774 discriminant default_expression *note 3.7(7): 1977.
82775 discriminant_association expression *note 3.7.1(6): 2005.
82776 Dispatching_Domains pragma argument *note J.15.10(3/3): 8554.
82777 entry_index *note 9.5.2(11): 4043.
82778 enumeration_representation_clause expressions *note 13.4(4): 5008.
82779 expression in an aspect_specification *note 13.1.1(7/3): 4897.
82780 expression of a Default_Component_Value aspect *note 3.6(22.4/3):
82781 1924.
82782 expression of a Default_Value aspect *note 3.5(56.5/3): 1678.
82783 expression of a predicate aspect *note 3.2.4(2/3): 1439.
82784 expression of expression function *note 6.8(3/3): 3544.
82785 expression of extended_return_statement *note 6.5(3/2): 3499.
82786 expression of simple_return_statement *note 6.5(3/2): 3498.
82787 extension_aggregate *note 4.3.2(4/2): 2527.
82788 extension_aggregate ancestor expression *note 4.3.2(4/2): 2528.
82789 external name *note J.15.5(6/3): 8502.
82790 first_bit *note 13.5.1(7): 5041.
82791 fixed point type delta *note 3.5.9(6): 1835.
82792 generic formal in object actual *note 12.4(4): 4726.
82793 generic formal object default_expression *note 12.4(3): 4725.
82794 index_constraint discrete_range *note 3.6.1(4): 1932.
82795 indexable_container_object_prefix *note 4.1.6(11/3): 2465.
82796 indexed_component expression *note 4.1.1(4): 2391.
82797 Interrupt_Priority pragma argument *note J.15.11(5/3): 8560.
82798 invariant expression *note 7.3.2(4/3): 3616.
82799 iterable_name *note 5.5.2(3/3): 3237.
82800 iterator_name *note 5.5.2(3/3): 3236.
82801 last_bit *note 13.5.1(7): 5042.
82802 link name *note J.15.5(6/3): 8501.
82803 linker options *note B.1(10.1/3): 7345.
82804 membership test simple_expression *note 4.5.2(3/3): 2786.
82805 modular_type_definition expression *note 3.5.4(5): 1723.
82806 name in an aspect_specification *note 13.1.1(7/3): 4896.
82807 number_declaration expression *note 3.3.2(3): 1525.
82808 object in an aspect_specification *note 13.1.1(6/3): 4895.
82809 object_declaration initialization expression *note 3.3.1(4): 1496.
82810 parameter default_expression *note 6.1(17): 3323.
82811 position *note 13.5.1(7): 5040.
82812 postcondition expression *note 6.1.1(6/3): 3355.
82813 precondition expression *note 6.1.1(6/3): 3354.
82814 Priority pragma argument *note J.15.11(5/3): 8559.
82815 quantified_expression *note 4.5.8(5/3): 2909.
82816 range simple_expressions *note 3.5(5): 1599.
82817 range_attribute_designator expression *note 4.1.4(7): 2439.
82818 range_constraint range *note 3.5(5): 1598.
82819 real_range_specification bounds *note 3.5.7(5): 1796.
82820 record_aggregate *note 4.3.1(8/2): 2513.
82821 record_component_association expression *note 4.3.1(10): 2515.
82822 reference_object_name *note 4.1.5(5/3): 2450.
82823 Relative_Deadline pragma argument *note J.15.12(3/3): 8563.
82824 requested decimal precision *note 3.5.7(4): 1795.
82825 restriction parameter expression *note 13.12(5): 5259.
82826 selecting_expression case_expression *note 4.5.7(15/3): 2893.
82827 selecting_expression case_statement *note 5.4(4/3): 3177.
82828 short-circuit control form relation *note 4.5.1(1): 2735.
82829 signed_integer_type_definition simple_expression *note 3.5.4(5):
82830 1722.
82831 slice discrete_range *note 4.1.2(4): 2403.
82832 Storage_Size pragma argument *note J.15.4(4/3): 8471.
82833 string_literal *note 4.2(4): 2474.
82834 subpool_handle_name *note 4.8(3/3): 3044.
82835 type_conversion operand *note 4.6(6): 2932.
82836 variant_part discrete_choice *note 3.8.1(6): 2066.
82837 expiration time
82838 [partial] *note 9.6(1): 4106.
82839 for a delay_relative_statement *note 9.6(20): 4136.
82840 for a delay_until_statement *note 9.6(20): 4135.
82841 expires
82842 execution timer *note D.14.1(15/3): 7953.
82843 explicit declaration *note 3.1(5): 1309, *note N(11): 8818.
82844 explicit initial value *note 3.3.1(1/3): 1473.
82845 explicit_actual_parameter *note 6.4(6): 3451.
82846 used *note 6.4(5): 3450, *note P: 9380.
82847 explicit_dereference *note 4.1(5): 2371.
82848 used *note 4.1(2/3): 2354, *note P: 9118.
82849 explicit_generic_actual_parameter *note 12.3(5): 4687.
82850 used *note 12.3(4): 4686, *note P: 9650.
82851 explicitly aliased parameter *note 6.1(23.1/3): 3331.
82852 explicitly assign *note 10.2(2): 4421.
82853 explicitly limited record *note 3.8(13.1/3): 2037.
82854 exponent *note 2.4.1(4): 1219, *note 4.5.6(11/3): 2866.
82855 used *note 2.4.1(2): 1214, *note 2.4.2(2): 1237, *note P: 8900.
82856 Exponent attribute *note A.5.3(18): 6152.
82857 exponentiation operator *note 4.4(1/3): 2642, *note 4.5.6(7): 2862.
82858 Export aspect *note B.1(1/3): 7330.
82859 Export pragma *note J.15.5(3/3): 8492, *note L(13.1/3): 8675.
82860 exported entity *note B.1(23/3): 7353.
82861 expression *note 4.4(1/3): 2576, *note 4.4(2): 2649.
82862 predicate-static *note 3.2.4(15/3): 1445.
82863 used *note 2.8(3/3): 1271, *note 3.3.1(2/3): 1485, *note 3.3.2(2):
82864 1524, *note 3.5.4(4): 1721, *note 3.5.7(2): 1789, *note 3.5.9(3): 1826,
82865 *note 3.5.9(4): 1829, *note 3.5.9(5): 1833, *note 3.7(6): 1976, *note
82866 3.7.1(3): 2000, *note 4.1.1(2): 2389, *note 4.1.4(3/2): 2432, *note
82867 4.1.4(5): 2437, *note 4.3.1(4/2): 2506, *note 4.3.2(3): 2525, *note
82868 4.3.3(3/2): 2543, *note 4.3.3(5/2): 2553, *note 4.4(7/3): 2708, *note
82869 4.5.7(3/3): 2879, *note 4.5.7(4/3): 2881, *note 4.5.7(5/3): 2883, *note
82870 4.5.7(6/3): 2888, *note 4.5.8(3/3): 2908, *note 4.6(2): 2920, *note
82871 4.7(2): 3020, *note 5.2(2): 3145, *note 5.4(2/3): 3170, *note 6.4(6):
82872 3452, *note 6.5(2.1/3): 3490, *note 6.5(2/2): 3486, *note 6.8(2/3):
82873 3542, *note 9.5.2(4): 4026, *note 9.6(3): 4112, *note 9.6(4): 4114,
82874 *note 11.3(2/2): 4521, *note 11.4.2(3/2): 4563, *note 12.3(5): 4688,
82875 *note 13.1.1(4/3): 4892, *note 13.3(2): 4913, *note 13.5.1(4): 5034,
82876 *note 13.12(4.1/2): 5258, *note B.1(8): 7344, *note B.1(10.1/3): 7346,
82877 *note D.2.2(3.2/2): 7719, *note J.3(2): 8417, *note J.7(1): 8428, *note
82878 J.8(1): 8438, *note J.15.4(2/3): 8470, *note J.15.5(2/3): 8489, *note
82879 J.15.5(3/3): 8495, *note J.15.7(4/3): 8515, *note J.15.9(2/3): 8550,
82880 *note L(2.1/2): 8623, *note L(6.1/3): 8645, *note L(8.2/3): 8652, *note
82881 L(13.1/3): 8679, *note L(14.1/3): 8685, *note L(19): 8707, *note
82882 L(27.2/2): 8742, *note L(35.1/3): 8773, *note P: 8978.
82883 expression_function_declaration *note 6.8(2/3): 3539.
82884 used *note 3.1(3/3): 1300, *note P: 8937.
82885 extended_digit *note 2.4.2(5): 1244.
82886 used *note 2.4.2(4): 1243, *note P: 8913.
82887 Extended_Index subtype of Index_Type'Base
82888 in Ada.Containers.Vectors *note A.18.2(7/2): 6669.
82889 extended_return_object_declaration *note 6.5(2.1/3): 3487.
82890 used *note 6.5(2.2/3): 3492, *note P: 9387.
82891 extended_return_statement *note 6.5(2.2/3): 3491.
82892 used *note 5.1(5/2): 3132, *note P: 9293.
82893 extension
82894 of a private type *note 3.9(2.1/2): 2085, *note 3.9.1(1/2): 2133.
82895 of a record type *note 3.9(2.1/2): 2083, *note 3.9.1(1/2): 2131.
82896 of a type *note 3.9(2/2): 2082, *note 3.9.1(1/2): 2129.
82897 in Ada.Directories *note A.16(18/2): 6593.
82898 extension_aggregate *note 4.3.2(2): 2521.
82899 used *note 4.3(2): 2490, *note P: 9156.
82900 external call *note 9.5(4/3): 3992.
82901 external effect
82902 of the execution of an Ada program *note 1.1.3(8): 1051.
82903 volatile/atomic objects *note C.6(20): 7636.
82904 external file *note A.7(1): 6227.
82905 external interaction *note 1.1.3(8): 1053.
82906 external name *note B.1(34): 7354.
82907 external requeue *note 9.5(7): 3995.
82908 external streaming
82909 type supports *note 13.13.2(52/3): 5344.
82910 External_Name aspect *note B.1(1/3): 7334.
82911 External_Tag
82912 in Ada.Tags *note 3.9(7/2): 2099.
82913 External_Tag aspect *note 13.3(75/3): 5002, *note K.2(65): 8585.
82914 External_Tag attribute *note 13.3(75/3): 4998.
82915 External_Tag clause *note 13.3(7/2): 4928, *note 13.3(75/3): 4999,
82916 *note K.2(65): 8582.
82917 extra permission to avoid raising exceptions *note 11.6(5): 4627.
82918 extra permission to reorder actions *note 11.6(6/3): 4629.
82919
82920
82921 \1f
82922 File: arm2012.info, Node: F, Next: G, Prev: E, Up: Index
82923
82924 F
82925 ==
82926
82927
82928
82929 factor *note 4.4(6): 2697.
82930 used *note 4.4(5): 2694, *note P: 9224.
82931 factory *note 3.9(30/2): 2126.
82932 failure
82933 of a language-defined check *note 11.5(2/3): 4588.
82934 in Ada.Command_Line *note A.15(8): 6577.
82935 fall-back handler *note C.7.3(9/2): 7678.
82936 False *note 3.5.3(1): 1707.
82937 family
82938 entry *note 9.5.2(20): 4051.
82939 Feminine_Ordinal_Indicator
82940 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5588.
82941 FF
82942 in Ada.Characters.Latin_1 *note A.3.3(5): 5459.
82943 Field subtype of Integer
82944 in Ada.Text_IO *note A.10.1(6): 6325.
82945 FIFO_Queuing queuing policy *note D.4(7/2): 7790.
82946 FIFO_Within_Priorities task dispatching policy *note D.2.3(2/2): 7728.
82947 file
82948 as file object *note A.7(2/3): 6230.
82949 file name *note A.16(46/2): 6624.
82950 file terminator *note A.10(7): 6311.
82951 File_Access
82952 in Ada.Text_IO *note A.10.1(18): 6347.
82953 File_Kind
82954 in Ada.Directories *note A.16(22/2): 6598.
82955 File_Mode
82956 in Ada.Direct_IO *note A.8.4(4): 6271.
82957 in Ada.Sequential_IO *note A.8.1(4): 6247.
82958 in Ada.Streams.Stream_IO *note A.12.1(6): 6516.
82959 in Ada.Text_IO *note A.10.1(4): 6321.
82960 File_Size
82961 in Ada.Directories *note A.16(23/2): 6599.
82962 File_Type
82963 in Ada.Direct_IO *note A.8.4(3): 6270.
82964 in Ada.Sequential_IO *note A.8.1(3): 6246.
82965 in Ada.Streams.Stream_IO *note A.12.1(5): 6515.
82966 in Ada.Text_IO *note A.10.1(3): 6320.
82967 Filter_Type
82968 in Ada.Directories *note A.16(30/2): 6605.
82969 finalization
82970 of a master *note 7.6.1(4): 3677.
82971 of a protected object *note 9.4(20): 3985.
82972 of a protected object *note C.3.1(12/3): 7589.
82973 of a task object *note J.7.1(8): 8435.
82974 of an object *note 7.6.1(5): 3678.
82975 of environment task for a foreign language main subprogram *note
82976 B.1(39/3): 7362.
82977 child of Ada *note 7.6(4/3): 3642.
82978 Finalize *note 7.6(2): 3640.
82979 in Ada.Finalization *note 7.6(6/2): 3646, *note 7.6(8/2): 3649.
82980 Find
82981 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(41/2): 6808.
82982 in Ada.Containers.Hashed_Maps *note A.18.5(30/2): 6888.
82983 in Ada.Containers.Hashed_Sets *note A.18.8(43/2): 7025, *note
82984 A.18.8(56/2): 7037.
82985 in Ada.Containers.Multiway_Trees *note A.18.10(38/3): 7174.
82986 in Ada.Containers.Ordered_Maps *note A.18.6(38/2): 6948.
82987 in Ada.Containers.Ordered_Sets *note A.18.9(49/2): 7103, *note
82988 A.18.9(69/2): 7116.
82989 in Ada.Containers.Vectors *note A.18.2(68/2): 6735.
82990 Find_In_Subtree
82991 in Ada.Containers.Multiway_Trees *note A.18.10(39/3): 7175.
82992 Find_Index
82993 in Ada.Containers.Vectors *note A.18.2(67/2): 6734.
82994 Find_Token
82995 in Ada.Strings.Bounded *note A.4.4(50.1/3): 5824, *note A.4.4(51):
82996 5825.
82997 in Ada.Strings.Fixed *note A.4.3(15.1/3): 5767, *note A.4.3(16):
82998 5768.
82999 in Ada.Strings.Unbounded *note A.4.5(45.1/3): 5878, *note
83000 A.4.5(46): 5879.
83001 Fine_Delta
83002 in System *note 13.7(9): 5080.
83003 First
83004 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(33/2): 6800.
83005 in Ada.Containers.Hashed_Maps *note A.18.5(27/2): 6885.
83006 in Ada.Containers.Hashed_Sets *note A.18.8(40/2): 7022.
83007 in Ada.Containers.Ordered_Maps *note A.18.6(28/2): 6938.
83008 in Ada.Containers.Ordered_Sets *note A.18.9(41/2): 7095.
83009 in Ada.Containers.Vectors *note A.18.2(58/2): 6725.
83010 in Ada.Iterator_Interfaces *note 5.5.1(3/3): 3204.
83011 First attribute *note 3.5(12): 1611, *note 3.6.2(3): 1940.
83012 first element
83013 of a hashed set *note A.18.8(68/2): 7050.
83014 of a set *note A.18.7(6/2): 6967.
83015 of an ordered set *note A.18.9(81/3): 7129.
83016 first node
83017 of a hashed map *note A.18.5(46/2): 6900.
83018 of a map *note A.18.4(6/2): 6838.
83019 of an ordered map *note A.18.6(58/3): 6958.
83020 first subtype *note 3.2.1(6): 1388, *note 3.4.1(5): 1566.
83021 First(N) attribute *note 3.6.2(4): 1942.
83022 first_bit *note 13.5.1(5): 5035.
83023 used *note 13.5.1(3): 5031, *note P: 9741.
83024 First_Bit attribute *note 13.5.2(3/2): 5048.
83025 First_Child
83026 in Ada.Containers.Multiway_Trees *note A.18.10(60/3): 7196.
83027 First_Child_Element
83028 in Ada.Containers.Multiway_Trees *note A.18.10(61/3): 7197.
83029 First_Element
83030 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(34/2): 6801.
83031 in Ada.Containers.Ordered_Maps *note A.18.6(29/2): 6939.
83032 in Ada.Containers.Ordered_Sets *note A.18.9(42/2): 7096.
83033 in Ada.Containers.Vectors *note A.18.2(59/2): 6726.
83034 First_Index
83035 in Ada.Containers.Vectors *note A.18.2(57/2): 6724.
83036 First_Key
83037 in Ada.Containers.Ordered_Maps *note A.18.6(30/2): 6940.
83038 First_Valid attribute *note 3.5.5(7.2/3): 1772.
83039 Fixed
83040 child of Ada.Strings *note A.4.3(5): 5754.
83041 fixed point type *note 3.5.9(1): 1818.
83042 Fixed_IO
83043 in Ada.Text_IO *note A.10.1(68): 6436.
83044 fixed_point_definition *note 3.5.9(2): 1822.
83045 used *note 3.5.6(2): 1780, *note P: 9012.
83046 Float *note 3.5.7(12): 1808, *note 3.5.7(14): 1810.
83047 in Standard *note A.1(21): 5388.
83048 Float_IO
83049 in Ada.Text_IO *note A.10.1(63): 6426.
83050 Float_Random
83051 child of Ada.Numerics *note A.5.2(5): 6094.
83052 Float_Text_IO
83053 child of Ada *note A.10.9(33): 6481.
83054 Float_Wide_Text_IO
83055 child of Ada *note A.11(2/2): 6502.
83056 Float_Wide_Wide_Text_IO
83057 child of Ada *note A.11(3/2): 6505.
83058 Floating
83059 in Interfaces.COBOL *note B.4(9): 7480.
83060 floating point type *note 3.5.7(1): 1787.
83061 floating_point_definition *note 3.5.7(2): 1788.
83062 used *note 3.5.6(2): 1779, *note P: 9011.
83063 Floor
83064 in Ada.Containers.Ordered_Maps *note A.18.6(40/2): 6950.
83065 in Ada.Containers.Ordered_Sets *note A.18.9(50/2): 7104, *note
83066 A.18.9(70/2): 7117.
83067 Floor attribute *note A.5.3(30): 6166.
83068 Flush
83069 in Ada.Streams.Stream_IO *note A.12.1(25/1): 6539.
83070 in Ada.Text_IO *note A.10.1(21/1): 6355.
83071 Fore attribute *note 3.5.10(4): 1866.
83072 form
83073 of an external file *note A.7(1): 6229.
83074 in Ada.Direct_IO *note A.8.4(9): 6282.
83075 in Ada.Sequential_IO *note A.8.1(9): 6256.
83076 in Ada.Streams.Stream_IO *note A.12.1(11): 6527.
83077 in Ada.Text_IO *note A.10.1(12): 6336.
83078 formal object, generic *note 12.4(1): 4712.
83079 formal package, generic *note 12.7(1): 4823.
83080 formal parameter
83081 of a subprogram *note 6.1(17): 3322.
83082 formal subprogram, generic *note 12.6(1): 4799.
83083 formal subtype *note 12.5(5): 4769.
83084 formal type *note 12.5(5): 4767.
83085 formal_abstract_subprogram_declaration *note 12.6(2.2/3): 4807.
83086 used *note 12.6(2/2): 4802, *note P: 9693.
83087 formal_access_type_definition *note 12.5.4(2): 4792.
83088 used *note 12.5(3/2): 4760, *note P: 9685.
83089 formal_array_type_definition *note 12.5.3(2): 4788.
83090 used *note 12.5(3/2): 4759, *note P: 9684.
83091 formal_complete_type_declaration *note 12.5(2.1/3): 4742.
83092 used *note 12.5(2/3): 4740, *note P: 9668.
83093 formal_concrete_subprogram_declaration *note 12.6(2.1/3): 4803.
83094 used *note 12.6(2/2): 4801, *note P: 9692.
83095 formal_decimal_fixed_point_definition *note 12.5.2(7): 4787.
83096 used *note 12.5(3/2): 4758, *note P: 9683.
83097 formal_derived_type_definition *note 12.5.1(3/2): 4773.
83098 used *note 12.5(3/2): 4752, *note P: 9677.
83099 formal_discrete_type_definition *note 12.5.2(2): 4782.
83100 used *note 12.5(3/2): 4753, *note P: 9678.
83101 formal_floating_point_definition *note 12.5.2(5): 4785.
83102 used *note 12.5(3/2): 4756, *note P: 9681.
83103 formal_incomplete_type_declaration *note 12.5(2.2/3): 4747.
83104 used *note 12.5(2/3): 4741, *note P: 9669.
83105 formal_interface_type_definition *note 12.5.5(2/2): 4796.
83106 used *note 12.5(3/2): 4761, *note P: 9686.
83107 formal_modular_type_definition *note 12.5.2(4): 4784.
83108 used *note 12.5(3/2): 4755, *note P: 9680.
83109 formal_object_declaration *note 12.4(2/3): 4713.
83110 used *note 12.1(6): 4653, *note P: 9629.
83111 formal_ordinary_fixed_point_definition *note 12.5.2(6): 4786.
83112 used *note 12.5(3/2): 4757, *note P: 9682.
83113 formal_package_actual_part *note 12.7(3/2): 4829.
83114 used *note 12.7(2/3): 4827, *note P: 9704.
83115 formal_package_association *note 12.7(3.1/2): 4833.
83116 used *note 12.7(3/2): 4831, *note P: 9708.
83117 formal_package_declaration *note 12.7(2/3): 4824.
83118 used *note 12.1(6): 4656, *note P: 9632.
83119 formal_part *note 6.1(14): 3309.
83120 used *note 6.1(12): 3302, *note 6.1(13/2): 3304, *note P: 9349.
83121 formal_private_type_definition *note 12.5.1(2): 4772.
83122 used *note 12.5(3/2): 4751, *note P: 9676.
83123 formal_signed_integer_type_definition *note 12.5.2(3): 4783.
83124 used *note 12.5(3/2): 4754, *note P: 9679.
83125 formal_subprogram_declaration *note 12.6(2/2): 4800.
83126 used *note 12.1(6): 4655, *note P: 9631.
83127 formal_type_declaration *note 12.5(2/3): 4739.
83128 used *note 12.1(6): 4654, *note P: 9630.
83129 formal_type_definition *note 12.5(3/2): 4750.
83130 used *note 12.5(2.1/3): 4745, *note P: 9672.
83131 format_effector *note 2.1(13/3): 1145.
83132 Formatting
83133 child of Ada.Calendar *note 9.6.1(15/2): 4152.
83134 Fortran
83135 child of Interfaces *note B.5(4): 7533.
83136 Fortran interface *note B.5(1/3): 7532.
83137 Fortran standard *note 1.2(3/2): 1096.
83138 Fortran_Character
83139 in Interfaces.Fortran *note B.5(12/3): 7544.
83140 Fortran_Integer
83141 in Interfaces.Fortran *note B.5(5): 7534.
83142 forward iterator *note 5.5.2(4/3): 3244.
83143 Forward_Iterator
83144 in Ada.Iterator_Interfaces *note 5.5.1(3/3): 3203.
83145 Fraction attribute *note A.5.3(21): 6154.
83146 Fraction_One_Half
83147 in Ada.Characters.Latin_1 *note A.3.3(22): 5609.
83148 Fraction_One_Quarter
83149 in Ada.Characters.Latin_1 *note A.3.3(22): 5608.
83150 Fraction_Three_Quarters
83151 in Ada.Characters.Latin_1 *note A.3.3(22): 5610.
83152 Free
83153 in Ada.Strings.Unbounded *note A.4.5(7): 5854.
83154 in Interfaces.C.Strings *note B.3.1(11): 7438.
83155 freed
83156 See nonexistent *note 13.11.2(10/2): 5195.
83157 freeing storage *note 13.11.2(1): 5192.
83158 freezing
83159 by a constituent of a construct *note 13.14(4/1): 5352.
83160 by an expression *note 13.14(8/3): 5356.
83161 by an implicit call *note 13.14(8.1/3): 5358.
83162 by an object name *note 13.14(8/3): 5357.
83163 class-wide type caused by the freezing of the specific type *note
83164 13.14(15): 5375.
83165 constituents of a full type definition *note 13.14(15): 5373.
83166 designated subtype caused by an allocator *note 13.14(13): 5370.
83167 entity *note 13.14(2): 5346.
83168 entity caused by a body *note 13.14(3/3): 5350.
83169 entity caused by a construct *note 13.14(4/1): 5351.
83170 entity caused by a name *note 13.14(11): 5366.
83171 entity caused by the end of an enclosing construct *note
83172 13.14(3/3): 5349.
83173 expression of an expression function by a call *note 13.14(10.1/3):
83174 5362.
83175 expression of an expression function by Access attribute *note
83176 13.14(10.3/3): 5365.
83177 expression of an expression function by an instantiation *note
83178 13.14(10.2/3): 5364.
83179 first subtype caused by the freezing of the type *note 13.14(15):
83180 5374.
83181 generic_instantiation *note 13.14(5/3): 5353.
83182 nominal subtype caused by a name *note 13.14(11): 5367.
83183 object_declaration *note 13.14(6): 5354.
83184 profile *note 13.14(2.1/3): 5348.
83185 profile of a callable entity by an instantiation *note
83186 13.14(10.2/3): 5363.
83187 profile of a function call *note 13.14(10.1/3): 5361.
83188 specific type caused by the freezing of the class-wide type *note
83189 13.14(15): 5376.
83190 subtype caused by a record extension *note 13.14(7): 5355.
83191 subtype caused by an implicit conversion *note 13.14(8.2/1): 5359.
83192 subtype caused by an implicit dereference *note 13.14(11.1/1):
83193 5368.
83194 subtypes of the profile of a callable entity *note 13.14(14/3):
83195 5371.
83196 type caused by a range *note 13.14(12): 5369.
83197 type caused by an expression *note 13.14(10): 5360.
83198 type caused by the freezing of a subtype *note 13.14(15): 5372.
83199 freezing points
83200 entity *note 13.14(2): 5347.
83201 Friday
83202 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4158.
83203 FS
83204 in Ada.Characters.Latin_1 *note A.3.3(6): 5475.
83205 full conformance
83206 for discrete_subtype_definitions *note 6.3.1(24): 3432.
83207 for expressions *note 6.3.1(19): 3429.
83208 for known_discriminant_parts *note 6.3.1(23): 3430.
83209 for profiles *note 6.3.1(18/3): 3427.
83210 required *note 3.10.1(4/3): 2276, *note 6.3(4): 3400, *note
83211 6.7(2.1/3): 3535, *note 6.8(4/3): 3545, *note 7.3(9): 3597, *note
83212 8.3(12.3/2): 3732, *note 8.5.4(5/3): 3810, *note 9.5.2(14): 4045, *note
83213 9.5.2(16): 4049, *note 9.5.2(17): 4050, *note 10.1.3(11): 4386, *note
83214 10.1.3(12): 4387.
83215 full constant declaration *note 3.3.1(6/3): 1499.
83216 corresponding to a formal object of mode in *note 12.4(10/2): 4733.
83217 full declaration *note 7.4(2/3): 3624.
83218 full name
83219 of a file *note A.16(47/2): 6625.
83220 full stop *note 2.1(15/3): 1164.
83221 full type *note 3.2.1(8/2): 1392.
83222 full type definition *note 3.2.1(8/2): 1393.
83223 full view
83224 of a type *note 3.2.1(8/2): 1394.
83225 Full_Name
83226 in Ada.Directories *note A.16(15/2): 6590, *note A.16(39/2): 6612.
83227 Full_Stop
83228 in Ada.Characters.Latin_1 *note A.3.3(8): 5494.
83229 full_type_declaration *note 3.2.1(3/3): 1372.
83230 used *note 3.2.1(2): 1368, *note P: 8944.
83231 function *note 6(1): 3270, *note N(19.1/2): 8834.
83232 expression *note 6.8(6/3): 3547.
83233 with a controlling access result *note 3.9.2(2/3): 2159.
83234 with a controlling result *note 3.9.2(2/3): 2157.
83235 function call
83236 master of *note 3.10.2(10.1/3): 2292.
83237 function instance *note 12.3(13): 4702.
83238 function_call *note 6.4(3): 3441.
83239 used *note 4.1(2/3): 2360, *note P: 9124.
83240 function_specification *note 6.1(4.2/2): 3284.
83241 used *note 6.1(4/2): 3280, *note 6.8(2/3): 3541, *note P: 9335.
83242
83243
83244 \1f
83245 File: arm2012.info, Node: G, Next: H, Prev: F, Up: Index
83246
83247 G
83248 ==
83249
83250
83251
83252 general access type *note 3.10(7/1): 2243, *note 3.10(8): 2247.
83253 general_access_modifier *note 3.10(4): 2228.
83254 used *note 3.10(3): 2226, *note P: 9093.
83255 generalized iterator *note 5.5.2(3/3): 3234.
83256 generalized_indexing *note 4.1.6(10/3): 2462.
83257 used *note 4.1(2/3): 2364, *note P: 9128.
83258 generalized_reference *note 4.1.5(4/3): 2448.
83259 used *note 4.1(2/3): 2363, *note P: 9127.
83260 generation
83261 of an interrupt *note C.3(2): 7566.
83262 Generator
83263 in Ada.Numerics.Discrete_Random *note A.5.2(19): 6108.
83264 in Ada.Numerics.Float_Random *note A.5.2(7): 6095.
83265 generic actual *note 12.3(7/3): 4697.
83266 generic actual parameter *note 12.3(7/3): 4696.
83267 generic actual subtype *note 12.5(4): 4762.
83268 generic actual type *note 12.5(4): 4764.
83269 generic body *note 12.2(1): 4663.
83270 generic contract issue *note 10.2.1(10/2): 4446.
83271 [partial] *note 3.2.4(29/3): 1446, *note 3.4(5.1/3): 1539, *note
83272 3.7(10/3): 1980, *note 3.7.1(7/3): 2006, *note 3.9.1(3/2): 2136, *note
83273 3.9.4(17/2): 2214, *note 3.10.2(28.1/3): 2304, *note 3.10.2(32/3): 2312,
83274 *note 4.1.6(9/3): 2461, *note 4.5.2(9.8/3): 2788, *note 4.6(24.17/3):
83275 2949, *note 4.6(24.21/2): 2956, *note 4.8(5.6/3): 3048, *note 4.9(37/2):
83276 3098, *note 6.5.1(6/2): 3525, *note 7.3(8): 3596, *note 8.3(26/2): 3750,
83277 *note 8.3.1(7/2): 3753, *note 8.5.1(4.6/2): 3790, *note 8.5.1(5/3):
83278 3791, *note 8.5.4(4.3/2): 3809, *note 9.1(9.9/2): 3906, *note
83279 9.4(11.13/2): 3978, *note 9.4(11.8/2): 3977, *note 9.5(17/3): 3999,
83280 *note 9.5.2(13.4/2): 4044, *note 10.2.1(11.7/3): 4453, *note
83281 10.2.1(11/3): 4450, *note 10.2.1(17/3): 4463, *note 12.4(8.5/2): 4730,
83282 *note 12.6(8.3/2): 4819, *note 13.11.2(3.1/3): 5194, *note
83283 13.11.4(23/3): 5237, *note B.3.3(10/3): 7474, *note C.3.1(7/3): 7579,
83284 *note J.15.7(7/3): 8517.
83285 generic formal *note 12.1(9): 4661.
83286 generic formal object *note 12.4(1): 4711.
83287 generic formal package *note 12.7(1): 4822.
83288 generic formal subprogram *note 12.6(1): 4798.
83289 generic formal subtype *note 12.5(5): 4768.
83290 generic formal type *note 12.5(5): 4766.
83291 generic function *note 12.1(8/2): 4660.
83292 generic package *note 12.1(8/2): 4657.
83293 generic procedure *note 12.1(8/2): 4659.
83294 generic subprogram *note 12.1(8/2): 4658.
83295 generic unit *note 12(1): 4634, *note N(20): 8835.
83296 See also dispatching operation *note 3.9(1): 2075.
83297 generic_actual_part *note 12.3(3): 4681.
83298 used *note 12.3(2/3): 4679, *note 12.7(3/2): 4830, *note P: 9645.
83299 Generic_Array_Sort
83300 child of Ada.Containers *note A.18.26(3/2): 7273.
83301 generic_association *note 12.3(4): 4684.
83302 used *note 12.3(3): 4682, *note 12.7(3.1/2): 4834, *note P: 9709.
83303 Generic_Bounded_Length
83304 in Ada.Strings.Bounded *note A.4.4(4): 5791.
83305 Generic_Complex_Arrays
83306 child of Ada.Numerics *note G.3.2(2/2): 8307.
83307 Generic_Complex_Elementary_Functions
83308 child of Ada.Numerics *note G.1.2(2/2): 8206.
83309 Generic_Complex_Types
83310 child of Ada.Numerics *note G.1.1(2/1): 8179.
83311 Generic_Constrained_Array_Sort
83312 child of Ada.Containers *note A.18.26(7/2): 7275.
83313 generic_declaration *note 12.1(2): 4639.
83314 used *note 3.1(3/3): 1304, *note 10.1.1(5): 4311, *note P: 8941.
83315 Generic_Dispatching_Constructor
83316 child of Ada.Tags *note 3.9(18.2/3): 2118.
83317 Generic_Elementary_Functions
83318 child of Ada.Numerics *note A.5.1(3): 6057.
83319 generic_formal_parameter_declaration *note 12.1(6): 4652.
83320 used *note 12.1(5): 4650, *note P: 9627.
83321 generic_formal_part *note 12.1(5): 4649.
83322 used *note 12.1(3/3): 4643, *note 12.1(4): 4647, *note P: 9625.
83323 generic_instantiation *note 12.3(2/3): 4666.
83324 used *note 3.1(3/3): 1305, *note 10.1.1(5): 4312, *note P: 9576.
83325 Generic_Keys
83326 in Ada.Containers.Hashed_Sets *note A.18.8(50/2): 7031.
83327 in Ada.Containers.Ordered_Sets *note A.18.9(62/2): 7109.
83328 generic_package_declaration *note 12.1(4): 4646.
83329 used *note 12.1(2): 4641, *note P: 9621.
83330 Generic_Real_Arrays
83331 child of Ada.Numerics *note G.3.1(2/2): 8291.
83332 generic_renaming_declaration *note 8.5.5(2/3): 3815.
83333 used *note 8.5(2): 3774, *note 10.1.1(6): 4315, *note P: 9578.
83334 Generic_Sort
83335 child of Ada.Containers *note A.18.26(9.2/3): 7277.
83336 Generic_Sorting
83337 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(47/2): 6813.
83338 in Ada.Containers.Vectors *note A.18.2(75/2): 6741.
83339 generic_subprogram_declaration *note 12.1(3/3): 4642.
83340 used *note 12.1(2): 4640, *note P: 9620.
83341 Get
83342 in Ada.Text_IO *note A.10.1(41): 6388, *note A.10.1(47): 6398,
83343 *note A.10.1(54): 6411, *note A.10.1(55): 6415, *note A.10.1(59): 6420,
83344 *note A.10.1(60): 6424, *note A.10.1(65): 6431, *note A.10.1(67): 6434,
83345 *note A.10.1(70): 6441, *note A.10.1(72): 6444, *note A.10.1(75): 6450,
83346 *note A.10.1(77): 6454, *note A.10.1(81): 6459, *note A.10.1(83): 6463.
83347 in Ada.Text_IO.Complex_IO *note G.1.3(6): 8240, *note G.1.3(8):
83348 8243.
83349 Get_CPU
83350 in Ada.Interrupts *note C.3.2(10.1/3): 7603.
83351 in System.Multiprocessors.Dispatching_Domains *note D.16.1(13/3):
83352 8012.
83353 Get_Deadline
83354 in Ada.Dispatching.EDF *note D.2.6(9/2): 7755.
83355 Get_Dispatching_Domain
83356 in System.Multiprocessors.Dispatching_Domains *note D.16.1(10/3):
83357 8009.
83358 Get_First_CPU
83359 in System.Multiprocessors.Dispatching_Domains *note D.16.1(8/3):
83360 8007.
83361 Get_Immediate
83362 in Ada.Text_IO *note A.10.1(44): 6394, *note A.10.1(45): 6396.
83363 Get_Last_CPU
83364 in System.Multiprocessors.Dispatching_Domains *note D.16.1(9/3):
83365 8008.
83366 Get_Line
83367 in Ada.Text_IO *note A.10.1(49): 6402, *note A.10.1(49.1/2): 6404.
83368 in Ada.Text_IO.Bounded_IO *note A.10.11(8/2): 6487, *note
83369 A.10.11(9/2): 6488, *note A.10.11(10/2): 6489, *note A.10.11(11/2):
83370 6490.
83371 in Ada.Text_IO.Unbounded_IO *note A.10.12(8/2): 6496, *note
83372 A.10.12(9/2): 6497, *note A.10.12(10/2): 6498, *note A.10.12(11/2):
83373 6499.
83374 Get_Next_Entry
83375 in Ada.Directories *note A.16(35/2): 6610.
83376 Get_Priority
83377 in Ada.Dynamic_Priorities *note D.5.1(5): 7796.
83378 global to *note 8.1(15): 3701.
83379 Glossary *note N(1/2): 8800.
83380 goto_statement *note 5.8(2): 3264.
83381 used *note 5.1(4/2): 3118, *note P: 9280.
83382 govern a variant *note 3.8.1(20): 2070.
83383 govern a variant_part *note 3.8.1(20): 2069.
83384 grammar
83385 complete listing *note P: 8879.
83386 cross reference *note P: 9759.
83387 notation *note 1.1.4(3): 1061.
83388 resolution of ambiguity *note 8.6(3): 3827.
83389 under Syntax heading *note 1.1.2(25): 1015.
83390 graphic character
83391 a category of Character *note A.3.2(23): 5436.
83392 graphic_character *note 2.1(14/3): 1150.
83393 used *note 2.5(2): 1248, *note 2.6(3): 1253, *note P: 8917.
83394 Graphic_Set
83395 in Ada.Strings.Maps.Constants *note A.4.6(4): 5903.
83396 Grave
83397 in Ada.Characters.Latin_1 *note A.3.3(13): 5508.
83398 greater than operator *note 4.4(1/3): 2603, *note 4.5.2(1): 2776.
83399 greater than or equal operator *note 4.4(1/3): 2607, *note 4.5.2(1):
83400 2780.
83401 greater-than sign *note 2.1(15/3): 1173.
83402 Greater_Than_Sign
83403 in Ada.Characters.Latin_1 *note A.3.3(10): 5500.
83404 Group_Budget
83405 in Ada.Execution_Time.Group_Budgets *note D.14.2(4/3): 7956.
83406 Group_Budget_Error
83407 in Ada.Execution_Time.Group_Budgets *note D.14.2(11/2): 7972.
83408 Group_Budget_Handler
83409 in Ada.Execution_Time.Group_Budgets *note D.14.2(5/2): 7957.
83410 Group_Budgets
83411 child of Ada.Execution_Time *note D.14.2(3/3): 7955.
83412 GS
83413 in Ada.Characters.Latin_1 *note A.3.3(6): 5476.
83414 guard *note 9.7.1(3): 4196.
83415 used *note 9.7.1(2): 4193, *note P: 9535.
83416
83417
83418 \1f
83419 File: arm2012.info, Node: H, Next: I, Prev: G, Up: Index
83420
83421 H
83422 ==
83423
83424
83425
83426 handle
83427 an exception *note 11(1/3): 4488, *note N(18): 8830.
83428 an exception occurrence *note 11.4(1): 4526, *note 11.4(7): 4533.
83429 subpool *note 13.11.4(18/3): 5232.
83430 handled_sequence_of_statements *note 11.2(2): 4503.
83431 used *note 5.6(2): 3256, *note 6.3(2/3): 3398, *note 6.5(2.2/3):
83432 3493, *note 7.2(2/3): 3573, *note 9.1(6/3): 3895, *note 9.5.2(3): 4023,
83433 *note 9.5.2(5): 4032, *note P: 9517.
83434 handler
83435 execution timer *note D.14.1(13/2): 7952.
83436 group budget *note D.14.2(14/2): 7976.
83437 interrupt *note C.3(2): 7573.
83438 termination *note C.7.3(8/3): 7677.
83439 timing event *note D.15(10/2): 7994.
83440 Handling
83441 child of Ada.Characters *note A.3.2(2/2): 5407.
83442 child of Ada.Wide_Characters *note A.3.5(3/3): 5695.
83443 child of Ada.Wide_Wide_Characters *note A.3.6(1/3): 5716.
83444 Has_Element
83445 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(9.1/3): 6771.
83446 in Ada.Containers.Hashed_Maps *note A.18.5(6.1/3): 6857.
83447 in Ada.Containers.Hashed_Sets *note A.18.8(6.1/3): 6989.
83448 in Ada.Containers.Multiway_Trees *note A.18.10(12/3): 7149.
83449 in Ada.Containers.Ordered_Maps *note A.18.6(7.1/3): 6910.
83450 in Ada.Containers.Ordered_Sets *note A.18.9(7.1/3): 7062.
83451 in Ada.Containers.Vectors *note A.18.2(11.1/3): 6675.
83452 Has_Same_Storage attribute *note 13.3(73.2/3): 4994.
83453 Hash
83454 child of Ada.Strings *note A.4.9(2/3): 5996.
83455 child of Ada.Strings.Bounded *note A.4.9(7/3): 5997.
83456 child of Ada.Strings.Unbounded *note A.4.9(10/3): 5998.
83457 Hash_Case_Insensitive
83458 child of Ada.Strings *note A.4.9(11.2/3): 5999.
83459 child of Ada.Strings.Bounded *note A.4.9(11.7/3): 6001.
83460 child of Ada.Strings.Fixed *note A.4.9(11.5/3): 6000.
83461 child of Ada.Strings.Unbounded *note A.4.9(11.10/3): 6002.
83462 Hash_Type
83463 in Ada.Containers *note A.18.1(4/2): 6660.
83464 Hashed_Maps
83465 child of Ada.Containers *note A.18.5(2/3): 6852.
83466 Hashed_Sets
83467 child of Ada.Containers *note A.18.8(2/3): 6984.
83468 Head
83469 in Ada.Strings.Bounded *note A.4.4(70): 5842, *note A.4.4(71):
83470 5843.
83471 in Ada.Strings.Fixed *note A.4.3(35): 5785, *note A.4.3(36): 5786.
83472 in Ada.Strings.Unbounded *note A.4.5(65): 5896, *note A.4.5(66):
83473 5897.
83474 head (of a queue) *note D.2.1(5/2): 7706.
83475 heap management
83476 user-defined *note 13.11(1): 5151.
83477 See also allocator *note 4.8(1): 3035.
83478 held priority *note D.11(4/2): 7918.
83479 heterogeneous input-output *note A.12.1(1): 6510.
83480 hexadecimal
83481 literal *note 2.4.2(1): 1232.
83482 hexadecimal digit
83483 a category of Character *note A.3.2(30): 5442.
83484 hexadecimal literal *note 2.4.2(1): 1230.
83485 Hexadecimal_Digit_Set
83486 in Ada.Strings.Maps.Constants *note A.4.6(4): 5909.
83487 hidden from all visibility *note 8.3(5): 3724, *note 8.3(14): 3734.
83488 by lack of a with_clause *note 8.3(20/2): 3738.
83489 for a declaration completed by a subsequent declaration *note
83490 8.3(19): 3737.
83491 for overridden declaration *note 8.3(15): 3735.
83492 within the declaration itself *note 8.3(16): 3736.
83493 hidden from direct visibility *note 8.3(5): 3725, *note 8.3(21): 3743.
83494 by an inner homograph *note 8.3(22): 3744.
83495 where hidden from all visibility *note 8.3(23): 3745.
83496 hiding *note 8.3(5): 3723.
83497 Hierarchical_File_Names
83498 child of Ada.Directories *note A.16.1(3/3): 6631.
83499 High_Order_First *note 13.5.3(2): 5054.
83500 in Interfaces.COBOL *note B.4(25): 7504.
83501 in System *note 13.7(15/2): 5089.
83502 highest precedence operator *note 4.5.6(1): 2851.
83503 highest_precedence_operator *note 4.5(7): 2722.
83504 Hold
83505 in Ada.Asynchronous_Task_Control *note D.11(3/2): 7914.
83506 Holder
83507 in Ada.Containers.Indefinite_Holders *note A.18.18(6/3): 7228.
83508 homograph *note 8.3(8): 3728.
83509 Hour
83510 in Ada.Calendar.Formatting *note 9.6.1(24/2): 4169.
83511 Hour_Number subtype of Natural
83512 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4162.
83513 HT
83514 in Ada.Characters.Latin_1 *note A.3.3(5): 5456.
83515 HTJ
83516 in Ada.Characters.Latin_1 *note A.3.3(17): 5554.
83517 HTS
83518 in Ada.Characters.Latin_1 *note A.3.3(17): 5553.
83519 Hyphen
83520 in Ada.Characters.Latin_1 *note A.3.3(8): 5492.
83521 hyphen-minus *note 2.1(15/3): 1162.
83522
83523
83524 \1f
83525 File: arm2012.info, Node: I, Next: J, Prev: H, Up: Index
83526
83527 I
83528 ==
83529
83530
83531
83532 i
83533 in Ada.Numerics.Generic_Complex_Types *note G.1.1(5): 8182.
83534 in Interfaces.Fortran *note B.5(10): 7541.
83535 identifier *note 2.3(2/2): 1187.
83536 used *note 2.8(2): 1260, *note 2.8(3/3): 1266, *note 2.8(21): 1283,
83537 *note 2.8(23): 1288, *note 3.1(4): 1307, *note 4.1(3): 2366, *note
83538 4.1.3(3): 2415, *note 4.1.4(3/2): 2431, *note 5.5(2): 3187, *note
83539 5.6(2): 3257, *note 6.1(5): 3289, *note 7.1(3/3): 3562, *note 7.2(2/3):
83540 3575, *note 9.1(4): 3887, *note 9.1(6/3): 3896, *note 9.4(4): 3949,
83541 *note 9.4(7/3): 3961, *note 9.5.2(3): 4024, *note 9.5.2(5): 4033, *note
83542 11.4.2(6.1/3): 4573, *note 11.4.2(6/2): 4567, *note 11.5(4.1/2): 4594,
83543 *note 11.5(4/2): 4591, *note 13.1.1(3/3): 4889, *note 13.1.1(4/3): 4893,
83544 *note 13.12(4/2): 5253, *note 13.12(11/3): 5264, *note D.2.2(3): 7715,
83545 *note D.2.2(3.2/2): 7718, *note D.3(3): 7762, *note D.3(4): 7764, *note
83546 D.4(3): 7783, *note D.4(4): 7784, *note H.6(3/2): 8411, *note J.10(3/2):
83547 8444, *note J.15.5(2/3): 8487, *note J.15.5(3/3): 8493, *note
83548 J.15.5(4/3): 8499, *note L(2.2/2): 8626, *note L(2.3/3): 8630, *note
83549 L(8.1/3): 8648, *note L(13.1/3): 8676, *note L(14.1/3): 8682, *note
83550 L(20): 8710, *note L(21): 8713, *note L(23): 8722, *note L(25.1/2):
83551 8730, *note L(27.2/2): 8741, *note L(27.3/3): 8746, *note L(29): 8753,
83552 *note L(36): 8776, *note L(37): 8779, *note L(37.3/2): 8785, *note
83553 M.2(98): 8797, *note P: 9726.
83554 identifier specific to a pragma *note 2.8(10/3): 1276.
83555 identifier_extend *note 2.3(3.1/3): 1198.
83556 used *note 2.3(2/2): 1190, *note P: 8885.
83557 identifier_start *note 2.3(3/2): 1191.
83558 used *note 2.3(2/2): 1189, *note P: 8883.
83559 Identity
83560 in Ada.Strings.Maps *note A.4.2(22): 5746.
83561 in Ada.Strings.Wide_Maps *note A.4.7(22): 5948.
83562 in Ada.Strings.Wide_Wide_Maps *note A.4.8(22/2): 5987.
83563 Identity attribute *note 11.4.1(9): 4556, *note C.7.1(12): 7648.
83564 idle task *note D.11(4/2): 7919.
83565 if_expression *note 4.5.7(3/3): 2874.
83566 used *note 4.5.7(2/3): 2872, *note P: 9237.
83567 if_statement *note 5.3(2): 3162.
83568 used *note 5.1(5/2): 3128, *note P: 9289.
83569 illegal
83570 construct *note 1.1.2(27): 1026.
83571 partition *note 1.1.2(29): 1034.
83572 Im
83573 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(7/2): 8311,
83574 *note G.3.2(27/2): 8324.
83575 in Ada.Numerics.Generic_Complex_Types *note G.1.1(6): 8185.
83576 image
83577 of a value *note 3.5(27.3/2): 1639, *note 3.5(30/3): 1643, *note
83578 K.2(273/3): 8614, *note K.2(277.4/2): 8615.
83579 in Ada.Calendar.Formatting *note 9.6.1(35/2): 4180, *note
83580 9.6.1(37/2): 4182.
83581 in Ada.Numerics.Discrete_Random *note A.5.2(26): 6116.
83582 in Ada.Numerics.Float_Random *note A.5.2(14): 6104.
83583 in Ada.Task_Identification *note C.7.1(3/3): 7640.
83584 in Ada.Text_IO.Editing *note F.3.3(13): 8170.
83585 Image attribute *note 3.5(35): 1645.
83586 Imaginary
83587 in Ada.Numerics.Generic_Complex_Types *note G.1.1(4/2): 8181.
83588 Imaginary subtype of Imaginary
83589 in Interfaces.Fortran *note B.5(10): 7540.
83590 immediate scope
83591 of (a view of) an entity *note 8.2(11): 3712.
83592 of a declaration *note 8.2(2): 3702.
83593 Immediate_Reclamation restriction *note H.4(10): 8380.
83594 immediately enclosing *note 8.1(13): 3698.
83595 immediately visible *note 8.3(4): 3721, *note 8.3(21): 3740.
83596 immediately within *note 8.1(13): 3696.
83597 immutably limited *note 7.5(8.1/3): 3628.
83598 implementation advice *note 1.1.2(37): 1047.
83599 summary of advice *note M.3(1/2): 8798.
83600 implementation defined *note 1.1.3(18): 1054.
83601 summary of characteristics *note M.2(1/2): 8795.
83602 implementation permissions *note 1.1.2(36): 1046.
83603 implementation requirements *note 1.1.2(33): 1043.
83604 implementation-dependent
83605 See unspecified *note 1.1.3(18): 1057.
83606 implemented
83607 by a protected entry *note 9.4(11.1/3): 3971.
83608 by a protected subprogram *note 9.4(11.1/3): 3970.
83609 by a task entry *note 9.1(9.2/3): 3900.
83610 implicit conversion
83611 legality *note 8.6(27.1/3): 3848.
83612 implicit declaration *note 3.1(5): 1310, *note N(11): 8819.
83613 implicit initial values
83614 for a subtype *note 3.3.1(10): 1509.
83615 implicit subtype conversion *note 4.6(59): 3014, *note 4.6(60): 3015.
83616 Access attribute *note 3.10.2(30): 2308.
83617 access discriminant *note 3.7(27/2): 1993.
83618 array bounds *note 4.6(38): 2975.
83619 array index *note 4.1.1(7): 2395.
83620 assignment to view conversion *note 4.6(55): 3009.
83621 assignment_statement *note 5.2(11): 3158.
83622 bounds of a decimal fixed point type *note 3.5.9(16): 1850.
83623 bounds of a fixed point type *note 3.5.9(14): 1846.
83624 bounds of a range *note 3.5(9): 1609, *note 3.6(18): 1916.
83625 choices of aggregate *note 4.3.3(22): 2565.
83626 component defaults *note 3.3.1(13/3): 1511.
83627 default value of a scalar *note 3.3.1(11.1/3): 1510.
83628 delay expression *note 9.6(20): 4137.
83629 derived type discriminants *note 3.4(21): 1553.
83630 discriminant values *note 3.7.1(12): 2010.
83631 entry index *note 9.5.2(24): 4059.
83632 expressions in aggregate *note 4.3.1(19): 2519.
83633 expressions of aggregate *note 4.3.3(23): 2566.
83634 function return *note 6.5(5.11/3): 3504, *note 6.5(6/2): 3512.
83635 generic formal object of mode in *note 12.4(11): 4738.
83636 inherited enumeration literal *note 3.4(29): 1559.
83637 initialization expression *note 3.3.1(17): 1513.
83638 initialization expression of allocator *note 4.8(7/2): 3053.
83639 Interrupt_Priority aspect *note D.1(17/3): 7697, *note D.3(6.1/3):
83640 7770.
83641 named number value *note 3.3.2(6): 1526.
83642 operand of concatenation *note 4.5.3(9): 2819.
83643 parameter passing *note 6.4.1(10): 3471, *note 6.4.1(11): 3473,
83644 *note 6.4.1(17): 3481.
83645 Priority aspect *note D.1(17/3): 7696, *note D.3(6.1/3): 7769.
83646 qualified_expression *note 4.7(4): 3031.
83647 reading a view conversion *note 4.6(56): 3010.
83648 result of inherited function *note 3.4(27/2): 1557.
83649 implicit_dereference *note 4.1(6): 2373.
83650 used *note 4.1(4): 2370, *note P: 9132.
83651 Implicit_Dereference aspect *note 4.1.5(2/3): 2444.
83652 Import aspect *note B.1(1/3): 7328.
83653 Import pragma *note J.15.5(2/3): 8486, *note L(14.1/3): 8681.
83654 imported entity *note B.1(23/3): 7352.
83655 in (membership test) *note 4.4(1/3): 2609, *note 4.5.2(2/3): 2784.
83656 inaccessible partition *note E.1(7): 8027.
83657 inactive
83658 a task state *note 9(10): 3864.
83659 Include
83660 in Ada.Containers.Hashed_Maps *note A.18.5(22/2): 6880.
83661 in Ada.Containers.Hashed_Sets *note A.18.8(21/2): 7007.
83662 in Ada.Containers.Ordered_Maps *note A.18.6(21/2): 6931.
83663 in Ada.Containers.Ordered_Sets *note A.18.9(20/2): 7078.
83664 included
83665 one range in another *note 3.5(4): 1597.
83666 incomplete type *note 3.2(4.1/2): 1343, *note 3.10.1(2.1/2): 2271,
83667 *note N(20.1/2): 8836.
83668 incomplete view *note 3.10.1(2.1/2): 2272.
83669 tagged *note 3.10.1(2.1/2): 2273.
83670 incomplete_type_declaration *note 3.10.1(2/2): 2268.
83671 used *note 3.2.1(2): 1369, *note P: 8945.
83672 Increment
83673 in Interfaces.C.Pointers *note B.3.2(11/3): 7457.
83674 indefinite subtype *note 3.3(23/3): 1467, *note 3.7(26): 1992.
83675 Indefinite_Doubly_Linked_Lists
83676 child of Ada.Containers *note A.18.12(2/3): 7220.
83677 Indefinite_Hashed_Maps
83678 child of Ada.Containers *note A.18.13(2/3): 7221.
83679 Indefinite_Hashed_Sets
83680 child of Ada.Containers *note A.18.15(2/3): 7223.
83681 Indefinite_Holders
83682 child of Ada.Containers *note A.18.18(5/3): 7227.
83683 Indefinite_Multiway_Trees
83684 child of Ada.Containers *note A.18.17(2/3): 7225.
83685 Indefinite_Ordered_Maps
83686 child of Ada.Containers *note A.18.14(2/3): 7222.
83687 Indefinite_Ordered_Sets
83688 child of Ada.Containers *note A.18.16(2/3): 7224.
83689 Indefinite_Vectors
83690 child of Ada.Containers *note A.18.11(2/3): 7219.
83691 Independent aspect *note C.6(6.3/3): 7620.
83692 Independent pragma *note J.15.8(4/3): 8525, *note L(14.2/3): 8687.
83693 independent subprogram *note 11.6(6/3): 4630.
83694 Independent_Components aspect *note C.6(6.9/3): 7628.
83695 Independent_Components pragma *note J.15.8(7/3): 8534, *note
83696 L(14.3/3): 8690.
83697 independently addressable *note 9.10(1/3): 4281.
83698 specified *note C.6(8.1/3): 7632.
83699 index
83700 of an element of an open direct file *note A.8(3): 6242.
83701 in Ada.Direct_IO *note A.8.4(15): 6289.
83702 in Ada.Streams.Stream_IO *note A.12.1(23): 6536.
83703 in Ada.Strings.Bounded *note A.4.4(43.1/2): 5813, *note
83704 A.4.4(43.2/2): 5814, *note A.4.4(44): 5815, *note A.4.4(45): 5816, *note
83705 A.4.4(45.1/2): 5817, *note A.4.4(46): 5818.
83706 in Ada.Strings.Fixed *note A.4.3(8.1/2): 5756, *note A.4.3(8.2/2):
83707 5757, *note A.4.3(9): 5758, *note A.4.3(10): 5759, *note A.4.3(10.1/2):
83708 5760, *note A.4.3(11): 5761.
83709 in Ada.Strings.Unbounded *note A.4.5(38.1/2): 5867, *note
83710 A.4.5(38.2/2): 5868, *note A.4.5(39): 5869, *note A.4.5(40): 5870, *note
83711 A.4.5(40.1/2): 5871, *note A.4.5(41): 5872.
83712 index range *note 3.6(13): 1906.
83713 index subtype *note 3.6(9): 1900.
83714 index type *note 3.6(9): 1901.
83715 Index_Check *note 11.5(14): 4604.
83716 [partial] *note 4.1.1(7): 2396, *note 4.1.2(7): 2406, *note
83717 4.3.3(29/3): 2571, *note 4.3.3(30): 2573, *note 4.5.3(8): 2816, *note
83718 4.6(51/3): 2996, *note 4.7(4): 3029, *note 4.8(10/2): 3056.
83719 index_constraint *note 3.6.1(2): 1925.
83720 used *note 3.2.2(7): 1417, *note P: 8974.
83721 Index_Error
83722 in Ada.Strings *note A.4.1(5): 5723.
83723 Index_Non_Blank
83724 in Ada.Strings.Bounded *note A.4.4(46.1/2): 5819, *note A.4.4(47):
83725 5820.
83726 in Ada.Strings.Fixed *note A.4.3(11.1/2): 5762, *note A.4.3(12):
83727 5763.
83728 in Ada.Strings.Unbounded *note A.4.5(41.1/2): 5873, *note
83729 A.4.5(42): 5874.
83730 index_subtype_definition *note 3.6(4): 1887.
83731 used *note 3.6(3): 1885, *note P: 9028.
83732 indexable container object *note 4.1.6(5/3): 2460.
83733 indexable container type *note 4.1.6(5/3): 2459, *note N(20.2/3):
83734 8837.
83735 indexed_component *note 4.1.1(2): 2387.
83736 used *note 4.1(2/3): 2355, *note P: 9119.
83737 indexing
83738 constant *note 4.1.6(12/3): 2467.
83739 variable *note 4.1.6(16/3): 2469.
83740 individual membership test *note 4.5.2(26.1/3): 2794.
83741 indivisible *note C.6(10/3): 7633.
83742 inferable discriminants *note B.3.3(20/2): 7475.
83743 Information
83744 child of Ada.Directories *note A.16(124/2): 6630.
83745 information hiding
83746 See package *note 7(1): 3550.
83747 See private types and private extensions *note 7.3(1): 3579.
83748 information systems *note C(1): 7556, *note F(1): 8139.
83749 informative *note 1.1.2(18): 1011.
83750 inherently mutable object *note 3.3(13/3): 1461.
83751 inheritance
83752 See derived types and classes *note 3.4(1/2): 1529.
83753 See also tagged types and type extension *note 3.9(1): 2079.
83754 inherited
83755 from an ancestor type *note 3.4.1(11): 1579.
83756 inherited component *note 3.4(11): 1545, *note 3.4(12): 1546.
83757 inherited discriminant *note 3.4(11): 1544.
83758 inherited entry *note 3.4(12): 1548.
83759 inherited protected subprogram *note 3.4(12): 1547.
83760 inherited subprogram *note 3.4(17/2): 1549.
83761 Initial_Directory
83762 in Ada.Directories.Hierarchical_File_Names *note A.16.1(12/3):
83763 6640.
83764 initialization
83765 of a protected object *note 9.4(14): 3982.
83766 of a protected object *note C.3.1(10/3): 7581, *note C.3.1(11/3):
83767 7585.
83768 of a task object *note 9.1(12/1): 3910, *note J.7.1(7): 8433.
83769 of an object *note 3.3.1(18/2): 1515.
83770 initialization expression *note 3.3.1(1/3): 1474, *note 3.3.1(4):
83771 1497.
83772 Initialize *note 7.6(2): 3639.
83773 in Ada.Finalization *note 7.6(6/2): 3644, *note 7.6(8/2): 3648.
83774 initialized allocator *note 4.8(4): 3045.
83775 initialized by default *note 3.3.1(18/2): 1514.
83776 Inline aspect *note 6.3.2(5.1/3): 3435.
83777 Inline pragma *note J.15.1(2/3): 8454, *note L(15.1/3): 8693.
83778 innermost dynamically enclosing *note 11.4(2): 4530.
83779 input *note A.6(1/2): 6225.
83780 Input aspect *note 13.13.2(38/3): 5339.
83781 Input attribute *note 13.13.2(22): 5316, *note 13.13.2(32): 5320.
83782 Input clause *note 13.3(7/2): 4936, *note 13.13.2(38/3): 5332.
83783 input-output
83784 unspecified for access types *note A.7(6): 6232.
83785 Insert
83786 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(19/2): 6786,
83787 *note A.18.3(20/2): 6787, *note A.18.3(21/2): 6788.
83788 in Ada.Containers.Hashed_Maps *note A.18.5(19/2): 6877, *note
83789 A.18.5(20/2): 6878, *note A.18.5(21/2): 6879.
83790 in Ada.Containers.Hashed_Sets *note A.18.8(19/2): 7005, *note
83791 A.18.8(20/2): 7006.
83792 in Ada.Containers.Ordered_Maps *note A.18.6(18/2): 6928, *note
83793 A.18.6(19/2): 6929, *note A.18.6(20/2): 6930.
83794 in Ada.Containers.Ordered_Sets *note A.18.9(18/2): 7076, *note
83795 A.18.9(19/2): 7077.
83796 in Ada.Containers.Vectors *note A.18.2(36/2): 6703, *note
83797 A.18.2(37/2): 6704, *note A.18.2(38/2): 6705, *note A.18.2(39/2): 6706,
83798 *note A.18.2(40/2): 6707, *note A.18.2(41/2): 6708, *note A.18.2(42/2):
83799 6709, *note A.18.2(43/2): 6710.
83800 in Ada.Strings.Bounded *note A.4.4(60): 5832, *note A.4.4(61):
83801 5833.
83802 in Ada.Strings.Fixed *note A.4.3(25): 5775, *note A.4.3(26): 5776.
83803 in Ada.Strings.Unbounded *note A.4.5(55): 5886, *note A.4.5(56):
83804 5887.
83805 Insert_Child
83806 in Ada.Containers.Multiway_Trees *note A.18.10(48/3): 7184, *note
83807 A.18.10(49/3): 7185, *note A.18.10(50/3): 7186.
83808 Insert_Space
83809 in Ada.Containers.Vectors *note A.18.2(48/2): 6715, *note
83810 A.18.2(49/2): 6716.
83811 inspectable object *note H.3.2(5/2): 8366.
83812 inspection point *note H.3.2(5/2): 8365.
83813 Inspection_Point pragma *note H.3.2(3): 8362, *note L(16): 8697.
83814 instance
83815 of a generic function *note 12.3(13): 4706.
83816 of a generic package *note 12.3(13): 4703.
83817 of a generic procedure *note 12.3(13): 4705.
83818 of a generic subprogram *note 12.3(13): 4704.
83819 of a generic unit *note 12.3(1): 4665.
83820 instructions for comment submission *note 0.2(58/1): 1003.
83821 int
83822 in Interfaces.C *note B.3(7): 7373.
83823 Integer *note 3.5.4(11): 1733, *note 3.5.4(21): 1753.
83824 in Standard *note A.1(12): 5385.
83825 integer literal *note 2.4(1): 1206.
83826 integer literals *note 3.5.4(14): 1740, *note 3.5.4(30): 1762.
83827 integer type *note 3.5.4(1): 1710, *note N(21): 8838.
83828 Integer_Address
83829 in System.Storage_Elements *note 13.7.1(10/3): 5103.
83830 Integer_IO
83831 in Ada.Text_IO *note A.10.1(52): 6408.
83832 Integer_Text_IO
83833 child of Ada *note A.10.8(21): 6480.
83834 integer_type_definition *note 3.5.4(2): 1714.
83835 used *note 3.2.1(4/2): 1381, *note P: 8955.
83836 Integer_Wide_Text_IO
83837 child of Ada *note A.11(2/2): 6501.
83838 Integer_Wide_Wide_Text_IO
83839 child of Ada *note A.11(3/2): 6504.
83840 interaction
83841 between tasks *note 9(1/3): 3856.
83842 interface *note 3.9.4(4/2): 2193.
83843 limited *note 3.9.4(5/2): 2198.
83844 nonlimited *note 3.9.4(5/2): 2199.
83845 protected *note 3.9.4(5/2): 2196.
83846 synchronized *note 3.9.4(5/2): 2195.
83847 task *note 3.9.4(5/2): 2197.
83848 type *note 3.9.4(4/2): 2194.
83849 interface to assembly language *note C.1(4/3): 7558.
83850 interface to C *note B.3(1/3): 7366.
83851 interface to COBOL *note B.4(1/3): 7477.
83852 interface to Fortran *note B.5(1/3): 7531.
83853 interface to other languages *note B(1): 7322.
83854 interface type *note N(21.1/2): 8839.
83855 Interface_Ancestor_Tags
83856 in Ada.Tags *note 3.9(7.4/2): 2105.
83857 interface_list *note 3.9.4(3/2): 2190.
83858 used *note 3.4(2/2): 1534, *note 3.9.4(2/2): 2189, *note 7.3(3/3):
83859 3591, *note 9.1(2/3): 3877, *note 9.1(3/3): 3882, *note 9.4(2/3): 3939,
83860 *note 9.4(3/3): 3944, *note 12.5.1(3/2): 4775, *note P: 9417.
83861 interface_type_definition *note 3.9.4(2/2): 2188.
83862 used *note 3.2.1(4/2): 1387, *note 12.5.5(2/2): 4797, *note P:
83863 9691.
83864 Interfaces *note B.2(3): 7363.
83865 Interfaces.C *note B.3(4): 7368.
83866 Interfaces.C.Pointers *note B.3.2(4): 7452.
83867 Interfaces.C.Strings *note B.3.1(3): 7430.
83868 Interfaces.COBOL *note B.4(7): 7479.
83869 Interfaces.Fortran *note B.5(4): 7533.
83870 interfacing aspect *note B.1(0.1/3): 7325.
83871 interfacing pragma *note J.15.5(1/3): 8472.
83872 Convention *note J.15.5(1/3): 8477.
83873 Export *note J.15.5(1/3): 8475.
83874 Import *note J.15.5(1/3): 8473.
83875 internal call *note 9.5(3/3): 3991.
83876 internal code *note 13.4(7): 5010.
83877 internal requeue *note 9.5(7): 3994.
83878 Internal_Tag
83879 in Ada.Tags *note 3.9(7/2): 2100.
83880 interpretation
83881 of a complete context *note 8.6(10): 3829.
83882 of a constituent of a complete context *note 8.6(15): 3835.
83883 overload resolution *note 8.6(14): 3834.
83884 interrupt *note C.3(2): 7564.
83885 example using asynchronous_select *note 9.7.4(10): 4245, *note
83886 9.7.4(12): 4250.
83887 interrupt entry *note J.7.1(5): 8429.
83888 interrupt handler *note C.3(2): 7572.
83889 Interrupt_Clocks_Supported
83890 in Ada.Execution_Time *note D.14(9.1/3): 7933.
83891 Interrupt_Handler aspect *note C.3.1(6.2/3): 7576.
83892 Interrupt_Handler pragma *note J.15.7(2/3): 8510, *note L(17.1/3):
83893 8701.
83894 Interrupt_Id
83895 in Ada.Interrupts *note C.3.2(2/3): 7594.
83896 Interrupt_Priority aspect *note D.1(6.3/3): 7689.
83897 Interrupt_Priority pragma *note J.15.11(4/3): 8558, *note L(18.1/3):
83898 8704.
83899 Interrupt_Priority subtype of Any_Priority
83900 in System *note 13.7(16): 5094.
83901 Interrupts
83902 child of Ada *note C.3.2(2/3): 7593.
83903 child of Ada.Execution_Time *note D.14.3(3/3): 7980.
83904 Intersection
83905 in Ada.Containers.Hashed_Sets *note A.18.8(29/2): 7014, *note
83906 A.18.8(30/2): 7015.
83907 in Ada.Containers.Ordered_Sets *note A.18.9(30/2): 7087, *note
83908 A.18.9(31/2): 7088.
83909 intertask communication *note 9.5(1): 3988.
83910 See also task *note 9(1/3): 3860.
83911 Intrinsic calling convention *note 6.3.1(4): 3412.
83912 invalid cursor
83913 of a list container *note A.18.3(153/2): 6828.
83914 of a map *note A.18.4(76/2): 6848.
83915 of a set *note A.18.7(97/2): 6980.
83916 of a tree *note A.18.10(222/3): 7216.
83917 of a vector *note A.18.2(248/2): 6758.
83918 invalid representation *note 13.9.1(9): 5136.
83919 invariant *note N(21.2/3): 8840.
83920 invariant check *note 7.3.2(9/3): 3617.
83921 invariant expression *note 7.3.2(2/3): 3611.
83922 Inverse
83923 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(46/2): 8338.
83924 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(24/2): 8298.
83925 Inverted_Exclamation
83926 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5579.
83927 Inverted_Question
83928 in Ada.Characters.Latin_1 *note A.3.3(22): 5611.
83929 involve an inner product
83930 complex *note G.3.2(56/2): 8344.
83931 real *note G.3.1(34/2): 8304.
83932 IO_Exceptions
83933 child of Ada *note A.13(3): 6558.
83934 IS1
83935 in Ada.Characters.Latin_1 *note A.3.3(16): 5544.
83936 IS2
83937 in Ada.Characters.Latin_1 *note A.3.3(16): 5543.
83938 IS3
83939 in Ada.Characters.Latin_1 *note A.3.3(16): 5542.
83940 IS4
83941 in Ada.Characters.Latin_1 *note A.3.3(16): 5541.
83942 Is_A_Group_Member
83943 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7963.
83944 Is_Abstract
83945 in Ada.Tags *note 3.9(7.5/3): 2106.
83946 Is_Alphanumeric
83947 in Ada.Characters.Handling *note A.3.2(4/3): 5417.
83948 in Ada.Wide_Characters.Handling *note A.3.5(12/3): 5704.
83949 Is_Attached
83950 in Ada.Interrupts *note C.3.2(5): 7597.
83951 Is_Basic
83952 in Ada.Characters.Handling *note A.3.2(4/3): 5413.
83953 Is_Callable
83954 in Ada.Task_Identification *note C.7.1(4/3): 7645.
83955 Is_Character
83956 in Ada.Characters.Conversions *note A.3.4(3/2): 5679.
83957 Is_Control
83958 in Ada.Characters.Handling *note A.3.2(4/3): 5408.
83959 in Ada.Wide_Characters.Handling *note A.3.5(5/3): 5697.
83960 Is_Current_Directory_Name
83961 in Ada.Directories.Hierarchical_File_Names *note A.16.1(7/3): 6635.
83962 Is_Decimal_Digit
83963 in Ada.Characters.Handling *note A.3.2(4/3): 5415.
83964 in Ada.Wide_Characters.Handling *note A.3.5(10/3): 5702.
83965 Is_Descendant_At_Same_Level
83966 in Ada.Tags *note 3.9(7.1/2): 2102.
83967 Is_Digit
83968 in Ada.Characters.Handling *note A.3.2(4/3): 5414.
83969 in Ada.Wide_Characters.Handling *note A.3.5(9/3): 5701.
83970 Is_Empty
83971 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(12/2): 6774.
83972 in Ada.Containers.Hashed_Maps *note A.18.5(11/2): 6862.
83973 in Ada.Containers.Hashed_Sets *note A.18.8(13/2): 6996.
83974 in Ada.Containers.Indefinite_Holders *note A.18.18(10/3): 7231.
83975 in Ada.Containers.Multiway_Trees *note A.18.10(16/3): 7152.
83976 in Ada.Containers.Ordered_Maps *note A.18.6(10/2): 6913.
83977 in Ada.Containers.Ordered_Sets *note A.18.9(12/2): 7067.
83978 in Ada.Containers.Vectors *note A.18.2(23/2): 6683.
83979 Is_Full_Name
83980 in Ada.Directories.Hierarchical_File_Names *note A.16.1(8/3): 6636.
83981 Is_Graphic
83982 in Ada.Characters.Handling *note A.3.2(4/3): 5409.
83983 in Ada.Wide_Characters.Handling *note A.3.5(19/3): 5711.
83984 Is_Held
83985 in Ada.Asynchronous_Task_Control *note D.11(3/2): 7916.
83986 Is_Hexadecimal_Digit
83987 in Ada.Characters.Handling *note A.3.2(4/3): 5416.
83988 in Ada.Wide_Characters.Handling *note A.3.5(11/3): 5703.
83989 Is_In
83990 in Ada.Strings.Maps *note A.4.2(13): 5738.
83991 in Ada.Strings.Wide_Maps *note A.4.7(13): 5940.
83992 in Ada.Strings.Wide_Wide_Maps *note A.4.8(13/2): 5979.
83993 Is_ISO_646
83994 in Ada.Characters.Handling *note A.3.2(10): 5432.
83995 Is_Leaf
83996 in Ada.Containers.Multiway_Trees *note A.18.10(21/3): 7157.
83997 Is_Letter
83998 in Ada.Characters.Handling *note A.3.2(4/3): 5410.
83999 in Ada.Wide_Characters.Handling *note A.3.5(6/3): 5698.
84000 Is_Line_Terminator
84001 in Ada.Characters.Handling *note A.3.2(4/3): 5419.
84002 in Ada.Wide_Characters.Handling *note A.3.5(14/3): 5706.
84003 Is_Lower
84004 in Ada.Characters.Handling *note A.3.2(4/3): 5411.
84005 in Ada.Wide_Characters.Handling *note A.3.5(7/3): 5699.
84006 Is_Mark
84007 in Ada.Characters.Handling *note A.3.2(4/3): 5420.
84008 in Ada.Wide_Characters.Handling *note A.3.5(15/3): 5707.
84009 Is_Member
84010 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7962.
84011 Is_Nul_Terminated
84012 in Interfaces.C *note B.3(24): 7392, *note B.3(35): 7402, *note
84013 B.3(39.16/2): 7422, *note B.3(39.7/2): 7412.
84014 Is_Open
84015 in Ada.Direct_IO *note A.8.4(10): 6283.
84016 in Ada.Sequential_IO *note A.8.1(10): 6257.
84017 in Ada.Streams.Stream_IO *note A.12.1(12): 6528.
84018 in Ada.Text_IO *note A.10.1(13): 6337.
84019 Is_Other_Format
84020 in Ada.Characters.Handling *note A.3.2(4/3): 5421.
84021 in Ada.Wide_Characters.Handling *note A.3.5(16/3): 5708.
84022 Is_Parent_Directory_Name
84023 in Ada.Directories.Hierarchical_File_Names *note A.16.1(6/3): 6634.
84024 Is_Punctuation_Connector
84025 in Ada.Characters.Handling *note A.3.2(4/3): 5422.
84026 in Ada.Wide_Characters.Handling *note A.3.5(17/3): 5709.
84027 Is_Relative_Name
84028 in Ada.Directories.Hierarchical_File_Names *note A.16.1(9/3): 6637.
84029 Is_Reserved
84030 in Ada.Interrupts *note C.3.2(4): 7596.
84031 Is_Root
84032 in Ada.Containers.Multiway_Trees *note A.18.10(20/3): 7156.
84033 Is_Root_Directory_Name
84034 in Ada.Directories.Hierarchical_File_Names *note A.16.1(5/3): 6633.
84035 Is_Round_Robin
84036 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7747.
84037 Is_Simple_Name
84038 in Ada.Directories.Hierarchical_File_Names *note A.16.1(4/3): 6632.
84039 Is_Sorted
84040 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(48/2): 6814.
84041 in Ada.Containers.Vectors *note A.18.2(76/2): 6742.
84042 Is_Space
84043 in Ada.Characters.Handling *note A.3.2(4/3): 5423.
84044 in Ada.Wide_Characters.Handling *note A.3.5(18/3): 5710.
84045 Is_Special
84046 in Ada.Characters.Handling *note A.3.2(4/3): 5418.
84047 in Ada.Wide_Characters.Handling *note A.3.5(13/3): 5705.
84048 Is_String
84049 in Ada.Characters.Conversions *note A.3.4(3/2): 5678.
84050 Is_Subset
84051 in Ada.Containers.Hashed_Sets *note A.18.8(39/2): 7021.
84052 in Ada.Containers.Ordered_Sets *note A.18.9(40/2): 7094.
84053 in Ada.Strings.Maps *note A.4.2(14): 5739.
84054 in Ada.Strings.Wide_Maps *note A.4.7(14): 5941.
84055 in Ada.Strings.Wide_Wide_Maps *note A.4.8(14/2): 5980.
84056 Is_Terminated
84057 in Ada.Task_Identification *note C.7.1(4/3): 7644.
84058 Is_Upper
84059 in Ada.Characters.Handling *note A.3.2(4/3): 5412.
84060 in Ada.Wide_Characters.Handling *note A.3.5(8/3): 5700.
84061 Is_Wide_Character
84062 in Ada.Characters.Conversions *note A.3.4(3/2): 5681.
84063 Is_Wide_String
84064 in Ada.Characters.Conversions *note A.3.4(3/2): 5682.
84065 ISO 1989:2002 *note 1.2(4/2): 1097.
84066 ISO 639-3:2007 *note 1.2(1.1/3): 1088.
84067 ISO 8601:2004 *note 1.2(5.1/2): 1106.
84068 ISO/IEC 10646:2011 *note 1.2(8/3): 1114, *note 3.5.2(2/3): 1697, *note
84069 3.5.2(3/3): 1703, *note 3.5.2(4/3): 1705.
84070 ISO/IEC 14882:2011 *note 1.2(9/3): 1117.
84071 ISO/IEC 1539-1:2004 *note 1.2(3/2): 1094.
84072 ISO/IEC 3166-1:2006 *note 1.2(4.1/3): 1100.
84073 ISO/IEC 6429:1992 *note 1.2(5): 1103.
84074 ISO/IEC 646:1991 *note 1.2(2): 1091.
84075 ISO/IEC 8859-1:1998 *note 1.2(6/3): 1108.
84076 ISO/IEC 9899:2011 *note 1.2(7/3): 1111.
84077 ISO/IEC TR 19769:2004 *note 1.2(10/2): 1120.
84078 ISO_646 subtype of Character
84079 in Ada.Characters.Handling *note A.3.2(9): 5430.
84080 ISO_646_Set
84081 in Ada.Strings.Maps.Constants *note A.4.6(4): 5912.
84082 issue
84083 an entry call *note 9.5.3(8): 4080.
84084 italics
84085 nongraphic characters *note 3.5.2(2/3): 1699.
84086 pseudo-names of anonymous types *note 3.2.1(7/2): 1391, *note
84087 A.1(2): 5382.
84088 syntax rules *note 1.1.4(14): 1065.
84089 terms introduced or defined *note 1.3(1/2): 1122.
84090 iterable container object *note 5.5.1(11/3): 3224.
84091 iterable container object for a loop *note 5.5.2(12/3): 3250.
84092 iterable container type *note 5.5.1(11/3): 3222, *note N(21.3/3):
84093 8841.
84094 Iterate
84095 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(45/2): 6811.
84096 in Ada.Containers.Hashed_Maps *note A.18.5(37/2): 6894.
84097 in Ada.Containers.Hashed_Sets *note A.18.8(49/2): 7030.
84098 in Ada.Containers.Multiway_Trees *note A.18.10(42/3): 7178, *note
84099 A.18.10(44/3): 7180.
84100 in Ada.Containers.Ordered_Maps *note A.18.6(50/2): 6953.
84101 in Ada.Containers.Ordered_Sets *note A.18.9(60/2): 7107.
84102 in Ada.Containers.Vectors *note A.18.2(73/2): 6739.
84103 in Ada.Environment_Variables *note A.17(8/3): 6651.
84104 Iterate_Children
84105 in Ada.Containers.Multiway_Trees *note A.18.10(68/3): 7204, *note
84106 A.18.10(70/3): 7206.
84107 Iterate_Subtree
84108 in Ada.Containers.Multiway_Trees *note A.18.10(43/3): 7179, *note
84109 A.18.10(45/3): 7181.
84110 iteration cursor subtype *note 5.5.1(6/3): 3213.
84111 iteration_scheme *note 5.5(3/3): 3188.
84112 used *note 5.5(2): 3185, *note P: 9311.
84113 iterator *note N(21.4/3): 8842.
84114 array component *note 5.5.2(3/3): 3239.
84115 container element *note 5.5.2(3/3): 3241.
84116 forward *note 5.5.2(4/3): 3245.
84117 generalized *note 5.5.2(3/3): 3235.
84118 reverse *note 5.5.2(4/3): 3243.
84119 iterator object *note 5.5.1(6/3): 3211.
84120 iterator type *note 5.5.1(6/3): 3209.
84121 Iterator_Element aspect *note 5.5.1(9/3): 3221.
84122 Iterator_Interfaces
84123 child of Ada *note 5.5.1(2/3): 3202.
84124 iterator_specification *note 5.5.2(2/3): 3228.
84125 used *note 4.5.8(1/3): 2904, *note 5.5(3/3): 3191, *note P: 9316.
84126
84127
84128 \1f
84129 File: arm2012.info, Node: J, Next: K, Prev: I, Up: Index
84130
84131 J
84132 ==
84133
84134
84135
84136 j
84137 in Ada.Numerics.Generic_Complex_Types *note G.1.1(5): 8183.
84138 in Interfaces.Fortran *note B.5(10): 7542.
84139
84140
84141 \1f
84142 File: arm2012.info, Node: K, Next: L, Prev: J, Up: Index
84143
84144 K
84145 ==
84146
84147
84148
84149 Key
84150 in Ada.Containers.Hashed_Maps *note A.18.5(13/2): 6864.
84151 in Ada.Containers.Hashed_Sets *note A.18.8(51/2): 7032.
84152 in Ada.Containers.Ordered_Maps *note A.18.6(12/2): 6915.
84153 in Ada.Containers.Ordered_Sets *note A.18.9(64/2): 7111.
84154 Kind
84155 in Ada.Directories *note A.16(25/2): 6601, *note A.16(40/2): 6613.
84156 known discriminants *note 3.7(26): 1985.
84157 known to be constrained *note 3.3(23.1/3): 1469.
84158 known to denote the same object *note 6.4.1(6.4/3): 3468.
84159 known to refer to the same object *note 6.4.1(6.11/3): 3469.
84160 known_discriminant_part *note 3.7(4): 1964.
84161 used *note 3.2.1(3/3): 1374, *note 3.7(2/2): 1962, *note 9.1(2/3):
84162 3875, *note 9.4(2/3): 3937, *note P: 9459.
84163
84164
84165 \1f
84166 File: arm2012.info, Node: L, Next: M, Prev: K, Up: Index
84167
84168 L
84169 ==
84170
84171
84172
84173 label *note 5.1(7): 3136.
84174 used *note 5.1(2/3): 3108, *note 5.1(3): 3110, *note P: 9272.
84175 Landau symbol O(X) *note A.18(3/2): 6656.
84176 language
84177 interface to assembly *note C.1(4/3): 7559.
84178 interface to non-Ada *note B(1): 7323.
84179 in Ada.Locales *note A.19(6/3): 7318.
84180 Language code standard *note 1.2(1.1/3): 1090.
84181 language-defined categories
84182 [partial] *note 3.2(10/2): 1366.
84183 language-defined category
84184 of types *note 3.2(2/2): 1334.
84185 language-defined check *note 11.5(2/3): 4583, *note 11.6(1/3): 4620.
84186 language-defined class
84187 [partial] *note 3.2(10/2): 1365.
84188 of types *note 3.2(2/2): 1333.
84189 Language-defined constants *note Q.5(1/3): 9769.
84190 Language-defined exceptions *note Q.4(1/3): 9767.
84191 Language-Defined Library Units *note A(1): 5378.
84192 Language-defined objects *note Q.5(1/3): 9768.
84193 Language-defined packages *note Q.1(1/3): 9763.
84194 Language-defined subprograms *note Q.3(1/3): 9766.
84195 Language-defined subtypes *note Q.2(1/3): 9765.
84196 Language-defined types *note Q.2(1/3): 9764.
84197 Language-defined values *note Q.5(1/3): 9770.
84198 Language_Code
84199 in Ada.Locales *note A.19(4/3): 7314.
84200 Language_Unknown
84201 in Ada.Locales *note A.19(5/3): 7316.
84202 Last
84203 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(35/2): 6802.
84204 in Ada.Containers.Ordered_Maps *note A.18.6(31/2): 6941.
84205 in Ada.Containers.Ordered_Sets *note A.18.9(43/2): 7097.
84206 in Ada.Containers.Vectors *note A.18.2(61/2): 6728.
84207 in Ada.Iterator_Interfaces *note 5.5.1(4/3): 3207.
84208 Last attribute *note 3.5(13): 1613, *note 3.6.2(5): 1944.
84209 last element
84210 of a hashed set *note A.18.8(68/2): 7051.
84211 of a set *note A.18.7(6/2): 6968.
84212 of an ordered set *note A.18.9(81/3): 7130.
84213 last node
84214 of a hashed map *note A.18.5(46/2): 6901.
84215 of a map *note A.18.4(6/2): 6839.
84216 of an ordered map *note A.18.6(58/3): 6959.
84217 Last(N) attribute *note 3.6.2(6): 1946.
84218 last_bit *note 13.5.1(6): 5037.
84219 used *note 13.5.1(3): 5032, *note P: 9742.
84220 Last_Bit attribute *note 13.5.2(4/2): 5050.
84221 Last_Child
84222 in Ada.Containers.Multiway_Trees *note A.18.10(62/3): 7198.
84223 Last_Child_Element
84224 in Ada.Containers.Multiway_Trees *note A.18.10(63/3): 7199.
84225 Last_Element
84226 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(36/2): 6803.
84227 in Ada.Containers.Ordered_Maps *note A.18.6(32/2): 6942.
84228 in Ada.Containers.Ordered_Sets *note A.18.9(44/2): 7098.
84229 in Ada.Containers.Vectors *note A.18.2(62/2): 6729.
84230 Last_Index
84231 in Ada.Containers.Vectors *note A.18.2(60/2): 6727.
84232 Last_Key
84233 in Ada.Containers.Ordered_Maps *note A.18.6(33/2): 6943.
84234 Last_Valid attribute *note 3.5.5(7.3/3): 1774.
84235 lateness *note D.9(12): 7896.
84236 Latin-1 *note 3.5.2(2/3): 1695.
84237 Latin_1
84238 child of Ada.Characters *note A.3.3(3): 5445.
84239 Layout aspect *note 13.5(1): 5015.
84240 Layout_Error
84241 in Ada.IO_Exceptions *note A.13(4): 6566.
84242 in Ada.Text_IO *note A.10.1(85): 6472.
84243 LC_A
84244 in Ada.Characters.Latin_1 *note A.3.3(13): 5509.
84245 LC_A_Acute
84246 in Ada.Characters.Latin_1 *note A.3.3(25): 5645.
84247 LC_A_Circumflex
84248 in Ada.Characters.Latin_1 *note A.3.3(25): 5646.
84249 LC_A_Diaeresis
84250 in Ada.Characters.Latin_1 *note A.3.3(25): 5648.
84251 LC_A_Grave
84252 in Ada.Characters.Latin_1 *note A.3.3(25): 5644.
84253 LC_A_Ring
84254 in Ada.Characters.Latin_1 *note A.3.3(25): 5649.
84255 LC_A_Tilde
84256 in Ada.Characters.Latin_1 *note A.3.3(25): 5647.
84257 LC_AE_Diphthong
84258 in Ada.Characters.Latin_1 *note A.3.3(25): 5650.
84259 LC_B
84260 in Ada.Characters.Latin_1 *note A.3.3(13): 5510.
84261 LC_C
84262 in Ada.Characters.Latin_1 *note A.3.3(13): 5511.
84263 LC_C_Cedilla
84264 in Ada.Characters.Latin_1 *note A.3.3(25): 5651.
84265 LC_D
84266 in Ada.Characters.Latin_1 *note A.3.3(13): 5512.
84267 LC_E
84268 in Ada.Characters.Latin_1 *note A.3.3(13): 5513.
84269 LC_E_Acute
84270 in Ada.Characters.Latin_1 *note A.3.3(25): 5653.
84271 LC_E_Circumflex
84272 in Ada.Characters.Latin_1 *note A.3.3(25): 5654.
84273 LC_E_Diaeresis
84274 in Ada.Characters.Latin_1 *note A.3.3(25): 5655.
84275 LC_E_Grave
84276 in Ada.Characters.Latin_1 *note A.3.3(25): 5652.
84277 LC_F
84278 in Ada.Characters.Latin_1 *note A.3.3(13): 5514.
84279 LC_G
84280 in Ada.Characters.Latin_1 *note A.3.3(13): 5515.
84281 LC_German_Sharp_S
84282 in Ada.Characters.Latin_1 *note A.3.3(24): 5643.
84283 LC_H
84284 in Ada.Characters.Latin_1 *note A.3.3(13): 5516.
84285 LC_I
84286 in Ada.Characters.Latin_1 *note A.3.3(13): 5517.
84287 LC_I_Acute
84288 in Ada.Characters.Latin_1 *note A.3.3(25): 5657.
84289 LC_I_Circumflex
84290 in Ada.Characters.Latin_1 *note A.3.3(25): 5658.
84291 LC_I_Diaeresis
84292 in Ada.Characters.Latin_1 *note A.3.3(25): 5659.
84293 LC_I_Grave
84294 in Ada.Characters.Latin_1 *note A.3.3(25): 5656.
84295 LC_Icelandic_Eth
84296 in Ada.Characters.Latin_1 *note A.3.3(26): 5660.
84297 LC_Icelandic_Thorn
84298 in Ada.Characters.Latin_1 *note A.3.3(26): 5674.
84299 LC_J
84300 in Ada.Characters.Latin_1 *note A.3.3(13): 5518.
84301 LC_K
84302 in Ada.Characters.Latin_1 *note A.3.3(13): 5519.
84303 LC_L
84304 in Ada.Characters.Latin_1 *note A.3.3(13): 5520.
84305 LC_M
84306 in Ada.Characters.Latin_1 *note A.3.3(13): 5521.
84307 LC_N
84308 in Ada.Characters.Latin_1 *note A.3.3(13): 5522.
84309 LC_N_Tilde
84310 in Ada.Characters.Latin_1 *note A.3.3(26): 5661.
84311 LC_O
84312 in Ada.Characters.Latin_1 *note A.3.3(13): 5523.
84313 LC_O_Acute
84314 in Ada.Characters.Latin_1 *note A.3.3(26): 5663.
84315 LC_O_Circumflex
84316 in Ada.Characters.Latin_1 *note A.3.3(26): 5664.
84317 LC_O_Diaeresis
84318 in Ada.Characters.Latin_1 *note A.3.3(26): 5666.
84319 LC_O_Grave
84320 in Ada.Characters.Latin_1 *note A.3.3(26): 5662.
84321 LC_O_Oblique_Stroke
84322 in Ada.Characters.Latin_1 *note A.3.3(26): 5668.
84323 LC_O_Tilde
84324 in Ada.Characters.Latin_1 *note A.3.3(26): 5665.
84325 LC_P
84326 in Ada.Characters.Latin_1 *note A.3.3(14): 5524.
84327 LC_Q
84328 in Ada.Characters.Latin_1 *note A.3.3(14): 5525.
84329 LC_R
84330 in Ada.Characters.Latin_1 *note A.3.3(14): 5526.
84331 LC_S
84332 in Ada.Characters.Latin_1 *note A.3.3(14): 5527.
84333 LC_T
84334 in Ada.Characters.Latin_1 *note A.3.3(14): 5528.
84335 LC_U
84336 in Ada.Characters.Latin_1 *note A.3.3(14): 5529.
84337 LC_U_Acute
84338 in Ada.Characters.Latin_1 *note A.3.3(26): 5670.
84339 LC_U_Circumflex
84340 in Ada.Characters.Latin_1 *note A.3.3(26): 5671.
84341 LC_U_Diaeresis
84342 in Ada.Characters.Latin_1 *note A.3.3(26): 5672.
84343 LC_U_Grave
84344 in Ada.Characters.Latin_1 *note A.3.3(26): 5669.
84345 LC_V
84346 in Ada.Characters.Latin_1 *note A.3.3(14): 5530.
84347 LC_W
84348 in Ada.Characters.Latin_1 *note A.3.3(14): 5531.
84349 LC_X
84350 in Ada.Characters.Latin_1 *note A.3.3(14): 5532.
84351 LC_Y
84352 in Ada.Characters.Latin_1 *note A.3.3(14): 5533.
84353 LC_Y_Acute
84354 in Ada.Characters.Latin_1 *note A.3.3(26): 5673.
84355 LC_Y_Diaeresis
84356 in Ada.Characters.Latin_1 *note A.3.3(26): 5675.
84357 LC_Z
84358 in Ada.Characters.Latin_1 *note A.3.3(14): 5534.
84359 Leading_Nonseparate
84360 in Interfaces.COBOL *note B.4(23): 7501.
84361 Leading_Part attribute *note A.5.3(54): 6194.
84362 Leading_Separate
84363 in Interfaces.COBOL *note B.4(23): 7499.
84364 leaf node
84365 of a tree *note A.18.10(4/3): 7140.
84366 Leap_Seconds_Count subtype of Integer
84367 in Ada.Calendar.Arithmetic *note 9.6.1(11/2): 4150.
84368 leaving *note 7.6.1(3/2): 3674.
84369 left *note 7.6.1(3/2): 3675.
84370 left parenthesis *note 2.1(15/3): 1156.
84371 Left_Angle_Quotation
84372 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5589.
84373 Left_Curly_Bracket
84374 in Ada.Characters.Latin_1 *note A.3.3(14): 5535.
84375 Left_Parenthesis
84376 in Ada.Characters.Latin_1 *note A.3.3(8): 5487.
84377 Left_Square_Bracket
84378 in Ada.Characters.Latin_1 *note A.3.3(12): 5503.
84379 legal
84380 construct *note 1.1.2(27): 1025.
84381 partition *note 1.1.2(29): 1033.
84382 legality rules *note 1.1.2(27): 1022.
84383 length
84384 of a dimension of an array *note 3.6(13): 1908.
84385 of a list container *note A.18.3(3/2): 6765.
84386 of a map *note A.18.4(5/2): 6837.
84387 of a one-dimensional array *note 3.6(13): 1909.
84388 of a set *note A.18.7(5/2): 6966.
84389 of a vector container *note A.18.2(2/2): 6665.
84390 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(11/2): 6773.
84391 in Ada.Containers.Hashed_Maps *note A.18.5(10/2): 6861.
84392 in Ada.Containers.Hashed_Sets *note A.18.8(12/2): 6995.
84393 in Ada.Containers.Ordered_Maps *note A.18.6(9/2): 6912.
84394 in Ada.Containers.Ordered_Sets *note A.18.9(11/2): 7066.
84395 in Ada.Containers.Vectors *note A.18.2(21/2): 6681.
84396 in Ada.Strings.Bounded *note A.4.4(9): 5796.
84397 in Ada.Strings.Unbounded *note A.4.5(6): 5852.
84398 in Ada.Text_IO.Editing *note F.3.3(11): 8168.
84399 in Interfaces.COBOL *note B.4(34): 7515, *note B.4(39): 7519, *note
84400 B.4(44): 7523.
84401 Length attribute *note 3.6.2(9): 1952.
84402 Length(N) attribute *note 3.6.2(10): 1954.
84403 Length_Check *note 11.5(15): 4605.
84404 [partial] *note 4.5.1(8): 2746, *note 4.6(37): 2971, *note 4.6(52):
84405 3003.
84406 Length_Error
84407 in Ada.Strings *note A.4.1(5): 5721.
84408 Length_Range subtype of Natural
84409 in Ada.Strings.Bounded *note A.4.4(8): 5795.
84410 less than operator *note 4.4(1/3): 2595, *note 4.5.2(1): 2768.
84411 less than or equal operator *note 4.4(1/3): 2599, *note 4.5.2(1):
84412 2772.
84413 less-than sign *note 2.1(15/3): 1171.
84414 Less_Case_Insensitive
84415 child of Ada.Strings *note A.4.10(13/3): 6007.
84416 child of Ada.Strings.Bounded *note A.4.10(18/3): 6009.
84417 child of Ada.Strings.Fixed *note A.4.10(16/3): 6008.
84418 child of Ada.Strings.Unbounded *note A.4.10(21/3): 6010.
84419 Less_Than_Sign
84420 in Ada.Characters.Latin_1 *note A.3.3(10): 5498.
84421 letter
84422 a category of Character *note A.3.2(24): 5437.
84423 letter_lowercase *note 2.1(9/2): 1132.
84424 used *note 2.3(3/2): 1193, *note P: 8887.
84425 letter_modifier *note 2.1(9.2/2): 1134.
84426 used *note 2.3(3/2): 1195, *note P: 8889.
84427 letter_other *note 2.1(9.3/2): 1135.
84428 used *note 2.3(3/2): 1196, *note P: 8890.
84429 Letter_Set
84430 in Ada.Strings.Maps.Constants *note A.4.6(4): 5904.
84431 letter_titlecase *note 2.1(9.1/2): 1133.
84432 used *note 2.3(3/2): 1194, *note P: 8888.
84433 letter_uppercase *note 2.1(8/2): 1131.
84434 used *note 2.3(3/2): 1192, *note P: 8886.
84435 level
84436 accessibility *note 3.10.2(3/2): 2283.
84437 library *note 3.10.2(22): 2298.
84438 lexical element *note 2.2(1): 1180.
84439 lexicographic order *note 4.5.2(26/3): 2793.
84440 LF
84441 in Ada.Characters.Latin_1 *note A.3.3(5): 5457.
84442 library *note 10.1.4(9): 4392.
84443 [partial] *note 10.1.1(9): 4323.
84444 informal introduction *note 10(2): 4288.
84445 See also library level, library unit, library_item
84446 library level *note 3.10.2(22): 2297.
84447 Library unit *note 10.1(3): 4294, *note 10.1.1(9): 4322, *note N(22):
84448 8843.
84449 informal introduction *note 10(2): 4286.
84450 See also language-defined library units
84451 library unit pragma *note 10.1.5(7/3): 4397.
84452 All_Calls_Remote *note E.2.3(6): 8076.
84453 categorization pragmas *note E.2(2/3): 8035.
84454 Elaborate_Body *note 10.2.1(24): 4475.
84455 Preelaborate *note 10.2.1(4): 4440.
84456 Pure *note 10.2.1(15): 4457.
84457 library_item *note 10.1.1(4): 4304.
84458 informal introduction *note 10(2): 4287.
84459 used *note 10.1.1(3): 4301, *note P: 9567.
84460 library_unit_body *note 10.1.1(7): 4317.
84461 used *note 10.1.1(4): 4306, *note P: 9571.
84462 library_unit_declaration *note 10.1.1(5): 4308.
84463 used *note 10.1.1(4): 4305, *note P: 9570.
84464 library_unit_renaming_declaration *note 10.1.1(6): 4313.
84465 used *note 10.1.1(4): 4307, *note P: 9572.
84466 lifetime *note 3.10.2(3/2): 2287.
84467 limited interface *note 3.9.4(5/2): 2203.
84468 limited type *note 7.5(3/3): 3626, *note N(23/2): 8845.
84469 becoming nonlimited *note 7.3.1(5/1): 3606, *note 7.5(16): 3632.
84470 immutably *note 7.5(8.1/3): 3629.
84471 limited view *note 10.1.1(12.1/2): 4340.
84472 Limited_Controlled
84473 in Ada.Finalization *note 7.6(7/2): 3647.
84474 limited_with_clause *note 10.1.2(4.1/2): 4351.
84475 used *note 10.1.2(4/2): 4349, *note P: 9586.
84476 line *note 2.2(2/3): 1182.
84477 in Ada.Text_IO *note A.10.1(38): 6385.
84478 line terminator *note A.10(7): 6309.
84479 Line_Length
84480 in Ada.Text_IO *note A.10.1(25): 6361.
84481 link name *note B.1(35): 7355.
84482 link-time error
84483 See post-compilation error *note 1.1.2(29): 1031.
84484 See post-compilation error *note 1.1.5(4): 1074.
84485 Link_Name aspect *note B.1(1/3): 7332.
84486 Linker_Options pragma *note B.1(8): 7343, *note L(19): 8706.
84487 linking
84488 See partition building *note 10.2(2): 4422.
84489 List
84490 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(6/3): 6767.
84491 list container *note A.18.3(1/2): 6762.
84492 List pragma *note 2.8(21): 1282, *note L(20): 8709.
84493 List_Iterator_Interfaces
84494 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(9.2/3): 6772.
84495 literal *note 4.2(1): 2470.
84496 based *note 2.4.2(1): 1223.
84497 decimal *note 2.4.1(1): 1210.
84498 numeric *note 2.4(1): 1204.
84499 See also aggregate *note 4.3(1): 2487.
84500 little endian *note 13.5.3(2): 5058.
84501 load time *note C.4(3): 7609.
84502 local to *note 8.1(14): 3700.
84503 local_name *note 13.1(3): 4849.
84504 used *note 13.3(2): 4911, *note 13.4(2): 5004, *note 13.5.1(2):
84505 5025, *note 13.5.1(3): 5029, *note C.5(3): 7612, *note J.15.2(2/3):
84506 8461, *note J.15.3(2/3): 8467, *note J.15.5(2/3): 8488, *note
84507 J.15.5(3/3): 8494, *note J.15.5(4/3): 8500, *note J.15.6(2/3): 8508,
84508 *note J.15.8(2/3): 8520, *note J.15.8(3/3): 8523, *note J.15.8(4/3):
84509 8526, *note J.15.8(5/3): 8529, *note J.15.8(6/3): 8532, *note
84510 J.15.8(7/3): 8535, *note J.15.13(2/3): 8568, *note L(3.1/3): 8635, *note
84511 L(4.1/3): 8638, *note L(5.1/3): 8641, *note L(8.1/3): 8649, *note L(9):
84512 8660, *note L(13.1/3): 8677, *note L(14.1/3): 8683, *note L(14.2/3):
84513 8688, *note L(14.3/3): 8691, *note L(21.2/3): 8716, *note L(24.1/3):
84514 8725, *note L(37.2/3): 8782, *note L(38.1/3): 8788, *note L(39.1/3):
84515 8791, *note P: 9736.
84516 locale *note A.19(1/3): 7312.
84517 active *note A.19(8/3): 7321.
84518 Locales
84519 child of Ada *note A.19(3/3): 7313.
84520 locking policy *note D.3(6/2): 7767.
84521 Ceiling_Locking *note D.3(7): 7771.
84522 Locking_Policy pragma *note D.3(3): 7761, *note L(21): 8712.
84523 Log
84524 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
84525 G.1.2(3): 8208.
84526 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(4): 6059.
84527 Logical
84528 in Interfaces.Fortran *note B.5(7): 7537.
84529 logical operator *note 4.5.1(2): 2736.
84530 See also not operator *note 4.5.6(3): 2858.
84531 logical_operator *note 4.5(2): 2717.
84532 long
84533 in Interfaces.C *note B.3(7): 7375.
84534 Long_Binary
84535 in Interfaces.COBOL *note B.4(10): 7483.
84536 long_double
84537 in Interfaces.C *note B.3(17): 7386.
84538 Long_Float *note 3.5.7(15): 1811, *note 3.5.7(16): 1813, *note
84539 3.5.7(17): 1814.
84540 Long_Floating
84541 in Interfaces.COBOL *note B.4(9): 7481.
84542 Long_Integer *note 3.5.4(22): 1754, *note 3.5.4(25): 1755, *note
84543 3.5.4(28): 1759.
84544 Look_Ahead
84545 in Ada.Text_IO *note A.10.1(43): 6393.
84546 loop cursor *note 5.5.2(12/3): 3252.
84547 loop iterator *note 5.5.2(10/3): 3247.
84548 container element iterator *note 5.5.2(12/3): 3251.
84549 loop parameter *note 5.5(6): 3195, *note 5.5.2(7/3): 3246.
84550 loop_parameter_specification *note 5.5(4): 3192.
84551 used *note 4.5.8(1/3): 2901, *note 5.5(3/3): 3190, *note P: 9315.
84552 loop_statement *note 5.5(2): 3183.
84553 used *note 5.1(5/2): 3130, *note P: 9291.
84554 low line *note 2.1(15/3): 1174.
84555 low-level programming *note C(1): 7552.
84556 Low_Line
84557 in Ada.Characters.Latin_1 *note A.3.3(12): 5507.
84558 Low_Order_First *note 13.5.3(2): 5057.
84559 in Interfaces.COBOL *note B.4(25): 7505.
84560 in System *note 13.7(15/2): 5090.
84561 lower bound
84562 of a range *note 3.5(4): 1591.
84563 lower-case letter
84564 a category of Character *note A.3.2(25): 5438.
84565 Lower_Case_Map
84566 in Ada.Strings.Maps.Constants *note A.4.6(5): 5913.
84567 Lower_Set
84568 in Ada.Strings.Maps.Constants *note A.4.6(4): 5905.
84569
84570
84571 \1f
84572 File: arm2012.info, Node: M, Next: N, Prev: L, Up: Index
84573
84574 M
84575 ==
84576
84577
84578
84579 Machine attribute *note A.5.3(60): 6199.
84580 machine code insertion *note 13.8(1): 5113, *note C.1(2): 7557.
84581 machine numbers
84582 of a fixed point type *note 3.5.9(8/2): 1840.
84583 of a floating point type *note 3.5.7(8): 1799.
84584 machine scalar *note 13.3(8.1/3): 4942.
84585 Machine_Code
84586 child of System *note 13.8(7): 5118.
84587 Machine_Emax attribute *note A.5.3(8): 6136.
84588 Machine_Emin attribute *note A.5.3(7): 6134.
84589 Machine_Mantissa attribute *note A.5.3(6): 6132.
84590 Machine_Overflows attribute *note A.5.3(12): 6146, *note A.5.4(4):
84591 6224.
84592 Machine_Radix aspect *note F.1(1): 8143.
84593 Machine_Radix attribute *note A.5.3(2): 6129, *note A.5.4(2): 6220.
84594 Machine_Radix clause *note 13.3(7/2): 4938, *note F.1(1): 8141.
84595 Machine_Rounding attribute *note A.5.3(41.1/2): 6174.
84596 Machine_Rounds attribute *note A.5.3(11): 6144, *note A.5.4(3): 6222.
84597 macro
84598 See generic unit *note 12(1): 4637.
84599 Macron
84600 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5593.
84601 main subprogram
84602 for a partition *note 10.2(7): 4425.
84603 malloc
84604 See allocator *note 4.8(1): 3034.
84605 Map
84606 in Ada.Containers.Hashed_Maps *note A.18.5(3/3): 6853.
84607 in Ada.Containers.Ordered_Maps *note A.18.6(4/3): 6906.
84608 map container *note A.18.4(1/2): 6832.
84609 Map_Iterator_Interfaces
84610 in Ada.Containers.Hashed_Maps *note A.18.5(6.2/3): 6858.
84611 in Ada.Containers.Ordered_Maps *note A.18.6(7.2/3): 6911.
84612 Maps
84613 child of Ada.Strings *note A.4.2(3/2): 5730.
84614 mark_non_spacing *note 2.1(9.4/2): 1136, *note 2.1(9.5/2): 1137.
84615 used *note 2.3(3.1/3): 1199, *note P: 8892.
84616 mark_spacing_combining
84617 used *note 2.3(3.1/3): 1200, *note P: 8893.
84618 marshalling *note E.4(9): 8104.
84619 Masculine_Ordinal_Indicator
84620 in Ada.Characters.Latin_1 *note A.3.3(22): 5606.
84621 master *note 7.6.1(3/2): 3676.
84622 master of a call *note 3.10.2(10.1/3): 2290.
84623 match
84624 a character to a pattern character *note A.4.2(54): 5751.
84625 a character to a pattern character, with respect to a character
84626 mapping function *note A.4.2(64): 5753.
84627 a string to a pattern string *note A.4.2(54): 5752.
84628 matching components *note 4.5.2(16): 2791.
84629 Max attribute *note 3.5(19): 1622.
84630 Max_Alignment_For_Allocation attribute *note 13.11.1(4/3): 5187.
84631 Max_Asynchronous_Select_Nesting restriction *note D.7(18/1): 7851.
84632 Max_Base_Digits *note 3.5.7(6): 1797.
84633 in System *note 13.7(8): 5077.
84634 Max_Binary_Modulus *note 3.5.4(7): 1725.
84635 in System *note 13.7(7): 5075.
84636 Max_Decimal_Digits
84637 in Ada.Decimal *note F.2(5): 8149.
84638 Max_Delta
84639 in Ada.Decimal *note F.2(4): 8148.
84640 Max_Digits *note 3.5.7(6): 1798.
84641 in System *note 13.7(8): 5078.
84642 Max_Digits_Binary
84643 in Interfaces.COBOL *note B.4(11): 7484.
84644 Max_Digits_Long_Binary
84645 in Interfaces.COBOL *note B.4(11): 7485.
84646 Max_Entry_Queue_Length restriction *note D.7(19.1/2): 7861.
84647 Max_Image_Width
84648 in Ada.Numerics.Discrete_Random *note A.5.2(25): 6115.
84649 in Ada.Numerics.Float_Random *note A.5.2(13): 6103.
84650 Max_Int *note 3.5.4(14): 1738.
84651 in System *note 13.7(6): 5074.
84652 Max_Length
84653 in Ada.Strings.Bounded *note A.4.4(5): 5792.
84654 Max_Mantissa
84655 in System *note 13.7(9): 5079.
84656 Max_Nonbinary_Modulus *note 3.5.4(7): 1726.
84657 in System *note 13.7(7): 5076.
84658 Max_Picture_Length
84659 in Ada.Text_IO.Editing *note F.3.3(8): 8161.
84660 Max_Protected_Entries restriction *note D.7(14): 7842.
84661 Max_Scale
84662 in Ada.Decimal *note F.2(3): 8145.
84663 Max_Select_Alternatives restriction *note D.7(12): 7838.
84664 Max_Size_In_Storage_Elements attribute *note 13.11.1(3/3): 5185.
84665 Max_Storage_At_Blocking restriction *note D.7(17/1): 7846.
84666 Max_Task_Entries restriction *note D.7(13): 7840.
84667 Max_Tasks restriction *note D.7(19/1): 7856.
84668 maximum box error
84669 for a component of the result of evaluating a complex function
84670 *note G.2.6(3): 8287.
84671 maximum line length *note A.10(11): 6317.
84672 maximum page length *note A.10(11): 6318.
84673 maximum relative error
84674 for a component of the result of evaluating a complex function
84675 *note G.2.6(3): 8286.
84676 for the evaluation of an elementary function *note G.2.4(2): 8280.
84677 Members
84678 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7964.
84679 Membership
84680 in Ada.Strings *note A.4.1(6): 5727.
84681 membership test *note 4.5.2(2/3): 2783.
84682 membership_choice *note 4.4(3.2/3): 2684.
84683 used *note 4.4(3.1/3): 2682, *note P: 9213.
84684 membership_choice_list *note 4.4(3.1/3): 2681.
84685 used *note 4.4(3/3): 2680, *note P: 9212.
84686 Memory_Size
84687 in System *note 13.7(13): 5086.
84688 mentioned
84689 in a with_clause *note 10.1.2(6/2): 4358.
84690 Merge
84691 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(50/2): 6816.
84692 in Ada.Containers.Vectors *note A.18.2(78/2): 6744.
84693 message
84694 See dispatching call *note 3.9.2(1/2): 2149.
84695 method
84696 See dispatching subprogram *note 3.9.2(1/2): 2150.
84697 metrics *note 1.1.2(35): 1045.
84698 Micro_Sign
84699 in Ada.Characters.Latin_1 *note A.3.3(22): 5600.
84700 Microseconds
84701 in Ada.Real_Time *note D.8(14/2): 7881.
84702 Middle_Dot
84703 in Ada.Characters.Latin_1 *note A.3.3(22): 5603.
84704 Milliseconds
84705 in Ada.Real_Time *note D.8(14/2): 7882.
84706 Min attribute *note 3.5(16): 1620.
84707 Min_Delta
84708 in Ada.Decimal *note F.2(4): 8147.
84709 Min_Handler_Ceiling
84710 in Ada.Execution_Time.Group_Budgets *note D.14.2(7/2): 7959.
84711 in Ada.Execution_Time.Timers *note D.14.1(6/2): 7943.
84712 Min_Int *note 3.5.4(14): 1737.
84713 in System *note 13.7(6): 5073.
84714 Min_Scale
84715 in Ada.Decimal *note F.2(3): 8146.
84716 minus *note 2.1(15/3): 1163.
84717 minus operator *note 4.4(1/3): 2617, *note 4.5.3(1): 2806, *note
84718 4.5.4(1): 2829.
84719 Minus_Sign
84720 in Ada.Characters.Latin_1 *note A.3.3(8): 5493.
84721 Minute
84722 in Ada.Calendar.Formatting *note 9.6.1(25/2): 4170.
84723 Minute_Number subtype of Natural
84724 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4163.
84725 Minutes
84726 in Ada.Real_Time *note D.8(14/2): 7884.
84727 mixed-language programs *note B(1): 7324, *note C.1(4/3): 7560.
84728 Mod attribute *note 3.5.4(16.1/2): 1743.
84729 mod operator *note 4.4(1/3): 2636, *note 4.5.5(1): 2843.
84730 mod_clause *note J.8(1): 8437.
84731 used *note 13.5.1(2): 5026, *note P: 9737.
84732 mode *note 6.1(16): 3321.
84733 used *note 6.1(15/3): 3314, *note 12.4(2/3): 4715, *note P: 9664.
84734 in Ada.Direct_IO *note A.8.4(9): 6280.
84735 in Ada.Sequential_IO *note A.8.1(9): 6254.
84736 in Ada.Streams.Stream_IO *note A.12.1(11): 6525.
84737 in Ada.Text_IO *note A.10.1(12): 6334.
84738 mode conformance *note 6.3.1(16/3): 3421.
84739 required *note 8.5.4(4/3): 3808, *note 8.5.4(5/3): 3811, *note
84740 12.6(7/3): 4817, *note 12.6(8/3): 4818, *note 13.3(6): 4923.
84741 mode of operation
84742 nonstandard *note 1.1.5(11): 1081.
84743 standard *note 1.1.5(11): 1083.
84744 Mode_Error
84745 in Ada.Direct_IO *note A.8.4(18): 6293.
84746 in Ada.IO_Exceptions *note A.13(4): 6560.
84747 in Ada.Sequential_IO *note A.8.1(15): 6262.
84748 in Ada.Streams.Stream_IO *note A.12.1(26): 6541.
84749 in Ada.Text_IO *note A.10.1(85): 6466.
84750 Model attribute *note A.5.3(68): 6213, *note G.2.2(7): 8271.
84751 model interval *note G.2.1(4): 8254.
84752 associated with a value *note G.2.1(4): 8255.
84753 model number *note G.2.1(3): 8253.
84754 model-oriented attributes
84755 of a floating point subtype *note A.5.3(63): 6203.
84756 Model_Emin attribute *note A.5.3(65): 6207, *note G.2.2(4): 8264.
84757 Model_Epsilon attribute *note A.5.3(66): 6209.
84758 Model_Mantissa attribute *note A.5.3(64): 6205, *note G.2.2(3/2):
84759 8262.
84760 Model_Small attribute *note A.5.3(67): 6211.
84761 Modification_Time
84762 in Ada.Directories *note A.16(27/2): 6603, *note A.16(42/2): 6615.
84763 modular type *note 3.5.4(1): 1712.
84764 Modular_IO
84765 in Ada.Text_IO *note A.10.1(57): 6417.
84766 modular_type_definition *note 3.5.4(4): 1720.
84767 used *note 3.5.4(2): 1716, *note P: 9007.
84768 module
84769 See package *note 7(1): 3552.
84770 modulus
84771 of a modular type *note 3.5.4(7): 1724.
84772 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(10/2): 8316,
84773 *note G.3.2(30/2): 8329.
84774 in Ada.Numerics.Generic_Complex_Types *note G.1.1(9): 8193.
84775 Modulus attribute *note 3.5.4(17): 1745.
84776 Monday
84777 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4154.
84778 Month
84779 in Ada.Calendar *note 9.6(13): 4128.
84780 in Ada.Calendar.Formatting *note 9.6.1(22/2): 4167.
84781 Month_Number subtype of Integer
84782 in Ada.Calendar *note 9.6(11/2): 4123.
84783 More_Entries
84784 in Ada.Directories *note A.16(34/2): 6609.
84785 Move
84786 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(18/2): 6785.
84787 in Ada.Containers.Hashed_Maps *note A.18.5(18/2): 6876.
84788 in Ada.Containers.Hashed_Sets *note A.18.8(18/2): 7004.
84789 in Ada.Containers.Indefinite_Holders *note A.18.18(22/3): 7243.
84790 in Ada.Containers.Multiway_Trees *note A.18.10(34/3): 7170.
84791 in Ada.Containers.Ordered_Maps *note A.18.6(17/2): 6927.
84792 in Ada.Containers.Ordered_Sets *note A.18.9(17/2): 7075.
84793 in Ada.Containers.Vectors *note A.18.2(35/2): 6702.
84794 in Ada.Strings.Fixed *note A.4.3(7): 5755.
84795 multi-dimensional array *note 3.6(12): 1905.
84796 Multiplication_Sign
84797 in Ada.Characters.Latin_1 *note A.3.3(24): 5635.
84798 multiply *note 2.1(15/3): 1159.
84799 multiply operator *note 4.4(1/3): 2628, *note 4.5.5(1): 2835.
84800 multiplying operator *note 4.5.5(1): 2831.
84801 multiplying_operator *note 4.5(6): 2721.
84802 used *note 4.4(5): 2695, *note P: 9223.
84803 Multiprocessors
84804 child of System *note D.16(3/3): 7995.
84805 Multiway_Trees
84806 child of Ada.Containers *note A.18.10(7/3): 7144.
84807 mutates *note 7.6(17.6/3): 3665.
84808 MW
84809 in Ada.Characters.Latin_1 *note A.3.3(18): 5566.
84810
84811
84812 \1f
84813 File: arm2012.info, Node: N, Next: O, Prev: M, Up: Index
84814
84815 N
84816 ==
84817
84818
84819
84820 n-dimensional array_aggregate *note 4.3.3(6): 2555.
84821 NAK
84822 in Ada.Characters.Latin_1 *note A.3.3(6): 5468.
84823 name *note 4.1(2/3): 2352.
84824 [partial] *note 3.1(1): 1291.
84825 of (a view of) an entity *note 3.1(8): 1318.
84826 of a pragma *note 2.8(9): 1272.
84827 of an external file *note A.7(1): 6228.
84828 used *note 2.8(3/3): 1265, *note 3.2.2(4): 1408, *note 4.1(4):
84829 2369, *note 4.1(5): 2372, *note 4.1(6): 2374, *note 4.1.5(4/3): 2449,
84830 *note 4.4(7/3): 2706, *note 4.6(2): 2922, *note 4.8(2.1/3): 3042, *note
84831 5.2(2): 3144, *note 5.5.2(2/3): 3233, *note 5.7(2): 3260, *note 5.8(2):
84832 3265, *note 6.4(2): 3438, *note 6.4(3): 3442, *note 6.4(6): 3453, *note
84833 8.4(3): 3759, *note 8.5.1(2/3): 3782, *note 8.5.2(2/3): 3794, *note
84834 8.5.3(2/3): 3798, *note 8.5.4(2/3): 3805, *note 8.5.5(2/3): 3817, *note
84835 9.5.3(2): 4068, *note 9.5.4(2/3): 4096, *note 9.8(2): 4254, *note
84836 10.1.1(8): 4321, *note 10.1.2(4.1/2): 4352, *note 10.1.2(4.2/2): 4356,
84837 *note 10.2.1(3): 4439, *note 10.2.1(14): 4456, *note 10.2.1(20): 4466,
84838 *note 10.2.1(21): 4471, *note 10.2.1(22): 4474, *note 11.2(5): 4515,
84839 *note 11.3(2/2): 4520, *note 12.3(2/3): 4668, *note 12.3(5): 4690, *note
84840 12.6(4): 4814, *note 12.7(2/3): 4826, *note 13.1(3): 4853, *note
84841 13.1.1(4/3): 4891, *note 13.3(2): 4916, *note 13.11.3(3.1/3): 5210,
84842 *note 13.12(4.1/2): 5257, *note E.2.1(3): 8047, *note E.2.2(3): 8061,
84843 *note E.2.3(3): 8072, *note E.2.3(5): 8075, *note H.3.2(3): 8364, *note
84844 J.10(3/2): 8445, *note J.15.1(2/3): 8456, *note J.15.7(2/3): 8511, *note
84845 J.15.7(4/3): 8514, *note L(2): 8619, *note L(6.1/3): 8644, *note L(10):
84846 8665, *note L(11): 8670, *note L(12): 8673, *note L(15.1/3): 8694, *note
84847 L(16): 8699, *note L(17.1/3): 8702, *note L(26): 8736, *note L(28):
84848 8750, *note L(30): 8758, *note L(31): 8761, *note L(34): 8770, *note P:
84849 9433.
84850 in Ada.Direct_IO *note A.8.4(9): 6281.
84851 in Ada.Sequential_IO *note A.8.1(9): 6255.
84852 in Ada.Streams.Stream_IO *note A.12.1(11): 6526.
84853 in Ada.Text_IO *note A.10.1(12): 6335.
84854 in System *note 13.7(4): 5071.
84855 name resolution rules *note 1.1.2(26/3): 1019.
84856 Name_Case_Equivalence
84857 in Ada.Directories *note A.16(20.2/3): 6597.
84858 Name_Case_Kind
84859 in Ada.Directories *note A.16(20.1/3): 6596.
84860 Name_Error
84861 in Ada.Direct_IO *note A.8.4(18): 6294.
84862 in Ada.Directories *note A.16(43/2): 6617.
84863 in Ada.IO_Exceptions *note A.13(4): 6561.
84864 in Ada.Sequential_IO *note A.8.1(15): 6263.
84865 in Ada.Streams.Stream_IO *note A.12.1(26): 6542.
84866 in Ada.Text_IO *note A.10.1(85): 6467.
84867 named
84868 in a use clause *note 8.4(7.1/2): 3764.
84869 in a with_clause *note 10.1.2(6/2): 4360.
84870 named association *note 6.4(7): 3454, *note 6.4.1(2/3): 3462, *note
84871 12.3(6): 4694.
84872 named component association *note 4.3.1(6): 2511.
84873 named discriminant association *note 3.7.1(4): 2001.
84874 named entry index *note 9.5.2(21): 4056.
84875 named number *note 3.3(24): 1471.
84876 named parameter association *note 6.4.1(2/3): 3464.
84877 named type *note 3.2.1(7/2): 1389.
84878 named_array_aggregate *note 4.3.3(4): 2548.
84879 used *note 4.3.3(2): 2538, *note P: 9171.
84880 Names
84881 child of Ada.Interrupts *note C.3.2(12): 7604.
84882 Nanoseconds
84883 in Ada.Real_Time *note D.8(14/2): 7880.
84884 Native_Binary
84885 in Interfaces.COBOL *note B.4(25): 7506.
84886 Natural *note 3.5.4(12): 1734.
84887 Natural subtype of Integer
84888 in Standard *note A.1(13): 5386.
84889 NBH
84890 in Ada.Characters.Latin_1 *note A.3.3(17): 5548.
84891 NBSP
84892 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5578.
84893 needed
84894 of a compilation unit by another *note 10.2(2): 4424.
84895 remote call interface *note E.2.3(18): 8088.
84896 shared passive library unit *note E.2.1(11): 8055.
84897 needed component
84898 extension_aggregate record_component_association_list *note
84899 4.3.2(6): 2530.
84900 record_aggregate record_component_association_list *note 4.3.1(9):
84901 2514.
84902 needs finalization *note 7.6(9.1/2): 3651.
84903 language-defined type *note A.4.5(72.1/2): 5900, *note
84904 A.5.2(15.1/2): 6106, *note A.5.2(27.1/2): 6118, *note A.8.1(17/2): 6268,
84905 *note A.8.4(20/2): 6299, *note A.10.1(86/2): 6473, *note A.12.1(27.1/2):
84906 6547, *note A.16(102/2): 6629, *note A.18.2(147.3/3): 6751, *note
84907 A.18.2(84/2): 6746, *note A.18.3(56/2): 6818, *note A.18.3(86.3/3):
84908 6823, *note A.18.4(4/2): 6835, *note A.18.4(41.3/3): 6845, *note
84909 A.18.7(4/2): 6965, *note A.18.7(36.2/3): 6974, *note A.18.7(96.2/3):
84910 6977, *note A.18.10(124/3): 7213, *note A.18.10(73/3): 7208, *note
84911 A.18.18(27/3): 7244, *note A.18.18(54/3): 7248, *note D.14.2(13/2):
84912 7973, *note D.15(8/2): 7991.
84913 NEL
84914 in Ada.Characters.Latin_1 *note A.3.3(17): 5550.
84915 new
84916 See allocator *note 4.8(1): 3033.
84917 New_Char_Array
84918 in Interfaces.C.Strings *note B.3.1(9): 7436.
84919 New_Line
84920 in Ada.Text_IO *note A.10.1(28): 6365.
84921 New_Page
84922 in Ada.Text_IO *note A.10.1(31): 6371.
84923 New_String
84924 in Interfaces.C.Strings *note B.3.1(10): 7437.
84925 Next
84926 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(37/2): 6804,
84927 *note A.18.3(39/2): 6806.
84928 in Ada.Containers.Hashed_Maps *note A.18.5(28/2): 6886, *note
84929 A.18.5(29/2): 6887.
84930 in Ada.Containers.Hashed_Sets *note A.18.8(41/2): 7023, *note
84931 A.18.8(42/2): 7024.
84932 in Ada.Containers.Ordered_Maps *note A.18.6(34/2): 6944, *note
84933 A.18.6(35/2): 6945.
84934 in Ada.Containers.Ordered_Sets *note A.18.9(45/2): 7099, *note
84935 A.18.9(46/2): 7100.
84936 in Ada.Containers.Vectors *note A.18.2(63/2): 6730, *note
84937 A.18.2(64/2): 6731.
84938 in Ada.Iterator_Interfaces *note 5.5.1(3/3): 3205.
84939 Next_Sibling
84940 in Ada.Containers.Multiway_Trees *note A.18.10(64/3): 7200, *note
84941 A.18.10(66/3): 7202.
84942 No_Abort_Statements restriction *note D.7(5/3): 7808.
84943 No_Access_Parameter_Allocators restriction *note H.4(8.3/3): 8378.
84944 No_Access_Subprograms restriction *note H.4(17): 8388.
84945 No_Allocators restriction *note H.4(7): 8370.
84946 No_Anonymous_Allocators restriction *note H.4(8.1/3): 8374.
84947 No_Break_Space
84948 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5577.
84949 No_Coextensions restriction *note H.4(8.2/3): 8376.
84950 No_Delay restriction *note H.4(21): 8398.
84951 No_Dependence restriction *note 13.12.1(6/2): 5281.
84952 No_Dispatch restriction *note H.4(19): 8394.
84953 No_Dynamic_Attachment restriction *note D.7(10/3): 7819.
84954 No_Dynamic_Priorities restriction *note D.7(9/2): 7817.
84955 No_Element
84956 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(9/2): 6770.
84957 in Ada.Containers.Hashed_Maps *note A.18.5(6/2): 6856.
84958 in Ada.Containers.Hashed_Sets *note A.18.8(6/2): 6988.
84959 in Ada.Containers.Multiway_Trees *note A.18.10(11/3): 7148.
84960 in Ada.Containers.Ordered_Maps *note A.18.6(7/2): 6909.
84961 in Ada.Containers.Ordered_Sets *note A.18.9(7/2): 7061.
84962 in Ada.Containers.Vectors *note A.18.2(11/2): 6674.
84963 No_Exceptions restriction *note H.4(12): 8382.
84964 No_Fixed_Point restriction *note H.4(15): 8386.
84965 No_Floating_Point restriction *note H.4(14): 8384.
84966 No_Implementation_Aspect_Specifications restriction *note
84967 13.12.1(1.1/3): 5269.
84968 No_Implementation_Attributes restriction *note 13.12.1(2/2): 5271.
84969 No_Implementation_Identifiers restriction *note 13.12.1(2.1/3): 5273.
84970 No_Implementation_Pragmas restriction *note 13.12.1(3/2): 5275.
84971 No_Implementation_Units restriction *note 13.12.1(3.1/3): 5277.
84972 No_Implicit_Heap_Allocations restriction *note D.7(8): 7815.
84973 No_Index
84974 in Ada.Containers.Vectors *note A.18.2(7/2): 6670.
84975 No_IO restriction *note H.4(20/2): 8396.
84976 No_Local_Allocators restriction *note H.4(8/1): 8372.
84977 No_Local_Protected_Objects restriction *note D.7(10.1/3): 7821.
84978 No_Local_Timing_Events restriction *note D.7(10.2/3): 7823.
84979 No_Nested_Finalization restriction *note D.7(4/3): 7806.
84980 No_Obsolescent_Features restriction *note 13.12.1(4/3): 5279.
84981 No_Protected_Type_Allocators restriction *note D.7(10.3/2): 7825.
84982 No_Protected_Types restriction *note H.4(5): 8368.
84983 No_Recursion restriction *note H.4(22): 8400.
84984 No_Reentrancy restriction *note H.4(23): 8402.
84985 No_Relative_Delay restriction *note D.7(10.5/3): 7828.
84986 No_Requeue_Statements restriction *note D.7(10.6/3): 7830.
84987 No_Return aspect *note 6.5.1(3.2/3): 3524.
84988 No_Return pragma *note J.15.2(2/3): 8460, *note L(21.2/3): 8715.
84989 No_Select_Statements restriction *note D.7(10.7/3): 7832.
84990 No_Specific_Termination_Handlers restriction *note D.7(10.8/3): 7834.
84991 No_Specification_of_Aspect restriction *note 13.12.1(6.1/3): 5283.
84992 No_Standard_Allocators_After_Elaboration restriction *note
84993 D.7(19.2/3): 7864.
84994 No_Tag
84995 in Ada.Tags *note 3.9(6.1/2): 2095.
84996 No_Task_Allocators restriction *note D.7(7): 7812.
84997 No_Task_Hierarchy restriction *note D.7(3/3): 7804.
84998 No_Task_Termination restriction *note D.7(15.1/2): 7844.
84999 No_Terminate_Alternatives restriction *note D.7(6): 7810.
85000 No_Unchecked_Access restriction *note H.4(18): 8390.
85001 No_Use_Of_Attribute restriction *note 13.12.1(6.2/3): 5285.
85002 No_Use_Of_Pragma restriction *note 13.12.1(6.3/3): 5287.
85003 node
85004 of a list *note A.18.3(2/2): 6764.
85005 of a map *note A.18.4(5/2): 6836.
85006 of a tree *note A.18.10(2/3): 7134.
85007 Node_Count
85008 in Ada.Containers.Multiway_Trees *note A.18.10(17/3): 7153.
85009 nominal subtype *note 3.3(23/3): 1464, *note 3.3.1(8/2): 1501.
85010 associated with a dereference *note 4.1(9/3): 2377.
85011 associated with a type_conversion *note 4.6(27): 2957.
85012 associated with an indexed_component *note 4.1.1(5): 2392.
85013 of a component *note 3.6(20): 1917.
85014 of a formal parameter *note 6.1(23/2): 3329.
85015 of a function result *note 6.1(23/2): 3330.
85016 of a generic formal object *note 12.4(9/2): 4731.
85017 of a record component *note 3.8(14): 2039.
85018 of the result of a function_call *note 6.4(12/2): 3459.
85019 Non_Preemptive
85020 child of Ada.Dispatching *note D.2.4(2.2/3): 7735.
85021 Non_Preemptive_FIFO_Within_Priorities task disp. policy *note
85022 D.2.4(2/2): 7734.
85023 nonconfirming
85024 aspect specification *note 13.1(18.2/3): 4878.
85025 representation item *note 13.1(18.2/3): 4877.
85026 representation value *note 13.1(18.2/3): 4876.
85027 nondispatching call
85028 on a dispatching operation *note 3.9.2(1/2): 2141.
85029 nonexistent *note 13.11.2(10/2): 5196, *note 13.11.2(16/3): 5204.
85030 nongraphic character *note 3.5(27.5/2): 1640.
85031 nonlimited interface *note 3.9.4(5/2): 2204.
85032 nonlimited type *note 7.5(7): 3627.
85033 becoming nonlimited *note 7.3.1(5/1): 3605, *note 7.5(16): 3631.
85034 nonlimited_with_clause *note 10.1.2(4.2/2): 4354.
85035 used *note 10.1.2(4/2): 4350, *note P: 9587.
85036 nonnormative
85037 See informative *note 1.1.2(18): 1012.
85038 nonreturning *note 6.5.1(3.2/3): 3522.
85039 nonstandard integer type *note 3.5.4(26): 1757.
85040 nonstandard mode *note 1.1.5(11): 1082.
85041 nonstandard real type *note 3.5.6(8): 1786.
85042 normal completion *note 7.6.1(2/2): 3670.
85043 normal library unit *note E.2(4/3): 8042.
85044 normal state of an object *note 11.6(6/3): 4631, *note 13.9.1(4):
85045 5131.
85046 [partial] *note 9.8(21): 4268, *note A.13(17): 6568.
85047 Normalize_Scalars pragma *note H.1(3): 8353, *note L(22): 8719.
85048 normalized exponent *note A.5.3(14): 6149.
85049 normalized number *note A.5.3(10): 6140.
85050 normative *note 1.1.2(14): 1009.
85051 not equal operator *note 4.4(1/3): 2591, *note 4.5.2(1): 2764.
85052 not in (membership test) *note 4.4(1/3): 2610, *note 4.5.2(2/3): 2785.
85053 not operator *note 4.4(1/3): 2647, *note 4.5.6(3): 2856.
85054 Not_A_Specific_CPU
85055 in System.Multiprocessors *note D.16(4/3): 7997.
85056 Not_Sign
85057 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5590.
85058 notes *note 1.1.2(38): 1049.
85059 notwithstanding *note 7.6(17.5/3): 3664, *note 10.1.6(6/2): 4415,
85060 *note B.1(22/3): 7351, *note B.1(38/3): 7357, *note C.3.1(19/3): 7592,
85061 *note E.2.1(8): 8052, *note E.2.1(11): 8056, *note E.2.3(18): 8089,
85062 *note H.6(7/2): 8414, *note J.3(6): 8420.
85063 [partial] *note J.15.5(8/3): 8503.
85064 NUL
85065 in Ada.Characters.Latin_1 *note A.3.3(5): 5447.
85066 in Interfaces.C *note B.3(20/1): 7388.
85067 null access value *note 4.2(9): 2480.
85068 null array *note 3.6.1(7): 1935.
85069 null constraint *note 3.2(7/2): 1352.
85070 null extension *note 3.9.1(4.1/2): 2137.
85071 null pointer
85072 See null access value *note 4.2(9): 2481.
85073 null procedure *note 6.7(3/3): 3536.
85074 null range *note 3.5(4): 1594.
85075 null record *note 3.8(15): 2040.
85076 null slice *note 4.1.2(7): 2408.
85077 null string literal *note 2.6(6): 1255.
85078 null value
85079 of an access type *note 3.10(13/2): 2260.
85080 Null_Address
85081 in System *note 13.7(12): 5083.
85082 Null_Bounded_String
85083 in Ada.Strings.Bounded *note A.4.4(7): 5794.
85084 null_exclusion *note 3.10(5.1/2): 2232.
85085 used *note 3.2.2(3/2): 1404, *note 3.7(5/2): 1969, *note 3.10(2/2):
85086 2221, *note 3.10(6/2): 2236, *note 6.1(13/2): 3305, *note 6.1(15/3):
85087 3315, *note 8.5.1(2/3): 3780, *note 12.4(2/3): 4716, *note P: 9091.
85088 Null_Id
85089 in Ada.Exceptions *note 11.4.1(2/2): 4538.
85090 Null_Occurrence
85091 in Ada.Exceptions *note 11.4.1(3/2): 4544.
85092 null_procedure_declaration *note 6.7(2/3): 3531.
85093 used *note 3.1(3/3): 1299, *note P: 8936.
85094 Null_Ptr
85095 in Interfaces.C.Strings *note B.3.1(7): 7434.
85096 Null_Set
85097 in Ada.Strings.Maps *note A.4.2(5): 5732.
85098 in Ada.Strings.Wide_Maps *note A.4.7(5): 5934.
85099 in Ada.Strings.Wide_Wide_Maps *note A.4.8(5/2): 5973.
85100 null_statement *note 5.1(6): 3135.
85101 used *note 5.1(4/2): 3115, *note P: 9277.
85102 Null_Task_Id
85103 in Ada.Task_Identification *note C.7.1(2/2): 7639.
85104 Null_Unbounded_String
85105 in Ada.Strings.Unbounded *note A.4.5(5): 5851.
85106 number sign *note 2.1(15/3): 1152.
85107 Number_Base subtype of Integer
85108 in Ada.Text_IO *note A.10.1(6): 6326.
85109 number_decimal *note 2.1(10/2): 1138.
85110 used *note 2.3(3.1/3): 1201, *note P: 8894.
85111 number_declaration *note 3.3.2(2): 1522.
85112 used *note 3.1(3/3): 1296, *note P: 8933.
85113 number_letter *note 2.1(10.1/2): 1139.
85114 used *note 2.3(3/2): 1197, *note P: 8891.
85115 Number_Of_CPUs
85116 in System.Multiprocessors *note D.16(5/3): 7999.
85117 Number_Sign
85118 in Ada.Characters.Latin_1 *note A.3.3(8): 5482.
85119 numeral *note 2.4.1(3): 1215.
85120 used *note 2.4.1(2): 1213, *note 2.4.1(4): 1221, *note 2.4.2(3):
85121 1239, *note P: 8910.
85122 Numeric
85123 in Interfaces.COBOL *note B.4(20/3): 7496.
85124 numeric type *note 3.5(1): 1583.
85125 numeric_literal *note 2.4(2): 1207.
85126 used *note 4.4(7/3): 2703, *note P: 9229.
85127 numerics *note G(1): 8178.
85128 child of Ada *note A.5(3/2): 6053.
85129
85130
85131 \1f
85132 File: arm2012.info, Node: O, Next: P, Prev: N, Up: Index
85133
85134 O
85135 ==
85136
85137
85138
85139 O(f(N)) *note A.18(3/2): 6657.
85140 object *note 3.3(2): 1454, *note N(24): 8846.
85141 [partial] *note 3.2(1): 1330.
85142 object-oriented programming (OOP)
85143 See dispatching operations of tagged types *note 3.9.2(1/2): 2147.
85144 See tagged types and type extensions *note 3.9(1): 2077.
85145 object_declaration *note 3.3.1(2/3): 1478.
85146 used *note 3.1(3/3): 1295, *note P: 8932.
85147 object_renaming_declaration *note 8.5.1(2/3): 3778.
85148 used *note 8.5(2): 3770, *note P: 9425.
85149 obsolescent feature *note J(1/2): 8415.
85150 occur immediately within *note 8.1(13): 3695.
85151 occurrence
85152 of an interrupt *note C.3(2): 7565.
85153 octal
85154 literal *note 2.4.2(1): 1229.
85155 octal literal *note 2.4.2(1): 1227.
85156 Old attribute *note 6.1.1(26/3): 3361.
85157 one's complement
85158 modular types *note 3.5.4(27): 1758.
85159 one-dimensional array *note 3.6(12): 1904.
85160 only as a completion
85161 entry_body *note 9.5.2(16): 4047.
85162 OOP (object-oriented programming)
85163 See dispatching operations of tagged types *note 3.9.2(1/2): 2148.
85164 See tagged types and type extensions *note 3.9(1): 2078.
85165 opaque type
85166 See private types and private extensions *note 7.3(1): 3580.
85167 Open
85168 in Ada.Direct_IO *note A.8.4(7): 6275.
85169 in Ada.Sequential_IO *note A.8.1(7): 6249.
85170 in Ada.Streams.Stream_IO *note A.12.1(9): 6520.
85171 in Ada.Text_IO *note A.10.1(10): 6329.
85172 open alternative *note 9.7.1(14): 4210.
85173 open entry *note 9.5.3(5): 4070.
85174 of a protected object *note 9.5.3(7/3): 4076.
85175 of a task *note 9.5.3(6/3): 4074.
85176 operand
85177 of a qualified_expression *note 4.7(3): 3023.
85178 of a type_conversion *note 4.6(3): 2924.
85179 operand interval *note G.2.1(6): 8256.
85180 operand type
85181 of a type_conversion *note 4.6(3): 2925.
85182 operates on a type *note 3.2.3(1/2): 1426.
85183 operational aspect *note 13.1(8.1/3): 4865.
85184 specifiable attributes *note 13.3(5/3): 4922.
85185 operational item *note 13.1(1.1/1): 4843.
85186 operator *note 6.6(1): 3527.
85187 & *note 4.4(1/3): 2620, *note 4.5.3(3): 2809.
85188 * *note 4.4(1/3): 2627, *note 4.5.5(1): 2834.
85189 ** *note 4.4(1/3): 2641, *note 4.5.6(7): 2865.
85190 + *note 4.4(1/3): 2612, *note 4.5.3(1): 2801, *note 4.5.4(1): 2824.
85191 - *note 4.4(1/3): 2616, *note 4.5.3(1): 2805, *note 4.5.4(1): 2828.
85192 / *note 4.4(1/3): 2633, *note 4.5.5(1): 2840.
85193 /= *note 4.4(1/3): 2590, *note 4.5.2(1): 2763.
85194 < *note 4.4(1/3): 2594, *note 4.5.2(1): 2767.
85195 <= *note 4.4(1/3): 2598, *note 4.5.2(1): 2771.
85196 = *note 4.4(1/3): 2586, *note 4.5.2(1): 2759.
85197 > *note 4.4(1/3): 2602, *note 4.5.2(1): 2775.
85198 >= *note 4.4(1/3): 2606, *note 4.5.2(1): 2779.
85199 abs *note 4.4(1/3): 2645, *note 4.5.6(1): 2854.
85200 ampersand *note 4.4(1/3): 2622, *note 4.5.3(3): 2811.
85201 and *note 4.4(1/3): 2578, *note 4.5.1(2): 2739.
85202 binary *note 4.5(9): 2726.
85203 binary adding *note 4.5.3(1): 2799.
85204 concatenation *note 4.4(1/3): 2624, *note 4.5.3(3): 2813.
85205 divide *note 4.4(1/3): 2635, *note 4.5.5(1): 2842.
85206 equal *note 4.4(1/3): 2588, *note 4.5.2(1): 2761.
85207 equality *note 4.5.2(1): 2755.
85208 exponentiation *note 4.4(1/3): 2643, *note 4.5.6(7): 2863.
85209 greater than *note 4.4(1/3): 2604, *note 4.5.2(1): 2777.
85210 greater than or equal *note 4.4(1/3): 2608, *note 4.5.2(1): 2781.
85211 highest precedence *note 4.5.6(1): 2852.
85212 less than *note 4.4(1/3): 2596, *note 4.5.2(1): 2769.
85213 less than or equal *note 4.4(1/3): 2600, *note 4.5.2(1): 2773.
85214 logical *note 4.5.1(2): 2737.
85215 minus *note 4.4(1/3): 2618, *note 4.5.3(1): 2807, *note 4.5.4(1):
85216 2830.
85217 mod *note 4.4(1/3): 2637, *note 4.5.5(1): 2844.
85218 multiply *note 4.4(1/3): 2629, *note 4.5.5(1): 2836.
85219 multiplying *note 4.5.5(1): 2832.
85220 not *note 4.4(1/3): 2648, *note 4.5.6(3): 2857.
85221 not equal *note 4.4(1/3): 2592, *note 4.5.2(1): 2765.
85222 or *note 4.4(1/3): 2580, *note 4.5.1(2): 2741.
85223 ordering *note 4.5.2(1): 2757.
85224 plus *note 4.4(1/3): 2614, *note 4.5.3(1): 2803, *note 4.5.4(1):
85225 2826.
85226 predefined *note 4.5(9): 2724.
85227 relational *note 4.5.2(1): 2752.
85228 rem *note 4.4(1/3): 2639, *note 4.5.5(1): 2846.
85229 times *note 4.4(1/3): 2631, *note 4.5.5(1): 2838.
85230 unary *note 4.5(9): 2728.
85231 unary adding *note 4.5.4(1): 2822.
85232 user-defined *note 6.6(1): 3529.
85233 xor *note 4.4(1/3): 2582, *note 4.5.1(2): 2743.
85234 operator precedence *note 4.5(1): 2716.
85235 operator_symbol *note 6.1(9): 3297.
85236 used *note 4.1(3): 2367, *note 4.1.3(3): 2417, *note 6.1(5): 3290,
85237 *note 6.1(11): 3300, *note P: 9342.
85238 optimization *note 11.5(29): 4618, *note 11.6(1/3): 4624.
85239 Optimize pragma *note 2.8(23): 1287, *note L(23): 8721.
85240 or else (short-circuit control form) *note 4.4(1/3): 2584, *note
85241 4.5.1(1): 2734.
85242 or operator *note 4.4(1/3): 2579, *note 4.5.1(2): 2740.
85243 Ordered_Maps
85244 child of Ada.Containers *note A.18.6(2/3): 6904.
85245 Ordered_Sets
85246 child of Ada.Containers *note A.18.9(2/3): 7056.
85247 ordering operator *note 4.5.2(1): 2756.
85248 ordinary file *note A.16(45/2): 6622.
85249 ordinary fixed point type *note 3.5.9(1): 1819, *note 3.5.9(8/2):
85250 1841.
85251 ordinary_fixed_point_definition *note 3.5.9(3): 1825.
85252 used *note 3.5.9(2): 1823, *note P: 9017.
85253 OSC
85254 in Ada.Characters.Latin_1 *note A.3.3(19): 5574.
85255 other_control *note 2.1(13.1/2): 1147.
85256 other_format *note 2.1(10.3/2): 1141.
85257 other_private_use *note 2.1(13.2/2): 1148.
85258 other_surrogate *note 2.1(13.3/2): 1149.
85259 output *note A.6(1/2): 6226.
85260 Output aspect *note 13.13.2(38/3): 5341.
85261 Output attribute *note 13.13.2(19): 5314, *note 13.13.2(29): 5318.
85262 Output clause *note 13.3(7/2): 4937, *note 13.13.2(38/3): 5333.
85263 overall interpretation
85264 of a complete context *note 8.6(10): 3830.
85265 Overflow_Check *note 11.5(16): 4606.
85266 [partial] *note 3.5.4(20): 1747, *note 4.4(11): 2712, *note
85267 4.5.7(21/3): 2895, *note 5.4(13): 3180, *note G.2.1(11): 8258, *note
85268 G.2.2(7): 8272, *note G.2.3(25): 8276, *note G.2.4(2): 8281, *note
85269 G.2.6(3): 8288.
85270 Overlap
85271 in Ada.Containers.Hashed_Sets *note A.18.8(38/2): 7020.
85272 in Ada.Containers.Ordered_Sets *note A.18.9(39/2): 7093.
85273 Overlaps_Storage attribute *note 13.3(73.6/3): 4996.
85274 overload resolution *note 8.6(1/3): 3825.
85275 overloadable *note 8.3(7): 3727.
85276 overloaded *note 8.3(6): 3726.
85277 enumeration literal *note 3.5.1(9): 1690.
85278 overloading rules *note 1.1.2(26/3): 1020, *note 8.6(2): 3826.
85279 overridable *note 8.3(9/1): 3731.
85280 override *note 8.3(9/1): 3730, *note 12.3(17): 4707.
85281 a primitive subprogram *note 3.2.3(7/2): 1430.
85282 when implemented by *note 9.1(9.2/3): 3899, *note 9.4(11.1/3):
85283 3969.
85284 overriding operation *note N(24.1/2): 8847.
85285 overriding_indicator *note 8.3.1(2/2): 3752.
85286 used *note 3.9.3(1.1/3): 2179, *note 6.1(2/3): 3275, *note
85287 6.3(2/3): 3394, *note 6.7(2/3): 3532, *note 6.8(2/3): 3540, *note
85288 8.5.4(2/3): 3803, *note 9.5.2(2/3): 4014, *note 10.1.3(3/3): 4368, *note
85289 12.3(2/3): 4671, *note P: 9642.
85290 Overwrite
85291 in Ada.Strings.Bounded *note A.4.4(62): 5834, *note A.4.4(63):
85292 5835.
85293 in Ada.Strings.Fixed *note A.4.3(27): 5777, *note A.4.3(28): 5778.
85294 in Ada.Strings.Unbounded *note A.4.5(57): 5888, *note A.4.5(58):
85295 5889.
85296
85297
85298 \1f
85299 File: arm2012.info, Node: P, Next: Q, Prev: O, Up: Index
85300
85301 P
85302 ==
85303
85304
85305
85306 Pack aspect *note 13.2(5.1/3): 4905.
85307 Pack pragma *note J.15.3(2/3): 8466, *note L(24.1/3): 8724.
85308 Package *note 7(1): 3549, *note N(25): 8848.
85309 package instance *note 12.3(13): 4699.
85310 package_body *note 7.2(2/3): 3569.
85311 used *note 3.11(6): 2334, *note 10.1.1(7): 4319, *note P: 9114.
85312 package_body_stub *note 10.1.3(4): 4371.
85313 used *note 10.1.3(2): 4364, *note P: 9593.
85314 package_declaration *note 7.1(2): 3554.
85315 used *note 3.1(3/3): 1301, *note 10.1.1(5): 4310, *note P: 8938.
85316 package_renaming_declaration *note 8.5.3(2/3): 3796.
85317 used *note 8.5(2): 3772, *note 10.1.1(6): 4314, *note P: 9577.
85318 package_specification *note 7.1(3/3): 3556.
85319 used *note 7.1(2): 3555, *note 12.1(4): 4648, *note P: 9626.
85320 packed *note 13.2(5.1/3): 4903.
85321 Packed_Decimal
85322 in Interfaces.COBOL *note B.4(12/3): 7487.
85323 Packed_Format
85324 in Interfaces.COBOL *note B.4(26): 7507.
85325 Packed_Signed
85326 in Interfaces.COBOL *note B.4(27): 7509.
85327 Packed_Unsigned
85328 in Interfaces.COBOL *note B.4(27): 7508.
85329 padding bits *note 13.1(7/2): 4857.
85330 Page
85331 in Ada.Text_IO *note A.10.1(39): 6387.
85332 Page pragma *note 2.8(22): 1285, *note L(25): 8727.
85333 page terminator *note A.10(7): 6310.
85334 Page_Length
85335 in Ada.Text_IO *note A.10.1(26): 6362.
85336 Paragraph_Sign
85337 in Ada.Characters.Latin_1 *note A.3.3(22): 5602.
85338 parallel processing
85339 See task *note 9(1/3): 3857.
85340 parameter
85341 explicitly aliased *note 6.1(23.1/3): 3332.
85342 See formal parameter *note 6.1(17): 3324.
85343 See generic formal parameter *note 12(1): 4638.
85344 See also discriminant *note 3.7(1/2): 1959.
85345 See also loop parameter *note 5.5(6): 3196.
85346 parameter assigning back *note 6.4.1(17): 3478.
85347 parameter copy back *note 6.4.1(17): 3476.
85348 parameter mode *note 6.1(18/3): 3325.
85349 parameter passing *note 6.4.1(1): 3461.
85350 parameter_and_result_profile *note 6.1(13/2): 3303.
85351 used *note 3.10(5): 2231, *note 3.10(6/2): 2239, *note 6.1(4.2/2):
85352 3286, *note P: 9102.
85353 parameter_association *note 6.4(5): 3448.
85354 used *note 6.4(4): 3446, *note P: 9378.
85355 parameter_profile *note 6.1(12): 3301.
85356 used *note 3.10(5): 2230, *note 3.10(6/2): 2237, *note 6.1(4.1/2):
85357 3283, *note 9.5.2(2/3): 4017, *note 9.5.2(3): 4022, *note 9.5.2(6):
85358 4036, *note P: 9505.
85359 parameter_specification *note 6.1(15/3): 3312.
85360 used *note 6.1(14): 3311, *note P: 9356.
85361 Parameterless_Handler
85362 in Ada.Interrupts *note C.3.2(2/3): 7595.
85363 Params_Stream_Type
85364 in System.RPC *note E.5(6): 8128.
85365 parent *note N(25.1/2): 8849.
85366 in Ada.Containers.Multiway_Trees *note A.18.10(59/3): 7195.
85367 parent body
85368 of a subunit *note 10.1.3(8/2): 4383.
85369 parent declaration
85370 of a library unit *note 10.1.1(10): 4329.
85371 of a library_item *note 10.1.1(10): 4328.
85372 parent subtype *note 3.4(3/2): 1536.
85373 parent type *note 3.4(3/2): 1537.
85374 parent unit
85375 of a library unit *note 10.1.1(10): 4331.
85376 Parent_Tag
85377 in Ada.Tags *note 3.9(7.2/2): 2103.
85378 parent_unit_name *note 10.1.1(8): 4320.
85379 used *note 6.1(5): 3288, *note 6.1(7): 3295, *note 7.1(3/3): 3561,
85380 *note 7.2(2/3): 3574, *note 10.1.3(7): 4381, *note P: 9409.
85381 part
85382 of a type *note 3.2(6/2): 1349.
85383 of an object or value *note 3.2(6/2): 1348.
85384 partial view
85385 of a type *note 7.3(4): 3593.
85386 partition *note 10.2(2): 4419, *note N(26): 8850.
85387 partition building *note 10.2(2): 4420.
85388 partition communication subsystem (PCS) *note E.5(1/2): 8123.
85389 Partition_Check
85390 [partial] *note E.4(19): 8116.
85391 Partition_Elaboration_Policy pragma *note H.6(3/2): 8410, *note
85392 L(25.1/2): 8729.
85393 Partition_Id
85394 in System.RPC *note E.5(4): 8126.
85395 Partition_Id attribute *note E.1(9): 8030.
85396 pass by copy *note 6.2(2): 3378.
85397 pass by reference *note 6.2(2): 3381.
85398 passive partition *note E.1(2): 8022.
85399 Pattern_Error
85400 in Ada.Strings *note A.4.1(5): 5722.
85401 PCS (partition communication subsystem) *note E.5(1/2): 8124.
85402 Peak_Use
85403 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(7/3): 7311.
85404 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(6/3):
85405 7297.
85406 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(7/3):
85407 7284.
85408 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(7/3):
85409 7304.
85410 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(6/3):
85411 7291.
85412 pending interrupt occurrence *note C.3(2): 7568.
85413 per-object constraint *note 3.8(18/2): 2046.
85414 per-object expression *note 3.8(18/2): 2045.
85415 percent sign *note 2.1(15/3): 1178.
85416 Percent_Sign
85417 in Ada.Characters.Latin_1 *note A.3.3(8): 5484.
85418 perfect result set *note G.2.3(5): 8274.
85419 periodic task
85420 example *note 9.6(39): 4142.
85421 See delay_until_statement *note 9.6(39): 4143.
85422 Pi
85423 in Ada.Numerics *note A.5(3/2): 6055.
85424 Pic_String
85425 in Ada.Text_IO.Editing *note F.3.3(7): 8159.
85426 Picture
85427 in Ada.Text_IO.Editing *note F.3.3(4): 8156.
85428 picture String
85429 for edited output *note F.3.1(1/3): 8152.
85430 Picture_Error
85431 in Ada.Text_IO.Editing *note F.3.3(9): 8162.
85432 Pilcrow_Sign
85433 in Ada.Characters.Latin_1 *note A.3.3(22): 5601.
85434 plain_char
85435 in Interfaces.C *note B.3(11): 7381.
85436 plane
85437 character *note 2.1(1/3): 1128.
85438 PLD
85439 in Ada.Characters.Latin_1 *note A.3.3(17): 5556.
85440 PLU
85441 in Ada.Characters.Latin_1 *note A.3.3(17): 5557.
85442 plus operator *note 4.4(1/3): 2613, *note 4.5.3(1): 2802, *note
85443 4.5.4(1): 2825.
85444 plus sign *note 2.1(15/3): 1160.
85445 Plus_Minus_Sign
85446 in Ada.Characters.Latin_1 *note A.3.3(22): 5596.
85447 Plus_Sign
85448 in Ada.Characters.Latin_1 *note A.3.3(8): 5490.
85449 PM
85450 in Ada.Characters.Latin_1 *note A.3.3(19): 5575.
85451 point *note 2.1(15/3): 1166.
85452 Pointer
85453 in Interfaces.C.Pointers *note B.3.2(5): 7453.
85454 See access value *note 3.10(1): 2218.
85455 See type System.Address *note 13.7(34/2): 5096.
85456 pointer type
85457 See access type *note 3.10(1): 2219.
85458 Pointer_Error
85459 in Interfaces.C.Pointers *note B.3.2(8): 7456.
85460 Pointers
85461 child of Interfaces.C *note B.3.2(4): 7452.
85462 polymorphism *note 3.9(1): 2073, *note 3.9.2(1/2): 2144.
85463 pool
85464 default *note 13.11.3(4.1/3): 5213.
85465 subpool *note 13.11.4(18/3): 5230.
85466 pool element *note 3.10(7/1): 2245, *note 13.11(11): 5160.
85467 pool type *note 13.11(11): 5158.
85468 pool-specific access type *note 3.10(7/1): 2242, *note 3.10(8): 2246.
85469 Pool_of_Subpool
85470 in System.Storage_Pools.Subpools *note 13.11.4(9/3): 5221.
85471 Pos attribute *note 3.5.5(2): 1764.
85472 position *note 13.5.1(4): 5033.
85473 used *note 13.5.1(3): 5030, *note P: 9740.
85474 Position attribute *note 13.5.2(2/2): 5046.
85475 position number *note 3.5(1): 1582.
85476 of an enumeration value *note 3.5.1(7): 1689.
85477 of an integer value *note 3.5.4(15): 1741.
85478 positional association *note 6.4(7): 3455, *note 6.4.1(2/3): 3463,
85479 *note 12.3(6): 4695.
85480 positional component association *note 4.3.1(6): 2512.
85481 positional discriminant association *note 3.7.1(4): 2002.
85482 positional parameter association *note 6.4.1(2/3): 3465.
85483 positional_array_aggregate *note 4.3.3(3/2): 2539.
85484 used *note 4.3.3(2): 2537, *note P: 9170.
85485 Positive *note 3.5.4(12): 1735.
85486 Positive subtype of Integer
85487 in Standard *note A.1(13): 5387.
85488 Positive_Count subtype of Count
85489 in Ada.Direct_IO *note A.8.4(4): 6273.
85490 in Ada.Streams.Stream_IO *note A.12.1(7): 6518.
85491 in Ada.Text_IO *note A.10.1(5): 6323.
85492 possible interpretation *note 8.6(14): 3831.
85493 for direct_names *note 8.3(24): 3748.
85494 for selector_names *note 8.3(24): 3749.
85495 Post aspect *note 6.1.1(4/3): 3349.
85496 Post'Class aspect *note 6.1.1(5/3): 3353.
85497 post-compilation error *note 1.1.2(29): 1029.
85498 post-compilation rules *note 1.1.2(29): 1030.
85499 postcondition *note N(26.1/3): 8851.
85500 postcondition check *note 6.1.1(35/3): 3373.
85501 postcondition expression
85502 class-wide *note 6.1.1(5/3): 3351.
85503 specific *note 6.1.1(4/3): 3347.
85504 potentially blocking operation *note 9.5.1(8): 4010.
85505 Abort_Task *note C.7.1(16): 7652.
85506 delay_statement *note 9.6(34): 4140, *note D.9(5): 7894.
85507 remote subprogram call *note E.4(17): 8111.
85508 RPC operations *note E.5(23): 8137.
85509 Suspend_Until_True *note D.10(10): 7906.
85510 potentially unevaluated expression *note 6.1.1(20/3): 3359.
85511 potentially use-visible *note 8.4(8/3): 3765.
85512 [partial] *note 12.6(9.2/3): 4821.
85513 Pound_Sign
85514 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5581.
85515 Pragma *note 2.8(1): 1258, *note 2.8(2): 1259, *note L(1): 8616, *note
85516 N(27): 8852.
85517 pragma argument *note 2.8(9): 1274.
85518 pragma name *note 2.8(9): 1273.
85519 pragma, categorization *note E.2(2/3): 8034.
85520 Remote_Call_Interface *note E.2.3(2): 8069.
85521 Remote_Types *note E.2.2(2): 8058.
85522 Shared_Passive *note E.2.1(2): 8044.
85523 pragma, configuration *note 10.1.5(8): 4402.
85524 Assertion_Policy *note 11.4.2(7/3): 4575.
85525 Detect_Blocking *note H.5(4/2): 8408.
85526 Discard_Names *note C.5(4): 7614.
85527 Locking_Policy *note D.3(5): 7766.
85528 Normalize_Scalars *note H.1(4): 8355.
85529 Partition_Elaboration_Policy *note H.6(5/2): 8413.
85530 Priority_Specific_Dispatching *note D.2.2(5/2): 7724.
85531 Profile *note 13.12(14/3): 5267.
85532 Queuing_Policy *note D.4(5): 7787.
85533 Restrictions *note 13.12(8/3): 5261.
85534 Reviewable *note H.3.1(4): 8360.
85535 Suppress *note 11.5(5/2): 4596.
85536 Task_Dispatching_Policy *note D.2.2(5/2): 7722.
85537 Unsuppress *note 11.5(5/2): 4598.
85538 pragma, identifier specific to *note 2.8(10/3): 1277.
85539 pragma, interfacing
85540 Convention *note J.15.5(1/3): 8478.
85541 Export *note J.15.5(1/3): 8476.
85542 Import *note J.15.5(1/3): 8474.
85543 pragma, library unit *note 10.1.5(7/3): 4398.
85544 All_Calls_Remote *note E.2.3(6): 8077.
85545 categorization pragmas *note E.2(2/3): 8036.
85546 Elaborate_Body *note 10.2.1(24): 4476.
85547 Preelaborate *note 10.2.1(4): 4441.
85548 Pure *note 10.2.1(15): 4458.
85549 pragma, program unit *note 10.1.5(2): 4395.
85550 Inline *note J.15.1(1/3): 8452.
85551 library unit pragmas *note 10.1.5(7/3): 4400.
85552 pragma, representation *note 13.1(1/1): 4842.
85553 Asynchronous *note J.15.13(1/3): 8565.
85554 Atomic *note J.15.8(9/3): 8537.
85555 Atomic_Components *note J.15.8(9/3): 8541.
85556 Convention *note J.15.5(1/3): 8484.
85557 Discard_Names *note C.5(6): 7616.
85558 Export *note J.15.5(1/3): 8482.
85559 Import *note J.15.5(1/3): 8480.
85560 Independent *note J.15.8(9/3): 8545.
85561 Independent_Components *note J.15.8(9/3): 8547.
85562 No_Return *note J.15.2(1/3): 8458.
85563 Pack *note J.15.3(1/3): 8464.
85564 Unchecked_Union *note J.15.6(1/3): 8505.
85565 Volatile *note J.15.8(9/3): 8539.
85566 Volatile_Components *note J.15.8(9/3): 8543.
85567 pragma_argument_association *note 2.8(3/3): 1263.
85568 used *note 2.8(2): 1262, *note 13.12(11/3): 5265, *note L(27.3/3):
85569 8747, *note P: 8920.
85570 pragmas
85571 All_Calls_Remote *note E.2.3(5): 8073, *note L(2): 8617.
85572 Assert *note 11.4.2(3/2): 4561, *note L(2.1/2): 8620.
85573 Assertion_Policy *note 11.4.2(6.1/3): 4568, *note 11.4.2(6/2):
85574 4565, *note L(2.2/2): 8624, *note L(2.3/3): 8627.
85575 Asynchronous *note J.15.13(2/3): 8566, *note L(3.1/3): 8633.
85576 Atomic *note J.15.8(2/3): 8518, *note L(4.1/3): 8636.
85577 Atomic_Components *note J.15.8(5/3): 8527, *note L(5.1/3): 8639.
85578 Attach_Handler *note J.15.7(4/3): 8512, *note L(6.1/3): 8642.
85579 Convention *note J.15.5(4/3): 8497, *note L(8.1/3): 8646.
85580 CPU *note J.15.9(2/3): 8548, *note L(8.2/3): 8650.
85581 Default_Storage_Pool *note 13.11.3(3/3): 5206, *note L(8.3/3):
85582 8653.
85583 Detect_Blocking *note H.5(3/2): 8405, *note L(8.4/2): 8656.
85584 Discard_Names *note C.5(3): 7610, *note L(9): 8658.
85585 Dispatching_Domain *note J.15.10(2/3): 8552, *note L(9.1/3): 8661.
85586 Elaborate *note 10.2.1(20): 4464, *note L(10): 8663.
85587 Elaborate_All *note 10.2.1(21): 4468, *note L(11): 8667.
85588 Elaborate_Body *note 10.2.1(22): 4472, *note L(12): 8671.
85589 Export *note J.15.5(3/3): 8491, *note L(13.1/3): 8674.
85590 Import *note J.15.5(2/3): 8485, *note L(14.1/3): 8680.
85591 Independent *note J.15.8(4/3): 8524, *note L(14.2/3): 8686.
85592 Independent_Components *note J.15.8(7/3): 8533, *note L(14.3/3):
85593 8689.
85594 Inline *note J.15.1(2/3): 8453, *note L(15.1/3): 8692.
85595 Inspection_Point *note H.3.2(3): 8361, *note L(16): 8696.
85596 Interrupt_Handler *note J.15.7(2/3): 8509, *note L(17.1/3): 8700.
85597 Interrupt_Priority *note J.15.11(4/3): 8557, *note L(18.1/3): 8703.
85598 Linker_Options *note B.1(8): 7342, *note L(19): 8705.
85599 List *note 2.8(21): 1281, *note L(20): 8708.
85600 Locking_Policy *note D.3(3): 7760, *note L(21): 8711.
85601 No_Return *note J.15.2(2/3): 8459, *note L(21.2/3): 8714.
85602 Normalize_Scalars *note H.1(3): 8352, *note L(22): 8718.
85603 Optimize *note 2.8(23): 1286, *note L(23): 8720.
85604 Pack *note J.15.3(2/3): 8465, *note L(24.1/3): 8723.
85605 Page *note 2.8(22): 1284, *note L(25): 8726.
85606 Partition_Elaboration_Policy *note H.6(3/2): 8409, *note L(25.1/2):
85607 8728.
85608 Preelaborable_Initialization *note 10.2.1(4.2/2): 4442, *note
85609 L(25.2/2): 8731.
85610 Preelaborate *note 10.2.1(3): 4437, *note L(26): 8734.
85611 Priority *note J.15.11(2/3): 8555, *note L(27.1/3): 8737.
85612 Priority_Specific_Dispatching *note D.2.2(3.2/2): 7716, *note
85613 L(27.2/2): 8739.
85614 Profile *note 13.12(11/3): 5262, *note L(27.3/3): 8744.
85615 Pure *note 10.2.1(14): 4454, *note L(28): 8748.
85616 Queuing_Policy *note D.4(3): 7781, *note L(29): 8751.
85617 Relative_Deadline *note J.15.12(2/3): 8561, *note L(29.2/3): 8754.
85618 Remote_Call_Interface *note E.2.3(3): 8070, *note L(30): 8756.
85619 Remote_Types *note E.2.2(3): 8059, *note L(31): 8759.
85620 Restrictions *note 13.12(3): 5248, *note L(32): 8762.
85621 Reviewable *note H.3.1(3): 8357, *note L(33): 8766.
85622 Shared_Passive *note E.2.1(3): 8045, *note L(34): 8768.
85623 Storage_Size *note J.15.4(2/3): 8468, *note L(35.1/3): 8771.
85624 Suppress *note 11.5(4/2): 4589, *note J.10(3/2): 8442, *note L(36):
85625 8774.
85626 Task_Dispatching_Policy *note D.2.2(3): 7713, *note L(37): 8777.
85627 Unchecked_Union *note J.15.6(2/3): 8506, *note L(37.2/3): 8780.
85628 Unsuppress *note 11.5(4.1/2): 4592, *note L(37.3/2): 8783.
85629 Volatile *note J.15.8(3/3): 8521, *note L(38.1/3): 8786.
85630 Volatile_Components *note J.15.8(6/3): 8530, *note L(39.1/3): 8789.
85631 Pre aspect *note 6.1.1(2/3): 3341.
85632 Pre'Class aspect *note 6.1.1(3/3): 3345.
85633 precedence of operators *note 4.5(1): 2715.
85634 precondition *note N(27.1/3): 8853.
85635 precondition check
85636 class-wide *note 6.1.1(33/3): 3370.
85637 specific *note 6.1.1(32/3): 3367.
85638 precondition expression
85639 class-wide *note 6.1.1(3/3): 3343.
85640 specific *note 6.1.1(2/3): 3339.
85641 Pred attribute *note 3.5(25): 1631.
85642 predecessor element
85643 of an ordered set *note A.18.9(81/3): 7132.
85644 predecessor node
85645 of an ordered map *note A.18.6(58/3): 6961.
85646 predefined environment *note A(1): 5379.
85647 predefined exception *note 11.1(4): 4493.
85648 predefined library unit
85649 See language-defined library units
85650 predefined operation
85651 of a type *note 3.2.3(1/2): 1427.
85652 predefined operations
85653 of a discrete type *note 3.5.5(10/3): 1776.
85654 of a fixed point type *note 3.5.10(17): 1877.
85655 of a floating point type *note 3.5.8(3): 1817.
85656 of a record type *note 3.8(24): 2050.
85657 of an access type *note 3.10.2(34/2): 2316.
85658 of an array type *note 3.6.2(15): 1955.
85659 predefined operator *note 4.5(9): 2723.
85660 [partial] *note 3.2.1(9): 1395.
85661 predefined type *note 3.2.1(10): 1396.
85662 See language-defined types
85663 predicate *note 4.5.8(3/3): 2907, *note N(27.2/3): 8854.
85664 of a subtype *note 3.2.4(6/3): 1440.
85665 used *note 4.5.8(1/3): 2902, *note P: 9252.
85666 predicate aspect *note 3.2.4(1/3): 1432.
85667 predicate check
85668 allocator *note 3.2.4(31/3): 1449.
85669 enabled *note 3.2.4(7/3): 1443.
85670 in out parameters *note 3.2.4(31/3): 1447.
85671 object_declaration *note 3.2.4(31/3): 1448.
85672 subtype conversion *note 4.6(51/3): 3000.
85673 predicate evaluated
85674 membership *note 4.5.2(29/3): 2797.
85675 Valid attribute *note 13.9.2(3/3): 5144, *note K.2(263/3): 8613.
85676 predicate specification *note 3.2.4(1/3): 1433.
85677 predicate-static *note 3.2.4(15/3): 1444.
85678 preelaborable
85679 of an elaborable construct *note 10.2.1(5): 4445.
85680 preelaborable initialization *note 10.2.1(11.1/2): 4452.
85681 Preelaborable_Initialization pragma *note 10.2.1(4.2/2): 4443, *note
85682 L(25.2/2): 8732.
85683 Preelaborate aspect *note 10.2.1(11/3): 4449.
85684 Preelaborate pragma *note 10.2.1(3): 4438, *note L(26): 8735.
85685 preelaborated *note 10.2.1(11/3): 4451.
85686 [partial] *note 10.2.1(11/3): 4447, *note E.2.1(9): 8053.
85687 preempt
85688 a running task *note D.2.3(9/2): 7731.
85689 preference
85690 for root numeric operators and ranges *note 8.6(29): 3850.
85691 for universal access equality operators *note 8.6(29.1/3): 3851.
85692 preference control
85693 See requeue *note 9.5.4(1): 4093.
85694 prefix *note 4.1(4): 2368.
85695 of a prefixed view *note 4.1.3(9.2/3): 2420.
85696 used *note 4.1.1(2): 2388, *note 4.1.2(2): 2401, *note 4.1.3(2):
85697 2412, *note 4.1.4(2): 2428, *note 4.1.4(4): 2434, *note 4.1.6(10/3):
85698 2463, *note 6.4(2): 3439, *note 6.4(3): 3443, *note P: 9375.
85699 prefixed view *note 4.1.3(9.2/3): 2419.
85700 prefixed view profile *note 6.3.1(24.1/2): 3433.
85701 Prepend
85702 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(22/2): 6789.
85703 in Ada.Containers.Vectors *note A.18.2(44/2): 6711, *note
85704 A.18.2(45/2): 6712.
85705 Prepend_Child
85706 in Ada.Containers.Multiway_Trees *note A.18.10(51/3): 7187.
85707 prescribed result
85708 for the evaluation of a complex arithmetic operation *note
85709 G.1.1(42): 8205.
85710 for the evaluation of a complex elementary function *note
85711 G.1.2(35): 8232.
85712 for the evaluation of an elementary function *note A.5.1(37): 6092.
85713 Previous
85714 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(38/2): 6805,
85715 *note A.18.3(40/2): 6807.
85716 in Ada.Containers.Ordered_Maps *note A.18.6(36/2): 6946, *note
85717 A.18.6(37/2): 6947.
85718 in Ada.Containers.Ordered_Sets *note A.18.9(47/2): 7101, *note
85719 A.18.9(48/2): 7102.
85720 in Ada.Containers.Vectors *note A.18.2(65/2): 6732, *note
85721 A.18.2(66/2): 6733.
85722 in Ada.Iterator_Interfaces *note 5.5.1(4/3): 3208.
85723 Previous_Sibling
85724 in Ada.Containers.Multiway_Trees *note A.18.10(65/3): 7201, *note
85725 A.18.10(67/3): 7203.
85726 primary *note 4.4(7/3): 2702.
85727 used *note 4.4(6): 2699, *note P: 9225.
85728 primitive function *note A.5.3(17): 6150.
85729 primitive operation
85730 [partial] *note 3.2(1): 1329.
85731 primitive operations *note N(28): 8855.
85732 of a type *note 3.2.3(1/2): 1428.
85733 primitive operator
85734 of a type *note 3.2.3(8): 1431.
85735 primitive subprograms
85736 of a type *note 3.2.3(2): 1429.
85737 priority *note D.1(15): 7691.
85738 of a protected object *note D.3(6/2): 7768.
85739 Priority aspect *note D.1(6.2/3): 7687.
85740 Priority attribute *note D.5.2(3/2): 7801.
85741 priority inheritance *note D.1(15): 7692.
85742 priority inversion *note D.2.3(11/2): 7732.
85743 priority of an entry call *note D.4(9): 7793.
85744 Priority pragma *note J.15.11(2/3): 8556, *note L(27.1/3): 8738.
85745 Priority subtype of Any_Priority
85746 in System *note 13.7(16): 5093.
85747 Priority_Queuing queuing policy *note D.4(8): 7792.
85748 Priority_Specific_Dispatching pragma *note D.2.2(3.2/2): 7717, *note
85749 L(27.2/2): 8740.
85750 private declaration of a library unit *note 10.1.1(12): 4337.
85751 private descendant
85752 of a library unit *note 10.1.1(12): 4339.
85753 private extension *note 3.2(4.1/2): 1345, *note 3.9(2.1/2): 2084,
85754 *note 3.9.1(1/2): 2132, *note N(29/2): 8856.
85755 [partial] *note 7.3(14): 3600, *note 12.5.1(5/3): 4777.
85756 private library unit *note 10.1.1(12): 4336.
85757 private operations *note 7.3.1(1): 3603.
85758 private part *note 8.2(5): 3705.
85759 of a package *note 7.1(6/2): 3566.
85760 of a protected unit *note 9.4(11/2): 3968.
85761 of a task unit *note 9.1(9): 3898.
85762 private type *note 3.2(4.1/2): 1344, *note N(30/2): 8857.
85763 [partial] *note 7.3(14): 3599.
85764 private types and private extensions *note 7.3(1): 3578.
85765 private_extension_declaration *note 7.3(3/3): 3587.
85766 used *note 3.2.1(2): 1371, *note P: 8947.
85767 private_type_declaration *note 7.3(2/3): 3583.
85768 used *note 3.2.1(2): 1370, *note P: 8946.
85769 procedure *note 6(1): 3269, *note N(30.1/2): 8858.
85770 null *note 6.7(3/3): 3537.
85771 procedure instance *note 12.3(13): 4701.
85772 procedure_call_statement *note 6.4(2): 3437.
85773 used *note 5.1(4/2): 3119, *note 9.7.2(3.1/2): 4223, *note P: 9281.
85774 procedure_or_entry_call *note 9.7.2(3.1/2): 4222.
85775 used *note 9.7.2(3/2): 4220, *note 9.7.4(4/2): 4237, *note P: 9560.
85776 procedure_specification *note 6.1(4.1/2): 3281.
85777 used *note 6.1(4/2): 3279, *note 6.7(2/3): 3533, *note P: 9334.
85778 processing node *note E(2): 8016.
85779 profile *note 6.1(22): 3328.
85780 associated with a dereference *note 4.1(10): 2378.
85781 fully conformant *note 6.3.1(18/3): 3428.
85782 mode conformant *note 6.3.1(16/3): 3422.
85783 No_Implementation_Extensions *note 13.12.1(10/3): 5288.
85784 subtype conformant *note 6.3.1(17/3): 3425.
85785 type conformant *note 6.3.1(15/2): 3419.
85786 Profile pragma *note 13.12(11/3): 5263, *note L(27.3/3): 8745.
85787 profile resolution rule
85788 name with a given expected profile *note 8.6(26): 3845.
85789 progenitor *note N(30.2/2): 8859.
85790 progenitor subtype *note 3.9.4(9/2): 2212.
85791 progenitor type *note 3.9.4(9/2): 2213.
85792 program *note 10.2(1): 4416, *note N(31): 8860.
85793 program execution *note 10.2(1): 4417.
85794 program library
85795 See library *note 10(2): 4289.
85796 See library *note 10.1.4(9): 4393.
85797 Program unit *note 10.1(1): 4292, *note N(32): 8861.
85798 program unit pragma *note 10.1.5(2): 4394.
85799 Inline *note J.15.1(1/3): 8451.
85800 library unit pragmas *note 10.1.5(7/3): 4399.
85801 Program_Error
85802 raised by failure of run-time check *note 1.1.3(20): 1059, *note
85803 1.1.5(8): 1079, *note 1.1.5(12): 1085, *note 3.5.5(8): 1775, *note
85804 3.10.2(29): 2307, *note 3.11(14): 2345, *note 4.6(57/3): 3011, *note
85805 4.8(10.1/3): 3064, *note 4.8(10.2/2): 3067, *note 4.8(10.3/2): 3070,
85806 *note 4.8(10.4/3): 3076, *note 6.2(12/3): 3392, *note 6.4(11/2): 3458,
85807 *note 6.5(8/3): 3513, *note 6.5(21/3): 3519, *note 6.5.1(9/2): 3526,
85808 *note 7.6.1(15): 3688, *note 7.6.1(16/2): 3689, *note 7.6.1(17): 3690,
85809 *note 7.6.1(17.2/1): 3691, *note 7.6.1(18/2): 3692, *note 8.5.4(8.1/1):
85810 3813, *note 9.4(20): 3986, *note 9.5.1(17): 4012, *note 9.5.3(7/3):
85811 4078, *note 9.7.1(21): 4214, *note 9.8(20/3): 4267, *note 10.2(26):
85812 4433, *note 11.1(4): 4495, *note 11.5(19): 4609, *note 12.5.1(23.3/2):
85813 4781, *note 13.7.1(16): 5108, *note 13.9.1(9): 5138, *note 13.11.2(13):
85814 5200, *note 13.11.2(14): 5202, *note 13.11.4(27/3): 5242, *note
85815 13.11.4(30/3): 5245, *note A.5.2(40.1/1): 6125, *note A.7(14/3): 6236,
85816 *note B.3.3(22/2): 7476, *note C.3.1(10/3): 7584, *note C.3.1(11/3):
85817 7588, *note C.3.2(17/3): 7605, *note C.3.2(20): 7606, *note C.3.2(21/3):
85818 7607, *note C.3.2(22/2): 7608, *note C.7.1(15): 7651, *note C.7.1(17/3):
85819 7655, *note C.7.2(13): 7664, *note D.3(13): 7776, *note D.3(13.2/2):
85820 7778, *note D.3(13.4/2): 7779, *note D.5.1(9): 7798, *note D.5.2(6/3):
85821 7802, *note D.7(7.1/3): 7813, *note D.7(10.4/3): 7826, *note
85822 D.7(19.1/2): 7862, *note D.10(10): 7908, *note D.11(8): 7921, *note
85823 E.1(10/2): 8032, *note E.3(6): 8098, *note E.4(18/1): 8115, *note
85824 J.7.1(7): 8434.
85825 in Standard *note A.1(46): 5399.
85826 prohibited
85827 tampering with a holder *note A.18.18(35/3): 7246.
85828 tampering with a list *note A.18.3(69.1/3): 6821.
85829 tampering with a map *note A.18.4(15.1/3): 6843.
85830 tampering with a set *note A.18.7(14.1/3): 6972.
85831 tampering with a tree *note A.18.10(90/3): 7211.
85832 tampering with a vector *note A.18.2(97.1/3): 6749.
85833 propagate *note 11.4(1): 4527.
85834 an exception occurrence by an execution, to a dynamically enclosing
85835 execution *note 11.4(6): 4532.
85836 proper_body *note 3.11(6): 2332.
85837 used *note 3.11(5): 2330, *note 10.1.3(7): 4382, *note P: 9606.
85838 protected action *note 9.5.1(4): 4004.
85839 complete *note 9.5.1(6): 4007.
85840 start *note 9.5.1(5): 4005.
85841 protected calling convention *note 6.3.1(12): 3414.
85842 protected declaration *note 9.4(1): 3933.
85843 protected entry *note 9.4(1): 3930.
85844 protected function *note 9.5.1(1): 4002.
85845 protected interface *note 3.9.4(5/2): 2201.
85846 protected object *note 9(3): 3861, *note 9.4(1): 3927.
85847 protected operation *note 9.4(1): 3928.
85848 protected procedure *note 9.5.1(1): 4001.
85849 protected subprogram *note 9.4(1): 3929, *note 9.5.1(1): 4000.
85850 protected tagged type *note 3.9.4(6/2): 2211.
85851 protected type *note N(33/2): 8862.
85852 protected unit *note 9.4(1): 3932.
85853 protected_body *note 9.4(7/3): 3957.
85854 used *note 3.11(6): 2336, *note P: 9116.
85855 protected_body_stub *note 10.1.3(6): 4377.
85856 used *note 10.1.3(2): 4366, *note P: 9595.
85857 protected_definition *note 9.4(4): 3946.
85858 used *note 9.4(2/3): 3940, *note 9.4(3/3): 3945, *note P: 9481.
85859 protected_element_declaration *note 9.4(6): 3954.
85860 used *note 9.4(4): 3948, *note P: 9487.
85861 protected_operation_declaration *note 9.4(5/1): 3950.
85862 used *note 9.4(4): 3947, *note 9.4(6): 3955, *note P: 9492.
85863 protected_operation_item *note 9.4(8/1): 3962.
85864 used *note 9.4(7/3): 3960, *note P: 9496.
85865 protected_type_declaration *note 9.4(2/3): 3935.
85866 used *note 3.2.1(3/3): 1378, *note P: 8953.
85867 ptrdiff_t
85868 in Interfaces.C *note B.3(12): 7382.
85869 PU1
85870 in Ada.Characters.Latin_1 *note A.3.3(18): 5562.
85871 PU2
85872 in Ada.Characters.Latin_1 *note A.3.3(18): 5563.
85873 public declaration of a library unit *note 10.1.1(12): 4335.
85874 public descendant
85875 of a library unit *note 10.1.1(12): 4338.
85876 public library unit *note 10.1.1(12): 4334.
85877 punctuation_connector *note 2.1(10.2/2): 1140.
85878 used *note 2.3(3.1/3): 1202, *note P: 8895.
85879 pure *note 10.2.1(15.1/3): 4459.
85880 Pure aspect *note 10.2.1(17/3): 4462.
85881 Pure pragma *note 10.2.1(14): 4455, *note L(28): 8749.
85882 Put
85883 in Ada.Text_IO *note A.10.1(42): 6391, *note A.10.1(48): 6401,
85884 *note A.10.1(55): 6413, *note A.10.1(60): 6423, *note A.10.1(66): 6432,
85885 *note A.10.1(67): 6435, *note A.10.1(71): 6442, *note A.10.1(72): 6445,
85886 *note A.10.1(76): 6453, *note A.10.1(77): 6455, *note A.10.1(82): 6461,
85887 *note A.10.1(83): 6464.
85888 in Ada.Text_IO.Bounded_IO *note A.10.11(4/2): 6483, *note
85889 A.10.11(5/2): 6484.
85890 in Ada.Text_IO.Complex_IO *note G.1.3(7): 8241, *note G.1.3(8):
85891 8244.
85892 in Ada.Text_IO.Editing *note F.3.3(14): 8171, *note F.3.3(15):
85893 8172, *note F.3.3(16): 8173.
85894 in Ada.Text_IO.Unbounded_IO *note A.10.12(4/2): 6492, *note
85895 A.10.12(5/2): 6493.
85896 Put_Line
85897 in Ada.Text_IO *note A.10.1(50): 6406.
85898 in Ada.Text_IO.Bounded_IO *note A.10.11(6/2): 6485, *note
85899 A.10.11(7/2): 6486.
85900 in Ada.Text_IO.Unbounded_IO *note A.10.12(6/2): 6494, *note
85901 A.10.12(7/2): 6495.
85902
85903
85904 \1f
85905 File: arm2012.info, Node: Q, Next: R, Prev: P, Up: Index
85906
85907 Q
85908 ==
85909
85910
85911
85912 qualified_expression *note 4.7(2): 3018.
85913 used *note 4.1(2/3): 2362, *note 4.8(2/3): 3040, *note 13.8(2):
85914 5115, *note P: 9268.
85915 quantified expressions *note 4.5.8(5/3): 2910.
85916 quantified_expression *note 4.5.8(1/3): 2899.
85917 used *note 4.4(7/3): 2710, *note P: 9236.
85918 quantifier *note 4.5.8(2/3): 2906.
85919 used *note 4.5.8(1/3): 2900, *note P: 9253.
85920 Query_Element
85921 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(16/2): 6778.
85922 in Ada.Containers.Hashed_Maps *note A.18.5(16/2): 6867.
85923 in Ada.Containers.Hashed_Sets *note A.18.8(17/2): 7000.
85924 in Ada.Containers.Indefinite_Holders *note A.18.18(14/3): 7235.
85925 in Ada.Containers.Multiway_Trees *note A.18.10(26/3): 7162.
85926 in Ada.Containers.Ordered_Maps *note A.18.6(15/2): 6918.
85927 in Ada.Containers.Ordered_Sets *note A.18.9(16/2): 7071.
85928 in Ada.Containers.Vectors *note A.18.2(31/2): 6691, *note
85929 A.18.2(32/2): 6692.
85930 Question
85931 in Ada.Characters.Latin_1 *note A.3.3(10): 5501.
85932 Queue
85933 in Ada.Containers.Bounded_Priority_Queues *note A.18.31(4/3): 7306.
85934 in Ada.Containers.Bounded_Synchronized_Queues *note A.18.29(4/3):
85935 7293.
85936 in Ada.Containers.Synchronized_Queue_Interfaces *note A.18.27(4/3):
85937 7280.
85938 in Ada.Containers.Unbounded_Priority_Queues *note A.18.30(4/3):
85939 7299.
85940 in Ada.Containers.Unbounded_Synchronized_Queues *note A.18.28(4/3):
85941 7287.
85942 queuing policy *note D.4(1/3): 7780, *note D.4(6): 7788.
85943 FIFO_Queuing *note D.4(7/2): 7789.
85944 Priority_Queuing *note D.4(8): 7791.
85945 Queuing_Policy pragma *note D.4(3): 7782, *note L(29): 8752.
85946 Quotation
85947 in Ada.Characters.Latin_1 *note A.3.3(8): 5481.
85948 quotation mark *note 2.1(15/3): 1151.
85949 quoted string
85950 See string_literal *note 2.6(1): 1249.
85951
85952
85953 \1f
85954 File: arm2012.info, Node: R, Next: S, Prev: Q, Up: Index
85955
85956 R
85957 ==
85958
85959
85960
85961 raise
85962 an exception *note 11(1/3): 4487.
85963 an exception *note 11.3(4/2): 4523.
85964 an exception *note N(18): 8829.
85965 an exception occurrence *note 11.4(3): 4531.
85966 Raise_Exception
85967 in Ada.Exceptions *note 11.4.1(4/3): 4545.
85968 raise_statement *note 11.3(2/2): 4519.
85969 used *note 5.1(4/2): 3125, *note P: 9287.
85970 Random
85971 in Ada.Numerics.Discrete_Random *note A.5.2(20): 6109.
85972 in Ada.Numerics.Float_Random *note A.5.2(8): 6097.
85973 random number *note A.5.2(1): 6093.
85974 range *note 3.5(3): 1586, *note 3.5(4): 1590.
85975 of a scalar subtype *note 3.5(7): 1603.
85976 used *note 3.5(2): 1585, *note 3.6(6): 1895, *note 3.6.1(3): 1930,
85977 *note 3.8.1(5/3): 2064, *note 4.4(3.2/3): 2686, *note P: 9216.
85978 Range attribute *note 3.5(14): 1615, *note 3.6.2(7): 1948.
85979 Range(N) attribute *note 3.6.2(8): 1950.
85980 range_attribute_designator *note 4.1.4(5): 2436.
85981 used *note 4.1.4(4): 2435, *note P: 9150.
85982 range_attribute_reference *note 4.1.4(4): 2433.
85983 used *note 3.5(3): 1587, *note P: 8998.
85984 Range_Check *note 11.5(17): 4607.
85985 [partial] *note 3.2.2(11): 1422, *note 3.5(24): 1626, *note
85986 3.5(27): 1633, *note 3.5(39.12/3): 1662, *note 3.5(39.4/3): 1656, *note
85987 3.5(39.5/3): 1659, *note 3.5(43/3): 1668, *note 3.5(55/3): 1674, *note
85988 3.5.5(7): 1769, *note 3.5.9(19): 1854, *note 4.2(11): 2483, *note
85989 4.3.3(28): 2569, *note 4.5.1(8): 2748, *note 4.5.6(6): 2859, *note
85990 4.5.6(13): 2868, *note 4.6(28): 2961, *note 4.6(38): 2973, *note
85991 4.6(46): 2986, *note 4.6(51/3): 2992, *note 4.7(4): 3025, *note
85992 13.13.2(35/3): 5321, *note A.5.2(39): 6122, *note A.5.3(26): 6158, *note
85993 A.5.3(29): 6163, *note A.5.3(50): 6186, *note A.5.3(53): 6191, *note
85994 A.5.3(59): 6196, *note A.5.3(62): 6201, *note K.2(11): 8572, *note
85995 K.2(114): 8587, *note K.2(122): 8590, *note K.2(184): 8597, *note
85996 K.2(220): 8604, *note K.2(241): 8607, *note K.2(41): 8577, *note
85997 K.2(47): 8580.
85998 range_constraint *note 3.5(2): 1584.
85999 used *note 3.2.2(6): 1413, *note 3.5.9(5): 1834, *note J.3(2):
86000 8418, *note P: 9025.
86001 Ravenscar *note D.13(1/3): 7923.
86002 RCI
86003 generic *note E.2.3(7/3): 8081.
86004 library unit *note E.2.3(7/3): 8079.
86005 package *note E.2.3(7/3): 8080.
86006 Re
86007 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(7/2): 8310,
86008 *note G.3.2(27/2): 8323.
86009 in Ada.Numerics.Generic_Complex_Types *note G.1.1(6): 8184.
86010 re-raise statement *note 11.3(3): 4522.
86011 read
86012 the value of an object *note 3.3(14): 1462.
86013 in Ada.Direct_IO *note A.8.4(12): 6285.
86014 in Ada.Sequential_IO *note A.8.1(12): 6258.
86015 in Ada.Storage_IO *note A.9(6): 6303.
86016 in Ada.Streams *note 13.13.1(5): 5298.
86017 in Ada.Streams.Stream_IO *note A.12.1(15): 6531, *note A.12.1(16):
86018 6532.
86019 in System.RPC *note E.5(7): 8129.
86020 Read aspect *note 13.13.2(38/3): 5335.
86021 Read attribute *note 13.13.2(6): 5308, *note 13.13.2(14): 5312.
86022 Read clause *note 13.3(7/2): 4934, *note 13.13.2(38/3): 5330.
86023 ready
86024 a task state *note 9(10): 3868.
86025 ready queue *note D.2.1(5/2): 7705.
86026 ready task *note D.2.1(5/2): 7708.
86027 Real
86028 in Interfaces.Fortran *note B.5(6): 7535.
86029 real literal *note 2.4(1): 1205.
86030 real literals *note 3.5.6(4): 1783.
86031 real time *note D.8(18): 7888.
86032 real type *note 3.2(3): 1342, *note 3.5.6(1): 1777, *note N(34): 8863.
86033 real-time systems *note C(1): 7553, *note D(1): 7684.
86034 Real_Arrays
86035 child of Ada.Numerics *note G.3.1(31/2): 8303.
86036 Real_Matrix
86037 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(4/2): 8293.
86038 real_range_specification *note 3.5.7(3): 1791.
86039 used *note 3.5.7(2): 1790, *note 3.5.9(3): 1827, *note 3.5.9(4):
86040 1831, *note P: 9023.
86041 Real_Time
86042 child of Ada *note D.8(3): 7866.
86043 real_type_definition *note 3.5.6(2): 1778.
86044 used *note 3.2.1(4/2): 1382, *note P: 8956.
86045 Real_Vector
86046 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(4/2): 8292.
86047 receiving stub *note E.4(10): 8108.
86048 reclamation of storage *note 13.11.2(1): 5191.
86049 recommended level of support *note 13.1(20/3): 4880.
86050 Address attribute *note 13.3(15): 4950.
86051 Alignment attribute for objects *note 13.3(33): 4964.
86052 Alignment attribute for subtypes *note 13.3(29): 4963.
86053 aspect Pack *note 13.2(7/3): 4906.
86054 bit ordering *note 13.5.3(7): 5067.
86055 Component_Size attribute *note 13.3(71): 4992.
86056 enumeration_representation_clause *note 13.4(9): 5013.
86057 record_representation_clause *note 13.5.1(17): 5043.
86058 required in Systems Programming Annex *note C.2(2/3): 7562.
86059 Size attribute *note 13.3(42/2): 4971, *note 13.3(54): 4978.
86060 Stream_Size attribute *note 13.13.2(1.7/2): 5304.
86061 unchecked conversion *note 13.9(16): 5127.
86062 with respect to nonstatic expressions *note 13.1(21/3): 4881.
86063 record *note 3.8(1): 2014.
86064 explicitly limited *note 3.8(13.1/3): 2038.
86065 record extension *note 3.4(5/2): 1538, *note 3.9.1(1/2): 2130, *note
86066 N(35): 8864.
86067 Record layout aspect *note 13.5(1): 5019.
86068 record type *note 3.8(1): 2015, *note N(36): 8865.
86069 record_aggregate *note 4.3.1(2): 2499.
86070 used *note 4.3(2): 2489, *note P: 9155.
86071 record_component_association *note 4.3.1(4/2): 2504.
86072 used *note 4.3.1(3): 2503, *note P: 9159.
86073 record_component_association_list *note 4.3.1(3): 2501.
86074 used *note 4.3.1(2): 2500, *note 4.3.2(2): 2523, *note P: 9167.
86075 record_definition *note 3.8(3): 2019.
86076 used *note 3.8(2): 2018, *note 3.9.1(2): 2135, *note P: 9082.
86077 record_extension_part *note 3.9.1(2): 2134.
86078 used *note 3.4(2/2): 1535, *note P: 8996.
86079 record_representation_clause *note 13.5.1(2): 5024.
86080 used *note 13.1(2/1): 4847, *note P: 9713.
86081 record_type_definition *note 3.8(2): 2017.
86082 used *note 3.2.1(4/2): 1384, *note P: 8958.
86083 reentrant *note A(3/2): 5380.
86084 Reference
86085 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.4/3): 6782.
86086 in Ada.Containers.Hashed_Maps *note A.18.5(17.4/3): 6871, *note
86087 A.18.5(17.6/3): 6873.
86088 in Ada.Containers.Indefinite_Holders *note A.18.18(19/3): 7240.
86089 in Ada.Containers.Multiway_Trees *note A.18.10(31/3): 7167.
86090 in Ada.Containers.Ordered_Maps *note A.18.6(16.4/3): 6922, *note
86091 A.18.6(16.6/3): 6924.
86092 in Ada.Containers.Vectors *note A.18.2(34.4/3): 6697, *note
86093 A.18.2(34.6/3): 6699.
86094 in Ada.Interrupts *note C.3.2(10): 7602.
86095 in Ada.Task_Attributes *note C.7.2(5): 7660.
86096 reference discriminant *note 4.1.5(3/3): 2447.
86097 reference object *note 4.1.5(3/3): 2446.
86098 reference parameter passing *note 6.2(2): 3383.
86099 reference type *note 4.1.5(3/3): 2445, *note N(36.1/3): 8866.
86100 Reference_Preserving_Key
86101 in Ada.Containers.Hashed_Sets *note A.18.8(58.2/3): 7041, *note
86102 A.18.8(58.4/3): 7043.
86103 in Ada.Containers.Ordered_Sets *note A.18.9(73.2/3): 7122, *note
86104 A.18.9(73.4/3): 7124.
86105 Reference_Type
86106 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17.2/3): 6780.
86107 in Ada.Containers.Hashed_Maps *note A.18.5(17.2/3): 6869.
86108 in Ada.Containers.Hashed_Sets *note A.18.8(58.1/3): 7040.
86109 in Ada.Containers.Indefinite_Holders *note A.18.18(17/3): 7238.
86110 in Ada.Containers.Multiway_Trees *note A.18.10(29/3): 7165.
86111 in Ada.Containers.Ordered_Maps *note A.18.6(16.2/3): 6920.
86112 in Ada.Containers.Ordered_Sets *note A.18.9(73.1/3): 7121.
86113 in Ada.Containers.Vectors *note A.18.2(34.2/3): 6695.
86114 references *note 1.2(1/3): 1086.
86115 Registered_Trade_Mark_Sign
86116 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5592.
86117 Reinitialize
86118 in Ada.Task_Attributes *note C.7.2(6): 7662.
86119 relation *note 4.4(3/3): 2675.
86120 used *note 4.4(2): 2655, *note P: 9193.
86121 relational operator *note 4.5.2(1): 2751.
86122 relational_operator *note 4.5(3): 2718.
86123 used *note 4.4(2.2/3): 2673, *note 4.4(3/3): 2677, *note P: 9209.
86124 Relative_Deadline aspect *note D.2.6(9.2/3): 7757.
86125 Relative_Deadline pragma *note J.15.12(2/3): 8562, *note L(29.2/3):
86126 8755.
86127 Relative_Name
86128 in Ada.Directories.Hierarchical_File_Names *note A.16.1(13/3):
86129 6641.
86130 relaxed mode *note G.2(1): 8252.
86131 release
86132 execution resource associated with protected object *note 9.5.1(6):
86133 4008.
86134 rem operator *note 4.4(1/3): 2638, *note 4.5.5(1): 2845.
86135 Remainder attribute *note A.5.3(45): 6179.
86136 remote access *note E.1(5): 8023.
86137 remote access type *note E.2.2(9/3): 8065.
86138 remote access-to-class-wide type *note E.2.2(9/3): 8067.
86139 remote access-to-subprogram type *note E.2.2(9/3): 8066.
86140 remote call interface *note E.2(4/3): 8041, *note E.2.3(7/3): 8078.
86141 remote procedure call
86142 asynchronous *note E.4.1(9/3): 8121.
86143 remote subprogram *note E.2.3(7/3): 8082.
86144 remote subprogram binding *note E.4(1): 8103.
86145 remote subprogram call *note E.4(1): 8099.
86146 remote types library unit *note E.2(4/3): 8040, *note E.2.2(4/3):
86147 8062.
86148 Remote_Call_Interface aspect *note E.2.3(7/3): 8084.
86149 Remote_Call_Interface pragma *note E.2.3(3): 8071, *note L(30): 8757.
86150 Remote_Types aspect *note E.2.2(4/3): 8064.
86151 Remote_Types pragma *note E.2.2(3): 8060, *note L(31): 8760.
86152 Remove_Task
86153 in Ada.Execution_Time.Group_Budgets *note D.14.2(8/2): 7961.
86154 Rename
86155 in Ada.Directories *note A.16(12/2): 6588.
86156 renamed entity *note 8.5(3): 3777.
86157 renamed view *note 8.5(3): 3776.
86158 renaming *note N(36.2/2): 8867.
86159 renaming-as-body *note 8.5.4(1/3): 3800.
86160 renaming-as-declaration *note 8.5.4(1/3): 3801.
86161 renaming_declaration *note 8.5(2): 3769.
86162 used *note 3.1(3/3): 1302, *note P: 8939.
86163 rendezvous *note 9.5.2(25): 4062.
86164 Replace
86165 in Ada.Containers.Hashed_Maps *note A.18.5(23/2): 6881.
86166 in Ada.Containers.Hashed_Sets *note A.18.8(22/2): 7008, *note
86167 A.18.8(53/2): 7034.
86168 in Ada.Containers.Ordered_Maps *note A.18.6(22/2): 6932.
86169 in Ada.Containers.Ordered_Sets *note A.18.9(21/2): 7079, *note
86170 A.18.9(66/2): 7113.
86171 Replace_Element
86172 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(15/2): 6777.
86173 in Ada.Containers.Hashed_Maps *note A.18.5(15/2): 6866.
86174 in Ada.Containers.Hashed_Sets *note A.18.8(16/2): 6999.
86175 in Ada.Containers.Indefinite_Holders *note A.18.18(13/3): 7234.
86176 in Ada.Containers.Multiway_Trees *note A.18.10(25/3): 7161.
86177 in Ada.Containers.Ordered_Maps *note A.18.6(14/2): 6917.
86178 in Ada.Containers.Ordered_Sets *note A.18.9(15/2): 7070.
86179 in Ada.Containers.Vectors *note A.18.2(29/2): 6689, *note
86180 A.18.2(30/2): 6690.
86181 in Ada.Strings.Bounded *note A.4.4(27): 5809.
86182 in Ada.Strings.Unbounded *note A.4.5(21): 5863.
86183 Replace_Slice
86184 in Ada.Strings.Bounded *note A.4.4(58): 5830, *note A.4.4(59):
86185 5831.
86186 in Ada.Strings.Fixed *note A.4.3(23): 5773, *note A.4.3(24): 5774.
86187 in Ada.Strings.Unbounded *note A.4.5(53): 5884, *note A.4.5(54):
86188 5885.
86189 Replenish
86190 in Ada.Execution_Time.Group_Budgets *note D.14.2(9/2): 7965.
86191 Replicate
86192 in Ada.Strings.Bounded *note A.4.4(78): 5846, *note A.4.4(79):
86193 5847, *note A.4.4(80): 5848.
86194 representation
86195 change of *note 13.6(1/3): 5069.
86196 representation aspect *note 13.1(8/3): 4859.
86197 coding *note 13.4(7): 5009.
86198 convention, calling convention *note B.1(1/3): 7335.
86199 export *note B.1(1/3): 7337.
86200 external_name *note B.1(1/3): 7338.
86201 import *note B.1(1/3): 7336.
86202 layout *note 13.5(1): 5016.
86203 link_name *note B.1(1/3): 7339.
86204 record layout *note 13.5(1): 5017.
86205 specifiable attributes *note 13.3(5/3): 4921.
86206 storage place *note 13.5(1): 5020.
86207 representation attribute *note 13.3(1/1): 4907.
86208 representation item *note 13.1(1/1): 4840.
86209 representation of an object *note 13.1(7/2): 4855.
86210 representation pragma *note 13.1(1/1): 4841.
86211 Asynchronous *note J.15.13(1/3): 8564.
86212 Atomic *note J.15.8(9/3): 8536.
86213 Atomic_Components *note J.15.8(9/3): 8540.
86214 Convention *note J.15.5(1/3): 8483.
86215 Discard_Names *note C.5(6): 7615.
86216 Export *note J.15.5(1/3): 8481.
86217 Import *note J.15.5(1/3): 8479.
86218 Independent *note J.15.8(9/3): 8544.
86219 Independent_Components *note J.15.8(9/3): 8546.
86220 No_Return *note J.15.2(1/3): 8457.
86221 Pack *note J.15.3(1/3): 8463.
86222 Unchecked_Union *note J.15.6(1/3): 8504.
86223 Volatile *note J.15.8(9/3): 8538.
86224 Volatile_Components *note J.15.8(9/3): 8542.
86225 representation-oriented attributes
86226 of a fixed point subtype *note A.5.4(1): 6218.
86227 of a floating point subtype *note A.5.3(1): 6127.
86228 representation_clause
86229 See aspect_clause *note 13.1(4/1): 4854.
86230 represented in canonical form *note A.5.3(10): 6141.
86231 requested decimal precision
86232 of a floating point type *note 3.5.7(4): 1794.
86233 requeue *note 9.5.4(1): 4092.
86234 requeue target *note 9.5.4(3/3): 4097.
86235 requeue-with-abort *note 9.5.4(13): 4104.
86236 requeue_statement *note 9.5.4(2/3): 4095.
86237 used *note 5.1(4/2): 3122, *note P: 9284.
86238 require overriding *note 3.9.3(6/2): 2186.
86239 requires a completion *note 3.11.1(1/3): 2346, *note 3.11.1(6/3):
86240 2350.
86241 declaration for which aspect Elaborate_Body is True *note
86242 10.2.1(25/3): 4478.
86243 declaration of a partial view *note 7.3(4): 3594.
86244 declaration to which a pragma Elaborate_Body applies *note
86245 10.2.1(25/3): 4477.
86246 deferred constant declaration *note 7.4(2/3): 3623.
86247 generic_package_declaration *note 7.1(5/2): 3564.
86248 generic_subprogram_declaration *note 6.1(20/3): 3327.
86249 incomplete_type_declaration *note 3.10.1(3/3): 2275.
86250 package_declaration *note 7.1(5/2): 3563.
86251 protected entry_declaration *note 9.5.2(16): 4046.
86252 protected_declaration *note 9.4(11.2/2): 3973.
86253 subprogram_declaration *note 6.1(20/3): 3326.
86254 task_declaration *note 9.1(9.3/2): 3902.
86255 requires late initialization *note 3.3.1(8.1/2): 1502.
86256 requires overriding
86257 [partial] *note 6.1.1(16/3): 3356.
86258 Reraise_Occurrence
86259 in Ada.Exceptions *note 11.4.1(4/3): 4547.
86260 Reserve_Capacity
86261 in Ada.Containers.Hashed_Maps *note A.18.5(9/2): 6860.
86262 in Ada.Containers.Hashed_Sets *note A.18.8(11/2): 6994.
86263 in Ada.Containers.Vectors *note A.18.2(20/2): 6680.
86264 reserved interrupt *note C.3(2): 7571.
86265 reserved word *note 2.9(2/3): 1289.
86266 Reserved_128
86267 in Ada.Characters.Latin_1 *note A.3.3(17): 5545.
86268 Reserved_129
86269 in Ada.Characters.Latin_1 *note A.3.3(17): 5546.
86270 Reserved_132
86271 in Ada.Characters.Latin_1 *note A.3.3(17): 5549.
86272 Reserved_153
86273 in Ada.Characters.Latin_1 *note A.3.3(19): 5570.
86274 Reserved_Check
86275 [partial] *note C.3.1(10/3): 7582.
86276 Reset
86277 in Ada.Direct_IO *note A.8.4(8): 6278.
86278 in Ada.Numerics.Discrete_Random *note A.5.2(21): 6110, *note
86279 A.5.2(24): 6114.
86280 in Ada.Numerics.Float_Random *note A.5.2(9): 6098, *note A.5.2(12):
86281 6102.
86282 in Ada.Sequential_IO *note A.8.1(8): 6252.
86283 in Ada.Streams.Stream_IO *note A.12.1(10): 6523.
86284 in Ada.Text_IO *note A.10.1(11): 6332.
86285 resolution rules *note 1.1.2(26/3): 1021.
86286 resolve
86287 overload resolution *note 8.6(14): 3833.
86288 restriction *note 13.12(4/2): 5252.
86289 used *note 13.12(3): 5251, *note L(32): 8765.
86290 restriction_parameter_argument *note 13.12(4.1/2): 5256.
86291 used *note 13.12(4/2): 5255, *note P: 9750.
86292 restrictions
86293 Immediate_Reclamation *note H.4(10): 8379.
86294 Max_Asynchronous_Select_Nesting *note D.7(18/1): 7850.
86295 Max_Entry_Queue_Length *note D.7(19.1/2): 7860.
86296 Max_Protected_Entries *note D.7(14): 7841.
86297 Max_Select_Alternatives *note D.7(12): 7837.
86298 Max_Storage_At_Blocking *note D.7(17/1): 7845.
86299 Max_Task_Entries *note D.7(13): 7839.
86300 Max_Tasks *note D.7(19/1): 7855.
86301 No_Abort_Statements *note D.7(5/3): 7807.
86302 No_Access_Parameter_Allocators *note H.4(8.3/3): 8377.
86303 No_Access_Subprograms *note H.4(17): 8387.
86304 No_Allocators *note H.4(7): 8369.
86305 No_Anonymous_Allocators *note H.4(8.1/3): 8373.
86306 No_Asynchronous_Control *note J.13(3/2): 8448.
86307 No_Coextensions *note H.4(8.2/3): 8375.
86308 No_Delay *note H.4(21): 8397.
86309 No_Dependence *note 13.12.1(6/2): 5280.
86310 No_Dispatch *note H.4(19): 8393.
86311 No_Dynamic_Attachment *note D.7(10/3): 7818.
86312 No_Dynamic_Priorities *note D.7(9/2): 7816.
86313 No_Exceptions *note H.4(12): 8381.
86314 No_Fixed_Point *note H.4(15): 8385.
86315 No_Floating_Point *note H.4(14): 8383.
86316 No_Implementation_Aspect_Specifications *note 13.12.1(1.1/3): 5268.
86317 No_Implementation_Attributes *note 13.12.1(2/2): 5270.
86318 No_Implementation_Identifiers *note 13.12.1(2.1/3): 5272.
86319 No_Implementation_Pragmas *note 13.12.1(3/2): 5274.
86320 No_Implementation_Units *note 13.12.1(3.1/3): 5276.
86321 No_Implicit_Heap_Allocations *note D.7(8): 7814.
86322 No_IO *note H.4(20/2): 8395.
86323 No_Local_Allocators *note H.4(8/1): 8371.
86324 No_Local_Protected_Objects *note D.7(10.1/3): 7820.
86325 No_Local_Timing_Events *note D.7(10.2/3): 7822.
86326 No_Nested_Finalization *note D.7(4/3): 7805.
86327 No_Obsolescent_Features *note 13.12.1(4/3): 5278.
86328 No_Protected_Type_Allocators *note D.7(10.3/2): 7824.
86329 No_Protected_Types *note H.4(5): 8367.
86330 No_Recursion *note H.4(22): 8399.
86331 No_Reentrancy *note H.4(23): 8401.
86332 No_Relative_Delay *note D.7(10.5/3): 7827.
86333 No_Requeue_Statements *note D.7(10.6/3): 7829.
86334 No_Select_Statements *note D.7(10.7/3): 7831.
86335 No_Specific_Termination_Handlers *note D.7(10.8/3): 7833.
86336 No_Specification_of_Aspect *note 13.12.1(6.1/3): 5282.
86337 No_Standard_Allocators_After_Elaboration *note D.7(19.2/3): 7863.
86338 No_Task_Allocators *note D.7(7): 7811.
86339 No_Task_Hierarchy *note D.7(3/3): 7803.
86340 No_Task_Termination *note D.7(15.1/2): 7843.
86341 No_Terminate_Alternatives *note D.7(6): 7809.
86342 No_Unchecked_Access *note H.4(18): 8389.
86343 No_Unchecked_Conversion *note J.13(4/2): 8449.
86344 No_Unchecked_Deallocation *note J.13(5/2): 8450.
86345 No_Use_Of_Attribute *note 13.12.1(6.2/3): 5284.
86346 No_Use_Of_Pragma *note 13.12.1(6.3/3): 5286.
86347 Simple_Barriers *note D.7(10.9/3): 7835.
86348 Restrictions pragma *note 13.12(3): 5249, *note L(32): 8763.
86349 Result attribute *note 6.1.1(29/3): 3364.
86350 result interval
86351 for a component of the result of evaluating a complex function
86352 *note G.2.6(3): 8285.
86353 for the evaluation of a predefined arithmetic operation *note
86354 G.2.1(8): 8257.
86355 for the evaluation of an elementary function *note G.2.4(2): 8279.
86356 result subtype
86357 of a function *note 6.5(3/2): 3497.
86358 return object
86359 extended_return_statement *note 6.5(5.10/3): 3502.
86360 simple_return_statement *note 6.5(6/2): 3511.
86361 return statement *note 6.5(1/2): 3484.
86362 return_subtype_indication *note 6.5(2.3/2): 3494.
86363 used *note 6.5(2.1/3): 3489, *note P: 9385.
86364 reverse iterator *note 5.5.2(4/3): 3242.
86365 Reverse_Elements
86366 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(27/2): 6794.
86367 in Ada.Containers.Vectors *note A.18.2(54/2): 6721.
86368 Reverse_Find
86369 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(42/2): 6809.
86370 in Ada.Containers.Vectors *note A.18.2(70/2): 6737.
86371 Reverse_Find_Index
86372 in Ada.Containers.Vectors *note A.18.2(69/2): 6736.
86373 Reverse_Iterate
86374 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(46/2): 6812.
86375 in Ada.Containers.Ordered_Maps *note A.18.6(51/2): 6954.
86376 in Ada.Containers.Ordered_Sets *note A.18.9(61/2): 7108.
86377 in Ada.Containers.Vectors *note A.18.2(74/2): 6740.
86378 Reverse_Iterate_Children
86379 in Ada.Containers.Multiway_Trees *note A.18.10(69/3): 7205.
86380 Reverse_Solidus
86381 in Ada.Characters.Latin_1 *note A.3.3(12): 5504.
86382 reversible iterable container object *note 5.5.1(11/3): 3225.
86383 reversible iterable container type *note 5.5.1(11/3): 3223.
86384 reversible iterator object *note 5.5.1(6/3): 3212.
86385 reversible iterator type *note 5.5.1(6/3): 3210.
86386 Reversible_Iterator
86387 in Ada.Iterator_Interfaces *note 5.5.1(4/3): 3206.
86388 Reviewable pragma *note H.3.1(3): 8358, *note L(33): 8767.
86389 RI
86390 in Ada.Characters.Latin_1 *note A.3.3(17): 5558.
86391 right parenthesis *note 2.1(15/3): 1157.
86392 Right_Angle_Quotation
86393 in Ada.Characters.Latin_1 *note A.3.3(22): 5607.
86394 Right_Curly_Bracket
86395 in Ada.Characters.Latin_1 *note A.3.3(14): 5537.
86396 Right_Parenthesis
86397 in Ada.Characters.Latin_1 *note A.3.3(8): 5488.
86398 Right_Square_Bracket
86399 in Ada.Characters.Latin_1 *note A.3.3(12): 5505.
86400 Ring_Above
86401 in Ada.Characters.Latin_1 *note A.3.3(22): 5595.
86402 root
86403 of a tree *note A.18.10(3/3): 7138.
86404 in Ada.Containers.Multiway_Trees *note A.18.10(22/3): 7158.
86405 root library unit *note 10.1.1(10): 4330.
86406 root node
86407 of a tree *note A.18.10(3/3): 7139.
86408 root type
86409 of a class *note 3.4.1(2/2): 1562.
86410 root_integer *note 3.5.4(14): 1736.
86411 [partial] *note 3.4.1(8): 1572.
86412 root_real *note 3.5.6(3): 1781.
86413 [partial] *note 3.4.1(8): 1573.
86414 Root_Storage_Pool
86415 in System.Storage_Pools *note 13.11(6/2): 5153.
86416 Root_Storage_Pool_With_Subpools
86417 in System.Storage_Pools.Subpools *note 13.11.4(4/3): 5217.
86418 Root_Stream_Type
86419 in Ada.Streams *note 13.13.1(3/2): 5293.
86420 Root_Subpool
86421 in System.Storage_Pools.Subpools *note 13.11.4(5/3): 5218.
86422 rooted at a type *note 3.4.1(2/2): 1563.
86423 roots the subtree *note A.18.10(3/3): 7136.
86424 rotate *note B.2(9): 7365.
86425 Round attribute *note 3.5.10(12): 1876.
86426 Round_Robin
86427 child of Ada.Dispatching *note D.2.5(4/2): 7742.
86428 Round_Robin_Within_Priorities task dispatching policy *note
86429 D.2.5(2/2): 7741.
86430 Rounding attribute *note A.5.3(36): 6170.
86431 RPC
86432 child of System *note E.5(3): 8125.
86433 RPC-receiver *note E.5(21): 8136.
86434 RPC_Receiver
86435 in System.RPC *note E.5(11): 8133.
86436 RS
86437 in Ada.Characters.Latin_1 *note A.3.3(6): 5477.
86438 run-time check
86439 See language-defined check *note 11.5(2/3): 4585.
86440 run-time error *note 1.1.2(30): 1037, *note 1.1.5(6): 1076, *note
86441 11.5(2/3): 4586, *note 11.6(1/3): 4622.
86442 run-time polymorphism *note 3.9.2(1/2): 2145.
86443 run-time semantics *note 1.1.2(30): 1036.
86444 run-time type
86445 See tag *note 3.9(3): 2089.
86446 running a program
86447 See program execution *note 10.2(1): 4418.
86448 running task *note D.2.1(6/2): 7711.
86449
86450
86451 \1f
86452 File: arm2012.info, Node: S, Next: T, Prev: R, Up: Index
86453
86454 S
86455 ==
86456
86457
86458
86459 safe range
86460 of a floating point type *note 3.5.7(9): 1802.
86461 of a floating point type *note 3.5.7(10): 1804.
86462 Safe_First attribute *note A.5.3(71): 6215, *note G.2.2(5): 8266.
86463 Safe_Last attribute *note A.5.3(72): 6217, *note G.2.2(6): 8268.
86464 safety-critical systems *note H(1/2): 8347.
86465 satisfies
86466 a discriminant constraint *note 3.7.1(11): 2008.
86467 a range constraint *note 3.5(4): 1596.
86468 a subtype predicate *note 3.2.4(32/3): 1452.
86469 an index constraint *note 3.6.1(7): 1936.
86470 for an access value *note 3.10(15/2): 2265.
86471 Saturday
86472 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4159.
86473 Save
86474 in Ada.Numerics.Discrete_Random *note A.5.2(24): 6113.
86475 in Ada.Numerics.Float_Random *note A.5.2(12): 6101.
86476 Save_Occurrence
86477 in Ada.Exceptions *note 11.4.1(6/2): 4553.
86478 scalar type *note 3.2(3): 1339, *note 3.5(1): 1580, *note N(37): 8868.
86479 scalar_constraint *note 3.2.2(6): 1412.
86480 used *note 3.2.2(5): 1410, *note P: 8969.
86481 scale
86482 of a decimal fixed point subtype *note 3.5.10(11): 1874, *note
86483 K.2(216): 8602.
86484 Scale attribute *note 3.5.10(11): 1873.
86485 Scaling attribute *note A.5.3(27): 6161.
86486 SCHAR_MAX
86487 in Interfaces.C *note B.3(6): 7371.
86488 SCHAR_MIN
86489 in Interfaces.C *note B.3(6): 7370.
86490 SCI
86491 in Ada.Characters.Latin_1 *note A.3.3(19): 5571.
86492 scope
86493 informal definition *note 3.1(8): 1317.
86494 of (a view of) an entity *note 8.2(11): 3713.
86495 of a declaration *note 8.2(10): 3709.
86496 of a use_clause *note 8.4(6): 3763.
86497 of a with_clause *note 10.1.2(5): 4357.
86498 of an aspect_specification *note 8.2(10.1/3): 3711.
86499 of an attribute_definition_clause *note 8.2(10.1/3): 3710.
86500 Search_Type
86501 in Ada.Directories *note A.16(31/2): 6606.
86502 Second
86503 in Ada.Calendar.Formatting *note 9.6.1(26/2): 4171.
86504 Second_Duration subtype of Day_Duration
86505 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4165.
86506 Second_Number subtype of Natural
86507 in Ada.Calendar.Formatting *note 9.6.1(20/2): 4164.
86508 Seconds
86509 in Ada.Calendar *note 9.6(13): 4130.
86510 in Ada.Real_Time *note D.8(14/2): 7883.
86511 Seconds_Count
86512 in Ada.Real_Time *note D.8(15): 7885.
86513 Seconds_Of
86514 in Ada.Calendar.Formatting *note 9.6.1(28/2): 4173.
86515 Section_Sign
86516 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5585.
86517 secure systems *note H(1/2): 8348.
86518 select an entry call
86519 from an entry queue *note 9.5.3(13): 4084, *note 9.5.3(16): 4085.
86520 immediately *note 9.5.3(8): 4081.
86521 select_alternative *note 9.7.1(4): 4198.
86522 used *note 9.7.1(2): 4194, *note P: 9538.
86523 select_statement *note 9.7(2): 4184.
86524 used *note 5.1(5/2): 3134, *note P: 9295.
86525 selected_component *note 4.1.3(2): 2411.
86526 used *note 4.1(2/3): 2357, *note P: 9121.
86527 selection
86528 of an entry caller *note 9.5.2(24): 4061.
86529 selective_accept *note 9.7.1(2): 4190.
86530 used *note 9.7(2): 4185, *note P: 9531.
86531 selector_name *note 4.1.3(3): 2414.
86532 used *note 3.7.1(3): 1999, *note 4.1.3(2): 2413, *note 4.3.1(5):
86533 2510, *note 6.4(5): 3449, *note 12.3(4): 4685, *note 12.7(3.1/2): 4835,
86534 *note P: 9164.
86535 semantic dependence
86536 of one compilation unit upon another *note 10.1.1(26/2): 4341.
86537 semicolon *note 2.1(15/3): 1170.
86538 in Ada.Characters.Latin_1 *note A.3.3(10): 5497.
86539 separate compilation *note 10.1(1): 4290.
86540 Separate_Interrupt_Clocks_Supported
86541 in Ada.Execution_Time *note D.14(9.2/3): 7934.
86542 separator *note 2.2(3/2): 1184.
86543 separator_line *note 2.1(12/2): 1143.
86544 separator_paragraph *note 2.1(12.1/2): 1144.
86545 separator_space *note 2.1(11/2): 1142.
86546 sequence of characters
86547 of a string_literal *note 2.6(5): 1254.
86548 sequence_of_statements *note 5.1(2/3): 3105.
86549 used *note 5.3(2): 3167, *note 5.4(3): 3175, *note 5.5(2): 3186,
86550 *note 9.7.1(2): 4195, *note 9.7.1(5): 4204, *note 9.7.1(6): 4207, *note
86551 9.7.2(3/2): 4221, *note 9.7.3(2): 4228, *note 9.7.4(3): 4235, *note
86552 9.7.4(5): 4240, *note 11.2(2): 4504, *note 11.2(3): 4511, *note P: 9609.
86553 sequential
86554 actions *note 9.10(11): 4285, *note C.6(17): 7634.
86555 sequential access *note A.8(2): 6240.
86556 sequential file *note A.8(1/2): 6237.
86557 Sequential_IO
86558 child of Ada *note A.8.1(2): 6245.
86559 service
86560 an entry queue *note 9.5.3(13): 4083.
86561 set
86562 execution timer object *note D.14.1(12/2): 7950.
86563 group budget object *note D.14.2(15/2): 7977.
86564 termination handler *note C.7.3(9/2): 7682.
86565 timing event object *note D.15(9/2): 7992.
86566 in Ada.Containers.Hashed_Sets *note A.18.8(3/3): 6985.
86567 in Ada.Containers.Ordered_Sets *note A.18.9(4/3): 7058.
86568 in Ada.Environment_Variables *note A.17(6/2): 6648.
86569 set container *note A.18.7(1/2): 6962.
86570 Set_Bounded_String
86571 in Ada.Strings.Bounded *note A.4.4(12.1/2): 5799.
86572 Set_Col
86573 in Ada.Text_IO *note A.10.1(35): 6379.
86574 Set_CPU
86575 in System.Multiprocessors.Dispatching_Domains *note D.16.1(12/3):
86576 8011.
86577 Set_Deadline
86578 in Ada.Dispatching.EDF *note D.2.6(9/2): 7753.
86579 Set_Dependents_Fallback_Handler
86580 in Ada.Task_Termination *note C.7.3(5/2): 7672.
86581 Set_Directory
86582 in Ada.Directories *note A.16(6/2): 6582.
86583 Set_Error
86584 in Ada.Text_IO *note A.10.1(15): 6340.
86585 Set_Exit_Status
86586 in Ada.Command_Line *note A.15(9): 6578.
86587 Set_False
86588 in Ada.Synchronous_Task_Control *note D.10(4): 7901.
86589 Set_Handler
86590 in Ada.Execution_Time.Group_Budgets *note D.14.2(10/2): 7969.
86591 in Ada.Execution_Time.Timers *note D.14.1(7/2): 7945.
86592 in Ada.Real_Time.Timing_Events *note D.15(5/2): 7987.
86593 Set_Im
86594 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(8/2): 8313,
86595 *note G.3.2(28/2): 8326.
86596 in Ada.Numerics.Generic_Complex_Types *note G.1.1(7): 8189.
86597 Set_Index
86598 in Ada.Direct_IO *note A.8.4(14): 6288.
86599 in Ada.Streams.Stream_IO *note A.12.1(22): 6535.
86600 Set_Input
86601 in Ada.Text_IO *note A.10.1(15): 6338.
86602 Set_Iterator_Interfaces
86603 in Ada.Containers.Hashed_Sets *note A.18.8(6.2/3): 6990.
86604 in Ada.Containers.Ordered_Sets *note A.18.9(7.2/3): 7063.
86605 Set_Length
86606 in Ada.Containers.Vectors *note A.18.2(22/2): 6682.
86607 Set_Line
86608 in Ada.Text_IO *note A.10.1(36): 6380.
86609 Set_Line_Length
86610 in Ada.Text_IO *note A.10.1(23): 6356.
86611 Set_Mode
86612 in Ada.Streams.Stream_IO *note A.12.1(24): 6538.
86613 Set_Output
86614 in Ada.Text_IO *note A.10.1(15): 6339.
86615 Set_Page_Length
86616 in Ada.Text_IO *note A.10.1(24): 6358.
86617 Set_Pool_of_Subpool
86618 in System.Storage_Pools.Subpools *note 13.11.4(10/3): 5222.
86619 Set_Priority
86620 in Ada.Dynamic_Priorities *note D.5.1(4): 7795.
86621 Set_Quantum
86622 in Ada.Dispatching.Round_Robin *note D.2.5(4/2): 7744.
86623 Set_Re
86624 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(8/2): 8312,
86625 *note G.3.2(28/2): 8325.
86626 in Ada.Numerics.Generic_Complex_Types *note G.1.1(7): 8187.
86627 Set_Specific_Handler
86628 in Ada.Task_Termination *note C.7.3(6/2): 7674.
86629 Set_True
86630 in Ada.Synchronous_Task_Control *note D.10(4): 7900.
86631 Set_Unbounded_String
86632 in Ada.Strings.Unbounded *note A.4.5(11.1/2): 5858.
86633 Set_Value
86634 in Ada.Task_Attributes *note C.7.2(6): 7661.
86635 shared passive library unit *note E.2(4/3): 8039, *note E.2.1(4/3):
86636 8048.
86637 shared variable
86638 protection of *note 9.10(1/3): 4280.
86639 Shared_Passive aspect *note E.2.1(4/3): 8050.
86640 Shared_Passive pragma *note E.2.1(3): 8046, *note L(34): 8769.
86641 shift *note B.2(9): 7364.
86642 short
86643 in Interfaces.C *note B.3(7): 7374.
86644 short-circuit control form *note 4.5.1(1): 2732.
86645 Short_Float *note 3.5.7(16): 1812.
86646 Short_Integer *note 3.5.4(25): 1756.
86647 SI
86648 in Ada.Characters.Latin_1 *note A.3.3(5): 5462.
86649 signal
86650 as defined between actions *note 9.10(2): 4283.
86651 See interrupt *note C.3(1/3): 7563.
86652 signal (an exception)
86653 See raise *note 11(1/3): 4483.
86654 signal handling
86655 example *note 9.7.4(10): 4244.
86656 signed integer type *note 3.5.4(1): 1711.
86657 signed_char
86658 in Interfaces.C *note B.3(8): 7376.
86659 signed_integer_type_definition *note 3.5.4(3): 1717.
86660 used *note 3.5.4(2): 1715, *note P: 9006.
86661 Signed_Zeros attribute *note A.5.3(13): 6148.
86662 simple entry call *note 9.5.3(1): 4065.
86663 simple name
86664 of a file *note A.16(47/2): 6626.
86665 Simple_Barriers restriction *note D.7(10.9/3): 7836.
86666 simple_expression *note 4.4(4): 2688.
86667 used *note 3.5(3): 1588, *note 3.5.4(3): 1719, *note 3.5.7(3):
86668 1793, *note 4.4(2.2/3): 2674, *note 4.4(3/3): 2676, *note 13.5.1(5):
86669 5036, *note 13.5.1(6): 5038, *note P: 9744.
86670 Simple_Name
86671 in Ada.Directories *note A.16(16/2): 6591, *note A.16(38/2): 6611.
86672 in Ada.Directories.Hierarchical_File_Names *note A.16.1(10/3):
86673 6638.
86674 simple_return_statement *note 6.5(2/2): 3485.
86675 used *note 5.1(4/2): 3120, *note P: 9282.
86676 simple_statement *note 5.1(4/2): 3114.
86677 used *note 5.1(3): 3111, *note P: 9274.
86678 Sin
86679 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
86680 G.1.2(4): 8211.
86681 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6063.
86682 single
86683 class expected type *note 8.6(27/2): 3847.
86684 single entry *note 9.5.2(20): 4054.
86685 Single_Precision_Complex_Types
86686 in Interfaces.Fortran *note B.5(8): 7538.
86687 single_protected_declaration *note 9.4(3/3): 3941.
86688 used *note 3.3.1(2/3): 1492, *note P: 8989.
86689 single_task_declaration *note 9.1(3/3): 3879.
86690 used *note 3.3.1(2/3): 1491, *note P: 8988.
86691 Sinh
86692 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
86693 G.1.2(6): 8219.
86694 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6078.
86695 size
86696 of an object *note 13.1(7/2): 4856.
86697 in Ada.Direct_IO *note A.8.4(15): 6290.
86698 in Ada.Directories *note A.16(26/2): 6602, *note A.16(41/2): 6614.
86699 in Ada.Streams.Stream_IO *note A.12.1(23): 6537.
86700 Size (object) aspect *note 13.3(41): 4970.
86701 Size (subtype) aspect *note 13.3(48): 4977.
86702 Size attribute *note 13.3(40): 4966, *note 13.3(45): 4973.
86703 Size clause *note 13.3(7/2): 4926, *note 13.3(41): 4968, *note
86704 13.3(48): 4975.
86705 size_t
86706 in Interfaces.C *note B.3(13): 7383.
86707 Skip_Line
86708 in Ada.Text_IO *note A.10.1(29): 6367.
86709 Skip_Page
86710 in Ada.Text_IO *note A.10.1(32): 6372.
86711 slice *note 4.1.2(2): 2400.
86712 used *note 4.1(2/3): 2356, *note P: 9120.
86713 in Ada.Strings.Bounded *note A.4.4(28): 5810.
86714 in Ada.Strings.Unbounded *note A.4.5(22): 5864.
86715 small
86716 of a fixed point type *note 3.5.9(8/2): 1839.
86717 Small aspect *note 3.5.10(2/1): 1862.
86718 Small attribute *note 3.5.10(2/1): 1858.
86719 Small clause *note 3.5.10(2/1): 1860, *note 13.3(7/2): 4929.
86720 SO
86721 in Ada.Characters.Latin_1 *note A.3.3(5): 5461.
86722 Soft_Hyphen
86723 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5591.
86724 SOH
86725 in Ada.Characters.Latin_1 *note A.3.3(5): 5448.
86726 solidus *note 2.1(15/3): 1167.
86727 in Ada.Characters.Latin_1 *note A.3.3(8): 5495.
86728 Solve
86729 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(46/2): 8336.
86730 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(24/2): 8297.
86731 Sort
86732 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(49/2): 6815.
86733 in Ada.Containers.Vectors *note A.18.2(77/2): 6743.
86734 SOS
86735 in Ada.Characters.Latin_1 *note A.3.3(19): 5569.
86736 SPA
86737 in Ada.Characters.Latin_1 *note A.3.3(18): 5567.
86738 Space
86739 in Ada.Characters.Latin_1 *note A.3.3(8): 5479.
86740 in Ada.Strings *note A.4.1(4/2): 5718.
86741 special file *note A.16(45/2): 6621.
86742 special graphic character
86743 a category of Character *note A.3.2(32): 5444.
86744 Special_Set
86745 in Ada.Strings.Maps.Constants *note A.4.6(4): 5911.
86746 Specialized Needs Annexes *note 1.1.2(7): 1006.
86747 specifiable
86748 of Address for entries *note J.7.1(6): 8432.
86749 of Address for stand-alone objects and for program units *note
86750 13.3(12): 4945.
86751 of Alignment for first subtypes *note 13.3(26.4/2): 4957.
86752 of Alignment for objects *note 13.3(25/2): 4953.
86753 of Bit_Order for record types and record extensions *note
86754 13.5.3(4): 5062.
86755 of Component_Size for array types *note 13.3(70): 4988.
86756 of External_Tag for a tagged type *note 13.3(75/3): 5000, *note
86757 K.2(65): 8583.
86758 of Input for a type *note 13.13.2(38/3): 5328.
86759 of Machine_Radix for decimal first subtypes *note F.1(1): 8140.
86760 of Output for a type *note 13.13.2(38/3): 5329.
86761 of Read for a type *note 13.13.2(38/3): 5326.
86762 of Size for first subtypes *note 13.3(48): 4974.
86763 of Size for stand-alone objects *note 13.3(41): 4967.
86764 of Small for fixed point types *note 3.5.10(2/1): 1859.
86765 of Storage_Pool for a nonderived access-to-object type *note
86766 13.11(15): 5167.
86767 of Storage_Size for a nonderived access-to-object type *note
86768 13.11(15): 5166.
86769 of Storage_Size for a task first subtype *note J.9(3/3): 8441.
86770 of Write for a type *note 13.13.2(38/3): 5327.
86771 specifiable (of an attribute and for an entity) *note 13.3(5/3): 4919.
86772 specific handler *note C.7.3(9/2): 7680.
86773 specific postcondition expression *note 6.1.1(4/3): 3346.
86774 specific precondition expression *note 6.1.1(2/3): 3338.
86775 specific type *note 3.4.1(3/2): 1564.
86776 Specific_Handler
86777 in Ada.Task_Termination *note C.7.3(6/2): 7675.
86778 specified
86779 of an aspect of representation of an entity *note 13.1(17): 4870.
86780 of an operational aspect of an entity *note 13.1(18.1/1): 4872.
86781 specified (not!) *note 1.1.3(18): 1056.
86782 specified as independently addressable *note C.6(8.1/3): 7631.
86783 specified discriminant *note 3.7(18): 1982.
86784 Splice
86785 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(30/2): 6797,
86786 *note A.18.3(31/2): 6798, *note A.18.3(32/2): 6799.
86787 Splice_Children
86788 in Ada.Containers.Multiway_Trees *note A.18.10(57/3): 7193, *note
86789 A.18.10(58/3): 7194.
86790 Splice_Subtree
86791 in Ada.Containers.Multiway_Trees *note A.18.10(55/3): 7191, *note
86792 A.18.10(56/3): 7192.
86793 Split
86794 in Ada.Calendar *note 9.6(14): 4131.
86795 in Ada.Calendar.Formatting *note 9.6.1(29/2): 4174, *note
86796 9.6.1(32/2): 4177, *note 9.6.1(33/2): 4178, *note 9.6.1(34/2): 4179.
86797 in Ada.Execution_Time *note D.14(8/2): 7931.
86798 in Ada.Real_Time *note D.8(16): 7886.
86799 Sqrt
86800 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
86801 G.1.2(3): 8207.
86802 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(4): 6058.
86803 SS2
86804 in Ada.Characters.Latin_1 *note A.3.3(17): 5559.
86805 SS3
86806 in Ada.Characters.Latin_1 *note A.3.3(17): 5560.
86807 SSA
86808 in Ada.Characters.Latin_1 *note A.3.3(17): 5551.
86809 ST
86810 in Ada.Characters.Latin_1 *note A.3.3(19): 5573.
86811 stand-alone constant *note 3.3.1(23/3): 1520.
86812 corresponding to a formal object of mode in *note 12.4(10/2): 4734.
86813 stand-alone object *note 3.3.1(1/3): 1472.
86814 [partial] *note 12.4(10/2): 4735.
86815 stand-alone variable *note 3.3.1(23/3): 1521.
86816 Standard *note A.1(4): 5383.
86817 standard error file *note A.10(6): 6308.
86818 standard input file *note A.10(5): 6306.
86819 standard mode *note 1.1.5(11): 1084.
86820 standard output file *note A.10(5): 6307.
86821 standard storage pool *note 13.11(17): 5174.
86822 Standard_Error
86823 in Ada.Text_IO *note A.10.1(16): 6343, *note A.10.1(19): 6350.
86824 Standard_Input
86825 in Ada.Text_IO *note A.10.1(16): 6341, *note A.10.1(19): 6348.
86826 Standard_Output
86827 in Ada.Text_IO *note A.10.1(16): 6342, *note A.10.1(19): 6349.
86828 Start_Search
86829 in Ada.Directories *note A.16(32/2): 6607.
86830 State
86831 in Ada.Numerics.Discrete_Random *note A.5.2(23): 6112.
86832 in Ada.Numerics.Float_Random *note A.5.2(11): 6100.
86833 statement *note 5.1(3): 3109.
86834 used *note 5.1(2/3): 3107, *note P: 9271.
86835 statement_identifier *note 5.1(8): 3138.
86836 used *note 5.1(7): 3137, *note 5.5(2): 3184, *note 5.6(2): 3254,
86837 *note P: 9310.
86838 static *note 4.9(1): 3079.
86839 constant *note 4.9(24): 3084.
86840 constraint *note 4.9(27): 3090.
86841 delta constraint *note 4.9(29): 3093.
86842 digits constraint *note 4.9(29): 3092.
86843 discrete_range *note 4.9(25): 3086.
86844 discriminant constraint *note 4.9(31): 3095.
86845 expression *note 4.9(2): 3081.
86846 function *note 4.9(18): 3083.
86847 index constraint *note 4.9(30): 3094.
86848 range *note 4.9(25): 3085.
86849 range constraint *note 4.9(29): 3091.
86850 scalar subtype *note 4.9(26/3): 3088.
86851 string subtype *note 4.9(26/3): 3089.
86852 subtype *note 4.9(26/3): 3087.
86853 subtype *note 12.4(9/2): 4732.
86854 static semantics *note 1.1.2(28): 1027.
86855 Static_Predicate aspect *note 3.2.4(1/3): 1436.
86856 statically
86857 constrained *note 4.9(32): 3096.
86858 denote *note 4.9(14): 3082.
86859 statically compatible
86860 for a constraint and a scalar subtype *note 4.9.1(4/3): 3102.
86861 for a constraint and an access or composite subtype *note
86862 4.9.1(4/3): 3103.
86863 for two subtypes *note 4.9.1(5/3): 3104.
86864 statically deeper *note 3.10.2(4): 2288, *note 3.10.2(17): 2295.
86865 statically determined tag *note 3.9.2(1/2): 2142.
86866 [partial] *note 3.9.2(15): 2167, *note 3.9.2(19): 2171.
86867 statically matching
86868 effect on subtype-specific aspects *note 13.1(14): 4869.
86869 for constraints *note 4.9.1(1/2): 3099.
86870 for ranges *note 4.9.1(3): 3101.
86871 for subtypes *note 4.9.1(2/3): 3100.
86872 required *note 3.9.2(10/2): 2163, *note 3.10.2(27.1/2): 2302, *note
86873 4.6(24.15/2): 2947, *note 4.6(24.5/2): 2942, *note 6.3.1(16.3/3): 3423,
86874 *note 6.3.1(17/3): 3426, *note 6.3.1(23): 3431, *note 6.5(5.2/3): 3501,
86875 *note 7.3(13): 3598, *note 8.5.1(4.2/2): 3788, *note 12.4(8.1/2): 4728,
86876 *note 12.5.1(14): 4778, *note 12.5.3(6): 4790, *note 12.5.3(7): 4791,
86877 *note 12.5.4(3): 4794, *note 12.7(7): 4837.
86878 statically tagged *note 3.9.2(4/2): 2160.
86879 statically unevaluated *note 4.9(32.1/3): 3097.
86880 Status_Error
86881 in Ada.Direct_IO *note A.8.4(18): 6292.
86882 in Ada.Directories *note A.16(43/2): 6616.
86883 in Ada.IO_Exceptions *note A.13(4): 6559.
86884 in Ada.Sequential_IO *note A.8.1(15): 6261.
86885 in Ada.Streams.Stream_IO *note A.12.1(26): 6540.
86886 in Ada.Text_IO *note A.10.1(85): 6465.
86887 storage deallocation
86888 unchecked *note 13.11.2(1): 5189.
86889 storage element *note 13.3(8): 4939.
86890 storage management
86891 user-defined *note 13.11(1): 5149.
86892 storage node *note E(2): 8017.
86893 storage place
86894 of a component *note 13.5(1): 5022.
86895 representation aspect *note 13.5(1): 5021.
86896 storage place attributes
86897 of a component *note 13.5.2(1): 5044.
86898 storage pool *note 3.10(7/1): 2244, *note N(37.1/3): 8869.
86899 default *note 13.11.3(4.1/3): 5212.
86900 storage pool element *note 13.11(11): 5159.
86901 storage pool that supports subpools *note 13.11.4(18/3): 5233.
86902 storage pool type *note 13.11(11): 5157.
86903 Storage_Array
86904 in System.Storage_Elements *note 13.7.1(5): 5101.
86905 Storage_Check *note 11.5(23): 4613.
86906 [partial] *note 11.1(6): 4499, *note 13.3(67): 4983, *note
86907 13.11(17): 5175, *note D.7(17/1): 7847, *note D.7(18/1): 7852, *note
86908 D.7(19/1): 7857.
86909 Storage_Count subtype of Storage_Offset
86910 in System.Storage_Elements *note 13.7.1(4): 5099.
86911 Storage_Element
86912 in System.Storage_Elements *note 13.7.1(5): 5100.
86913 Storage_Elements
86914 child of System *note 13.7.1(2/2): 5097.
86915 Storage_Error
86916 raised by failure of run-time check *note 4.8(14): 3078, *note
86917 8.5.4(8.1/1): 3814, *note 11.1(4): 4496, *note 11.1(6): 4501, *note
86918 11.5(23): 4614, *note 13.3(67): 4985, *note 13.11(17): 5177, *note
86919 13.11(18): 5178, *note A.7(14/3): 6235, *note D.7(17/1): 7849, *note
86920 D.7(18/1): 7854, *note D.7(19.3/3): 7865, *note D.7(19/1): 7859.
86921 in Standard *note A.1(46): 5400.
86922 Storage_IO
86923 child of Ada *note A.9(3): 6300.
86924 Storage_Offset
86925 in System.Storage_Elements *note 13.7.1(3): 5098.
86926 Storage_Pool aspect *note 13.11(15): 5171.
86927 Storage_Pool attribute *note 13.11(13): 5163.
86928 Storage_Pool clause *note 13.3(7/2): 4931, *note 13.11(15): 5168.
86929 storage_pool_indicator *note 13.11.3(3.1/3): 5209.
86930 used *note 13.11.3(3/3): 5208, *note L(8.3/3): 8655.
86931 Storage_Pools
86932 child of System *note 13.11(5): 5152.
86933 Storage_Size
86934 in System.Storage_Pools *note 13.11(9): 5156.
86935 in System.Storage_Pools.Subpools *note 13.11.4(16/3): 5228.
86936 Storage_Size (access) aspect *note 13.11(15): 5173.
86937 Storage_Size (task) aspect *note 13.3(65.2/3): 4982.
86938 Storage_Size attribute *note 13.3(60/3): 4980, *note 13.11(14): 5165,
86939 *note J.9(2): 8440.
86940 Storage_Size clause *note 13.3(7/2): 4932, *note 13.11(15): 5169.
86941 Storage_Size pragma *note J.15.4(2/3): 8469, *note L(35.1/3): 8772.
86942 Storage_Unit
86943 in System *note 13.7(13): 5084.
86944 stream *note 13.13(1): 5289, *note N(37.2/3): 8870.
86945 in Ada.Streams.Stream_IO *note A.12.1(13): 6530.
86946 in Ada.Text_IO.Text_Streams *note A.12.2(4): 6551.
86947 in Ada.Wide_Text_IO.Text_Streams *note A.12.3(4): 6554.
86948 in Ada.Wide_Wide_Text_IO.Text_Streams *note A.12.4(4/2): 6557.
86949 stream file *note A.8(1/2): 6239.
86950 stream type *note 13.13(1): 5290.
86951 Stream_Access
86952 in Ada.Streams.Stream_IO *note A.12.1(4): 6514.
86953 in Ada.Text_IO.Text_Streams *note A.12.2(3): 6550.
86954 in Ada.Wide_Text_IO.Text_Streams *note A.12.3(3): 6553.
86955 in Ada.Wide_Wide_Text_IO.Text_Streams *note A.12.4(3/2): 6556.
86956 Stream_Element
86957 in Ada.Streams *note 13.13.1(4/1): 5294.
86958 Stream_Element_Array
86959 in Ada.Streams *note 13.13.1(4/1): 5297.
86960 Stream_Element_Count subtype of Stream_Element_Offset
86961 in Ada.Streams *note 13.13.1(4/1): 5296.
86962 Stream_Element_Offset
86963 in Ada.Streams *note 13.13.1(4/1): 5295.
86964 Stream_IO
86965 child of Ada.Streams *note A.12.1(3/3): 6513.
86966 Stream_Size aspect *note 13.13.2(1.5/2): 5303.
86967 Stream_Size attribute *note 13.13.2(1.2/3): 5301.
86968 Stream_Size clause *note 13.3(7/2): 4933.
86969 Streams
86970 child of Ada *note 13.13.1(2): 5291.
86971 strict mode *note G.2(1): 8251.
86972 strict weak ordering *note A.18(5/3): 6658.
86973 String
86974 in Standard *note A.1(37/3): 5394.
86975 string type *note 3.6.3(1): 1956.
86976 String_Access
86977 in Ada.Strings.Unbounded *note A.4.5(7): 5853.
86978 string_element *note 2.6(3): 1252.
86979 used *note 2.6(2): 1251, *note P: 8916.
86980 string_literal *note 2.6(2): 1250.
86981 used *note 4.4(7/3): 2704, *note 6.1(9): 3298, *note P: 9230.
86982 Strings
86983 child of Ada *note A.4.1(3): 5717.
86984 child of Ada.Strings.UTF_Encoding *note A.4.11(22/3): 6028.
86985 child of Interfaces.C *note B.3.1(3): 7430.
86986 Strlen
86987 in Interfaces.C.Strings *note B.3.1(17): 7444.
86988 structure
86989 See record type *note 3.8(1): 2016.
86990 STS
86991 in Ada.Characters.Latin_1 *note A.3.3(18): 5564.
86992 STX
86993 in Ada.Characters.Latin_1 *note A.3.3(5): 5449.
86994 SUB
86995 in Ada.Characters.Latin_1 *note A.3.3(6): 5473.
86996 Sub_Second
86997 in Ada.Calendar.Formatting *note 9.6.1(27/2): 4172.
86998 subaggregate
86999 of an array_aggregate *note 4.3.3(6): 2556.
87000 subcomponent *note 3.2(6/2): 1347.
87001 subpool *note 13.11.4(18/3): 5229.
87002 subpool access type *note 13.11.4(22/3): 5235.
87003 subpool handle *note 13.11.4(18/3): 5231.
87004 Subpool_Handle
87005 in System.Storage_Pools.Subpools *note 13.11.4(6/3): 5219.
87006 subpool_specification *note 4.8(2.1/3): 3041.
87007 used *note 4.8(2/3): 3037, *note P: 9267.
87008 Subpools
87009 child of System.Storage_Pools *note 13.11.4(3/3): 5216.
87010 subprogram *note 6(1): 3268, *note N(37.3/2): 8871.
87011 abstract *note 3.9.3(3/2): 2185.
87012 subprogram call *note 6.4(1): 3436.
87013 subprogram instance *note 12.3(13): 4700.
87014 subprogram_body *note 6.3(2/3): 3393.
87015 used *note 3.11(6): 2333, *note 9.4(8/1): 3964, *note 10.1.1(7):
87016 4318, *note P: 9580.
87017 subprogram_body_stub *note 10.1.3(3/3): 4367.
87018 used *note 10.1.3(2): 4363, *note P: 9592.
87019 subprogram_declaration *note 6.1(2/3): 3274.
87020 used *note 3.1(3/3): 1297, *note 9.4(5/1): 3951, *note 9.4(8/1):
87021 3963, *note 10.1.1(5): 4309, *note P: 9489.
87022 subprogram_default *note 12.6(3/2): 4811.
87023 used *note 12.6(2.1/3): 4805, *note 12.6(2.2/3): 4809, *note P:
87024 9695.
87025 subprogram_renaming_declaration *note 8.5.4(2/3): 3802.
87026 used *note 8.5(2): 3773, *note 10.1.1(6): 4316, *note P: 9428.
87027 subprogram_specification *note 6.1(4/2): 3278.
87028 used *note 3.9.3(1.1/3): 2180, *note 6.1(2/3): 3276, *note
87029 6.3(2/3): 3395, *note 8.5.4(2/3): 3804, *note 10.1.3(3/3): 4369, *note
87030 12.1(3/3): 4644, *note 12.6(2.1/3): 4804, *note 12.6(2.2/3): 4808, *note
87031 P: 9084.
87032 subsystem *note 10.1(3): 4295, *note N(22): 8844.
87033 subtree
87034 node which roots *note A.18.10(3/3): 7137.
87035 of a tree *note A.18.10(3/3): 7135.
87036 Subtree_Node_Count
87037 in Ada.Containers.Multiway_Trees *note A.18.10(18/3): 7154.
87038 subtype *note 3.2(8/2): 1353, *note N(38/3): 8872.
87039 constraint of *note 3.2(8/2): 1357.
87040 type of *note 3.2(8/2): 1355.
87041 values belonging to *note 3.2(8/2): 1360.
87042 subtype (of an object)
87043 See actual subtype of an object *note 3.3(23/3): 1466.
87044 See actual subtype of an object *note 3.3.1(9/2): 1506.
87045 subtype conformance *note 6.3.1(17/3): 3424.
87046 [partial] *note 3.10.2(34/2): 2317, *note 9.5.4(17): 4105.
87047 required *note 3.9.2(10/2): 2164, *note 3.10.2(32/3): 2313, *note
87048 4.6(24.20/3): 2954, *note 8.5.1(4.3/2): 3789, *note 8.5.4(5/3): 3812,
87049 *note 9.1(9.7/2): 3904, *note 9.1(9.8/2): 3905, *note 9.4(11.6/2): 3975,
87050 *note 9.4(11.7/2): 3976, *note 9.5.4(5/3): 4099, *note 12.4(8.2/2):
87051 4729, *note 12.5.4(5/3): 4795.
87052 subtype conversion
87053 See type conversion *note 4.6(1/3): 2912.
87054 See also implicit subtype conversion *note 4.6(1/3): 2916.
87055 subtype-specific
87056 of a representation item *note 13.1(8/3): 4862.
87057 of an aspect *note 13.1(8/3): 4864.
87058 subtype_declaration *note 3.2.2(2/3): 1399.
87059 used *note 3.1(3/3): 1294, *note P: 8931.
87060 subtype_indication *note 3.2.2(3/2): 1403.
87061 used *note 3.2.2(2/3): 1401, *note 3.3.1(2/3): 1480, *note
87062 3.4(2/2): 1533, *note 3.6(6): 1894, *note 3.6(7/2): 1897, *note
87063 3.6.1(3): 1929, *note 3.8.1(5/3): 2063, *note 3.10(3): 2227, *note
87064 4.8(2/3): 3038, *note 5.5.2(2/3): 3232, *note 6.5(2.3/2): 3495, *note
87065 7.3(3/3): 3590, *note P: 9322.
87066 subtype_mark *note 3.2.2(4): 1407.
87067 used *note 3.2.2(3/2): 1405, *note 3.6(4): 1888, *note 3.7(5/2):
87068 1970, *note 3.9.4(3/2): 2192, *note 3.10(6/2): 2235, *note 4.3.2(3):
87069 2526, *note 4.4(3.2/3): 2687, *note 4.6(2): 2919, *note 4.7(2): 3021,
87070 *note 6.1(13/2): 3306, *note 6.1(15/3): 3316, *note 8.4(4/3): 3761,
87071 *note 8.5.1(2/3): 3781, *note 12.3(5): 4692, *note 12.4(2/3): 4717,
87072 *note 12.5.1(3/2): 4774, *note P: 9660.
87073 subtypes
87074 of a profile *note 6.1(25): 3335.
87075 subunit *note 10.1.3(7): 4380, *note 10.1.3(8/2): 4384.
87076 of a program unit *note 10.1.3(8/2): 4385.
87077 used *note 10.1.1(3): 4303, *note P: 9569.
87078 Succ attribute *note 3.5(22): 1624.
87079 Success
87080 in Ada.Command_Line *note A.15(8): 6576.
87081 successor element
87082 of a hashed set *note A.18.8(68/2): 7052.
87083 of a set *note A.18.7(6/2): 6969.
87084 of an ordered set *note A.18.9(81/3): 7131.
87085 successor node
87086 of a hashed map *note A.18.5(46/2): 6902.
87087 of a map *note A.18.4(6/2): 6840.
87088 of an ordered map *note A.18.6(58/3): 6960.
87089 Sunday
87090 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4160.
87091 super
87092 See view conversion *note 4.6(5/2): 2931.
87093 Superscript_One
87094 in Ada.Characters.Latin_1 *note A.3.3(22): 5605.
87095 Superscript_Three
87096 in Ada.Characters.Latin_1 *note A.3.3(22): 5598.
87097 Superscript_Two
87098 in Ada.Characters.Latin_1 *note A.3.3(22): 5597.
87099 support external streaming *note 13.13.2(52/3): 5343.
87100 Supported
87101 in Ada.Execution_Time.Interrupts *note D.14.3(3/3): 7982.
87102 Suppress pragma *note 11.5(4/2): 4590, *note J.10(3/2): 8443, *note
87103 L(36): 8775.
87104 suppressed check *note 11.5(8/2): 4599.
87105 Suspend_Until_True
87106 in Ada.Synchronous_Task_Control *note D.10(4): 7903.
87107 Suspend_Until_True_And_Set_Deadline
87108 in Ada.Synchronous_Task_Control.EDF *note D.10(5.2/3): 7905.
87109 Suspension_Object
87110 in Ada.Synchronous_Task_Control *note D.10(4): 7899.
87111 Swap
87112 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(28/2): 6795.
87113 in Ada.Containers.Multiway_Trees *note A.18.10(37/3): 7173.
87114 in Ada.Containers.Vectors *note A.18.2(55/2): 6722, *note
87115 A.18.2(56/2): 6723.
87116 Swap_Links
87117 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(29/2): 6796.
87118 Symmetric_Difference
87119 in Ada.Containers.Hashed_Sets *note A.18.8(35/2): 7018, *note
87120 A.18.8(36/2): 7019.
87121 in Ada.Containers.Ordered_Sets *note A.18.9(36/2): 7091, *note
87122 A.18.9(37/2): 7092.
87123 SYN
87124 in Ada.Characters.Latin_1 *note A.3.3(6): 5469.
87125 synchronization *note 9(1/3): 3858.
87126 Synchronization aspect *note 9.5(12/3): 3998.
87127 synchronization_kind *note 9.5(10/3): 3996.
87128 synchronized *note N(38.1/2): 8873.
87129 synchronized interface *note 3.9.4(5/2): 2200.
87130 synchronized tagged type *note 3.9.4(6/2): 2205.
87131 Synchronized_Queue_Interfaces
87132 child of Ada.Containers *note A.18.27(3/3): 7279.
87133 Synchronous_Barrier
87134 in Ada.Synchronous_Barriers *note D.10.1(5/3): 7911.
87135 Synchronous_Barriers
87136 child of Ada *note D.10.1(3/3): 7909.
87137 Synchronous_Task_Control
87138 child of Ada *note D.10(3/2): 7898.
87139 syntactic category *note 1.1.4(15): 1066.
87140 syntax
87141 complete listing *note P(1): 8878.
87142 cross reference *note P(1): 9758.
87143 notation *note 1.1.4(3): 1060.
87144 under Syntax heading *note 1.1.2(25): 1014.
87145 System *note 13.7(3/2): 5070.
87146 System.Address_To_Access_Conversions *note 13.7.2(2): 5109.
87147 System.Machine_Code *note 13.8(7): 5117.
87148 System.Multiprocessors *note D.16(3/3): 7995.
87149 System.Multiprocessors.Dispatching_Domains *note D.16.1(3/3): 8002.
87150 System.RPC *note E.5(3): 8125.
87151 System.Storage_Elements *note 13.7.1(2/2): 5097.
87152 System.Storage_Pools *note 13.11(5): 5152.
87153 System.Storage_Pools.Subpools *note 13.11.4(3/3): 5216.
87154 System_Dispatching_Domain
87155 in System.Multiprocessors.Dispatching_Domains *note D.16.1(6/3):
87156 8005.
87157 System_Name
87158 in System *note 13.7(4): 5072.
87159 systems programming *note C(1): 7551.
87160
87161
87162 \1f
87163 File: arm2012.info, Node: T, Next: U, Prev: S, Up: Index
87164
87165 T
87166 ==
87167
87168
87169
87170 Tag
87171 in Ada.Tags *note 3.9(6/2): 2094.
87172 Tag attribute *note 3.9(16): 2115, *note 3.9(18): 2117.
87173 tag indeterminate *note 3.9.2(6/2): 2162.
87174 tag of an object *note 3.9(3): 2086.
87175 class-wide object *note 3.9(22): 2121.
87176 object created by an allocator *note 3.9(21): 2120.
87177 preserved by type conversion and parameter passing *note 3.9(25):
87178 2124.
87179 returned by a function *note 3.9(23): 2122, *note 3.9(24/2): 2123.
87180 stand-alone object, component, or aggregate *note 3.9(20): 2119.
87181 Tag_Array
87182 in Ada.Tags *note 3.9(7.3/2): 2104.
87183 Tag_Check *note 11.5(18): 4608.
87184 [partial] *note 3.9.2(16): 2168, *note 4.6(42): 2980, *note
87185 4.6(52): 3005, *note 5.2(10): 3155, *note 6.5(8.1/3): 3516.
87186 Tag_Error
87187 in Ada.Tags *note 3.9(8): 2107.
87188 tagged incomplete view *note 3.10.1(2.1/2): 2274.
87189 tagged type *note 3.9(2/2): 2080, *note N(39): 8874.
87190 protected *note 3.9.4(6/2): 2209.
87191 synchronized *note 3.9.4(6/2): 2207.
87192 task *note 3.9.4(6/2): 2208.
87193 Tags
87194 child of Ada *note 3.9(6/2): 2093.
87195 Tail
87196 in Ada.Strings.Bounded *note A.4.4(72): 5844, *note A.4.4(73):
87197 5845.
87198 in Ada.Strings.Fixed *note A.4.3(37): 5787, *note A.4.3(38): 5788.
87199 in Ada.Strings.Unbounded *note A.4.5(67): 5898, *note A.4.5(68):
87200 5899.
87201 tail (of a queue) *note D.2.1(5/2): 7707.
87202 tamper with cursors
87203 of a list *note A.18.3(62/2): 6819.
87204 of a map *note A.18.4(8/2): 6841.
87205 of a set *note A.18.7(8/2): 6970.
87206 of a tree *note A.18.10(81/3): 7209.
87207 of a vector *note A.18.2(91/2): 6747.
87208 tamper with elements
87209 of a holder *note A.18.18(30/3): 7245.
87210 of a list *note A.18.3(67/2): 6820.
87211 of a map *note A.18.4(13/2): 6842.
87212 of a set *note A.18.7(13/2): 6971.
87213 of a tree *note A.18.10(87/3): 7210.
87214 of a vector *note A.18.2(95/2): 6748.
87215 tampering
87216 prohibited for a holder *note A.18.18(35/3): 7247.
87217 prohibited for a list *note A.18.3(69.1/3): 6822.
87218 prohibited for a map *note A.18.4(15.1/3): 6844.
87219 prohibited for a set *note A.18.7(14.1/3): 6973.
87220 prohibited for a tree *note A.18.10(90/3): 7212.
87221 prohibited for a vector *note A.18.2(97.1/3): 6750.
87222 Tan
87223 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
87224 G.1.2(4): 8213.
87225 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(5): 6067.
87226 Tanh
87227 in Ada.Numerics.Generic_Complex_Elementary_Functions *note
87228 G.1.2(6): 8221.
87229 in Ada.Numerics.Generic_Elementary_Functions *note A.5.1(7): 6080.
87230 target
87231 of an assignment operation *note 5.2(3): 3148.
87232 of an assignment_statement *note 5.2(3): 3149.
87233 target object
87234 of a requeue_statement *note 9.5(7): 3993.
87235 of the name of an entry or a protected subprogram *note 9.5(2/3):
87236 3990.
87237 target statement
87238 of a goto_statement *note 5.8(3): 3266.
87239 target subtype
87240 of a type_conversion *note 4.6(3): 2923.
87241 task *note 9(1/3): 3855.
87242 activation *note 9.2(1): 3916.
87243 completion *note 9.3(1): 3923.
87244 dependence *note 9.3(1): 3922.
87245 execution *note 9.2(1): 3914.
87246 termination *note 9.3(1): 3924.
87247 task declaration *note 9.1(1): 3872.
87248 task dispatching *note D.2.1(4/2): 7701.
87249 task dispatching point *note D.2.1(4/2): 7703.
87250 [partial] *note D.2.3(8/2): 7729, *note D.2.4(9/3): 7738.
87251 task dispatching policy *note D.2.2(7/2): 7725.
87252 [partial] *note D.2.1(5/2): 7709.
87253 EDF_Across_Priorities *note D.2.6(7/2): 7748.
87254 FIFO_Within_Priorities *note D.2.3(2/2): 7727.
87255 Non_Preemptive_FIFO_Within_Priorities *note D.2.4(2/2): 7733.
87256 Round_Robin_Within_Priorities *note D.2.5(2/2): 7740.
87257 task interface *note 3.9.4(5/2): 2202.
87258 task priority *note D.1(15): 7690.
87259 task state
87260 abnormal *note 9.8(4): 4260.
87261 blocked *note 9(10): 3865.
87262 callable *note 9.9(2): 4274.
87263 held *note D.11(4/2): 7917.
87264 inactive *note 9(10): 3863.
87265 ready *note 9(10): 3867.
87266 terminated *note 9(10): 3869.
87267 task tagged type *note 3.9.4(6/2): 2210.
87268 task type *note N(40/2): 8875.
87269 task unit *note 9(9): 3862.
87270 Task_Array
87271 in Ada.Execution_Time.Group_Budgets *note D.14.2(6/2): 7958.
87272 Task_Attributes
87273 child of Ada *note C.7.2(2): 7657.
87274 task_body *note 9.1(6/3): 3891.
87275 used *note 3.11(6): 2335, *note P: 9115.
87276 task_body_stub *note 10.1.3(5): 4374.
87277 used *note 10.1.3(2): 4365, *note P: 9594.
87278 task_definition *note 9.1(4): 3884.
87279 used *note 9.1(2/3): 3878, *note 9.1(3/3): 3883, *note P: 9462.
87280 Task_Dispatching_Policy pragma *note D.2.2(3): 7714, *note L(37):
87281 8778.
87282 Task_Id
87283 in Ada.Task_Identification *note C.7.1(2/2): 7638.
87284 Task_Identification
87285 child of Ada *note C.7.1(2/2): 7637.
87286 task_item *note 9.1(5/1): 3888.
87287 used *note 9.1(4): 3885, *note P: 9468.
87288 Task_Termination
87289 child of Ada *note C.7.3(2/2): 7669.
87290 task_type_declaration *note 9.1(2/3): 3873.
87291 used *note 3.2.1(3/3): 1377, *note P: 8952.
87292 Tasking_Error
87293 raised by failure of run-time check *note 9.2(5): 3920, *note
87294 9.5.3(21): 4091, *note 11.1(4): 4497, *note 13.11.2(13): 5201, *note
87295 13.11.2(14): 5203, *note C.7.2(13): 7663, *note D.5.1(8): 7797, *note
87296 D.11(8): 7920.
87297 in Standard *note A.1(46): 5401.
87298 template *note 12(1): 4635.
87299 for a formal package *note 12.7(4): 4836.
87300 See generic unit *note 12(1): 4636.
87301 term *note 4.4(5): 2693.
87302 used *note 4.4(4): 2692, *note P: 9219.
87303 terminal interrupt
87304 example *note 9.7.4(10): 4246.
87305 terminate_alternative *note 9.7.1(7): 4208.
87306 used *note 9.7.1(4): 4201, *note P: 9543.
87307 terminated
87308 a task state *note 9(10): 3870.
87309 Terminated attribute *note 9.9(3): 4277.
87310 termination
87311 of a partition *note E.1(7): 8025.
87312 termination handler *note C.7.3(8/3): 7676.
87313 fall-back *note C.7.3(9/2): 7679.
87314 specific *note C.7.3(9/2): 7681.
87315 Termination_Handler
87316 in Ada.Task_Termination *note C.7.3(4/2): 7671.
87317 Terminator_Error
87318 in Interfaces.C *note B.3(40): 7427.
87319 tested type
87320 of a membership test *note 4.5.2(3/3): 2787.
87321 text of a program *note 2.2(1): 1179.
87322 Text_IO
87323 child of Ada *note A.10.1(2): 6319.
87324 Text_Streams
87325 child of Ada.Text_IO *note A.12.2(3): 6549.
87326 child of Ada.Wide_Text_IO *note A.12.3(3): 6552.
87327 child of Ada.Wide_Wide_Text_IO *note A.12.4(3/2): 6555.
87328 throw (an exception)
87329 See raise *note 11(1/3): 4484.
87330 Thursday
87331 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4157.
87332 tick *note 2.1(15/3): 1155.
87333 in Ada.Real_Time *note D.8(6): 7876.
87334 in System *note 13.7(10): 5081.
87335 Tilde
87336 in Ada.Characters.Latin_1 *note A.3.3(14): 5538.
87337 Time
87338 in Ada.Calendar *note 9.6(10): 4121.
87339 in Ada.Real_Time *note D.8(4): 7867.
87340 time base *note 9.6(6/3): 4118.
87341 time limit
87342 example *note 9.7.4(12): 4249.
87343 time type *note 9.6(6/3): 4117.
87344 Time-dependent Reset procedure
87345 of the random number generator *note A.5.2(34): 6121.
87346 time-out
87347 example *note 9.7.4(12): 4248.
87348 See asynchronous_select *note 9.7.4(12): 4247.
87349 See selective_accept *note 9.7.1(1): 4189.
87350 See timed_entry_call *note 9.7.2(1/2): 4215.
87351 Time_Error
87352 in Ada.Calendar *note 9.6(18): 4133.
87353 Time_First
87354 in Ada.Real_Time *note D.8(4): 7868.
87355 Time_Last
87356 in Ada.Real_Time *note D.8(4): 7869.
87357 Time_Of
87358 in Ada.Calendar *note 9.6(15): 4132.
87359 in Ada.Calendar.Formatting *note 9.6.1(30/2): 4175, *note
87360 9.6.1(31/2): 4176.
87361 in Ada.Execution_Time *note D.14(9/2): 7932.
87362 in Ada.Real_Time *note D.8(16): 7887.
87363 Time_Of_Event
87364 in Ada.Real_Time.Timing_Events *note D.15(6/2): 7990.
87365 Time_Offset
87366 in Ada.Calendar.Time_Zones *note 9.6.1(4/2): 4145.
87367 Time_Remaining
87368 in Ada.Execution_Time.Timers *note D.14.1(8/2): 7948.
87369 Time_Span
87370 in Ada.Real_Time *note D.8(5): 7871.
87371 Time_Span_First
87372 in Ada.Real_Time *note D.8(5): 7872.
87373 Time_Span_Last
87374 in Ada.Real_Time *note D.8(5): 7873.
87375 Time_Span_Unit
87376 in Ada.Real_Time *note D.8(5): 7875.
87377 Time_Span_Zero
87378 in Ada.Real_Time *note D.8(5): 7874.
87379 Time_Unit
87380 in Ada.Real_Time *note D.8(4): 7870.
87381 Time_Zones
87382 child of Ada.Calendar *note 9.6.1(2/2): 4144.
87383 timed_entry_call *note 9.7.2(2): 4216.
87384 used *note 9.7(2): 4186, *note P: 9532.
87385 Timer
87386 in Ada.Execution_Time.Timers *note D.14.1(4/2): 7941.
87387 timer interrupt
87388 example *note 9.7.4(12): 4251.
87389 Timer_Handler
87390 in Ada.Execution_Time.Timers *note D.14.1(5/2): 7942.
87391 Timer_Resource_Error
87392 in Ada.Execution_Time.Timers *note D.14.1(9/2): 7949.
87393 Timers
87394 child of Ada.Execution_Time *note D.14.1(3/2): 7940.
87395 times operator *note 4.4(1/3): 2630, *note 4.5.5(1): 2837.
87396 timing
87397 See delay_statement *note 9.6(1): 4107.
87398 Timing_Event
87399 in Ada.Real_Time.Timing_Events *note D.15(4/2): 7984.
87400 Timing_Event_Handler
87401 in Ada.Real_Time.Timing_Events *note D.15(4/2): 7985.
87402 Timing_Events
87403 child of Ada.Real_Time *note D.15(3/2): 7983.
87404 To_Ada
87405 in Interfaces.C *note B.3(22): 7390, *note B.3(26): 7394, *note
87406 B.3(28): 7396, *note B.3(32): 7400, *note B.3(37): 7404, *note B.3(39):
87407 7406, *note B.3(39.10/2): 7416, *note B.3(39.13/2): 7420, *note
87408 B.3(39.17/2): 7424, *note B.3(39.19/2): 7426, *note B.3(39.4/2): 7410,
87409 *note B.3(39.8/2): 7414.
87410 in Interfaces.COBOL *note B.4(17): 7493, *note B.4(19): 7495.
87411 in Interfaces.Fortran *note B.5(13): 7546, *note B.5(14): 7548,
87412 *note B.5(16): 7550.
87413 To_Address
87414 in System.Address_To_Access_Conversions *note 13.7.2(3/3): 5111.
87415 in System.Storage_Elements *note 13.7.1(10/3): 5104.
87416 To_Basic
87417 in Ada.Characters.Handling *note A.3.2(6): 5426, *note A.3.2(7):
87418 5429.
87419 To_Binary
87420 in Interfaces.COBOL *note B.4(45): 7525, *note B.4(48): 7528.
87421 To_Bounded_String
87422 in Ada.Strings.Bounded *note A.4.4(11): 5797.
87423 To_C
87424 in Interfaces.C *note B.3(21): 7389, *note B.3(25): 7393, *note
87425 B.3(27): 7395, *note B.3(32): 7399, *note B.3(36): 7403, *note B.3(38):
87426 7405, *note B.3(39.13/2): 7419, *note B.3(39.16/2): 7423, *note
87427 B.3(39.18/2): 7425, *note B.3(39.4/2): 7409, *note B.3(39.7/2): 7413,
87428 *note B.3(39.9/2): 7415.
87429 To_Character
87430 in Ada.Characters.Conversions *note A.3.4(5/2): 5689.
87431 To_Chars_Ptr
87432 in Interfaces.C.Strings *note B.3.1(8): 7435.
87433 To_COBOL
87434 in Interfaces.COBOL *note B.4(17): 7492, *note B.4(18): 7494.
87435 To_Cursor
87436 in Ada.Containers.Vectors *note A.18.2(25/2): 6685.
87437 To_Decimal
87438 in Interfaces.COBOL *note B.4(35): 7516, *note B.4(40): 7520, *note
87439 B.4(44): 7524, *note B.4(47): 7527.
87440 To_Display
87441 in Interfaces.COBOL *note B.4(36): 7517.
87442 To_Domain
87443 in Ada.Strings.Maps *note A.4.2(24): 5748.
87444 in Ada.Strings.Wide_Maps *note A.4.7(24): 5950.
87445 in Ada.Strings.Wide_Wide_Maps *note A.4.8(24/2): 5989.
87446 To_Duration
87447 in Ada.Real_Time *note D.8(13): 7878.
87448 To_Fortran
87449 in Interfaces.Fortran *note B.5(13): 7545, *note B.5(14): 7547,
87450 *note B.5(15): 7549.
87451 To_Holder
87452 in Ada.Containers.Indefinite_Holders *note A.18.18(9/3): 7230.
87453 To_Index
87454 in Ada.Containers.Vectors *note A.18.2(26/2): 6686.
87455 To_Integer
87456 in System.Storage_Elements *note 13.7.1(10/3): 5105.
87457 To_ISO_646
87458 in Ada.Characters.Handling *note A.3.2(11): 5433, *note A.3.2(12):
87459 5434.
87460 To_Long_Binary
87461 in Interfaces.COBOL *note B.4(48): 7529.
87462 To_Lower
87463 in Ada.Characters.Handling *note A.3.2(6): 5424, *note A.3.2(7):
87464 5427.
87465 in Ada.Wide_Characters.Handling *note A.3.5(20/3): 5712, *note
87466 A.3.5(21/3): 5714.
87467 To_Mapping
87468 in Ada.Strings.Maps *note A.4.2(23): 5747.
87469 in Ada.Strings.Wide_Maps *note A.4.7(23): 5949.
87470 in Ada.Strings.Wide_Wide_Maps *note A.4.8(23/2): 5988.
87471 To_Packed
87472 in Interfaces.COBOL *note B.4(41): 7521.
87473 To_Picture
87474 in Ada.Text_IO.Editing *note F.3.3(6): 8158.
87475 To_Pointer
87476 in System.Address_To_Access_Conversions *note 13.7.2(3/3): 5110.
87477 To_Range
87478 in Ada.Strings.Maps *note A.4.2(24): 5749.
87479 in Ada.Strings.Wide_Maps *note A.4.7(25): 5951.
87480 in Ada.Strings.Wide_Wide_Maps *note A.4.8(25/2): 5990.
87481 To_Ranges
87482 in Ada.Strings.Maps *note A.4.2(10): 5737.
87483 in Ada.Strings.Wide_Maps *note A.4.7(10): 5939.
87484 in Ada.Strings.Wide_Wide_Maps *note A.4.8(10/2): 5978.
87485 To_Sequence
87486 in Ada.Strings.Maps *note A.4.2(19): 5743.
87487 in Ada.Strings.Wide_Maps *note A.4.7(19): 5945.
87488 in Ada.Strings.Wide_Wide_Maps *note A.4.8(19/2): 5984.
87489 To_Set
87490 in Ada.Containers.Hashed_Sets *note A.18.8(9/2): 6992.
87491 in Ada.Containers.Ordered_Sets *note A.18.9(10/2): 7065.
87492 in Ada.Strings.Maps *note A.4.2(8): 5735, *note A.4.2(9): 5736,
87493 *note A.4.2(17): 5741, *note A.4.2(18): 5742.
87494 in Ada.Strings.Wide_Maps *note A.4.7(8): 5937, *note A.4.7(9):
87495 5938, *note A.4.7(17): 5943, *note A.4.7(18): 5944.
87496 in Ada.Strings.Wide_Wide_Maps *note A.4.8(8/2): 5976, *note
87497 A.4.8(9/2): 5977, *note A.4.8(17/2): 5982, *note A.4.8(18/2): 5983.
87498 To_String
87499 in Ada.Characters.Conversions *note A.3.4(5/2): 5692.
87500 in Ada.Strings.Bounded *note A.4.4(12): 5798.
87501 in Ada.Strings.Unbounded *note A.4.5(11): 5857.
87502 To_Time_Span
87503 in Ada.Real_Time *note D.8(13): 7879.
87504 To_Unbounded_String
87505 in Ada.Strings.Unbounded *note A.4.5(9): 5855, *note A.4.5(10):
87506 5856.
87507 To_Upper
87508 in Ada.Characters.Handling *note A.3.2(6): 5425, *note A.3.2(7):
87509 5428.
87510 in Ada.Wide_Characters.Handling *note A.3.5(20/3): 5713, *note
87511 A.3.5(21/3): 5715.
87512 To_Vector
87513 in Ada.Containers.Vectors *note A.18.2(13/2): 6677, *note
87514 A.18.2(14/2): 6678.
87515 To_Wide_Character
87516 in Ada.Characters.Conversions *note A.3.4(4/2): 5683, *note
87517 A.3.4(5/2): 5693.
87518 To_Wide_String
87519 in Ada.Characters.Conversions *note A.3.4(4/2): 5684, *note
87520 A.3.4(5/2): 5694.
87521 To_Wide_Wide_Character
87522 in Ada.Characters.Conversions *note A.3.4(4/2): 5685.
87523 To_Wide_Wide_String
87524 in Ada.Characters.Conversions *note A.3.4(4/2): 5686.
87525 token
87526 See lexical element *note 2.2(1): 1181.
87527 Trailing_Nonseparate
87528 in Interfaces.COBOL *note B.4(23): 7502.
87529 Trailing_Separate
87530 in Interfaces.COBOL *note B.4(23): 7500.
87531 transfer of control *note 5.1(14/2): 3141.
87532 Translate
87533 in Ada.Strings.Bounded *note A.4.4(53): 5826, *note A.4.4(54):
87534 5827, *note A.4.4(55): 5828, *note A.4.4(56): 5829.
87535 in Ada.Strings.Fixed *note A.4.3(18): 5769, *note A.4.3(19): 5770,
87536 *note A.4.3(20): 5771, *note A.4.3(21): 5772.
87537 in Ada.Strings.Unbounded *note A.4.5(48): 5880, *note A.4.5(49):
87538 5881, *note A.4.5(50): 5882, *note A.4.5(51): 5883.
87539 Translation_Error
87540 in Ada.Strings *note A.4.1(5): 5724.
87541 Transpose
87542 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(34/2): 8335.
87543 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(17/2): 8295.
87544 Tree
87545 in Ada.Containers.Multiway_Trees *note A.18.10(8/3): 7145.
87546 Tree_Iterator_Interfaces
87547 in Ada.Containers.Multiway_Trees *note A.18.10(13/3): 7150.
87548 triggering_alternative *note 9.7.4(3): 4233.
87549 used *note 9.7.4(2): 4231, *note P: 9556.
87550 triggering_statement *note 9.7.4(4/2): 4236.
87551 used *note 9.7.4(3): 4234, *note P: 9558.
87552 Trim
87553 in Ada.Strings.Bounded *note A.4.4(67): 5839, *note A.4.4(68):
87554 5840, *note A.4.4(69): 5841.
87555 in Ada.Strings.Fixed *note A.4.3(31): 5781, *note A.4.3(32): 5782,
87556 *note A.4.3(33): 5783, *note A.4.3(34): 5784.
87557 in Ada.Strings.Unbounded *note A.4.5(61): 5892, *note A.4.5(62):
87558 5893, *note A.4.5(63): 5894, *note A.4.5(64): 5895.
87559 Trim_End
87560 in Ada.Strings *note A.4.1(6): 5729.
87561 True *note 3.5.3(1): 1708.
87562 Truncation
87563 in Ada.Strings *note A.4.1(6): 5726.
87564 Truncation attribute *note A.5.3(42): 6177.
87565 Tuesday
87566 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4155.
87567 two's complement
87568 modular types *note 3.5.4(29): 1760.
87569 type *note 3.2(1): 1328, *note N(41/2): 8876.
87570 abstract *note 3.9.3(1.2/2): 2183.
87571 needs finalization *note 7.6(9.1/2): 3652.
87572 of a subtype *note 3.2(8/2): 1354.
87573 synchronized tagged *note 3.9.4(6/2): 2206.
87574 See also tag *note 3.9(3): 2090.
87575 See also language-defined types
87576 type conformance *note 6.3.1(15/2): 3418.
87577 [partial] *note 3.4(17/2): 1551, *note 8.3(8): 3729, *note
87578 8.3(26/2): 3751, *note 10.1.4(4/3): 4390.
87579 required *note 3.11.1(5): 2349, *note 4.1.4(14/2): 2442, *note
87580 8.6(26): 3846, *note 9.1(9.2/3): 3901, *note 9.1(9.5/3): 3903, *note
87581 9.4(11.1/3): 3972, *note 9.4(11.4/3): 3974, *note 9.5.4(3/3): 4098,
87582 *note 12.4(5/2): 4727.
87583 type conversion *note 4.6(1/3): 2913.
87584 access *note 4.6(24.11/2): 2944, *note 4.6(24.18/2): 2950, *note
87585 4.6(24.19/2): 2952, *note 4.6(47): 2988.
87586 arbitrary order *note 1.1.4(18): 1070.
87587 array *note 4.6(24.2/2): 2939, *note 4.6(36): 2969.
87588 composite (non-array) *note 4.6(21/3): 2933, *note 4.6(40): 2978.
87589 enumeration *note 4.6(21.1/2): 2935, *note 4.6(34): 2967.
87590 numeric *note 4.6(24.1/2): 2937, *note 4.6(29): 2964.
87591 unchecked *note 13.9(1): 5120.
87592 See also qualified_expression *note 4.7(1): 3017.
87593 type conversion, implicit
87594 See implicit subtype conversion *note 4.6(1/3): 2917.
87595 type extension *note 3.9(2/2): 2081, *note 3.9.1(1/2): 2128.
87596 type of a discrete_range *note 3.6.1(4): 1931.
87597 type of a range *note 3.5(4): 1593.
87598 type parameter
87599 See discriminant *note 3.7(1/2): 1958.
87600 type profile
87601 See profile, type conformant *note 6.3.1(15/2): 3420.
87602 type resolution rules *note 8.6(20/2): 3840.
87603 if any type in a specified class of types is expected *note
87604 8.6(21): 3841.
87605 if expected type is specific *note 8.6(22): 3843.
87606 if expected type is universal or class-wide *note 8.6(21): 3842.
87607 type tag
87608 See tag *note 3.9(3): 2088.
87609 type-related
87610 aspect *note 13.1(8.1/3): 4868.
87611 aspect *note 13.1(8/3): 4863.
87612 operational item *note 13.1(8.1/3): 4867.
87613 representation item *note 13.1(8/3): 4861.
87614 type_conversion *note 4.6(2): 2918.
87615 used *note 4.1(2/3): 2359, *note P: 9123.
87616 See also unchecked type conversion *note 13.9(1): 5122.
87617 type_declaration *note 3.2.1(2): 1367.
87618 used *note 3.1(3/3): 1293, *note P: 8930.
87619 type_definition *note 3.2.1(4/2): 1379.
87620 used *note 3.2.1(3/3): 1375, *note P: 8950.
87621 Type_Invariant aspect *note 7.3.2(2/3): 3613.
87622 Type_Invariant'Class aspect *note 7.3.2(3/3): 3615.
87623 Type_Set
87624 in Ada.Text_IO *note A.10.1(7): 6327.
87625 types
87626 of a profile *note 6.1(29): 3336.
87627
87628
87629 \1f
87630 File: arm2012.info, Node: U, Next: V, Prev: T, Up: Index
87631
87632 U
87633 ==
87634
87635
87636
87637 UC_A_Acute
87638 in Ada.Characters.Latin_1 *note A.3.3(23): 5613.
87639 UC_A_Circumflex
87640 in Ada.Characters.Latin_1 *note A.3.3(23): 5614.
87641 UC_A_Diaeresis
87642 in Ada.Characters.Latin_1 *note A.3.3(23): 5616.
87643 UC_A_Grave
87644 in Ada.Characters.Latin_1 *note A.3.3(23): 5612.
87645 UC_A_Ring
87646 in Ada.Characters.Latin_1 *note A.3.3(23): 5617.
87647 UC_A_Tilde
87648 in Ada.Characters.Latin_1 *note A.3.3(23): 5615.
87649 UC_AE_Diphthong
87650 in Ada.Characters.Latin_1 *note A.3.3(23): 5618.
87651 UC_C_Cedilla
87652 in Ada.Characters.Latin_1 *note A.3.3(23): 5619.
87653 UC_E_Acute
87654 in Ada.Characters.Latin_1 *note A.3.3(23): 5621.
87655 UC_E_Circumflex
87656 in Ada.Characters.Latin_1 *note A.3.3(23): 5622.
87657 UC_E_Diaeresis
87658 in Ada.Characters.Latin_1 *note A.3.3(23): 5623.
87659 UC_E_Grave
87660 in Ada.Characters.Latin_1 *note A.3.3(23): 5620.
87661 UC_I_Acute
87662 in Ada.Characters.Latin_1 *note A.3.3(23): 5625.
87663 UC_I_Circumflex
87664 in Ada.Characters.Latin_1 *note A.3.3(23): 5626.
87665 UC_I_Diaeresis
87666 in Ada.Characters.Latin_1 *note A.3.3(23): 5627.
87667 UC_I_Grave
87668 in Ada.Characters.Latin_1 *note A.3.3(23): 5624.
87669 UC_Icelandic_Eth
87670 in Ada.Characters.Latin_1 *note A.3.3(24): 5628.
87671 UC_Icelandic_Thorn
87672 in Ada.Characters.Latin_1 *note A.3.3(24): 5642.
87673 UC_N_Tilde
87674 in Ada.Characters.Latin_1 *note A.3.3(24): 5629.
87675 UC_O_Acute
87676 in Ada.Characters.Latin_1 *note A.3.3(24): 5631.
87677 UC_O_Circumflex
87678 in Ada.Characters.Latin_1 *note A.3.3(24): 5632.
87679 UC_O_Diaeresis
87680 in Ada.Characters.Latin_1 *note A.3.3(24): 5634.
87681 UC_O_Grave
87682 in Ada.Characters.Latin_1 *note A.3.3(24): 5630.
87683 UC_O_Oblique_Stroke
87684 in Ada.Characters.Latin_1 *note A.3.3(24): 5636.
87685 UC_O_Tilde
87686 in Ada.Characters.Latin_1 *note A.3.3(24): 5633.
87687 UC_U_Acute
87688 in Ada.Characters.Latin_1 *note A.3.3(24): 5638.
87689 UC_U_Circumflex
87690 in Ada.Characters.Latin_1 *note A.3.3(24): 5639.
87691 UC_U_Diaeresis
87692 in Ada.Characters.Latin_1 *note A.3.3(24): 5640.
87693 UC_U_Grave
87694 in Ada.Characters.Latin_1 *note A.3.3(24): 5637.
87695 UC_Y_Acute
87696 in Ada.Characters.Latin_1 *note A.3.3(24): 5641.
87697 UCHAR_MAX
87698 in Interfaces.C *note B.3(6): 7372.
87699 ultimate ancestor
87700 of a type *note 3.4.1(10/2): 1577.
87701 unary adding operator *note 4.5.4(1): 2821.
87702 unary operator *note 4.5(9): 2727.
87703 unary_adding_operator *note 4.5(5): 2720.
87704 used *note 4.4(4): 2689, *note P: 9218.
87705 Unbiased_Rounding attribute *note A.5.3(39): 6172.
87706 Unbounded
87707 child of Ada.Strings *note A.4.5(3): 5849.
87708 in Ada.Text_IO *note A.10.1(5): 6324.
87709 Unbounded_IO
87710 child of Ada.Text_IO *note A.10.12(3/2): 6491.
87711 child of Ada.Wide_Text_IO *note A.11(5/3): 6508.
87712 child of Ada.Wide_Wide_Text_IO *note A.11(5/3): 6509.
87713 Unbounded_Priority_Queues
87714 child of Ada.Containers *note A.18.30(2/3): 7298.
87715 Unbounded_Slice
87716 in Ada.Strings.Unbounded *note A.4.5(22.1/2): 5865, *note
87717 A.4.5(22.2/2): 5866.
87718 Unbounded_String
87719 in Ada.Strings.Unbounded *note A.4.5(4/2): 5850.
87720 Unbounded_Synchronized_Queues
87721 child of Ada.Containers *note A.18.28(2/3): 7286.
87722 unchecked storage deallocation *note 13.11.2(1): 5188.
87723 unchecked type conversion *note 13.9(1): 5119.
87724 unchecked union object *note B.3.3(6/3): 7473.
87725 unchecked union subtype *note B.3.3(6/3): 7472.
87726 unchecked union type *note B.3.3(6/3): 7471.
87727 Unchecked_Access attribute *note 13.10(3): 5146, *note H.4(18): 8392.
87728 See also Access attribute *note 3.10.2(24/1): 2301.
87729 Unchecked_Conversion
87730 child of Ada *note 13.9(3/3): 5124.
87731 Unchecked_Deallocation
87732 child of Ada *note 13.11.2(3/3): 5193.
87733 Unchecked_Union aspect *note B.3.3(3.2/3): 7470.
87734 Unchecked_Union pragma *note J.15.6(2/3): 8507, *note L(37.2/3): 8781.
87735 unconstrained *note 3.2(9): 1362.
87736 object *note 3.3.1(9/2): 1508.
87737 object *note 6.4.1(16): 3475.
87738 subtype *note 3.2(9): 1364, *note 3.4(6): 1541, *note 3.5(7): 1602,
87739 *note 3.5.1(10): 1693, *note 3.5.4(9): 1729, *note 3.5.4(10): 1732,
87740 *note 3.5.7(11): 1807, *note 3.5.9(13): 1845, *note 3.5.9(16): 1849,
87741 *note 3.6(15): 1911, *note 3.6(16): 1914, *note 3.7(26): 1988, *note
87742 3.9(15): 2112.
87743 subtype *note 3.10(14/3): 2263.
87744 subtype *note K.2(33): 8574.
87745 unconstrained_array_definition *note 3.6(3): 1883.
87746 used *note 3.6(2): 1881, *note P: 9026.
87747 undefined result *note 11.6(5): 4628.
87748 underline *note 2.1(15/3): 1175.
87749 used *note 2.4.1(3): 1217, *note 2.4.2(4): 1242, *note P: 8912.
87750 Uniformly_Distributed subtype of Float
87751 in Ada.Numerics.Float_Random *note A.5.2(8): 6096.
87752 uninitialized allocator *note 4.8(4): 3046.
87753 uninitialized variables *note 13.9.1(2): 5130.
87754 [partial] *note 3.3.1(21/3): 1519.
87755 union
87756 C *note B.3.3(1/3): 7468.
87757 in Ada.Containers.Hashed_Sets *note A.18.8(26/2): 7012, *note
87758 A.18.8(27/2): 7013.
87759 in Ada.Containers.Ordered_Sets *note A.18.9(27/2): 7085, *note
87760 A.18.9(28/2): 7086.
87761 unit consistency *note E.3(6): 8097.
87762 unit matrix
87763 complex matrix *note G.3.2(148/2): 8346.
87764 real matrix *note G.3.1(80/2): 8306.
87765 unit vector
87766 complex vector *note G.3.2(90/2): 8345.
87767 real vector *note G.3.1(48/2): 8305.
87768 Unit_Matrix
87769 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(51/2): 8342.
87770 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(29/2): 8302.
87771 Unit_Vector
87772 in Ada.Numerics.Generic_Complex_Arrays *note G.3.2(24/2): 8322.
87773 in Ada.Numerics.Generic_Real_Arrays *note G.3.1(14/2): 8294.
87774 universal type *note 3.4.1(6/2): 1567.
87775 universal_access
87776 [partial] *note 3.4.1(6/2): 1571, *note 4.2(8/2): 2477.
87777 universal_fixed
87778 [partial] *note 3.4.1(6/2): 1570, *note 3.5.6(4): 1784.
87779 universal_integer
87780 [partial] *note 3.4.1(6/2): 1568, *note 3.5.4(14): 1739, *note
87781 3.5.4(30): 1761, *note 4.2(8/2): 2475.
87782 universal_real
87783 [partial] *note 3.4.1(6/2): 1569, *note 3.5.6(4): 1782, *note
87784 4.2(8/2): 2476.
87785 unknown discriminants *note 3.7(26): 1989.
87786 unknown_discriminant_part *note 3.7(3): 1963.
87787 used *note 3.7(2/2): 1961, *note P: 9043.
87788 Unknown_Zone_Error
87789 in Ada.Calendar.Time_Zones *note 9.6.1(5/2): 4146.
87790 unmarshalling *note E.4(9): 8105.
87791 unpolluted *note 13.13.1(2): 5292.
87792 unsigned
87793 in Interfaces.C *note B.3(9): 7377.
87794 in Interfaces.COBOL *note B.4(23): 7498.
87795 unsigned type
87796 See modular type *note 3.5.4(1): 1713.
87797 unsigned_char
87798 in Interfaces.C *note B.3(10): 7380.
87799 unsigned_long
87800 in Interfaces.C *note B.3(9): 7379.
87801 unsigned_short
87802 in Interfaces.C *note B.3(9): 7378.
87803 unspecified *note 1.1.3(18): 1055.
87804 [partial] *note 2.1(5/3): 1130, *note 3.9(4/2): 2092, *note
87805 3.9(12.5/3): 2109, *note 4.5.2(13): 2789, *note 4.5.2(24.2/1): 2792,
87806 *note 4.5.5(21): 2847, *note 6.1.1(34/3): 3372, *note 6.1.1(35/3): 3377,
87807 *note 6.2(11/3): 3387, *note 7.2(5/3): 3576, *note 7.6(17.4/3): 3663,
87808 *note 9.8(14): 4264, *note 9.10(1/3): 4282, *note 10.2(26): 4434, *note
87809 11.1(6): 4502, *note 11.4.1(10.1/3): 4557, *note 11.5(27/2): 4617, *note
87810 13.1(18): 4871, *note 13.7.2(5/2): 5112, *note 13.9.1(7): 5134, *note
87811 13.11(20): 5179, *note 13.11(21.6/3): 5181, *note 13.13.2(36/2): 5324,
87812 *note A.1(1/3): 5381, *note A.5.1(34): 6091, *note A.5.2(28): 6119,
87813 *note A.5.2(34): 6120, *note A.5.3(41.3/2): 6175, *note A.7(6): 6233,
87814 *note A.10(8): 6312, *note A.10.7(8/3): 6476, *note A.10.7(12/3): 6477,
87815 *note A.10.7(17.3/2): 6478, *note A.10.7(19): 6479, *note A.14(1): 6570,
87816 *note A.18.2(231/3): 6752, *note A.18.2(252/2): 6760, *note
87817 A.18.2(83/2): 6745, *note A.18.3(145/3): 6824, *note A.18.3(157/2):
87818 6830, *note A.18.3(55/2): 6817, *note A.18.4(3/2): 6834, *note
87819 A.18.4(80/2): 6850, *note A.18.5(43/2): 6897, *note A.18.5(44/2): 6898,
87820 *note A.18.5(45/2): 6899, *note A.18.5(46/2): 6903, *note A.18.6(56/3):
87821 6956, *note A.18.6(57/2): 6957, *note A.18.7(3/2): 6964, *note
87822 A.18.7(101/2): 6982, *note A.18.7(87/2): 6975, *note A.18.7(88/2): 6976,
87823 *note A.18.8(65/2): 7046, *note A.18.8(66.1/3): 7048, *note
87824 A.18.8(66/2): 7047, *note A.18.8(67/2): 7049, *note A.18.8(68/2): 7053,
87825 *note A.18.8(86/2): 7054, *note A.18.8(87/2): 7055, *note A.18.9(114/2):
87826 7133, *note A.18.9(79.1/3): 7127, *note A.18.9(79/3): 7126, *note
87827 A.18.9(80/2): 7128, *note A.18.10(227/3): 7218, *note A.18.10(72/3):
87828 7207, *note A.18.26(5/3): 7274, *note A.18.26(9.4/3): 7278, *note
87829 A.18.26(9/3): 7276, *note D.2.2(7.1/2): 7726, *note D.8(19): 7890, *note
87830 E.3(5/1): 8095, *note G.1.1(40): 8204, *note G.1.2(33): 8231, *note
87831 G.1.2(48): 8233, *note H(4.1): 8349, *note H.2(1): 8356, *note
87832 K.2(136.4/2): 8592.
87833 Unsuppress pragma *note 11.5(4.1/2): 4593, *note L(37.3/2): 8784.
87834 update
87835 the value of an object *note 3.3(14): 1463.
87836 in Interfaces.C.Strings *note B.3.1(18): 7445, *note B.3.1(19):
87837 7446.
87838 Update_Element
87839 in Ada.Containers.Doubly_Linked_Lists *note A.18.3(17/2): 6779.
87840 in Ada.Containers.Hashed_Maps *note A.18.5(17/2): 6868.
87841 in Ada.Containers.Indefinite_Holders *note A.18.18(15/3): 7236.
87842 in Ada.Containers.Multiway_Trees *note A.18.10(27/3): 7163.
87843 in Ada.Containers.Ordered_Maps *note A.18.6(16/2): 6919.
87844 in Ada.Containers.Vectors *note A.18.2(33/2): 6693, *note
87845 A.18.2(34/2): 6694.
87846 Update_Element_Preserving_Key
87847 in Ada.Containers.Hashed_Sets *note A.18.8(58/2): 7039.
87848 in Ada.Containers.Ordered_Sets *note A.18.9(73/2): 7120.
87849 Update_Error
87850 in Interfaces.C.Strings *note B.3.1(20): 7447.
87851 upper bound
87852 of a range *note 3.5(4): 1592.
87853 upper-case letter
87854 a category of Character *note A.3.2(26): 5439.
87855 Upper_Case_Map
87856 in Ada.Strings.Maps.Constants *note A.4.6(5): 5914.
87857 Upper_Set
87858 in Ada.Strings.Maps.Constants *note A.4.6(4): 5906.
87859 US
87860 in Ada.Characters.Latin_1 *note A.3.3(6): 5478.
87861 usage name *note 3.1(10): 1322.
87862 use-visible *note 8.3(4): 3722, *note 8.4(9): 3766.
87863 use_clause *note 8.4(2): 3754.
87864 used *note 3.11(4/1): 2328, *note 10.1.2(3): 4347, *note 12.1(5):
87865 4651, *note P: 9585.
87866 Use_Error
87867 in Ada.Direct_IO *note A.8.4(18): 6295.
87868 in Ada.Directories *note A.16(43/2): 6618.
87869 in Ada.IO_Exceptions *note A.13(4): 6562.
87870 in Ada.Sequential_IO *note A.8.1(15): 6264.
87871 in Ada.Streams.Stream_IO *note A.12.1(26): 6543.
87872 in Ada.Text_IO *note A.10.1(85): 6468.
87873 use_package_clause *note 8.4(3): 3757.
87874 used *note 8.4(2): 3755, *note P: 9419.
87875 use_type_clause *note 8.4(4/3): 3760.
87876 used *note 8.4(2): 3756, *note P: 9420.
87877 user-defined assignment *note 7.6(1): 3633.
87878 user-defined heap management *note 13.11(1): 5150.
87879 user-defined operator *note 6.6(1): 3528.
87880 user-defined storage management *note 13.11(1): 5148.
87881 UTC_Time_Offset
87882 in Ada.Calendar.Time_Zones *note 9.6.1(6/2): 4147.
87883 UTF-16 *note A.4.11(46/3): 6052.
87884 UTF-8 *note A.4.11(46/3): 6051.
87885 UTF_16_Wide_String subtype of Wide_String
87886 in Ada.Strings.UTF_Encoding *note A.4.11(7/3): 6015.
87887 UTF_8_String subtype of String
87888 in Ada.Strings.UTF_Encoding *note A.4.11(6/3): 6014.
87889 UTF_Encoding
87890 child of Ada.Strings *note A.4.11(3/3): 6011.
87891 UTF_String subtype of String
87892 in Ada.Strings.UTF_Encoding *note A.4.11(5/3): 6013.
87893
87894
87895 \1f
87896 File: arm2012.info, Node: V, Next: W, Prev: U, Up: Index
87897
87898 V
87899 ==
87900
87901
87902
87903 Val attribute *note 3.5.5(5): 1766.
87904 Valid
87905 in Ada.Text_IO.Editing *note F.3.3(5): 8157, *note F.3.3(12): 8169.
87906 in Interfaces.COBOL *note B.4(33): 7514, *note B.4(38): 7518, *note
87907 B.4(43): 7522.
87908 Valid attribute *note 13.9.2(3/3): 5143, *note H(6): 8351.
87909 Value
87910 in Ada.Calendar.Formatting *note 9.6.1(36/2): 4181, *note
87911 9.6.1(38/2): 4183.
87912 in Ada.Environment_Variables *note A.17(4.1/3): 6646, *note
87913 A.17(4/2): 6645.
87914 in Ada.Numerics.Discrete_Random *note A.5.2(26): 6117.
87915 in Ada.Numerics.Float_Random *note A.5.2(14): 6105.
87916 in Ada.Strings.Maps *note A.4.2(21): 5745.
87917 in Ada.Strings.Wide_Maps *note A.4.7(21): 5947.
87918 in Ada.Strings.Wide_Wide_Maps *note A.4.8(21/2): 5986.
87919 in Ada.Task_Attributes *note C.7.2(4): 7659.
87920 in Interfaces.C.Pointers *note B.3.2(6): 7454, *note B.3.2(7):
87921 7455.
87922 in Interfaces.C.Strings *note B.3.1(13): 7440, *note B.3.1(14):
87923 7441, *note B.3.1(15): 7442, *note B.3.1(16): 7443.
87924 Value attribute *note 3.5(52): 1671.
87925 value conversion *note 4.6(5/2): 2929.
87926 values
87927 belonging to a subtype *note 3.2(8/2): 1359.
87928 variable *note 3.3(13/3): 1456.
87929 variable indexing *note 4.1.6(16/3): 2468.
87930 variable object *note 3.3(13/3): 1458.
87931 variable view *note 3.3(13/3): 1460.
87932 Variable_Indexing aspect *note 4.1.6(3/3): 2458.
87933 variant *note 3.8.1(3): 2055.
87934 used *note 3.8.1(2): 2054, *note P: 9074.
87935 See also tagged type *note 3.9(1): 2076.
87936 variant_part *note 3.8.1(2): 2051.
87937 used *note 3.8(4): 2025, *note P: 9065.
87938 Vector
87939 in Ada.Containers.Vectors *note A.18.2(8/3): 6671.
87940 vector container *note A.18.2(1/2): 6663.
87941 Vector_Iterator_Interfaces
87942 in Ada.Containers.Vectors *note A.18.2(11.2/3): 6676.
87943 Vectors
87944 child of Ada.Containers *note A.18.2(6/3): 6668.
87945 version
87946 of a compilation unit *note E.3(5/1): 8094.
87947 Version attribute *note E.3(3): 8091.
87948 vertical line *note 2.1(15/3): 1176.
87949 Vertical_Line
87950 in Ada.Characters.Latin_1 *note A.3.3(14): 5536.
87951 view *note 3.1(7): 1312, *note N(42/2): 8877.
87952 of a subtype (implied) *note 3.1(7.1/3): 1316.
87953 of a type (implied) *note 3.1(7.1/3): 1315.
87954 of an object (implied) *note 3.1(7.1/3): 1314.
87955 view conversion *note 4.6(5/2): 2927.
87956 virtual function
87957 See dispatching subprogram *note 3.9.2(1/2): 2151.
87958 Virtual_Length
87959 in Interfaces.C.Pointers *note B.3.2(13): 7459.
87960 visibility
87961 direct *note 8.3(2): 3715, *note 8.3(21): 3741.
87962 immediate *note 8.3(4): 3719, *note 8.3(21): 3742.
87963 use clause *note 8.3(4): 3720, *note 8.4(9): 3767.
87964 visibility rules *note 8.3(1): 3714.
87965 visible *note 8.3(2): 3718, *note 8.3(14): 3733.
87966 aspect_specification *note 8.3(23.1/3): 3747.
87967 attribute_definition_clause *note 8.3(23.1/3): 3746.
87968 within a pragma in a context_clause *note 10.1.6(3): 4410.
87969 within a pragma that appears at the place of a compilation unit
87970 *note 10.1.6(5): 4414.
87971 within a use_clause in a context_clause *note 10.1.6(3): 4408.
87972 within a with_clause *note 10.1.6(2/2): 4406.
87973 within the parent_unit_name of a library unit *note 10.1.6(2/2):
87974 4404.
87975 within the parent_unit_name of a subunit *note 10.1.6(4): 4412.
87976 visible part *note 8.2(5): 3704.
87977 of a formal package *note 12.7(10/2): 4838.
87978 of a generic unit *note 8.2(8): 3708.
87979 of a package (other than a generic formal package) *note 7.1(6/2):
87980 3565.
87981 of a protected unit *note 9.4(11/2): 3967.
87982 of a task unit *note 9.1(9): 3897.
87983 of a view of a callable entity *note 8.2(6): 3706.
87984 of a view of a composite type *note 8.2(7): 3707.
87985 volatile *note C.6(8/3): 7630.
87986 Volatile aspect *note C.6(6.4/3): 7622.
87987 Volatile pragma *note J.15.8(3/3): 8522, *note L(38.1/3): 8787.
87988 Volatile_Components aspect *note C.6(6.7/3): 7626.
87989 Volatile_Components pragma *note J.15.8(6/3): 8531, *note L(39.1/3):
87990 8790.
87991 VT
87992 in Ada.Characters.Latin_1 *note A.3.3(5): 5458.
87993 VTS
87994 in Ada.Characters.Latin_1 *note A.3.3(17): 5555.
87995
87996
87997 \1f
87998 File: arm2012.info, Node: W, Next: X, Prev: V, Up: Index
87999
88000 W
88001 ==
88002
88003
88004
88005 Wait_For_Release
88006 in Ada.Synchronous_Barriers *note D.10.1(6/3): 7912.
88007 wchar_array
88008 in Interfaces.C *note B.3(33/3): 7401.
88009 wchar_t
88010 in Interfaces.C *note B.3(30/1): 7397.
88011 Wednesday
88012 in Ada.Calendar.Formatting *note 9.6.1(17/2): 4156.
88013 well-formed picture String
88014 for edited output *note F.3.1(1/3): 8153.
88015 Wide_Bounded
88016 child of Ada.Strings *note A.4.7(1/3): 5917.
88017 Wide_Character *note 3.5.2(3/3): 1701.
88018 in Standard *note A.1(36.1/3): 5390.
88019 Wide_Character_Mapping
88020 in Ada.Strings.Wide_Maps *note A.4.7(20/2): 5946.
88021 Wide_Character_Mapping_Function
88022 in Ada.Strings.Wide_Maps *note A.4.7(26): 5952.
88023 Wide_Character_Range
88024 in Ada.Strings.Wide_Maps *note A.4.7(6): 5935.
88025 Wide_Character_Ranges
88026 in Ada.Strings.Wide_Maps *note A.4.7(7): 5936.
88027 Wide_Character_Sequence subtype of Wide_String
88028 in Ada.Strings.Wide_Maps *note A.4.7(16): 5942.
88029 Wide_Character_Set
88030 in Ada.Strings.Wide_Maps *note A.4.7(4/2): 5933.
88031 in Ada.Strings.Wide_Maps.Wide_Constants *note A.4.8(48/2): 5994.
88032 Wide_Characters
88033 child of Ada *note A.3.1(4/2): 5405.
88034 Wide_Constants
88035 child of Ada.Strings.Wide_Maps *note A.4.7(1/3): 5931, *note
88036 A.4.8(28/2): 5992.
88037 Wide_Equal_Case_Insensitive
88038 child of Ada.Strings *note A.4.7(1/3): 5923.
88039 child of Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5925.
88040 child of Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5924.
88041 child of Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5926.
88042 Wide_Exception_Name
88043 in Ada.Exceptions *note 11.4.1(2/2): 4540, *note 11.4.1(5/2): 4550.
88044 Wide_Expanded_Name
88045 in Ada.Tags *note 3.9(7/2): 2097.
88046 Wide_Fixed
88047 child of Ada.Strings *note A.4.7(1/3): 5916.
88048 Wide_Hash
88049 child of Ada.Strings *note A.4.7(1/3): 5919.
88050 child of Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5921.
88051 child of Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5920.
88052 child of Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5922.
88053 Wide_Hash_Case_Insensitive
88054 child of Ada.Strings *note A.4.7(1/3): 5927.
88055 child of Ada.Strings.Wide_Bounded *note A.4.7(1/3): 5929.
88056 child of Ada.Strings.Wide_Fixed *note A.4.7(1/3): 5928.
88057 child of Ada.Strings.Wide_Unbounded *note A.4.7(1/3): 5930.
88058 Wide_Image attribute *note 3.5(28): 1642.
88059 Wide_Maps
88060 child of Ada.Strings *note A.4.7(3): 5932.
88061 wide_nul
88062 in Interfaces.C *note B.3(31/1): 7398.
88063 Wide_Space
88064 in Ada.Strings *note A.4.1(4/2): 5719.
88065 Wide_String
88066 in Standard *note A.1(41/3): 5395.
88067 Wide_Strings
88068 child of Ada.Strings.UTF_Encoding *note A.4.11(30/3): 6035.
88069 Wide_Text_IO
88070 child of Ada *note A.11(2/2): 6500.
88071 Wide_Unbounded
88072 child of Ada.Strings *note A.4.7(1/3): 5918.
88073 Wide_Value attribute *note 3.5(40): 1665.
88074 Wide_Wide_Bounded
88075 child of Ada.Strings *note A.4.8(1/3): 5956.
88076 Wide_Wide_Character *note 3.5.2(4/3): 1704.
88077 in Standard *note A.1(36.2/3): 5391.
88078 Wide_Wide_Character_Mapping
88079 in Ada.Strings.Wide_Wide_Maps *note A.4.8(20/2): 5985.
88080 Wide_Wide_Character_Mapping_Function
88081 in Ada.Strings.Wide_Wide_Maps *note A.4.8(26/2): 5991.
88082 Wide_Wide_Character_Range
88083 in Ada.Strings.Wide_Wide_Maps *note A.4.8(6/2): 5974.
88084 Wide_Wide_Character_Ranges
88085 in Ada.Strings.Wide_Wide_Maps *note A.4.8(7/2): 5975.
88086 Wide_Wide_Character_Sequence subtype of Wide_Wide_String
88087 in Ada.Strings.Wide_Wide_Maps *note A.4.8(16/2): 5981.
88088 Wide_Wide_Character_Set
88089 in Ada.Strings.Wide_Wide_Maps *note A.4.8(4/2): 5972.
88090 Wide_Wide_Characters
88091 child of Ada *note A.3.1(6/2): 5406.
88092 Wide_Wide_Constants
88093 child of Ada.Strings.Wide_Wide_Maps *note A.4.8(1/3): 5970.
88094 Wide_Wide_Equal_Case_Insensitive
88095 child of Ada.Strings *note A.4.8(1/3): 5962.
88096 child of Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5964.
88097 child of Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5963.
88098 child of Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5965.
88099 Wide_Wide_Exception_Name
88100 in Ada.Exceptions *note 11.4.1(2/2): 4541, *note 11.4.1(5/2): 4551.
88101 Wide_Wide_Expanded_Name
88102 in Ada.Tags *note 3.9(7/2): 2098.
88103 Wide_Wide_Fixed
88104 child of Ada.Strings *note A.4.8(1/3): 5955.
88105 Wide_Wide_Hash
88106 child of Ada.Strings *note A.4.8(1/3): 5958.
88107 child of Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5960.
88108 child of Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5959.
88109 child of Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5961.
88110 Wide_Wide_Hash_Case_Insensitive
88111 child of Ada.Strings *note A.4.8(1/3): 5966.
88112 child of Ada.Strings.Wide_Wide_Bounded *note A.4.8(1/3): 5968.
88113 child of Ada.Strings.Wide_Wide_Fixed *note A.4.8(1/3): 5967.
88114 child of Ada.Strings.Wide_Wide_Unbounded *note A.4.8(1/3): 5969.
88115 Wide_Wide_Image attribute *note 3.5(27.1/2): 1638.
88116 Wide_Wide_Maps
88117 child of Ada.Strings *note A.4.8(3/2): 5971.
88118 Wide_Wide_Space
88119 in Ada.Strings *note A.4.1(4/2): 5720.
88120 Wide_Wide_String
88121 in Standard *note A.1(42.1/3): 5396.
88122 Wide_Wide_Strings
88123 child of Ada.Strings.UTF_Encoding *note A.4.11(38/3): 6042.
88124 Wide_Wide_Text_IO
88125 child of Ada *note A.11(3/2): 6503.
88126 Wide_Wide_Unbounded
88127 child of Ada.Strings *note A.4.8(1/3): 5957.
88128 Wide_Wide_Value attribute *note 3.5(39.1/2): 1653.
88129 Wide_Wide_Width attribute *note 3.5(37.1/2): 1647.
88130 Wide_Width attribute *note 3.5(38): 1649.
88131 Width attribute *note 3.5(39): 1651.
88132 with_clause *note 10.1.2(4/2): 4348.
88133 mentioned in *note 10.1.2(6/2): 4359.
88134 named in *note 10.1.2(6/2): 4361.
88135 used *note 10.1.2(3): 4346, *note P: 9584.
88136 within
88137 immediately *note 8.1(13): 3697.
88138 word *note 13.3(8): 4941.
88139 Word_Size
88140 in System *note 13.7(13): 5085.
88141 Write
88142 in Ada.Direct_IO *note A.8.4(13): 6286.
88143 in Ada.Sequential_IO *note A.8.1(12): 6259.
88144 in Ada.Storage_IO *note A.9(7): 6304.
88145 in Ada.Streams *note 13.13.1(6): 5299.
88146 in Ada.Streams.Stream_IO *note A.12.1(18): 6533, *note A.12.1(19):
88147 6534.
88148 in System.RPC *note E.5(8): 8130.
88149 Write aspect *note 13.13.2(38/3): 5337.
88150 Write attribute *note 13.13.2(3): 5306, *note 13.13.2(11): 5310.
88151 Write clause *note 13.3(7/2): 4935, *note 13.13.2(38/3): 5331.
88152
88153
88154 \1f
88155 File: arm2012.info, Node: X, Next: Y, Prev: W, Up: Index
88156
88157 X
88158 ==
88159
88160
88161
88162 xor operator *note 4.4(1/3): 2581, *note 4.5.1(2): 2742.
88163
88164
88165 \1f
88166 File: arm2012.info, Node: Y, Prev: X, Up: Index
88167
88168 Y
88169 ==
88170
88171
88172
88173 Year
88174 in Ada.Calendar *note 9.6(13): 4127.
88175 in Ada.Calendar.Formatting *note 9.6.1(21/2): 4166.
88176 Year_Number subtype of Integer
88177 in Ada.Calendar *note 9.6(11/2): 4122.
88178 Yen_Sign
88179 in Ada.Characters.Latin_1 *note A.3.3(21/3): 5583.
88180 Yield
88181 in Ada.Dispatching *note D.2.1(1.3/3): 7699.
88182 Yield_To_Higher
88183 in Ada.Dispatching.Non_Preemptive *note D.2.4(2.2/3): 7736.
88184 Yield_To_Same_Or_Higher
88185 in Ada.Dispatching.Non_Preemptive *note D.2.4(2.2/3): 7737.
88186
88187 \1f
88188 Tag Table:
88189 Node: Top\7f213
88190 Node: Front Matter\7f1557
88191 Node: 0.1\7f7469
88192 Node: 0.2\7f9396
88193 Ref: 1001\7f9983
88194 Ref: 1002\7f9983
88195 Ref: 1003\7f32843
88196 Ref: 1004\7f32843
88197 Node: 0.99\7f48061
88198 Node: 1\7f48269
88199 Node: 1.1\7f48464
88200 Node: 1.1.1\7f50377
88201 Node: 1.1.2\7f51941
88202 Ref: 1005\7f52141
88203 Ref: 1006\7f52428
88204 Ref: 1007\7f52428
88205 Ref: 1008\7f52428
88206 Ref: 1009\7f52906
88207 Ref: 1010\7f52906
88208 Ref: 1011\7f53347
88209 Ref: 1012\7f53347
88210 Ref: 1013\7f53347
88211 Ref: 1014\7f54071
88212 Ref: 1015\7f54076
88213 Ref: 1016\7f54076
88214 Ref: 1017\7f54076
88215 Ref: 1018\7f54076
88216 Ref: 1019\7f54156
88217 Ref: 1020\7f54156
88218 Ref: 1021\7f54156
88219 Ref: 1022\7f54289
88220 Ref: 1023\7f54289
88221 Ref: 1024\7f54289
88222 Ref: 1025\7f54329
88223 Ref: 1026\7f54331
88224 Ref: 1027\7f54441
88225 Ref: 1028\7f54441
88226 Ref: 1029\7f54553
88227 Ref: 1030\7f54553
88228 Ref: 1031\7f54553
88229 Ref: 1032\7f54553
88230 Ref: 1033\7f54604
88231 Ref: 1034\7f54606
88232 Ref: 1035\7f54761
88233 Ref: 1036\7f54761
88234 Ref: 1037\7f54761
88235 Ref: 1038\7f54761
88236 Ref: 1039\7f54871
88237 Ref: 1040\7f54871
88238 Ref: 1041\7f54996
88239 Ref: 1042\7f54996
88240 Ref: 1043\7f55119
88241 Ref: 1044\7f55230
88242 Ref: 1045\7f55335
88243 Ref: 1046\7f55496
88244 Ref: 1047\7f55598
88245 Ref: 1048\7f55598
88246 Ref: 1049\7f55838
88247 Node: 1.1.3\7f56104
88248 Ref: 1050\7f56345
88249 Ref: 1051\7f57256
88250 Ref: 1052\7f57256
88251 Ref: 1053\7f57381
88252 Ref: 1054\7f59588
88253 Ref: 1055\7f59588
88254 Ref: 1056\7f59588
88255 Ref: 1057\7f59588
88256 Ref: 1058\7f59588
88257 Ref: 1059\7f60291
88258 Node: 1.1.4\7f60874
88259 Ref: 1060\7f61357
88260 Ref: 1061\7f61357
88261 Ref: 1062\7f61357
88262 Ref: 1063\7f61357
88263 Ref: 1064\7f61357
88264 Ref: 1065\7f62627
88265 Ref: 1066\7f63694
88266 Ref: 1067\7f63853
88267 Ref: 1068\7f63979
88268 Ref: 1069\7f64075
88269 Ref: 1070\7f64650
88270 Ref: 1071\7f64652
88271 Node: 1.1.5\7f65524
88272 Ref: 1072\7f66363
88273 Ref: 1073\7f66368
88274 Ref: 1074\7f66368
88275 Ref: 1075\7f66368
88276 Ref: 1076\7f66796
88277 Ref: 1077\7f66801
88278 Ref: 1078\7f67479
88279 Ref: 1079\7f67540
88280 Ref: 1080\7f67773
88281 Ref: 1081\7f68229
88282 Ref: 1082\7f68229
88283 Ref: 1083\7f68855
88284 Ref: 1084\7f68857
88285 Ref: 1085\7f69122
88286 Node: 1.2\7f69223
88287 Ref: 1086\7f69344
88288 Ref: 1087\7f69344
88289 Ref: 1088\7f69646
88290 Ref: 1089\7f69646
88291 Ref: 1090\7f69646
88292 Ref: 1091\7f69781
88293 Ref: 1092\7f69781
88294 Ref: 1093\7f69781
88295 Ref: 1094\7f69889
88296 Ref: 1095\7f69889
88297 Ref: 1096\7f69889
88298 Ref: 1097\7f70000
88299 Ref: 1098\7f70000
88300 Ref: 1099\7f70000
88301 Ref: 1100\7f70084
88302 Ref: 1101\7f70084
88303 Ref: 1102\7f70084
88304 Ref: 1103\7f70208
88305 Ref: 1104\7f70208
88306 Ref: 1105\7f70208
88307 Ref: 1106\7f70312
88308 Ref: 1107\7f70312
88309 Ref: 1108\7f70435
88310 Ref: 1109\7f70435
88311 Ref: 1110\7f70435
88312 Ref: 1111\7f70568
88313 Ref: 1112\7f70568
88314 Ref: 1113\7f70568
88315 Ref: 1114\7f70646
88316 Ref: 1115\7f70646
88317 Ref: 1116\7f70646
88318 Ref: 1117\7f70749
88319 Ref: 1118\7f70749
88320 Ref: 1119\7f70749
88321 Ref: 1120\7f70831
88322 Ref: 1121\7f70831
88323 Node: 1.3\7f71036
88324 Ref: 1122\7f71147
88325 Ref: 1123\7f71790
88326 Ref: 1124\7f71792
88327 Ref: 1125\7f71792
88328 Ref: 1126\7f71792
88329 Node: 2\7f71794
88330 Node: 2.1\7f72502
88331 Ref: 1127\7f72597
88332 Ref: 1128\7f72853
88333 Ref: 1129\7f72853
88334 Ref: 1130\7f74176
88335 Ref: 1131\7f74277
88336 Ref: 1132\7f74404
88337 Ref: 1133\7f74533
88338 Ref: 1134\7f74662
88339 Ref: 1135\7f74789
88340 Ref: 1136\7f74910
88341 Ref: 1137\7f75039
88342 Ref: 1138\7f75179
88343 Ref: 1139\7f75305
88344 Ref: 1140\7f75429
88345 Ref: 1141\7f75569
88346 Ref: 1142\7f75689
88347 Ref: 1143\7f75815
88348 Ref: 1144\7f75941
88349 Ref: 1145\7f76075
88350 Ref: 1146\7f76418
88351 Ref: 1147\7f76429
88352 Ref: 1148\7f76618
88353 Ref: 1149\7f76750
88354 Ref: 1150\7f76876
88355 Ref: 1151\7f77268
88356 Ref: 1152\7f77269
88357 Ref: 1153\7f77269
88358 Ref: 1154\7f77269
88359 Ref: 1155\7f77269
88360 Ref: 1156\7f77269
88361 Ref: 1157\7f77269
88362 Ref: 1158\7f77269
88363 Ref: 1159\7f77269
88364 Ref: 1160\7f77269
88365 Ref: 1161\7f77269
88366 Ref: 1162\7f77269
88367 Ref: 1163\7f77269
88368 Ref: 1164\7f77269
88369 Ref: 1165\7f77269
88370 Ref: 1166\7f77269
88371 Ref: 1167\7f77269
88372 Ref: 1168\7f77269
88373 Ref: 1169\7f77269
88374 Ref: 1170\7f77269
88375 Ref: 1171\7f77269
88376 Ref: 1172\7f77269
88377 Ref: 1173\7f77269
88378 Ref: 1174\7f77269
88379 Ref: 1175\7f77269
88380 Ref: 1176\7f77269
88381 Ref: 1177\7f77269
88382 Ref: 1178\7f77269
88383 Node: 2.2\7f79019
88384 Ref: 1179\7f79232
88385 Ref: 1180\7f79305
88386 Ref: 1181\7f79305
88387 Ref: 1182\7f79752
88388 Ref: 1183\7f79759
88389 Ref: 1184\7f80007
88390 Ref: 1185\7f80929
88391 Ref: 1186\7f81073
88392 Node: 2.3\7f82182
88393 Ref: 1187\7f82375
88394 Ref: S0002\7f82375
88395 Ref: 1188\7f82388
88396 Ref: 1189\7f82406
88397 Ref: 1190\7f82425
88398 Ref: 1191\7f82470
88399 Ref: S0003\7f82470
88400 Ref: S0004\7f82470
88401 Ref: 1192\7f82485
88402 Ref: 1193\7f82512
88403 Ref: 1194\7f82539
88404 Ref: 1195\7f82566
88405 Ref: 1196\7f82592
88406 Ref: 1197\7f82615
88407 Ref: 1198\7f82658
88408 Ref: S0005\7f82658
88409 Ref: 1199\7f82673
88410 Ref: 1200\7f82700
88411 Ref: 1201\7f82733
88412 Ref: 1202\7f82758
88413 Ref: 1203\7f83214
88414 Node: 2.4\7f84143
88415 Ref: 1204\7f84254
88416 Ref: 1205\7f84330
88417 Ref: 1206\7f84390
88418 Ref: 1207\7f84512
88419 Ref: S0006\7f84512
88420 Ref: 1208\7f84516
88421 Ref: 1209\7f84535
88422 Node: 2.4.1\7f84748
88423 Ref: 1210\7f84857
88424 Ref: 1211\7f85025
88425 Ref: S0007\7f85025
88426 Ref: 1212\7f85029
88427 Ref: 1213\7f85040
88428 Ref: 1214\7f85050
88429 Ref: 1215\7f85075
88430 Ref: S0008\7f85075
88431 Ref: 1216\7f85079
88432 Ref: 1217\7f85088
88433 Ref: 1218\7f85099
88434 Ref: 1219\7f85122
88435 Ref: S0009\7f85122
88436 Ref: 1220\7f85133
88437 Ref: 1221\7f85147
88438 Ref: 1222\7f85172
88439 Ref: S0010\7f85172
88440 Node: 2.4.2\7f85900
88441 Ref: 1223\7f86005
88442 Ref: 1224\7f86005
88443 Ref: 1225\7f86005
88444 Ref: 1226\7f86005
88445 Ref: 1227\7f86005
88446 Ref: 1228\7f86005
88447 Ref: 1229\7f86005
88448 Ref: 1230\7f86005
88449 Ref: 1231\7f86005
88450 Ref: 1232\7f86005
88451 Ref: 1233\7f86160
88452 Ref: S0011\7f86160
88453 Ref: 1234\7f86173
88454 Ref: 1235\7f86180
88455 Ref: 1236\7f86196
88456 Ref: 1237\7f86214
88457 Ref: 1238\7f86236
88458 Ref: S0012\7f86236
88459 Ref: 1239\7f86240
88460 Ref: 1240\7f86270
88461 Ref: S0013\7f86270
88462 Ref: 1241\7f86283
88463 Ref: 1242\7f86300
88464 Ref: 1243\7f86311
88465 Ref: 1244\7f86349
88466 Ref: S0014\7f86349
88467 Ref: 1245\7f86353
88468 Ref: 1246\7f86432
88469 Node: 2.5\7f87492
88470 Ref: 1247\7f87771
88471 Ref: S0015\7f87771
88472 Ref: 1248\7f87777
88473 Node: 2.6\7f88187
88474 Ref: 1249\7f88587
88475 Ref: 1250\7f88653
88476 Ref: S0016\7f88653
88477 Ref: 1251\7f88660
88478 Ref: 1252\7f88699
88479 Ref: S0017\7f88699
88480 Ref: 1253\7f88728
88481 Ref: 1254\7f88926
88482 Ref: 1255\7f89243
88483 Node: 2.7\7f89952
88484 Ref: 1256\7f90185
88485 Ref: S0018\7f90185
88486 Ref: 1257\7f90209
88487 Node: 2.8\7f90877
88488 Ref: 1258\7f90970
88489 Ref: 1259\7f91234
88490 Ref: S0019\7f91234
88491 Ref: 1260\7f91254
88492 Ref: 1261\7f91267
88493 Ref: 1262\7f91298
88494 Ref: 1263\7f91373
88495 Ref: S0020\7f91373
88496 Ref: 1264\7f91405
88497 Ref: 1265\7f91420
88498 Ref: 1266\7f91452
88499 Ref: 1267\7f91467
88500 Ref: 1268\7f91504
88501 Ref: 1269\7f91520
88502 Ref: 1270\7f91551
88503 Ref: 1271\7f91567
88504 Ref: 1272\7f92673
88505 Ref: 1273\7f92673
88506 Ref: 1274\7f92747
88507 Ref: 1275\7f92749
88508 Ref: 1276\7f92833
88509 Ref: 1277\7f92833
88510 Ref: 1278\7f93263
88511 Ref: 1279\7f93263
88512 Ref: 1280\7f93491
88513 Ref: 1281\7f94737
88514 Ref: 1282\7f94738
88515 Ref: 1283\7f94743
88516 Ref: 1284\7f94773
88517 Ref: 1285\7f94774
88518 Ref: 1286\7f94797
88519 Ref: 1287\7f94798
88520 Ref: 1288\7f94807
88521 Node: 2.9\7f96457
88522 Ref: 1289\7f96633
88523 Node: 3\7f98097
88524 Node: 3.1\7f98696
88525 Ref: 1290\7f98787
88526 Ref: 1291\7f98874
88527 Ref: 1292\7f99273
88528 Ref: S0021\7f99273
88529 Ref: 1293\7f99288
88530 Ref: 1294\7f99309
88531 Ref: 1295\7f99339
88532 Ref: 1296\7f99362
88533 Ref: 1297\7f99391
88534 Ref: 1298\7f99418
88535 Ref: 1299\7f99460
88536 Ref: 1300\7f99491
88537 Ref: 1301\7f99533
88538 Ref: 1302\7f99557
88539 Ref: 1303\7f99588
88540 Ref: 1304\7f99614
88541 Ref: 1305\7f99644
88542 Ref: 1306\7f99693
88543 Ref: S0022\7f99693
88544 Ref: 1307\7f99697
88545 Ref: 1308\7f99758
88546 Ref: 1309\7f99846
88547 Ref: 1310\7f99848
88548 Ref: 1311\7f100075
88549 Ref: 1312\7f100788
88550 Ref: 1313\7f100788
88551 Ref: 1314\7f101592
88552 Ref: 1315\7f101592
88553 Ref: 1316\7f101592
88554 Ref: 1317\7f101596
88555 Ref: 1318\7f102030
88556 Ref: 1319\7f102132
88557 Ref: 1320\7f102231
88558 Ref: 1321\7f102551
88559 Ref: 1322\7f102786
88560 Ref: 1323\7f103012
88561 Ref: 1324\7f103094
88562 Ref: 1325\7f103096
88563 Ref: 1326\7f103354
88564 Ref: 1327\7f103425
88565 Node: 3.2\7f103501
88566 Ref: 1328\7f103662
88567 Ref: 1329\7f103662
88568 Ref: 1330\7f103797
88569 Ref: 1331\7f103892
88570 Ref: 1332\7f103892
88571 Ref: 1333\7f103935
88572 Ref: 1334\7f104080
88573 Ref: 1335\7f104129
88574 Ref: 1336\7f104197
88575 Ref: 1337\7f104198
88576 Ref: 1338\7f104270
88577 Ref: 1339\7f104276
88578 Ref: 1340\7f104415
88579 Ref: 1341\7f104417
88580 Ref: 1342\7f104524
88581 Ref: 1343\7f104727
88582 Ref: 1344\7f104727
88583 Ref: 1345\7f104727
88584 Ref: 1346\7f105268
88585 Ref: 1347\7f105508
88586 Ref: 1348\7f105748
88587 Ref: 1349\7f106016
88588 Ref: 1350\7f106016
88589 Ref: 1351\7f106022
88590 Ref: 1352\7f106138
88591 Ref: 1353\7f106565
88592 Ref: 1354\7f106755
88593 Ref: 1355\7f106755
88594 Ref: 1356\7f106834
88595 Ref: 1357\7f106834
88596 Ref: 1358\7f106967
88597 Ref: 1359\7f107003
88598 Ref: 1360\7f107003
88599 Ref: 1361\7f107009
88600 Ref: 1362\7f107009
88601 Ref: 1363\7f107009
88602 Ref: 1364\7f107009
88603 Ref: 1365\7f107847
88604 Ref: 1366\7f108451
88605 Node: 3.2.1\7f110084
88606 Ref: 1367\7f110318
88607 Ref: S0023\7f110318
88608 Ref: 1368\7f110324
88609 Ref: 1369\7f110356
88610 Ref: 1370\7f110394
88611 Ref: 1371\7f110429
88612 Ref: 1372\7f110490
88613 Ref: S0024\7f110490
88614 Ref: 1373\7f110510
88615 Ref: 1374\7f110531
88616 Ref: 1375\7f110559
88617 Ref: 1376\7f110595
88618 Ref: 1377\7f110628
88619 Ref: 1378\7f110660
88620 Ref: 1379\7f110712
88621 Ref: S0025\7f110712
88622 Ref: 1380\7f110727
88623 Ref: 1381\7f110759
88624 Ref: 1382\7f110793
88625 Ref: 1383\7f110818
88626 Ref: 1384\7f110850
88627 Ref: 1385\7f110877
88628 Ref: 1386\7f110910
88629 Ref: 1387\7f110938
88630 Ref: 1388\7f111141
88631 Ref: 1389\7f111543
88632 Ref: 1390\7f111665
88633 Ref: 1391\7f111858
88634 Ref: 1392\7f112212
88635 Ref: 1393\7f112422
88636 Ref: 1394\7f112495
88637 Ref: 1395\7f112876
88638 Ref: 1396\7f113104
88639 Ref: 1397\7f113486
88640 Ref: 1398\7f113585
88641 Node: 3.2.2\7f114712
88642 Ref: 1399\7f115024
88643 Ref: S0026\7f115024
88644 Ref: 1400\7f115045
88645 Ref: 1401\7f115068
88646 Ref: 1402\7f115101
88647 Ref: 1403\7f115152
88648 Ref: S0027\7f115152
88649 Ref: 1404\7f115159
88650 Ref: 1405\7f115175
88651 Ref: 1406\7f115189
88652 Ref: 1407\7f115221
88653 Ref: S0028\7f115221
88654 Ref: 1408\7f115234
88655 Ref: 1409\7f115257
88656 Ref: S0029\7f115257
88657 Ref: 1410\7f115261
88658 Ref: 1411\7f115282
88659 Ref: 1412\7f115328
88660 Ref: S0030\7f115328
88661 Ref: 1413\7f115343
88662 Ref: 1414\7f115362
88663 Ref: 1415\7f115382
88664 Ref: 1416\7f115427
88665 Ref: S0031\7f115427
88666 Ref: 1417\7f115442
88667 Ref: 1418\7f115461
88668 Ref: 1419\7f115586
88669 Ref: 1420\7f115732
88670 Ref: 1421\7f115827
88671 Ref: 1422\7f116186
88672 Ref: 1423\7f116186
88673 Ref: 1424\7f116396
88674 Ref: 1425\7f116694
88675 Node: 3.2.3\7f117805
88676 Ref: 1426\7f118000
88677 Ref: 1427\7f118218
88678 Ref: 1428\7f118389
88679 Ref: 1429\7f118517
88680 Ref: 1430\7f119320
88681 Ref: 1431\7f119579
88682 Node: 3.2.4\7f119674
88683 Ref: 1432\7f120004
88684 Ref: 1433\7f120004
88685 Ref: 1434\7f120004
88686 Ref: 1435\7f120004
88687 Ref: 1436\7f120004
88688 Ref: 1437\7f120004
88689 Ref: 1438\7f120004
88690 Ref: 1439\7f120263
88691 Ref: 1440\7f121006
88692 Ref: 1441\7f121098
88693 Ref: 1442\7f121098
88694 Ref: 1443\7f121098
88695 Ref: 1444\7f122720
88696 Ref: 1445\7f122720
88697 Ref: 1446\7f124632
88698 Ref: 1447\7f125753
88699 Ref: 1448\7f125753
88700 Ref: 1449\7f125753
88701 Ref: 1450\7f125753
88702 Ref: 1451\7f125753
88703 Ref: 1452\7f125830
88704 Node: 3.3\7f126493
88705 Ref: 1453\7f126690
88706 Ref: 1454\7f127004
88707 Ref: 1455\7f127638
88708 Ref: 1456\7f127638
88709 Ref: 1457\7f127638
88710 Ref: 1458\7f127638
88711 Ref: 1459\7f127638
88712 Ref: 1460\7f127638
88713 Ref: 1461\7f128100
88714 Ref: 1462\7f128268
88715 Ref: 1463\7f128408
88716 Ref: 1464\7f129633
88717 Ref: 1465\7f129730
88718 Ref: 1466\7f129732
88719 Ref: 1467\7f129906
88720 Ref: 1468\7f129908
88721 Ref: 1469\7f130594
88722 Ref: 1470\7f130594
88723 Ref: 1471\7f131772
88724 Node: 3.3.1\7f132606
88725 Ref: 1472\7f132723
88726 Ref: 1473\7f132723
88727 Ref: 1474\7f132723
88728 Ref: 1475\7f132885
88729 Ref: 1476\7f132887
88730 Ref: 1477\7f132887
88731 Ref: 1478\7f133094
88732 Ref: S0032\7f133094
88733 Ref: 1479\7f133108
88734 Ref: 1480\7f133156
88735 Ref: 1481\7f133185
88736 Ref: 1482\7f133211
88737 Ref: 1483\7f133243
88738 Ref: 1484\7f133291
88739 Ref: 1485\7f133319
88740 Ref: 1486\7f133345
88741 Ref: 1487\7f133377
88742 Ref: 1488\7f133425
88743 Ref: 1489\7f133457
88744 Ref: 1490\7f133483
88745 Ref: 1491\7f133515
88746 Ref: 1492\7f133548
88747 Ref: 1493\7f133609
88748 Ref: S0033\7f133609
88749 Ref: 1494\7f133621
88750 Ref: 1495\7f133644
88751 Ref: 1496\7f133717
88752 Ref: 1497\7f133858
88753 Ref: 1498\7f133916
88754 Ref: 1499\7f134332
88755 Ref: 1500\7f134420
88756 Ref: 1501\7f135101
88757 Ref: 1502\7f135322
88758 Ref: 1503\7f135658
88759 Ref: 1504\7f135953
88760 Ref: 1505\7f136012
88761 Ref: 1506\7f136014
88762 Ref: 1507\7f136116
88763 Ref: 1508\7f136118
88764 Ref: 1509\7f136203
88765 Ref: 1510\7f136788
88766 Ref: 1511\7f137339
88767 Ref: 1512\7f137885
88768 Ref: 1513\7f138601
88769 Ref: 1514\7f138735
88770 Ref: 1515\7f138981
88771 Ref: 1516\7f138983
88772 Ref: 1517\7f139206
88773 Ref: 1518\7f139384
88774 Ref: 1519\7f140415
88775 Ref: 1520\7f140845
88776 Ref: 1521\7f140845
88777 Node: 3.3.2\7f142622
88778 Ref: 1522\7f142850
88779 Ref: S0034\7f142850
88780 Ref: 1523\7f142865
88781 Ref: 1524\7f142911
88782 Ref: 1525\7f142975
88783 Ref: 1526\7f143638
88784 Ref: 1527\7f143691
88785 Node: 3.4\7f144241
88786 Ref: 1528\7f144372
88787 Ref: 1529\7f144543
88788 Ref: 1530\7f144553
88789 Ref: 1531\7f144553
88790 Ref: 1532\7f145219
88791 Ref: S0035\7f145219
88792 Ref: 1533\7f145265
88793 Ref: 1534\7f145290
88794 Ref: 1535\7f145312
88795 Ref: 1536\7f145385
88796 Ref: 1537\7f145385
88797 Ref: 1538\7f145874
88798 Ref: 1539\7f146471
88799 Ref: 1540\7f146521
88800 Ref: 1541\7f146521
88801 Ref: 1542\7f146699
88802 Ref: 1543\7f147166
88803 Ref: 1544\7f148747
88804 Ref: 1545\7f148748
88805 Ref: 1546\7f149122
88806 Ref: 1547\7f149123
88807 Ref: 1548\7f149123
88808 Ref: 1549\7f149755
88809 Ref: 1550\7f150098
88810 Ref: 1551\7f150667
88811 Ref: 1552\7f151172
88812 Ref: 1553\7f152119
88813 Ref: 1554\7f152811
88814 Ref: 1555\7f153287
88815 Ref: 1556\7f153683
88816 Ref: 1557\7f154386
88817 Ref: 1558\7f154414
88818 Ref: 1559\7f154904
88819 Node: 3.4.1\7f157142
88820 Ref: 1560\7f157400
88821 Ref: 1561\7f157710
88822 Ref: 1562\7f157712
88823 Ref: 1563\7f157712
88824 Ref: 1564\7f158050
88825 Ref: 1565\7f158317
88826 Ref: 1566\7f158936
88827 Ref: 1567\7f159695
88828 Ref: 1568\7f160012
88829 Ref: 1569\7f160012
88830 Ref: 1570\7f160012
88831 Ref: 1571\7f160012
88832 Ref: 1572\7f161072
88833 Ref: 1573\7f161072
88834 Ref: 1574\7f161227
88835 Ref: 1575\7f161349
88836 Ref: 1576\7f161693
88837 Ref: 1577\7f161774
88838 Ref: 1578\7f161776
88839 Ref: 1579\7f161944
88840 Node: 3.5\7f162896
88841 Ref: 1580\7f162999
88842 Ref: 1581\7f163070
88843 Ref: 1582\7f163133
88844 Ref: 1583\7f163212
88845 Ref: 1584\7f163432
88846 Ref: S0036\7f163432
88847 Ref: 1585\7f163444
88848 Ref: 1586\7f163463
88849 Ref: S0037\7f163463
88850 Ref: 1587\7f163469
88851 Ref: 1588\7f163505
88852 Ref: 1589\7f163526
88853 Ref: 1590\7f163547
88854 Ref: 1591\7f163547
88855 Ref: 1592\7f163547
88856 Ref: 1593\7f163547
88857 Ref: 1594\7f163746
88858 Ref: 1595\7f163944
88859 Ref: 1596\7f164062
88860 Ref: 1597\7f164139
88861 Ref: 1598\7f164298
88862 Ref: 1599\7f164527
88863 Ref: 1600\7f164779
88864 Ref: 1601\7f165072
88865 Ref: 1602\7f165072
88866 Ref: 1603\7f165145
88867 Ref: 1604\7f165380
88868 Ref: 1605\7f165528
88869 Ref: 1606\7f165645
88870 Ref: 1607\7f165723
88871 Ref: 1608\7f165977
88872 Ref: 1609\7f165977
88873 Ref: 1610\7f166206
88874 Ref: 1611\7f166221
88875 Ref: 1612\7f166347
88876 Ref: 1613\7f166362
88877 Ref: 1614\7f166488
88878 Ref: 1615\7f166503
88879 Ref: 1616\7f166569
88880 Ref: 1617\7f166584
88881 Ref: 1618\7f166738
88882 Ref: 1619\7f166751
88883 Ref: 1620\7f166766
88884 Ref: 1621\7f167050
88885 Ref: 1622\7f167065
88886 Ref: 1623\7f167351
88887 Ref: 1624\7f167366
88888 Ref: 1625\7f167535
88889 Ref: 1626\7f167700
88890 Ref: 1627\7f167701
88891 Ref: 1628\7f168187
88892 Ref: 1629\7f168188
88893 Ref: 1630\7f168277
88894 Ref: 1631\7f168292
88895 Ref: 1632\7f168461
88896 Ref: 1633\7f168626
88897 Ref: 1634\7f168627
88898 Ref: 1635\7f169128
88899 Ref: 1636\7f169129
88900 Ref: 1637\7f169233
88901 Ref: 1638\7f169248
88902 Ref: 1639\7f169457
88903 Ref: 1640\7f169951
88904 Ref: 1641\7f171907
88905 Ref: 1642\7f171922
88906 Ref: 1643\7f172110
88907 Ref: 1644\7f172709
88908 Ref: 1645\7f172724
88909 Ref: 1646\7f173433
88910 Ref: 1647\7f173448
88911 Ref: 1648\7f173726
88912 Ref: 1649\7f173741
88913 Ref: 1650\7f173998
88914 Ref: 1651\7f174013
88915 Ref: 1652\7f174270
88916 Ref: 1653\7f174285
88917 Ref: 1654\7f174669
88918 Ref: 1655\7f174684
88919 Ref: 1656\7f175190
88920 Ref: 1657\7f175191
88921 Ref: 1658\7f175238
88922 Ref: 1659\7f175773
88923 Ref: 1660\7f175774
88924 Ref: 1661\7f176361
88925 Ref: 1662\7f176591
88926 Ref: 1663\7f176592
88927 Ref: 1664\7f176782
88928 Ref: 1665\7f176797
88929 Ref: 1666\7f177151
88930 Ref: 1667\7f177166
88931 Ref: 1668\7f177632
88932 Ref: 1669\7f177633
88933 Ref: 1670\7f178023
88934 Ref: 1671\7f178038
88935 Ref: 1672\7f178357
88936 Ref: 1673\7f178372
88937 Ref: 1674\7f178828
88938 Ref: 1675\7f178829
88939 Ref: 1676\7f180235
88940 Ref: 1677\7f180235
88941 Ref: 1678\7f180603
88942 Node: 3.5.1\7f182141
88943 Ref: 1679\7f182252
88944 Ref: 1680\7f182388
88945 Ref: S0038\7f182388
88946 Ref: 1681\7f182402
88947 Ref: 1682\7f182439
88948 Ref: 1683\7f182522
88949 Ref: S0039\7f182522
88950 Ref: 1684\7f182528
88951 Ref: 1685\7f182550
88952 Ref: 1686\7f182617
88953 Ref: S0040\7f182617
88954 Ref: 1687\7f182621
88955 Ref: 1688\7f182876
88956 Ref: 1689\7f183332
88957 Ref: 1690\7f183670
88958 Ref: 1691\7f184112
88959 Ref: 1692\7f184112
88960 Ref: 1693\7f184112
88961 Node: 3.5.2\7f185393
88962 Ref: 1694\7f185560
88963 Ref: 1695\7f185684
88964 Ref: 1696\7f185684
88965 Ref: 1697\7f185684
88966 Ref: 1698\7f185684
88967 Ref: 1699\7f186361
88968 Ref: 1700\7f186363
88969 Ref: 1701\7f186369
88970 Ref: 1702\7f186369
88971 Ref: 1703\7f186369
88972 Ref: 1704\7f186829
88973 Ref: 1705\7f186829
88974 Node: 3.5.3\7f188323
88975 Ref: 1706\7f188486
88976 Ref: 1707\7f188589
88977 Ref: 1708\7f188591
88978 Ref: 1709\7f188681
88979 Node: 3.5.4\7f188756
88980 Ref: 1710\7f188873
88981 Ref: 1711\7f188873
88982 Ref: 1712\7f188873
88983 Ref: 1713\7f189249
88984 Ref: 1714\7f189324
88985 Ref: S0041\7f189324
88986 Ref: 1715\7f189328
88987 Ref: 1716\7f189362
88988 Ref: 1717\7f189430
88989 Ref: S0042\7f189430
88990 Ref: 1718\7f189448
88991 Ref: 1719\7f189482
88992 Ref: 1720\7f189531
88993 Ref: S0043\7f189531
88994 Ref: 1721\7f189547
88995 Ref: 1722\7f189610
88996 Ref: 1723\7f189742
88997 Ref: 1724\7f190036
88998 Ref: 1725\7f190036
88999 Ref: 1726\7f190036
89000 Ref: 1727\7f190619
89001 Ref: 1728\7f190820
89002 Ref: 1729\7f190822
89003 Ref: 1730\7f191027
89004 Ref: 1731\7f191141
89005 Ref: 1732\7f191143
89006 Ref: 1733\7f191287
89007 Ref: 1734\7f191451
89008 Ref: 1735\7f191451
89009 Ref: 1736\7f191662
89010 Ref: 1737\7f191662
89011 Ref: 1738\7f191662
89012 Ref: 1739\7f192020
89013 Ref: 1740\7f192022
89014 Ref: 1741\7f192219
89015 Ref: 1742\7f192369
89016 Ref: 1743\7f192384
89017 Ref: 1744\7f192685
89018 Ref: 1745\7f192700
89019 Ref: 1746\7f192855
89020 Ref: 1747\7f193197
89021 Ref: 1748\7f193197
89022 Ref: 1749\7f193197
89023 Ref: 1750\7f193386
89024 Ref: 1751\7f193388
89025 Ref: 1752\7f193388
89026 Ref: 1753\7f193562
89027 Ref: 1754\7f193656
89028 Ref: 1755\7f194102
89029 Ref: 1756\7f194102
89030 Ref: 1757\7f194841
89031 Ref: 1758\7f195677
89032 Ref: 1759\7f196270
89033 Ref: 1760\7f196593
89034 Ref: 1761\7f196818
89035 Ref: 1762\7f196818
89036 Node: 3.5.5\7f198321
89037 Ref: 1763\7f198591
89038 Ref: 1764\7f198606
89039 Ref: 1765\7f198922
89040 Ref: 1766\7f198937
89041 Ref: 1767\7f199113
89042 Ref: 1768\7f199128
89043 Ref: 1769\7f199236
89044 Ref: 1770\7f199238
89045 Ref: 1771\7f199627
89046 Ref: 1772\7f199642
89047 Ref: 1773\7f199834
89048 Ref: 1774\7f199849
89049 Ref: 1775\7f200515
89050 Ref: 1776\7f200773
89051 Node: 3.5.6\7f202375
89052 Ref: 1777\7f202486
89053 Ref: 1778\7f202715
89054 Ref: S0044\7f202715
89055 Ref: 1779\7f202728
89056 Ref: 1780\7f202756
89057 Ref: 1781\7f202828
89058 Ref: 1782\7f203068
89059 Ref: 1783\7f203068
89060 Ref: 1784\7f203248
89061 Ref: 1785\7f203558
89062 Ref: 1786\7f204303
89063 Node: 3.5.7\7f205529
89064 Ref: 1787\7f205660
89065 Ref: 1788\7f205882
89066 Ref: S0045\7f205882
89067 Ref: 1789\7f205908
89068 Ref: 1790\7f205920
89069 Ref: 1791\7f205978
89070 Ref: S0046\7f205978
89071 Ref: 1792\7f206003
89072 Ref: 1793\7f206031
89073 Ref: 1794\7f206101
89074 Ref: 1795\7f206311
89075 Ref: 1796\7f206371
89076 Ref: 1797\7f206540
89077 Ref: 1798\7f206757
89078 Ref: 1799\7f207175
89079 Ref: 1800\7f207325
89080 Ref: 1801\7f207493
89081 Ref: 1802\7f207627
89082 Ref: 1803\7f207814
89083 Ref: 1804\7f207949
89084 Ref: 1805\7f207951
89085 Ref: 1806\7f208566
89086 Ref: 1807\7f208568
89087 Ref: 1808\7f208836
89088 Ref: 1809\7f209011
89089 Ref: 1810\7f209169
89090 Ref: 1811\7f209328
89091 Ref: 1812\7f209493
89092 Ref: 1813\7f209493
89093 Ref: 1814\7f210276
89094 Node: 3.5.8\7f211107
89095 Ref: 1815\7f211397
89096 Ref: 1816\7f211412
89097 Ref: 1817\7f211957
89098 Node: 3.5.9\7f212595
89099 Ref: 1818\7f212721
89100 Ref: 1819\7f212721
89101 Ref: 1820\7f212721
89102 Ref: 1821\7f212810
89103 Ref: 1822\7f212998
89104 Ref: S0047\7f212998
89105 Ref: 1823\7f213002
89106 Ref: 1824\7f213037
89107 Ref: 1825\7f213113
89108 Ref: S0048\7f213113
89109 Ref: 1826\7f213139
89110 Ref: 1827\7f213151
89111 Ref: 1828\7f213214
89112 Ref: S0049\7f213214
89113 Ref: 1829\7f213240
89114 Ref: 1830\7f213265
89115 Ref: 1831\7f213277
89116 Ref: 1832\7f213334
89117 Ref: S0050\7f213334
89118 Ref: 1833\7f213361
89119 Ref: 1834\7f213373
89120 Ref: 1835\7f213443
89121 Ref: 1836\7f213645
89122 Ref: 1837\7f213647
89123 Ref: 1838\7f213647
89124 Ref: 1839\7f214169
89125 Ref: 1840\7f214282
89126 Ref: 1841\7f214429
89127 Ref: 1842\7f215375
89128 Ref: 1843\7f215529
89129 Ref: 1844\7f215819
89130 Ref: 1845\7f215821
89131 Ref: 1846\7f216123
89132 Ref: 1847\7f216181
89133 Ref: 1848\7f216341
89134 Ref: 1849\7f216343
89135 Ref: 1850\7f216594
89136 Ref: 1851\7f216740
89137 Ref: 1852\7f217071
89138 Ref: 1853\7f217315
89139 Ref: 1854\7f217414
89140 Ref: 1855\7f217416
89141 Ref: 1856\7f217639
89142 Node: 3.5.10\7f219293
89143 Ref: 1857\7f219564
89144 Ref: 1858\7f219579
89145 Ref: 1859\7f219696
89146 Ref: 1860\7f219698
89147 Ref: 1861\7f219947
89148 Ref: 1862\7f219947
89149 Ref: 1863\7f219959
89150 Ref: 1864\7f219974
89151 Ref: 1865\7f220129
89152 Ref: 1866\7f220144
89153 Ref: 1867\7f220693
89154 Ref: 1868\7f220708
89155 Ref: 1869\7f221289
89156 Ref: 1870\7f221304
89157 Ref: 1871\7f221628
89158 Ref: 1872\7f222408
89159 Ref: 1873\7f222423
89160 Ref: 1874\7f222536
89161 Ref: 1875\7f222771
89162 Ref: 1876\7f222786
89163 Ref: 1877\7f223464
89164 Node: 3.6\7f224052
89165 Ref: 1878\7f224153
89166 Ref: 1879\7f224153
89167 Ref: 1880\7f224521
89168 Ref: S0051\7f224521
89169 Ref: 1881\7f224534
89170 Ref: 1882\7f224567
89171 Ref: 1883\7f224634
89172 Ref: S0052\7f224634
89173 Ref: 1884\7f224653
89174 Ref: 1885\7f224681
89175 Ref: 1886\7f224711
89176 Ref: 1887\7f224770
89177 Ref: S0053\7f224770
89178 Ref: 1888\7f224774
89179 Ref: 1889\7f224833
89180 Ref: S0054\7f224833
89181 Ref: 1890\7f224853
89182 Ref: 1891\7f224884
89183 Ref: 1892\7f224923
89184 Ref: 1893\7f224979
89185 Ref: S0055\7f224979
89186 Ref: 1894\7f224993
89187 Ref: 1895\7f225014
89188 Ref: 1896\7f225050
89189 Ref: S0056\7f225050
89190 Ref: 1897\7f225073
89191 Ref: 1898\7f225110
89192 Ref: 1899\7f225180
89193 Ref: 1900\7f225508
89194 Ref: 1901\7f225622
89195 Ref: 1902\7f225672
89196 Ref: 1903\7f225881
89197 Ref: 1904\7f225881
89198 Ref: 1905\7f225881
89199 Ref: 1906\7f226494
89200 Ref: 1907\7f226542
89201 Ref: 1908\7f226602
89202 Ref: 1909\7f226726
89203 Ref: 1910\7f227197
89204 Ref: 1911\7f227197
89205 Ref: 1912\7f227449
89206 Ref: 1913\7f227620
89207 Ref: 1914\7f227620
89208 Ref: 1915\7f227877
89209 Ref: 1916\7f228399
89210 Ref: 1917\7f228542
89211 Ref: 1918\7f228824
89212 Ref: 1919\7f229058
89213 Ref: 1920\7f229423
89214 Ref: 1921\7f229810
89215 Ref: 1922\7f230335
89216 Ref: 1923\7f230335
89217 Ref: 1924\7f230751
89218 Node: 3.6.1\7f232611
89219 Ref: 1925\7f232968
89220 Ref: S0057\7f232968
89221 Ref: 1926\7f232975
89222 Ref: 1927\7f232993
89223 Ref: 1928\7f233032
89224 Ref: S0058\7f233032
89225 Ref: 1929\7f233046
89226 Ref: 1930\7f233067
89227 Ref: 1931\7f233125
89228 Ref: 1932\7f233241
89229 Ref: 1933\7f233770
89230 Ref: 1934\7f233956
89231 Ref: 1935\7f234157
89232 Ref: 1936\7f234276
89233 Ref: 1937\7f234421
89234 Ref: 1938\7f234535
89235 Node: 3.6.2\7f235909
89236 Ref: 1939\7f236540
89237 Ref: 1940\7f236555
89238 Ref: 1941\7f236684
89239 Ref: 1942\7f236699
89240 Ref: 1943\7f236826
89241 Ref: 1944\7f236841
89242 Ref: 1945\7f236968
89243 Ref: 1946\7f236983
89244 Ref: 1947\7f237110
89245 Ref: 1948\7f237125
89246 Ref: 1949\7f237258
89247 Ref: 1950\7f237273
89248 Ref: 1951\7f237427
89249 Ref: 1952\7f237442
89250 Ref: 1953\7f237607
89251 Ref: 1954\7f237622
89252 Ref: 1955\7f238689
89253 Node: 3.6.3\7f239786
89254 Ref: 1956\7f239933
89255 Node: 3.7\7f241436
89256 Ref: 1957\7f241543
89257 Ref: 1958\7f241543
89258 Ref: 1959\7f241543
89259 Ref: 1960\7f242107
89260 Ref: S0059\7f242107
89261 Ref: 1961\7f242111
89262 Ref: 1962\7f242140
89263 Ref: 1963\7f242203
89264 Ref: S0060\7f242203
89265 Ref: 1964\7f242244
89266 Ref: S0061\7f242244
89267 Ref: 1965\7f242258
89268 Ref: 1966\7f242288
89269 Ref: 1967\7f242353
89270 Ref: S0062\7f242353
89271 Ref: 1968\7f242366
89272 Ref: 1969\7f242394
89273 Ref: 1970\7f242410
89274 Ref: 1971\7f242427
89275 Ref: 1972\7f242461
89276 Ref: 1973\7f242488
89277 Ref: 1974\7f242510
89278 Ref: 1975\7f242562
89279 Ref: S0063\7f242562
89280 Ref: 1976\7f242566
89281 Ref: 1977\7f242630
89282 Ref: 1978\7f243032
89283 Ref: 1979\7f243302
89284 Ref: 1980\7f244073
89285 Ref: 1981\7f245232
89286 Ref: 1982\7f245534
89287 Ref: 1983\7f245720
89288 Ref: 1984\7f246039
89289 Ref: 1985\7f246783
89290 Ref: 1986\7f246783
89291 Ref: 1987\7f246783
89292 Ref: 1988\7f246783
89293 Ref: 1989\7f246902
89294 Ref: 1990\7f246904
89295 Ref: 1991\7f247265
89296 Ref: 1992\7f247267
89297 Ref: 1993\7f247709
89298 Node: 3.7.1\7f250035
89299 Ref: 1994\7f250332
89300 Ref: S0064\7f250332
89301 Ref: 1995\7f250346
89302 Ref: 1996\7f250374
89303 Ref: 1997\7f250433
89304 Ref: S0065\7f250433
89305 Ref: 1998\7f250460
89306 Ref: 1999\7f250490
89307 Ref: 2000\7f250509
89308 Ref: 2001\7f250529
89309 Ref: 2002\7f250636
89310 Ref: 2003\7f250984
89311 Ref: 2004\7f251070
89312 Ref: 2005\7f251352
89313 Ref: 2006\7f252115
89314 Ref: 2007\7f252453
89315 Ref: 2008\7f252626
89316 Ref: 2009\7f252794
89317 Ref: 2010\7f253148
89318 Node: 3.7.2\7f253955
89319 Ref: 2011\7f254651
89320 Ref: 2012\7f254666
89321 Ref: 2013\7f254868
89322 Node: 3.8\7f255199
89323 Ref: 2014\7f255302
89324 Ref: 2015\7f255302
89325 Ref: 2016\7f255465
89326 Ref: 2017\7f255539
89327 Ref: S0066\7f255539
89328 Ref: 2018\7f255574
89329 Ref: 2019\7f255623
89330 Ref: S0067\7f255623
89331 Ref: 2020\7f255656
89332 Ref: 2021\7f255734
89333 Ref: S0068\7f255734
89334 Ref: 2022\7f255750
89335 Ref: 2023\7f255766
89336 Ref: 2024\7f255793
89337 Ref: 2025\7f255809
89338 Ref: 2026\7f255863
89339 Ref: S0069\7f255863
89340 Ref: 2027\7f255867
89341 Ref: 2028\7f255892
89342 Ref: 2029\7f255937
89343 Ref: S0070\7f255937
89344 Ref: 2030\7f255950
89345 Ref: 2031\7f255977
89346 Ref: 2032\7f256002
89347 Ref: 2033\7f256042
89348 Ref: 2034\7f256117
89349 Ref: 2035\7f256311
89350 Ref: 2036\7f257553
89351 Ref: 2037\7f257891
89352 Ref: 2038\7f257891
89353 Ref: 2039\7f258013
89354 Ref: 2040\7f258234
89355 Ref: 2041\7f258556
89356 Ref: 2042\7f258704
89357 Ref: 2043\7f258808
89358 Ref: 2044\7f258955
89359 Ref: 2045\7f259063
89360 Ref: 2046\7f259063
89361 Ref: 2047\7f259063
89362 Ref: 2048\7f259475
89363 Ref: 2049\7f260387
89364 Ref: 2050\7f261745
89365 Node: 3.8.1\7f262728
89366 Ref: 2051\7f263115
89367 Ref: S0071\7f263115
89368 Ref: 2052\7f263146
89369 Ref: 2053\7f263173
89370 Ref: 2054\7f263193
89371 Ref: 2055\7f263235
89372 Ref: S0072\7f263235
89373 Ref: 2056\7f263253
89374 Ref: 2057\7f263288
89375 Ref: 2058\7f263331
89376 Ref: S0073\7f263331
89377 Ref: 2059\7f263335
89378 Ref: 2060\7f263355
89379 Ref: 2061\7f263397
89380 Ref: S0074\7f263397
89381 Ref: 2062\7f263401
89382 Ref: 2063\7f263431
89383 Ref: 2064\7f263458
89384 Ref: 2065\7f263525
89385 Ref: 2066\7f263740
89386 Ref: 2067\7f264262
89387 Ref: 2068\7f264983
89388 Ref: 2069\7f266119
89389 Ref: 2070\7f266119
89390 Ref: 2071\7f267165
89391 Node: 3.9\7f268095
89392 Ref: 2072\7f268239
89393 Ref: 2073\7f268239
89394 Ref: 2074\7f268239
89395 Ref: 2075\7f268239
89396 Ref: 2076\7f268239
89397 Ref: 2077\7f268398
89398 Ref: 2078\7f268400
89399 Ref: 2079\7f268400
89400 Ref: 2080\7f268452
89401 Ref: 2081\7f268851
89402 Ref: 2082\7f268853
89403 Ref: 2083\7f268951
89404 Ref: 2084\7f268951
89405 Ref: 2085\7f268951
89406 Ref: 2086\7f269526
89407 Ref: 2087\7f269857
89408 Ref: 2088\7f269925
89409 Ref: 2089\7f269927
89410 Ref: 2090\7f269927
89411 Ref: 2091\7f269927
89412 Ref: 2092\7f270569
89413 Ref: 2093\7f270633
89414 Ref: 2094\7f270708
89415 Ref: 2095\7f270786
89416 Ref: 2096\7f270837
89417 Ref: 2097\7f270893
89418 Ref: 2098\7f270959
89419 Ref: 2099\7f271035
89420 Ref: 2100\7f271090
89421 Ref: 2101\7f271159
89422 Ref: 2102\7f271239
89423 Ref: 2103\7f271349
89424 Ref: 2104\7f271403
89425 Ref: 2105\7f271475
89426 Ref: 2106\7f271552
89427 Ref: 2107\7f271597
89428 Ref: 2108\7f274308
89429 Ref: 2109\7f274916
89430 Ref: 2110\7f275143
89431 Ref: 2111\7f275158
89432 Ref: 2112\7f275409
89433 Ref: 2113\7f275424
89434 Ref: 2114\7f275610
89435 Ref: 2115\7f275625
89436 Ref: 2116\7f275951
89437 Ref: 2117\7f275966
89438 Ref: 2118\7f276125
89439 Ref: 2119\7f276970
89440 Ref: 2120\7f277088
89441 Ref: 2121\7f277222
89442 Ref: 2122\7f277327
89443 Ref: 2123\7f277448
89444 Ref: 2124\7f277562
89445 Ref: 2125\7f278453
89446 Ref: 2126\7f280095
89447 Ref: 2127\7f280095
89448 Node: 3.9.1\7f280537
89449 Ref: 2128\7f280646
89450 Ref: 2129\7f280646
89451 Ref: 2130\7f280646
89452 Ref: 2131\7f280646
89453 Ref: 2132\7f280646
89454 Ref: 2133\7f280646
89455 Ref: 2134\7f280875
89456 Ref: S0075\7f280875
89457 Ref: 2135\7f280885
89458 Ref: 2136\7f281216
89459 Ref: 2137\7f281644
89460 Ref: 2138\7f281849
89461 Node: 3.9.2\7f284413
89462 Ref: 2139\7f284582
89463 Ref: 2140\7f284582
89464 Ref: 2141\7f284582
89465 Ref: 2142\7f284582
89466 Ref: 2143\7f284582
89467 Ref: 2144\7f284582
89468 Ref: 2145\7f284582
89469 Ref: 2146\7f284582
89470 Ref: 2147\7f285564
89471 Ref: 2148\7f285566
89472 Ref: 2149\7f285566
89473 Ref: 2150\7f285566
89474 Ref: 2151\7f285566
89475 Ref: 2152\7f285618
89476 Ref: 2153\7f285618
89477 Ref: 2154\7f285734
89478 Ref: 2155\7f285928
89479 Ref: 2156\7f286181
89480 Ref: 2157\7f286183
89481 Ref: 2158\7f286603
89482 Ref: 2159\7f286603
89483 Ref: 2160\7f287136
89484 Ref: 2161\7f287376
89485 Ref: 2162\7f287605
89486 Ref: 2163\7f289315
89487 Ref: 2164\7f289442
89488 Ref: 2165\7f290811
89489 Ref: 2166\7f290811
89490 Ref: 2167\7f291010
89491 Ref: 2168\7f291355
89492 Ref: 2169\7f291357
89493 Ref: 2170\7f291481
89494 Ref: 2171\7f292805
89495 Node: 3.9.3\7f295534
89496 Ref: 2172\7f295687
89497 Ref: 2173\7f295687
89498 Ref: 2174\7f295687
89499 Ref: 2175\7f295687
89500 Ref: 2176\7f295821
89501 Ref: 2177\7f295823
89502 Ref: 2178\7f296171
89503 Ref: S0076\7f296171
89504 Ref: 2179\7f296186
89505 Ref: 2180\7f296217
89506 Ref: 2181\7f296268
89507 Ref: 2182\7f296344
89508 Ref: 2183\7f296344
89509 Ref: 2184\7f296736
89510 Ref: 2185\7f296736
89511 Ref: 2186\7f297882
89512 Ref: 2187\7f299999
89513 Node: 3.9.4\7f301551
89514 Ref: 2188\7f301934
89515 Ref: S0077\7f301934
89516 Ref: 2189\7f302007
89517 Ref: 2190\7f302053
89518 Ref: S0078\7f302053
89519 Ref: 2191\7f302068
89520 Ref: 2192\7f302096
89521 Ref: 2193\7f302214
89522 Ref: 2194\7f302214
89523 Ref: 2195\7f302526
89524 Ref: 2196\7f302526
89525 Ref: 2197\7f302527
89526 Ref: 2198\7f302527
89527 Ref: 2199\7f302527
89528 Ref: 2200\7f302527
89529 Ref: 2201\7f302527
89530 Ref: 2202\7f302527
89531 Ref: 2203\7f302527
89532 Ref: 2204\7f302527
89533 Ref: 2205\7f302651
89534 Ref: 2206\7f302651
89535 Ref: 2207\7f302651
89536 Ref: 2208\7f302651
89537 Ref: 2209\7f302651
89538 Ref: 2210\7f302651
89539 Ref: 2211\7f302651
89540 Ref: 2212\7f303039
89541 Ref: 2213\7f303039
89542 Ref: 2214\7f304770
89543 Node: 3.10\7f309118
89544 Ref: 2215\7f309225
89545 Ref: 2216\7f309225
89546 Ref: 2217\7f309225
89547 Ref: 2218\7f309517
89548 Ref: 2219\7f309519
89549 Ref: 2220\7f309593
89550 Ref: S0079\7f309593
89551 Ref: 2221\7f309608
89552 Ref: 2222\7f309624
89553 Ref: 2223\7f309662
89554 Ref: 2224\7f309678
89555 Ref: 2225\7f309745
89556 Ref: S0080\7f309745
89557 Ref: 2226\7f309767
89558 Ref: 2227\7f309792
89559 Ref: 2228\7f309842
89560 Ref: S0081\7f309842
89561 Ref: 2229\7f309901
89562 Ref: S0082\7f309901
89563 Ref: 2230\7f309944
89564 Ref: 2231\7f310000
89565 Ref: 2232\7f310055
89566 Ref: S0083\7f310055
89567 Ref: 2233\7f310096
89568 Ref: S0084\7f310096
89569 Ref: 2234\7f310111
89570 Ref: 2235\7f310145
89571 Ref: 2236\7f310168
89572 Ref: 2237\7f310213
89573 Ref: 2238\7f310241
89574 Ref: 2239\7f310285
89575 Ref: 2240\7f310371
89576 Ref: 2241\7f310371
89577 Ref: 2242\7f310371
89578 Ref: 2243\7f310371
89579 Ref: 2244\7f310531
89580 Ref: 2245\7f310710
89581 Ref: 2246\7f310931
89582 Ref: 2247\7f310931
89583 Ref: 2248\7f311300
89584 Ref: 2249\7f312104
89585 Ref: 2250\7f312105
89586 Ref: 2251\7f312307
89587 Ref: 2252\7f312470
89588 Ref: 2253\7f312821
89589 Ref: 2254\7f312915
89590 Ref: 2255\7f313020
89591 Ref: 2256\7f313359
89592 Ref: 2257\7f313359
89593 Ref: 2258\7f313359
89594 Ref: 2259\7f313856
89595 Ref: 2260\7f313863
89596 Ref: 2261\7f314602
89597 Ref: 2262\7f315140
89598 Ref: 2263\7f315140
89599 Ref: 2264\7f315978
89600 Ref: 2265\7f316184
89601 Ref: 2266\7f316475
89602 Ref: 2267\7f316711
89603 Node: 3.10.1\7f318473
89604 Ref: 2268\7f319121
89605 Ref: S0085\7f319121
89606 Ref: 2269\7f319131
89607 Ref: 2270\7f319152
89608 Ref: 2271\7f319243
89609 Ref: 2272\7f319243
89610 Ref: 2273\7f319533
89611 Ref: 2274\7f319533
89612 Ref: 2275\7f320588
89613 Ref: 2276\7f321981
89614 Ref: 2277\7f324597
89615 Ref: 2278\7f324687
89616 Node: 3.10.2\7f326551
89617 Ref: 2279\7f326988
89618 Ref: 2280\7f327554
89619 Ref: 2281\7f327556
89620 Ref: 2282\7f327734
89621 Ref: 2283\7f327734
89622 Ref: 2284\7f327734
89623 Ref: 2285\7f327734
89624 Ref: 2286\7f327734
89625 Ref: 2287\7f327734
89626 Ref: 2288\7f328663
89627 Ref: 2289\7f328663
89628 Ref: 2290\7f330777
89629 Ref: 2291\7f330777
89630 Ref: 2292\7f330777
89631 Ref: 2293\7f335948
89632 Ref: 2294\7f337182
89633 Ref: 2295\7f338890
89634 Ref: 2296\7f338890
89635 Ref: 2297\7f341552
89636 Ref: 2298\7f341552
89637 Ref: 2299\7f341831
89638 Ref: 2300\7f341846
89639 Ref: 2301\7f342100
89640 Ref: 2302\7f343650
89641 Ref: 2303\7f344493
89642 Ref: 2304\7f344713
89643 Ref: 2305\7f344718
89644 Ref: 2306\7f344733
89645 Ref: 2307\7f344733
89646 Ref: 2308\7f344909
89647 Ref: 2309\7f345329
89648 Ref: 2310\7f345344
89649 Ref: 2311\7f345559
89650 Ref: 2312\7f345651
89651 Ref: 2313\7f345993
89652 Ref: 2314\7f346602
89653 Ref: 2315\7f346602
89654 Ref: 2316\7f347862
89655 Ref: 2317\7f348219
89656 Ref: 2318\7f348749
89657 Ref: 2319\7f348749
89658 Node: 3.11\7f350097
89659 Ref: 2320\7f350330
89660 Ref: S0086\7f350330
89661 Ref: 2321\7f350336
89662 Ref: 2322\7f350378
89663 Ref: S0087\7f350378
89664 Ref: 2323\7f350392
89665 Ref: 2324\7f350417
89666 Ref: 2325\7f350454
89667 Ref: S0088\7f350454
89668 Ref: 2326\7f350468
89669 Ref: 2327\7f350488
89670 Ref: 2328\7f350504
89671 Ref: 2329\7f350527
89672 Ref: S0089\7f350527
89673 Ref: 2330\7f350531
89674 Ref: 2331\7f350546
89675 Ref: 2332\7f350575
89676 Ref: S0090\7f350575
89677 Ref: 2333\7f350589
89678 Ref: 2334\7f350607
89679 Ref: 2335\7f350622
89680 Ref: 2336\7f350634
89681 Ref: 2337\7f350809
89682 Ref: 2338\7f350860
89683 Ref: 2339\7f351025
89684 Ref: 2340\7f351169
89685 Ref: 2341\7f351169
89686 Ref: 2342\7f351517
89687 Ref: 2343\7f351865
89688 Ref: 2344\7f352518
89689 Ref: 2345\7f352523
89690 Node: 3.11.1\7f352644
89691 Ref: 2346\7f352808
89692 Ref: 2347\7f352882
89693 Ref: 2348\7f353032
89694 Ref: 2349\7f353774
89695 Ref: 2350\7f353879
89696 Ref: 2351\7f354215
89697 Node: 4\7f355194
89698 Node: 4.1\7f355728
89699 Ref: 2352\7f356285
89700 Ref: S0091\7f356285
89701 Ref: 2353\7f356300
89702 Ref: 2354\7f356316
89703 Ref: 2355\7f356347
89704 Ref: 2356\7f356369
89705 Ref: 2357\7f356385
89706 Ref: 2358\7f356408
89707 Ref: 2359\7f356438
89708 Ref: 2360\7f356458
89709 Ref: 2361\7f356482
89710 Ref: 2362\7f356504
89711 Ref: 2363\7f356535
89712 Ref: 2364\7f356561
89713 Ref: 2365\7f356601
89714 Ref: S0092\7f356601
89715 Ref: 2366\7f356605
89716 Ref: 2367\7f356619
89717 Ref: 2368\7f356649
89718 Ref: S0093\7f356649
89719 Ref: 2369\7f356653
89720 Ref: 2370\7f356661
89721 Ref: 2371\7f356710
89722 Ref: S0094\7f356710
89723 Ref: 2372\7f356714
89724 Ref: 2373\7f356752
89725 Ref: S0095\7f356752
89726 Ref: 2374\7f356756
89727 Ref: 2375\7f357080
89728 Ref: 2376\7f357080
89729 Ref: 2377\7f357255
89730 Ref: 2378\7f357803
89731 Ref: 2379\7f358046
89732 Ref: 2380\7f358211
89733 Ref: 2381\7f358292
89734 Ref: 2382\7f358473
89735 Ref: 2383\7f358638
89736 Ref: 2384\7f358640
89737 Ref: 2385\7f358712
89738 Node: 4.1.1\7f359934
89739 Ref: 2386\7f360142
89740 Ref: 2387\7f360211
89741 Ref: S0096\7f360211
89742 Ref: 2388\7f360215
89743 Ref: 2389\7f360223
89744 Ref: 2390\7f360237
89745 Ref: 2391\7f360616
89746 Ref: 2392\7f360861
89747 Ref: 2393\7f361149
89748 Ref: 2394\7f361260
89749 Ref: 2395\7f361336
89750 Ref: 2396\7f361338
89751 Ref: 2397\7f361338
89752 Ref: 2398\7f361468
89753 Node: 4.1.2\7f362581
89754 Ref: 2399\7f362684
89755 Ref: 2400\7f362959
89756 Ref: S0097\7f362959
89757 Ref: 2401\7f362963
89758 Ref: 2402\7f362971
89759 Ref: 2403\7f363146
89760 Ref: 2404\7f363639
89761 Ref: 2405\7f363740
89762 Ref: 2406\7f363740
89763 Ref: 2407\7f363742
89764 Ref: 2408\7f363742
89765 Ref: 2409\7f363947
89766 Node: 4.1.3\7f365059
89767 Ref: 2410\7f365373
89768 Ref: 2411\7f365443
89769 Ref: S0098\7f365443
89770 Ref: 2412\7f365447
89771 Ref: 2413\7f365457
89772 Ref: 2414\7f365492
89773 Ref: S0099\7f365492
89774 Ref: 2415\7f365496
89775 Ref: 2416\7f365510
89776 Ref: 2417\7f365530
89777 Ref: 2418\7f365598
89778 Ref: 2419\7f368243
89779 Ref: 2420\7f368245
89780 Ref: 2421\7f370024
89781 Ref: 2422\7f370106
89782 Ref: 2423\7f370106
89783 Ref: 2424\7f370298
89784 Ref: 2425\7f370300
89785 Node: 4.1.4\7f371811
89786 Ref: 2426\7f371922
89787 Ref: 2427\7f372159
89788 Ref: S0100\7f372159
89789 Ref: 2428\7f372163
89790 Ref: 2429\7f372171
89791 Ref: 2430\7f372222
89792 Ref: S0101\7f372222
89793 Ref: 2431\7f372236
89794 Ref: 2432\7f372255
89795 Ref: 2433\7f372340
89796 Ref: S0102\7f372340
89797 Ref: 2434\7f372344
89798 Ref: 2435\7f372352
89799 Ref: 2436\7f372413
89800 Ref: S0103\7f372413
89801 Ref: 2437\7f372432
89802 Ref: 2438\7f373197
89803 Ref: 2439\7f373197
89804 Ref: 2440\7f374635
89805 Ref: 2441\7f374635
89806 Ref: 2442\7f375752
89807 Node: 4.1.5\7f376520
89808 Ref: 2443\7f376950
89809 Ref: 2444\7f376950
89810 Ref: 2445\7f377040
89811 Ref: 2446\7f377094
89812 Ref: 2447\7f377225
89813 Ref: 2448\7f377472
89814 Ref: S0104\7f377472
89815 Ref: 2449\7f377494
89816 Ref: 2450\7f377650
89817 Ref: 2451\7f378479
89818 Ref: 2452\7f378696
89819 Ref: 2453\7f378698
89820 Ref: 2454\7f378788
89821 Node: 4.1.6\7f379675
89822 Ref: 2455\7f380385
89823 Ref: 2456\7f380385
89824 Ref: 2457\7f381012
89825 Ref: 2458\7f381012
89826 Ref: 2459\7f381327
89827 Ref: 2460\7f381403
89828 Ref: 2461\7f381854
89829 Ref: 2462\7f382085
89830 Ref: S0105\7f382085
89831 Ref: 2463\7f382117
89832 Ref: 2464\7f382124
89833 Ref: 2465\7f382325
89834 Ref: 2466\7f382560
89835 Ref: 2467\7f382560
89836 Ref: 2468\7f382955
89837 Ref: 2469\7f382955
89838 Node: 4.2\7f384256
89839 Ref: 2470\7f384351
89840 Ref: 2471\7f384540
89841 Ref: 2472\7f384628
89842 Ref: 2473\7f384628
89843 Ref: 2474\7f385208
89844 Ref: 2475\7f385905
89845 Ref: 2476\7f385905
89846 Ref: 2477\7f385905
89847 Ref: 2478\7f385956
89848 Ref: 2479\7f385956
89849 Ref: 2480\7f385956
89850 Ref: 2481\7f385956
89851 Ref: 2482\7f386048
89852 Ref: 2483\7f386463
89853 Ref: 2484\7f386463
89854 Ref: 2485\7f386773
89855 Node: 4.3\7f387398
89856 Ref: 2486\7f387497
89857 Ref: 2487\7f387610
89858 Ref: 2488\7f387671
89859 Ref: S0106\7f387671
89860 Ref: 2489\7f387675
89861 Ref: 2490\7f387695
89862 Ref: 2491\7f387717
89863 Ref: 2492\7f387793
89864 Ref: 2493\7f388038
89865 Ref: 2494\7f388327
89866 Ref: 2495\7f388398
89867 Ref: 2496\7f388459
89868 Ref: 2497\7f388459
89869 Ref: 2498\7f388568
89870 Node: 4.3.1\7f388727
89871 Ref: 2499\7f389057
89872 Ref: S0107\7f389057
89873 Ref: 2500\7f389063
89874 Ref: 2501\7f389139
89875 Ref: S0108\7f389139
89876 Ref: 2502\7f389153
89877 Ref: 2503\7f389185
89878 Ref: 2504\7f389274
89879 Ref: S0109\7f389274
89880 Ref: 2505\7f389289
89881 Ref: 2506\7f389315
89882 Ref: 2507\7f389336
89883 Ref: 2508\7f389393
89884 Ref: S0110\7f389393
89885 Ref: 2509\7f389418
89886 Ref: 2510\7f389445
89887 Ref: 2511\7f389480
89888 Ref: 2512\7f389610
89889 Ref: 2513\7f390112
89890 Ref: 2514\7f390207
89891 Ref: 2515\7f390721
89892 Ref: 2516\7f390857
89893 Ref: 2517\7f392634
89894 Ref: 2518\7f392766
89895 Ref: 2519\7f393047
89896 Ref: 2520\7f393427
89897 Node: 4.3.2\7f395343
89898 Ref: 2521\7f395764
89899 Ref: S0111\7f395764
89900 Ref: 2522\7f395779
89901 Ref: 2523\7f395798
89902 Ref: 2524\7f395854
89903 Ref: S0112\7f395854
89904 Ref: 2525\7f395858
89905 Ref: 2526\7f395872
89906 Ref: 2527\7f395939
89907 Ref: 2528\7f396034
89908 Ref: 2529\7f396436
89909 Ref: 2530\7f397171
89910 Ref: 2531\7f397655
89911 Ref: 2532\7f398268
89912 Ref: 2533\7f398274
89913 Ref: 2534\7f398274
89914 Ref: 2535\7f398712
89915 Node: 4.3.3\7f399652
89916 Ref: 2536\7f400200
89917 Ref: S0113\7f400200
89918 Ref: 2537\7f400212
89919 Ref: 2538\7f400241
89920 Ref: 2539\7f400299
89921 Ref: S0114\7f400299
89922 Ref: 2540\7f400314
89923 Ref: 2541\7f400326
89924 Ref: 2542\7f400340
89925 Ref: 2543\7f400363
89926 Ref: 2544\7f400377
89927 Ref: 2545\7f400400
89928 Ref: 2546\7f400422
89929 Ref: 2547\7f400436
89930 Ref: 2548\7f400492
89931 Ref: S0115\7f400492
89932 Ref: 2549\7f400507
89933 Ref: 2550\7f400538
89934 Ref: 2551\7f400605
89935 Ref: S0116\7f400605
89936 Ref: 2552\7f400619
89937 Ref: 2553\7f400643
89938 Ref: 2554\7f400663
89939 Ref: 2555\7f400693
89940 Ref: 2556\7f400841
89941 Ref: 2557\7f401032
89942 Ref: 2558\7f401281
89943 Ref: 2559\7f401380
89944 Ref: 2560\7f401504
89945 Ref: 2561\7f401641
89946 Ref: 2562\7f402169
89947 Ref: 2563\7f405453
89948 Ref: 2564\7f405705
89949 Ref: 2565\7f405705
89950 Ref: 2566\7f405973
89951 Ref: 2567\7f405975
89952 Ref: 2568\7f406263
89953 Ref: 2569\7f407124
89954 Ref: 2570\7f407124
89955 Ref: 2571\7f407265
89956 Ref: 2572\7f407265
89957 Ref: 2573\7f407454
89958 Ref: 2574\7f407454
89959 Ref: 2575\7f407593
89960 Node: 4.4\7f409708
89961 Ref: 2576\7f409811
89962 Ref: 2577\7f410179
89963 Ref: 2578\7f410181
89964 Ref: 2579\7f410181
89965 Ref: 2580\7f410181
89966 Ref: 2581\7f410181
89967 Ref: 2582\7f410181
89968 Ref: 2583\7f410181
89969 Ref: 2584\7f410181
89970 Ref: 2585\7f410181
89971 Ref: 2586\7f410181
89972 Ref: 2587\7f410181
89973 Ref: 2588\7f410181
89974 Ref: 2589\7f410181
89975 Ref: 2590\7f410181
89976 Ref: 2591\7f410181
89977 Ref: 2592\7f410181
89978 Ref: 2593\7f410181
89979 Ref: 2594\7f410181
89980 Ref: 2595\7f410181
89981 Ref: 2596\7f410181
89982 Ref: 2597\7f410181
89983 Ref: 2598\7f410181
89984 Ref: 2599\7f410181
89985 Ref: 2600\7f410181
89986 Ref: 2601\7f410181
89987 Ref: 2602\7f410181
89988 Ref: 2603\7f410181
89989 Ref: 2604\7f410181
89990 Ref: 2605\7f410181
89991 Ref: 2606\7f410181
89992 Ref: 2607\7f410181
89993 Ref: 2608\7f410181
89994 Ref: 2609\7f410181
89995 Ref: 2610\7f410181
89996 Ref: 2611\7f410181
89997 Ref: 2612\7f410181
89998 Ref: 2613\7f410181
89999 Ref: 2614\7f410181
90000 Ref: 2615\7f410181
90001 Ref: 2616\7f410181
90002 Ref: 2617\7f410181
90003 Ref: 2618\7f410181
90004 Ref: 2619\7f410181
90005 Ref: 2620\7f410181
90006 Ref: 2621\7f410181
90007 Ref: 2622\7f410181
90008 Ref: 2623\7f410181
90009 Ref: 2624\7f410181
90010 Ref: 2625\7f410181
90011 Ref: 2626\7f410181
90012 Ref: 2627\7f410181
90013 Ref: 2628\7f410181
90014 Ref: 2629\7f410181
90015 Ref: 2630\7f410181
90016 Ref: 2631\7f410181
90017 Ref: 2632\7f410181
90018 Ref: 2633\7f410181
90019 Ref: 2634\7f410181
90020 Ref: 2635\7f410181
90021 Ref: 2636\7f410181
90022 Ref: 2637\7f410181
90023 Ref: 2638\7f410181
90024 Ref: 2639\7f410181
90025 Ref: 2640\7f410181
90026 Ref: 2641\7f410181
90027 Ref: 2642\7f410181
90028 Ref: 2643\7f410181
90029 Ref: 2644\7f410181
90030 Ref: 2645\7f410181
90031 Ref: 2646\7f410181
90032 Ref: 2647\7f410181
90033 Ref: 2648\7f410181
90034 Ref: 2649\7f410241
90035 Ref: S0117\7f410241
90036 Ref: 2650\7f410256
90037 Ref: 2651\7f410270
90038 Ref: 2652\7f410285
90039 Ref: 2653\7f410304
90040 Ref: 2654\7f410324
90041 Ref: 2655\7f410337
90042 Ref: 2656\7f410352
90043 Ref: 2657\7f410370
90044 Ref: 2658\7f410390
90045 Ref: 2659\7f410404
90046 Ref: 2660\7f410443
90047 Ref: S0118\7f410443
90048 Ref: 2661\7f410458
90049 Ref: 2662\7f410479
90050 Ref: 2663\7f410506
90051 Ref: 2664\7f410526
90052 Ref: 2665\7f410553
90053 Ref: 2666\7f410574
90054 Ref: 2667\7f410601
90055 Ref: 2668\7f410627
90056 Ref: 2669\7f410654
90057 Ref: 2670\7f410679
90058 Ref: 2671\7f410723
90059 Ref: S0119\7f410723
90060 Ref: 2672\7f410738
90061 Ref: 2673\7f410757
90062 Ref: 2674\7f410777
90063 Ref: 2675\7f410814
90064 Ref: S0120\7f410814
90065 Ref: 2676\7f410829
90066 Ref: 2677\7f410848
90067 Ref: 2678\7f410868
90068 Ref: 2679\7f410897
90069 Ref: 2680\7f410924
90070 Ref: 2681\7f410981
90071 Ref: S0121\7f410981
90072 Ref: 2682\7f410985
90073 Ref: 2683\7f411007
90074 Ref: 2684\7f411055
90075 Ref: S0122\7f411055
90076 Ref: 2685\7f411059
90077 Ref: 2686\7f411080
90078 Ref: 2687\7f411088
90079 Ref: 2688\7f411126
90080 Ref: S0123\7f411126
90081 Ref: 2689\7f411132
90082 Ref: 2690\7f411155
90083 Ref: 2691\7f411161
90084 Ref: 2692\7f411190
90085 Ref: 2693\7f411208
90086 Ref: S0124\7f411208
90087 Ref: 2694\7f411212
90088 Ref: 2695\7f411221
90089 Ref: 2696\7f411242
90090 Ref: 2697\7f411264
90091 Ref: S0125\7f411264
90092 Ref: 2698\7f411268
90093 Ref: 2699\7f411281
90094 Ref: 2700\7f411296
90095 Ref: 2701\7f411310
90096 Ref: 2702\7f411335
90097 Ref: S0126\7f411335
90098 Ref: 2703\7f411348
90099 Ref: 2704\7f411373
90100 Ref: 2705\7f411390
90101 Ref: 2706\7f411408
90102 Ref: 2707\7f411415
90103 Ref: 2708\7f411428
90104 Ref: 2709\7f411449
90105 Ref: 2710\7f411476
90106 Ref: 2711\7f411817
90107 Ref: 2712\7f411957
90108 Ref: 2713\7f411957
90109 Ref: 2714\7f411957
90110 Node: 4.5\7f413406
90111 Ref: 2715\7f413555
90112 Ref: 2716\7f413555
90113 Ref: 2717\7f413921
90114 Ref: S0127\7f413921
90115 Ref: 2718\7f413973
90116 Ref: S0128\7f413973
90117 Ref: 2719\7f414042
90118 Ref: S0129\7f414042
90119 Ref: 2720\7f414094
90120 Ref: S0130\7f414094
90121 Ref: 2721\7f414139
90122 Ref: S0131\7f414139
90123 Ref: 2722\7f414205
90124 Ref: S0132\7f414205
90125 Ref: 2723\7f414483
90126 Ref: 2724\7f414483
90127 Ref: 2725\7f414640
90128 Ref: 2726\7f414642
90129 Ref: 2727\7f414642
90130 Ref: 2728\7f414642
90131 Ref: 2729\7f415206
90132 Ref: 2730\7f415587
90133 Ref: 2731\7f415784
90134 Node: 4.5.1\7f417488
90135 Ref: 2732\7f417712
90136 Ref: 2733\7f417712
90137 Ref: 2734\7f417712
90138 Ref: 2735\7f417859
90139 Ref: 2736\7f417973
90140 Ref: 2737\7f417973
90141 Ref: 2738\7f417973
90142 Ref: 2739\7f417973
90143 Ref: 2740\7f417973
90144 Ref: 2741\7f417973
90145 Ref: 2742\7f417973
90146 Ref: 2743\7f417973
90147 Ref: 2744\7f418154
90148 Ref: 2745\7f419218
90149 Ref: 2746\7f419521
90150 Ref: 2747\7f419521
90151 Ref: 2748\7f419685
90152 Ref: 2749\7f419687
90153 Ref: 2750\7f419776
90154 Node: 4.5.2\7f420596
90155 Ref: 2751\7f420769
90156 Ref: 2752\7f420769
90157 Ref: 2753\7f420769
90158 Ref: 2754\7f420769
90159 Ref: 2755\7f420769
90160 Ref: 2756\7f420859
90161 Ref: 2757\7f420861
90162 Ref: 2758\7f421008
90163 Ref: 2759\7f421010
90164 Ref: 2760\7f421010
90165 Ref: 2761\7f421010
90166 Ref: 2762\7f421010
90167 Ref: 2763\7f421010
90168 Ref: 2764\7f421010
90169 Ref: 2765\7f421010
90170 Ref: 2766\7f421010
90171 Ref: 2767\7f421010
90172 Ref: 2768\7f421010
90173 Ref: 2769\7f421010
90174 Ref: 2770\7f421010
90175 Ref: 2771\7f421010
90176 Ref: 2772\7f421010
90177 Ref: 2773\7f421010
90178 Ref: 2774\7f421010
90179 Ref: 2775\7f421010
90180 Ref: 2776\7f421010
90181 Ref: 2777\7f421010
90182 Ref: 2778\7f421010
90183 Ref: 2779\7f421010
90184 Ref: 2780\7f421010
90185 Ref: 2781\7f421010
90186 Ref: 2782\7f421010
90187 Ref: 2783\7f421179
90188 Ref: 2784\7f421179
90189 Ref: 2785\7f421179
90190 Ref: 2786\7f421574
90191 Ref: 2787\7f421574
90192 Ref: 2788\7f425484
90193 Ref: 2789\7f426465
90194 Ref: 2790\7f426648
90195 Ref: 2791\7f427361
90196 Ref: 2792\7f429347
90197 Ref: 2793\7f429450
90198 Ref: 2794\7f430235
90199 Ref: 2795\7f430242
90200 Ref: 2796\7f430522
90201 Ref: 2797\7f431617
90202 Node: 4.5.3\7f434484
90203 Ref: 2798\7f434667
90204 Ref: 2799\7f434667
90205 Ref: 2800\7f434667
90206 Ref: 2801\7f434667
90207 Ref: 2802\7f434667
90208 Ref: 2803\7f434667
90209 Ref: 2804\7f434667
90210 Ref: 2805\7f434667
90211 Ref: 2806\7f434667
90212 Ref: 2807\7f434667
90213 Ref: 2808\7f434945
90214 Ref: 2809\7f434945
90215 Ref: 2810\7f434945
90216 Ref: 2811\7f434945
90217 Ref: 2812\7f434945
90218 Ref: 2813\7f434945
90219 Ref: 2814\7f434945
90220 Ref: 2815\7f435349
90221 Ref: 2816\7f436243
90222 Ref: 2817\7f436245
90223 Ref: 2818\7f436394
90224 Ref: 2819\7f436761
90225 Ref: 2820\7f436768
90226 Node: 4.5.4\7f437510
90227 Ref: 2821\7f437691
90228 Ref: 2822\7f437691
90229 Ref: 2823\7f437691
90230 Ref: 2824\7f437691
90231 Ref: 2825\7f437691
90232 Ref: 2826\7f437691
90233 Ref: 2827\7f437691
90234 Ref: 2828\7f437691
90235 Ref: 2829\7f437691
90236 Ref: 2830\7f437691
90237 Node: 4.5.5\7f438193
90238 Ref: 2831\7f438372
90239 Ref: 2832\7f438372
90240 Ref: 2833\7f438372
90241 Ref: 2834\7f438372
90242 Ref: 2835\7f438372
90243 Ref: 2836\7f438372
90244 Ref: 2837\7f438372
90245 Ref: 2838\7f438372
90246 Ref: 2839\7f438372
90247 Ref: 2840\7f438372
90248 Ref: 2841\7f438372
90249 Ref: 2842\7f438372
90250 Ref: 2843\7f438372
90251 Ref: 2844\7f438372
90252 Ref: 2845\7f438372
90253 Ref: 2846\7f438372
90254 Ref: 2847\7f442654
90255 Ref: 2848\7f442661
90256 Ref: 2849\7f442661
90257 Ref: 2850\7f442661
90258 Node: 4.5.6\7f445518
90259 Ref: 2851\7f445711
90260 Ref: 2852\7f445711
90261 Ref: 2853\7f445711
90262 Ref: 2854\7f445711
90263 Ref: 2855\7f445711
90264 Ref: 2856\7f445899
90265 Ref: 2857\7f445899
90266 Ref: 2858\7f445899
90267 Ref: 2859\7f446775
90268 Ref: 2860\7f446777
90269 Ref: 2861\7f446777
90270 Ref: 2862\7f446926
90271 Ref: 2863\7f446926
90272 Ref: 2864\7f446926
90273 Ref: 2865\7f446926
90274 Ref: 2866\7f447368
90275 Ref: 2867\7f447881
90276 Ref: 2868\7f448277
90277 Ref: 2869\7f448277
90278 Ref: 2870\7f448420
90279 Node: 4.5.7\7f448471
90280 Ref: 2871\7f449230
90281 Ref: S0133\7f449230
90282 Ref: 2872\7f449234
90283 Ref: 2873\7f449251
90284 Ref: 2874\7f449290
90285 Ref: S0134\7f449290
90286 Ref: 2875\7f449306
90287 Ref: 2876\7f449331
90288 Ref: 2877\7f449357
90289 Ref: 2878\7f449382
90290 Ref: 2879\7f449418
90291 Ref: 2880\7f449449
90292 Ref: S0135\7f449449
90293 Ref: 2881\7f449462
90294 Ref: 2882\7f449498
90295 Ref: S0136\7f449498
90296 Ref: 2883\7f449527
90297 Ref: 2884\7f449550
90298 Ref: 2885\7f449590
90299 Ref: 2886\7f449656
90300 Ref: S0137\7f449656
90301 Ref: 2887\7f449675
90302 Ref: 2888\7f449722
90303 Ref: 2889\7f450425
90304 Ref: 2890\7f451130
90305 Ref: 2891\7f451304
90306 Ref: 2892\7f451304
90307 Ref: 2893\7f451306
90308 Ref: 2894\7f452805
90309 Ref: 2895\7f453201
90310 Ref: 2896\7f453201
90311 Ref: 2897\7f453201
90312 Ref: 2898\7f453341
90313 Node: 4.5.8\7f453343
90314 Ref: 2899\7f453533
90315 Ref: S0138\7f453533
90316 Ref: 2900\7f453542
90317 Ref: 2901\7f453553
90318 Ref: 2902\7f453591
90319 Ref: 2903\7f453614
90320 Ref: 2904\7f453625
90321 Ref: 2905\7f453651
90322 Ref: 2906\7f453681
90323 Ref: S0139\7f453681
90324 Ref: 2907\7f453716
90325 Ref: S0140\7f453716
90326 Ref: 2908\7f453729
90327 Ref: 2909\7f453981
90328 Ref: 2910\7f454124
90329 Ref: 2911\7f454564
90330 Node: 4.6\7f455880
90331 Ref: 2912\7f456284
90332 Ref: 2913\7f456286
90333 Ref: 2914\7f456286
90334 Ref: 2915\7f456286
90335 Ref: 2916\7f456286
90336 Ref: 2917\7f456286
90337 Ref: 2918\7f456351
90338 Ref: S0141\7f456351
90339 Ref: 2919\7f456365
90340 Ref: 2920\7f456378
90341 Ref: 2921\7f456399
90342 Ref: 2922\7f456412
90343 Ref: 2923\7f456421
90344 Ref: 2924\7f456504
90345 Ref: 2925\7f456588
90346 Ref: 2926\7f456624
90347 Ref: 2927\7f456877
90348 Ref: 2928\7f456877
90349 Ref: 2929\7f457087
90350 Ref: 2930\7f457088
90351 Ref: 2931\7f457141
90352 Ref: 2932\7f457196
90353 Ref: 2933\7f457617
90354 Ref: 2934\7f457617
90355 Ref: 2935\7f457838
90356 Ref: 2936\7f457838
90357 Ref: 2937\7f458446
90358 Ref: 2938\7f458446
90359 Ref: 2939\7f458549
90360 Ref: 2940\7f458549
90361 Ref: 2941\7f458786
90362 Ref: 2942\7f458857
90363 Ref: 2943\7f459072
90364 Ref: 2944\7f459569
90365 Ref: 2945\7f459569
90366 Ref: 2946\7f460092
90367 Ref: 2947\7f460314
90368 Ref: 2948\7f460586
90369 Ref: 2949\7f461045
90370 Ref: 2950\7f461265
90371 Ref: 2951\7f461265
90372 Ref: 2952\7f461394
90373 Ref: 2953\7f461394
90374 Ref: 2954\7f461668
90375 Ref: 2955\7f461695
90376 Ref: 2956\7f461814
90377 Ref: 2957\7f462593
90378 Ref: 2958\7f462708
90379 Ref: 2959\7f462708
90380 Ref: 2960\7f462708
90381 Ref: 2961\7f462901
90382 Ref: 2962\7f462903
90383 Ref: 2963\7f462903
90384 Ref: 2964\7f463178
90385 Ref: 2965\7f463178
90386 Ref: 2966\7f463692
90387 Ref: 2967\7f464218
90388 Ref: 2968\7f464218
90389 Ref: 2969\7f464392
90390 Ref: 2970\7f464392
90391 Ref: 2971\7f464433
90392 Ref: 2972\7f464433
90393 Ref: 2973\7f464780
90394 Ref: 2974\7f464780
90395 Ref: 2975\7f465029
90396 Ref: 2976\7f465619
90397 Ref: 2977\7f465621
90398 Ref: 2978\7f465631
90399 Ref: 2979\7f465631
90400 Ref: 2980\7f465881
90401 Ref: 2981\7f465883
90402 Ref: 2982\7f466309
90403 Ref: 2983\7f466310
90404 Ref: 2984\7f466960
90405 Ref: 2985\7f466960
90406 Ref: 2986\7f467283
90407 Ref: 2987\7f467283
90408 Ref: 2988\7f467399
90409 Ref: 2989\7f467399
90410 Ref: 2990\7f468090
90411 Ref: 2991\7f468092
90412 Ref: 2992\7f468624
90413 Ref: 2993\7f468624
90414 Ref: 2994\7f468624
90415 Ref: 2995\7f468624
90416 Ref: 2996\7f468624
90417 Ref: 2997\7f468624
90418 Ref: 2998\7f468624
90419 Ref: 2999\7f468624
90420 Ref: 3000\7f469028
90421 Ref: 3001\7f469028
90422 Ref: 3002\7f469033
90423 Ref: 3003\7f469199
90424 Ref: 3004\7f469200
90425 Ref: 3005\7f469200
90426 Ref: 3006\7f469200
90427 Ref: 3007\7f469200
90428 Ref: 3008\7f469200
90429 Ref: 3009\7f470205
90430 Ref: 3010\7f470675
90431 Ref: 3011\7f470684
90432 Ref: 3012\7f470684
90433 Ref: 3013\7f470684
90434 Ref: 3014\7f471009
90435 Ref: 3015\7f471580
90436 Ref: 3016\7f471585
90437 Node: 4.7\7f473497
90438 Ref: 3017\7f473765
90439 Ref: 3018\7f473837
90440 Ref: S0142\7f473837
90441 Ref: 3019\7f473850
90442 Ref: 3020\7f473864
90443 Ref: 3021\7f473878
90444 Ref: 3022\7f473891
90445 Ref: 3023\7f473953
90446 Ref: 3024\7f474436
90447 Ref: 3025\7f474436
90448 Ref: 3026\7f474436
90449 Ref: 3027\7f474436
90450 Ref: 3028\7f474436
90451 Ref: 3029\7f474436
90452 Ref: 3030\7f474436
90453 Ref: 3031\7f474661
90454 Ref: 3032\7f474663
90455 Node: 4.8\7f475665
90456 Ref: 3033\7f475867
90457 Ref: 3034\7f475869
90458 Ref: 3035\7f475869
90459 Ref: 3036\7f475930
90460 Ref: S0143\7f475930
90461 Ref: 3037\7f475948
90462 Ref: 3038\7f475971
90463 Ref: 3039\7f476003
90464 Ref: 3040\7f476026
90465 Ref: 3041\7f476080
90466 Ref: S0144\7f476080
90467 Ref: 3042\7f476101
90468 Ref: 3043\7f476281
90469 Ref: 3044\7f476810
90470 Ref: 3045\7f476859
90471 Ref: 3046\7f476928
90472 Ref: 3047\7f477224
90473 Ref: 3048\7f478459
90474 Ref: 3049\7f479162
90475 Ref: 3050\7f479217
90476 Ref: 3051\7f479327
90477 Ref: 3052\7f479329
90478 Ref: 3053\7f479481
90479 Ref: 3054\7f479487
90480 Ref: 3055\7f479616
90481 Ref: 3056\7f480064
90482 Ref: 3057\7f480066
90483 Ref: 3058\7f480066
90484 Ref: 3059\7f480066
90485 Ref: 3060\7f480150
90486 Ref: 3061\7f480295
90487 Ref: 3062\7f481027
90488 Ref: 3063\7f481027
90489 Ref: 3064\7f481027
90490 Ref: 3065\7f481243
90491 Ref: 3066\7f481243
90492 Ref: 3067\7f481243
90493 Ref: 3068\7f481484
90494 Ref: 3069\7f481484
90495 Ref: 3070\7f481484
90496 Ref: 3071\7f481736
90497 Ref: 3072\7f481736
90498 Ref: 3073\7f481736
90499 Ref: 3074\7f481736
90500 Ref: 3075\7f481736
90501 Ref: 3076\7f481738
90502 Ref: 3077\7f481956
90503 Ref: 3078\7f482646
90504 Node: 4.9\7f483806
90505 Ref: 3079\7f484156
90506 Ref: 3080\7f484265
90507 Ref: 3081\7f484271
90508 Ref: 3082\7f485933
90509 Ref: 3083\7f486337
90510 Ref: 3084\7f486883
90511 Ref: 3085\7f487258
90512 Ref: 3086\7f487409
90513 Ref: 3087\7f487689
90514 Ref: 3088\7f487767
90515 Ref: 3089\7f487986
90516 Ref: 3090\7f488437
90517 Ref: 3091\7f488556
90518 Ref: 3092\7f488556
90519 Ref: 3093\7f488556
90520 Ref: 3094\7f488659
90521 Ref: 3095\7f488803
90522 Ref: 3096\7f489058
90523 Ref: 3097\7f489381
90524 Ref: 3098\7f491429
90525 Node: 4.9.1\7f493551
90526 Ref: 3099\7f493750
90527 Ref: 3100\7f494257
90528 Ref: 3101\7f494865
90529 Ref: 3102\7f495026
90530 Ref: 3103\7f495214
90531 Ref: 3104\7f495387
90532 Node: 5\7f496180
90533 Node: 5.1\7f497405
90534 Ref: 3105\7f497831
90535 Ref: S0145\7f497831
90536 Ref: 3106\7f497835
90537 Ref: 3107\7f497847
90538 Ref: 3108\7f497859
90539 Ref: 3109\7f497883
90540 Ref: S0146\7f497883
90541 Ref: 3110\7f497897
90542 Ref: 3111\7f497904
90543 Ref: 3112\7f497924
90544 Ref: 3113\7f497931
90545 Ref: 3114\7f497976
90546 Ref: S0147\7f497976
90547 Ref: 3115\7f497980
90548 Ref: 3116\7f498006
90549 Ref: 3117\7f498031
90550 Ref: 3118\7f498056
90551 Ref: 3119\7f498075
90552 Ref: 3120\7f498110
90553 Ref: 3121\7f498138
90554 Ref: 3122\7f498169
90555 Ref: 3123\7f498191
90556 Ref: 3124\7f498217
90557 Ref: 3125\7f498237
90558 Ref: 3126\7f498263
90559 Ref: 3127\7f498306
90560 Ref: S0148\7f498306
90561 Ref: 3128\7f498321
90562 Ref: 3129\7f498338
90563 Ref: 3130\7f498363
90564 Ref: 3131\7f498382
90565 Ref: 3132\7f498408
90566 Ref: 3133\7f498444
90567 Ref: 3134\7f498465
90568 Ref: 3135\7f498504
90569 Ref: S0149\7f498504
90570 Ref: 3136\7f498528
90571 Ref: S0150\7f498528
90572 Ref: 3137\7f498541
90573 Ref: 3138\7f498592
90574 Ref: S0151\7f498592
90575 Ref: 3139\7f498596
90576 Ref: 3140\7f499817
90577 Ref: 3141\7f499872
90578 Ref: 3142\7f500360
90579 Node: 5.2\7f501221
90580 Ref: 3143\7f501521
90581 Ref: S0152\7f501521
90582 Ref: 3144\7f501543
90583 Ref: 3145\7f501551
90584 Ref: 3146\7f501715
90585 Ref: 3147\7f501717
90586 Ref: 3148\7f501903
90587 Ref: 3149\7f501905
90588 Ref: 3150\7f502163
90589 Ref: 3151\7f502238
90590 Ref: 3152\7f502655
90591 Ref: 3153\7f502780
90592 Ref: 3154\7f502835
90593 Ref: 3155\7f502990
90594 Ref: 3156\7f502990
90595 Ref: 3157\7f502990
90596 Ref: 3158\7f503327
90597 Ref: 3159\7f503548
90598 Ref: 3160\7f503548
90599 Ref: 3161\7f503853
90600 Node: 5.3\7f505357
90601 Ref: 3162\7f505686
90602 Ref: S0153\7f505686
90603 Ref: 3163\7f505703
90604 Ref: 3164\7f505729
90605 Ref: 3165\7f505767
90606 Ref: 3166\7f505793
90607 Ref: 3167\7f505842
90608 Ref: 3168\7f505969
90609 Node: 5.4\7f506861
90610 Ref: 3169\7f507195
90611 Ref: S0154\7f507195
90612 Ref: 3170\7f507223
90613 Ref: 3171\7f507249
90614 Ref: 3172\7f507288
90615 Ref: 3173\7f507368
90616 Ref: S0155\7f507368
90617 Ref: 3174\7f507386
90618 Ref: 3175\7f507421
90619 Ref: 3176\7f507498
90620 Ref: 3177\7f507498
90621 Ref: 3178\7f507562
90622 Ref: 3179\7f508961
90623 Ref: 3180\7f509297
90624 Ref: 3181\7f509297
90625 Ref: 3182\7f509297
90626 Node: 5.5\7f510475
90627 Ref: 3183\7f510753
90628 Ref: S0156\7f510753
90629 Ref: 3184\7f510772
90630 Ref: 3185\7f510807
90631 Ref: 3186\7f510844
90632 Ref: 3187\7f510894
90633 Ref: 3188\7f510933
90634 Ref: S0157\7f510933
90635 Ref: 3189\7f510944
90636 Ref: 3190\7f510968
90637 Ref: 3191\7f511011
90638 Ref: 3192\7f511070
90639 Ref: S0158\7f511070
90640 Ref: 3193\7f511083
90641 Ref: 3194\7f511116
90642 Ref: 3195\7f511386
90643 Ref: 3196\7f511529
90644 Ref: 3197\7f511579
90645 Ref: 3198\7f511896
90646 Ref: 3199\7f512248
90647 Ref: 3200\7f512248
90648 Ref: 3201\7f512992
90649 Node: 5.5.1\7f515224
90650 Ref: 3202\7f515471
90651 Ref: 3203\7f515676
90652 Ref: 3204\7f515732
90653 Ref: 3205\7f515810
90654 Ref: 3206\7f515918
90655 Ref: 3207\7f515998
90656 Ref: 3208\7f516078
90657 Ref: 3209\7f516338
90658 Ref: 3210\7f516472
90659 Ref: 3211\7f516526
90660 Ref: 3212\7f516600
90661 Ref: 3213\7f516738
90662 Ref: 3214\7f517420
90663 Ref: 3215\7f517493
90664 Ref: 3216\7f517622
90665 Ref: 3217\7f517622
90666 Ref: 3218\7f517622
90667 Ref: 3219\7f517777
90668 Ref: 3220\7f517777
90669 Ref: 3221\7f517777
90670 Ref: 3222\7f517983
90671 Ref: 3223\7f518116
90672 Ref: 3224\7f518190
90673 Ref: 3225\7f518284
90674 Ref: 3226\7f518996
90675 Ref: 3227\7f519611
90676 Node: 5.5.2\7f519613
90677 Ref: 3228\7f519896
90678 Ref: S0159\7f519896
90679 Ref: 3229\7f519910
90680 Ref: 3230\7f519952
90681 Ref: 3231\7f519966
90682 Ref: 3232\7f519989
90683 Ref: 3233\7f520037
90684 Ref: 3234\7f520172
90685 Ref: 3235\7f520172
90686 Ref: 3236\7f520234
90687 Ref: 3237\7f520362
90688 Ref: 3238\7f520475
90689 Ref: 3239\7f520475
90690 Ref: 3240\7f520528
90691 Ref: 3241\7f520528
90692 Ref: 3242\7f520666
90693 Ref: 3243\7f520666
90694 Ref: 3244\7f520702
90695 Ref: 3245\7f520702
90696 Ref: 3246\7f521558
90697 Ref: 3247\7f522991
90698 Ref: 3248\7f523906
90699 Ref: 3249\7f524169
90700 Ref: 3250\7f525037
90701 Ref: 3251\7f525207
90702 Ref: 3252\7f525278
90703 Node: 5.6\7f526880
90704 Ref: 3253\7f527158
90705 Ref: S0160\7f527158
90706 Ref: 3254\7f527178
90707 Ref: 3255\7f527239
90708 Ref: 3256\7f527293
90709 Ref: 3257\7f527348
90710 Ref: 3258\7f527741
90711 Node: 5.7\7f528121
90712 Ref: 3259\7f528451
90713 Ref: S0161\7f528451
90714 Ref: 3260\7f528475
90715 Ref: 3261\7f528487
90716 Ref: 3262\7f528685
90717 Ref: 3263\7f529472
90718 Node: 5.8\7f530327
90719 Ref: 3264\7f530608
90720 Ref: S0162\7f530608
90721 Ref: 3265\7f530624
90722 Ref: 3266\7f530682
90723 Ref: 3267\7f531147
90724 Node: 6\7f532023
90725 Ref: 3268\7f532116
90726 Ref: 3269\7f532116
90727 Ref: 3270\7f532116
90728 Ref: 3271\7f532579
90729 Ref: 3272\7f532638
90730 Ref: 3273\7f532721
90731 Node: 6.1\7f533153
90732 Ref: 3274\7f533398
90733 Ref: S0163\7f533398
90734 Ref: 3275\7f533413
90735 Ref: 3276\7f533444
90736 Ref: 3277\7f533483
90737 Ref: 3278\7f533578
90738 Ref: S0164\7f533578
90739 Ref: 3279\7f533592
90740 Ref: 3280\7f533625
90741 Ref: 3281\7f533683
90742 Ref: S0165\7f533683
90743 Ref: 3282\7f533698
90744 Ref: 3283\7f533725
90745 Ref: 3284\7f533783
90746 Ref: S0166\7f533783
90747 Ref: 3285\7f533797
90748 Ref: 3286\7f533817
90749 Ref: 3287\7f533870
90750 Ref: S0167\7f533870
90751 Ref: 3288\7f533876
90752 Ref: 3289\7f533896
90753 Ref: 3290\7f533909
90754 Ref: 3291\7f533952
90755 Ref: S0168\7f533952
90756 Ref: 3292\7f533956
90757 Ref: 3293\7f533986
90758 Ref: 3294\7f534051
90759 Ref: S0169\7f534051
90760 Ref: 3295\7f534057
90761 Ref: 3296\7f534077
90762 Ref: 3297\7f534225
90763 Ref: S0170\7f534225
90764 Ref: 3298\7f534229
90765 Ref: 3299\7f534534
90766 Ref: S0171\7f534534
90767 Ref: 3300\7f534538
90768 Ref: 3301\7f534581
90769 Ref: S0172\7f534581
90770 Ref: 3302\7f534587
90771 Ref: 3303\7f534639
90772 Ref: S0173\7f534639
90773 Ref: 3304\7f534654
90774 Ref: 3305\7f534675
90775 Ref: 3306\7f534691
90776 Ref: 3307\7f534714
90777 Ref: 3308\7f534734
90778 Ref: 3309\7f534772
90779 Ref: S0174\7f534772
90780 Ref: 3310\7f534786
90781 Ref: 3311\7f534813
90782 Ref: 3312\7f534873
90783 Ref: S0175\7f534873
90784 Ref: 3313\7f534887
90785 Ref: 3314\7f534924
90786 Ref: 3315\7f534930
90787 Ref: 3316\7f534946
90788 Ref: 3317\7f534969
90789 Ref: 3318\7f534998
90790 Ref: 3319\7f535025
90791 Ref: 3320\7f535047
90792 Ref: 3321\7f535086
90793 Ref: S0176\7f535086
90794 Ref: 3322\7f535164
90795 Ref: 3323\7f535355
90796 Ref: 3324\7f535467
90797 Ref: 3325\7f535521
90798 Ref: 3326\7f535854
90799 Ref: 3327\7f535854
90800 Ref: 3328\7f536507
90801 Ref: 3329\7f537137
90802 Ref: 3330\7f537521
90803 Ref: 3331\7f537532
90804 Ref: 3332\7f537532
90805 Ref: 3333\7f537658
90806 Ref: 3334\7f537737
90807 Ref: 3335\7f538162
90808 Ref: 3336\7f538877
90809 Ref: 3337\7f539731
90810 Node: 6.1.1\7f541509
90811 Ref: 3338\7f541977
90812 Ref: 3339\7f541977
90813 Ref: 3340\7f542140
90814 Ref: 3341\7f542140
90815 Ref: 3342\7f542403
90816 Ref: 3343\7f542403
90817 Ref: 3344\7f542632
90818 Ref: 3345\7f542632
90819 Ref: 3346\7f542841
90820 Ref: 3347\7f542841
90821 Ref: 3348\7f543005
90822 Ref: 3349\7f543005
90823 Ref: 3350\7f543271
90824 Ref: 3351\7f543271
90825 Ref: 3352\7f543422
90826 Ref: 3353\7f543422
90827 Ref: 3354\7f543562
90828 Ref: 3355\7f543562
90829 Ref: 3356\7f545289
90830 Ref: 3357\7f546263
90831 Ref: 3358\7f546263
90832 Ref: 3359\7f546331
90833 Ref: 3360\7f546718
90834 Ref: 3361\7f546733
90835 Ref: 3362\7f547322
90836 Ref: 3363\7f548067
90837 Ref: 3364\7f548082
90838 Ref: 3365\7f549409
90839 Ref: 3366\7f549409
90840 Ref: 3367\7f549409
90841 Ref: 3368\7f549708
90842 Ref: 3369\7f549708
90843 Ref: 3370\7f549708
90844 Ref: 3371\7f550278
90845 Ref: 3372\7f550278
90846 Ref: 3373\7f551031
90847 Ref: 3374\7f551031
90848 Ref: 3375\7f551031
90849 Ref: 3376\7f551031
90850 Ref: 3377\7f551031
90851 Node: 6.2\7f552701
90852 Ref: 3378\7f552955
90853 Ref: 3379\7f552955
90854 Ref: 3380\7f552955
90855 Ref: 3381\7f552955
90856 Ref: 3382\7f552955
90857 Ref: 3383\7f552955
90858 Ref: 3384\7f553442
90859 Ref: 3385\7f553678
90860 Ref: 3386\7f554104
90861 Ref: 3387\7f554405
90862 Ref: 3388\7f554559
90863 Ref: 3389\7f554559
90864 Ref: 3390\7f554559
90865 Ref: 3391\7f554559
90866 Ref: 3392\7f555227
90867 Node: 6.3\7f555514
90868 Ref: 3393\7f555752
90869 Ref: S0177\7f555752
90870 Ref: 3394\7f555767
90871 Ref: 3395\7f555798
90872 Ref: 3396\7f555836
90873 Ref: 3397\7f555873
90874 Ref: 3398\7f555918
90875 Ref: 3399\7f555963
90876 Ref: 3400\7f556546
90877 Ref: 3401\7f556799
90878 Ref: 3402\7f556974
90879 Node: 6.3.1\7f557911
90880 Ref: 3403\7f558022
90881 Ref: 3404\7f558022
90882 Ref: 3405\7f558022
90883 Ref: 3406\7f558022
90884 Ref: 3407\7f558022
90885 Ref: 3408\7f558260
90886 Ref: 3409\7f558260
90887 Ref: 3410\7f558634
90888 Ref: 3411\7f558634
90889 Ref: 3412\7f558829
90890 Ref: 3413\7f558829
90891 Ref: 3414\7f559709
90892 Ref: 3415\7f559709
90893 Ref: 3416\7f559889
90894 Ref: 3417\7f559889
90895 Ref: 3418\7f560715
90896 Ref: 3419\7f560715
90897 Ref: 3420\7f561037
90898 Ref: 3421\7f561046
90899 Ref: 3422\7f561046
90900 Ref: 3423\7f561483
90901 Ref: 3424\7f561492
90902 Ref: 3425\7f561492
90903 Ref: 3426\7f561759
90904 Ref: 3427\7f561768
90905 Ref: 3428\7f561768
90906 Ref: 3429\7f562299
90907 Ref: 3430\7f563174
90908 Ref: 3431\7f563429
90909 Ref: 3432\7f563436
90910 Ref: 3433\7f563686
90911 Node: 6.3.2\7f564205
90912 Ref: 3434\7f565053
90913 Ref: 3435\7f565053
90914 Node: 6.4\7f565435
90915 Ref: 3436\7f565546
90916 Ref: 3437\7f565855
90917 Ref: S0178\7f565855
90918 Ref: 3438\7f565879
90919 Ref: 3439\7f565904
90920 Ref: 3440\7f565911
90921 Ref: 3441\7f565955
90922 Ref: S0179\7f565955
90923 Ref: 3442\7f565978
90924 Ref: 3443\7f566001
90925 Ref: 3444\7f566008
90926 Ref: 3445\7f566059
90927 Ref: S0180\7f566059
90928 Ref: 3446\7f566074
90929 Ref: 3447\7f566099
90930 Ref: 3448\7f566152
90931 Ref: S0181\7f566152
90932 Ref: 3449\7f566183
90933 Ref: 3450\7f566201
90934 Ref: 3451\7f566260
90935 Ref: S0182\7f566260
90936 Ref: 3452\7f566264
90937 Ref: 3453\7f566287
90938 Ref: 3454\7f566295
90939 Ref: 3455\7f566300
90940 Ref: 3456\7f567582
90941 Ref: 3457\7f568234
90942 Ref: 3458\7f568668
90943 Ref: 3459\7f568971
90944 Ref: 3460\7f568973
90945 Node: 6.4.1\7f571231
90946 Ref: 3461\7f571338
90947 Ref: 3462\7f571675
90948 Ref: 3463\7f571676
90949 Ref: 3464\7f571676
90950 Ref: 3465\7f571676
90951 Ref: 3466\7f571903
90952 Ref: 3467\7f572129
90953 Ref: 3468\7f573219
90954 Ref: 3469\7f574500
90955 Ref: 3470\7f576740
90956 Ref: 3471\7f577205
90957 Ref: 3472\7f577217
90958 Ref: 3473\7f577469
90959 Ref: 3474\7f578943
90960 Ref: 3475\7f578943
90961 Ref: 3476\7f579092
90962 Ref: 3477\7f579092
90963 Ref: 3478\7f579092
90964 Ref: 3479\7f579092
90965 Ref: 3480\7f579092
90966 Ref: 3481\7f579329
90967 Ref: 3482\7f579393
90968 Ref: 3483\7f579448
90969 Node: 6.5\7f579785
90970 Ref: 3484\7f580035
90971 Ref: 3485\7f580286
90972 Ref: S0183\7f580286
90973 Ref: S0184\7f580286
90974 Ref: 3486\7f580299
90975 Ref: 3487\7f580358
90976 Ref: S0185\7f580358
90977 Ref: 3488\7f580372
90978 Ref: 3489\7f580414
90979 Ref: 3490\7f580450
90980 Ref: 3491\7f580499
90981 Ref: S0186\7f580499
90982 Ref: 3492\7f580520
90983 Ref: 3493\7f580572
90984 Ref: 3494\7f580662
90985 Ref: S0187\7f580662
90986 Ref: 3495\7f580666
90987 Ref: 3496\7f580688
90988 Ref: 3497\7f580766
90989 Ref: 3498\7f580942
90990 Ref: 3499\7f581088
90991 Ref: 3500\7f581271
90992 Ref: 3501\7f582543
90993 Ref: 3502\7f584436
90994 Ref: 3503\7f584831
90995 Ref: 3504\7f585132
90996 Ref: 3505\7f585455
90997 Ref: 3506\7f585455
90998 Ref: 3507\7f585597
90999 Ref: 3508\7f585597
91000 Ref: 3509\7f585599
91001 Ref: 3510\7f585605
91002 Ref: 3511\7f585802
91003 Ref: 3512\7f585804
91004 Ref: 3513\7f586460
91005 Ref: 3514\7f586460
91006 Ref: 3515\7f586462
91007 Ref: 3516\7f586470
91008 Ref: 3517\7f586470
91009 Ref: 3518\7f586696
91010 Ref: 3519\7f587326
91011 Ref: 3520\7f587328
91012 Ref: 3521\7f587328
91013 Node: 6.5.1\7f589655
91014 Ref: 3522\7f590355
91015 Ref: 3523\7f590355
91016 Ref: 3524\7f590355
91017 Ref: 3525\7f591099
91018 Ref: 3526\7f591572
91019 Node: 6.6\7f591791
91020 Ref: 3527\7f591918
91021 Ref: 3528\7f591918
91022 Ref: 3529\7f591918
91023 Ref: 3530\7f593197
91024 Node: 6.7\7f593715
91025 Ref: 3531\7f593996
91026 Ref: S0188\7f593996
91027 Ref: 3532\7f594010
91028 Ref: 3533\7f594040
91029 Ref: 3534\7f594085
91030 Ref: 3535\7f594420
91031 Ref: 3536\7f594527
91032 Ref: 3537\7f594527
91033 Ref: 3538\7f594903
91034 Node: 6.8\7f595288
91035 Ref: 3539\7f595607
91036 Ref: S0189\7f595607
91037 Ref: 3540\7f595621
91038 Ref: 3541\7f595651
91039 Ref: 3542\7f595690
91040 Ref: 3543\7f595715
91041 Ref: 3544\7f595940
91042 Ref: 3545\7f596303
91043 Ref: 3546\7f596791
91044 Ref: 3547\7f596791
91045 Ref: 3548\7f597345
91046 Node: 7\7f597698
91047 Ref: 3549\7f597785
91048 Ref: 3550\7f598155
91049 Ref: 3551\7f598157
91050 Ref: 3552\7f598157
91051 Ref: 3553\7f598157
91052 Node: 7.1\7f598406
91053 Ref: 3554\7f598795
91054 Ref: S0190\7f598795
91055 Ref: 3555\7f598799
91056 Ref: 3556\7f598854
91057 Ref: S0191\7f598854
91058 Ref: 3557\7f598876
91059 Ref: 3558\7f598917
91060 Ref: 3559\7f598954
91061 Ref: 3560\7f599007
91062 Ref: 3561\7f599047
91063 Ref: 3562\7f599065
91064 Ref: 3563\7f599324
91065 Ref: 3564\7f599324
91066 Ref: 3565\7f599587
91067 Ref: 3566\7f599747
91068 Ref: 3567\7f600100
91069 Ref: 3568\7f600564
91070 Node: 7.2\7f601863
91071 Ref: 3569\7f602413
91072 Ref: S0192\7f602413
91073 Ref: 3570\7f602440
91074 Ref: 3571\7f602481
91075 Ref: 3572\7f602518
91076 Ref: 3573\7f602563
91077 Ref: 3574\7f602610
91078 Ref: 3575\7f602628
91079 Ref: 3576\7f603954
91080 Ref: 3577\7f604245
91081 Node: 7.3\7f606396
91082 Ref: 3578\7f606948
91083 Ref: 3579\7f606950
91084 Ref: 3580\7f606950
91085 Ref: 3581\7f606950
91086 Ref: 3582\7f606950
91087 Ref: 3583\7f607026
91088 Ref: S0193\7f607026
91089 Ref: 3584\7f607044
91090 Ref: 3585\7f607065
91091 Ref: 3586\7f607143
91092 Ref: 3587\7f607205
91093 Ref: S0194\7f607205
91094 Ref: 3588\7f607223
91095 Ref: 3589\7f607244
91096 Ref: 3590\7f607325
91097 Ref: 3591\7f607365
91098 Ref: 3592\7f607407
91099 Ref: 3593\7f607478
91100 Ref: 3594\7f607478
91101 Ref: 3595\7f609698
91102 Ref: 3596\7f610185
91103 Ref: 3597\7f610663
91104 Ref: 3598\7f611793
91105 Ref: 3599\7f611846
91106 Ref: 3600\7f611919
91107 Ref: 3601\7f613387
91108 Ref: 3602\7f613466
91109 Node: 7.3.1\7f615836
91110 Ref: 3603\7f616144
91111 Ref: 3604\7f617708
91112 Ref: 3605\7f617708
91113 Ref: 3606\7f617708
91114 Ref: 3607\7f618114
91115 Ref: 3608\7f619272
91116 Ref: 3609\7f620369
91117 Ref: 3610\7f620384
91118 Node: 7.3.2\7f624135
91119 Ref: 3611\7f624522
91120 Ref: 3612\7f624858
91121 Ref: 3613\7f624858
91122 Ref: 3614\7f625185
91123 Ref: 3615\7f625185
91124 Ref: 3616\7f625306
91125 Ref: 3617\7f626302
91126 Ref: 3618\7f626302
91127 Ref: 3619\7f628160
91128 Ref: 3620\7f628445
91129 Node: 7.4\7f629608
91130 Ref: 3621\7f630030
91131 Ref: 3622\7f630152
91132 Ref: 3623\7f630241
91133 Ref: 3624\7f630486
91134 Ref: 3625\7f632077
91135 Node: 7.5\7f632881
91136 Ref: 3626\7f634702
91137 Ref: 3627\7f635091
91138 Ref: 3628\7f635257
91139 Ref: 3629\7f635257
91140 Ref: 3630\7f636316
91141 Ref: 3631\7f636316
91142 Ref: 3632\7f636316
91143 Node: 7.6\7f638741
91144 Ref: 3633\7f638862
91145 Ref: 3634\7f638862
91146 Ref: 3635\7f639431
91147 Ref: 3636\7f639433
91148 Ref: 3637\7f639433
91149 Ref: 3638\7f639529
91150 Ref: 3639\7f639613
91151 Ref: 3640\7f639615
91152 Ref: 3641\7f639615
91153 Ref: 3642\7f640163
91154 Ref: 3643\7f640219
91155 Ref: 3644\7f640340
91156 Ref: 3645\7f640408
91157 Ref: 3646\7f640476
91158 Ref: 3647\7f640544
91159 Ref: 3648\7f640689
91160 Ref: 3649\7f640765
91161 Ref: 3650\7f640913
91162 Ref: 3651\7f641380
91163 Ref: 3652\7f641380
91164 Ref: 3653\7f642488
91165 Ref: 3654\7f643047
91166 Ref: 3655\7f643292
91167 Ref: 3656\7f643292
91168 Ref: 3657\7f643335
91169 Ref: 3658\7f643335
91170 Ref: 3659\7f643530
91171 Ref: 3660\7f643672
91172 Ref: 3661\7f644621
91173 Ref: 3662\7f644621
91174 Ref: 3663\7f645168
91175 Ref: 3664\7f645192
91176 Ref: 3665\7f645524
91177 Node: 7.6.1\7f648384
91178 Ref: 3666\7f648846
91179 Ref: 3667\7f648848
91180 Ref: 3668\7f648901
91181 Ref: 3669\7f648901
91182 Ref: 3670\7f649075
91183 Ref: 3671\7f649077
91184 Ref: 3672\7f649077
91185 Ref: 3673\7f649077
91186 Ref: 3674\7f649440
91187 Ref: 3675\7f649440
91188 Ref: 3676\7f649611
91189 Ref: 3677\7f650085
91190 Ref: 3678\7f650586
91191 Ref: 3679\7f651339
91192 Ref: 3680\7f651861
91193 Ref: 3681\7f652502
91194 Ref: 3682\7f652502
91195 Ref: 3683\7f652504
91196 Ref: 3684\7f652572
91197 Ref: 3685\7f652920
91198 Ref: 3686\7f653345
91199 Ref: 3687\7f654496
91200 Ref: 3688\7f654734
91201 Ref: 3689\7f655188
91202 Ref: 3690\7f655363
91203 Ref: 3691\7f655603
91204 Ref: 3692\7f655838
91205 Ref: 3693\7f657375
91206 Node: 8\7f658637
91207 Node: 8.1\7f659739
91208 Ref: 3694\7f659888
91209 Ref: 3695\7f661130
91210 Ref: 3696\7f661130
91211 Ref: 3697\7f661130
91212 Ref: 3698\7f661130
91213 Ref: 3699\7f661130
91214 Ref: 3700\7f661409
91215 Ref: 3701\7f661657
91216 Node: 8.2\7f663050
91217 Ref: 3702\7f663633
91218 Ref: 3703\7f664470
91219 Ref: 3704\7f664476
91220 Ref: 3705\7f664616
91221 Ref: 3706\7f664973
91222 Ref: 3707\7f665045
91223 Ref: 3708\7f665248
91224 Ref: 3709\7f665826
91225 Ref: 3710\7f666246
91226 Ref: 3711\7f666493
91227 Ref: 3712\7f666498
91228 Ref: 3713\7f666613
91229 Node: 8.3\7f667272
91230 Ref: 3714\7f667371
91231 Ref: 3715\7f667621
91232 Ref: 3716\7f667621
91233 Ref: 3717\7f667621
91234 Ref: 3718\7f667929
91235 Ref: 3719\7f668337
91236 Ref: 3720\7f668337
91237 Ref: 3721\7f668419
91238 Ref: 3722\7f668543
91239 Ref: 3723\7f668674
91240 Ref: 3724\7f668792
91241 Ref: 3725\7f668903
91242 Ref: 3726\7f669029
91243 Ref: 3727\7f669170
91244 Ref: 3728\7f669308
91245 Ref: 3729\7f669443
91246 Ref: 3730\7f669667
91247 Ref: 3731\7f669699
91248 Ref: 3732\7f671362
91249 Ref: 3733\7f671992
91250 Ref: 3734\7f671992
91251 Ref: 3735\7f672097
91252 Ref: 3736\7f672215
91253 Ref: 3737\7f673147
91254 Ref: 3738\7f673686
91255 Ref: 3739\7f674854
91256 Ref: 3740\7f674854
91257 Ref: 3741\7f674854
91258 Ref: 3742\7f674854
91259 Ref: 3743\7f675001
91260 Ref: 3744\7f675068
91261 Ref: 3745\7f675256
91262 Ref: 3746\7f675355
91263 Ref: 3747\7f675412
91264 Ref: 3748\7f675506
91265 Ref: 3749\7f675626
91266 Ref: 3750\7f676775
91267 Ref: 3751\7f677119
91268 Node: 8.3.1\7f678024
91269 Ref: 3752\7f678329
91270 Ref: S0195\7f678329
91271 Ref: 3753\7f679227
91272 Node: 8.4\7f680662
91273 Ref: 3754\7f681015
91274 Ref: S0196\7f681015
91275 Ref: 3755\7f681019
91276 Ref: 3756\7f681041
91277 Ref: 3757\7f681083
91278 Ref: S0197\7f681083
91279 Ref: 3758\7f681100
91280 Ref: 3759\7f681116
91281 Ref: 3760\7f681148
91282 Ref: S0198\7f681148
91283 Ref: 3761\7f681168
91284 Ref: 3762\7f681184
91285 Ref: 3763\7f681382
91286 Ref: 3764\7f682385
91287 Ref: 3765\7f682391
91288 Ref: 3766\7f683493
91289 Ref: 3767\7f683493
91290 Ref: 3768\7f683969
91291 Node: 8.5\7f684294
91292 Ref: 3769\7f684728
91293 Ref: S0199\7f684728
91294 Ref: 3770\7f684744
91295 Ref: 3771\7f684783
91296 Ref: 3772\7f684825
91297 Ref: 3773\7f684865
91298 Ref: 3774\7f684908
91299 Ref: 3775\7f684987
91300 Ref: 3776\7f685150
91301 Ref: 3777\7f685151
91302 Node: 8.5.1\7f686394
91303 Ref: 3778\7f686665
91304 Ref: S0200\7f686665
91305 Ref: 3779\7f686679
91306 Ref: 3780\7f686702
91307 Ref: 3781\7f686718
91308 Ref: 3782\7f686752
91309 Ref: 3783\7f686771
91310 Ref: 3784\7f686803
91311 Ref: 3785\7f686825
91312 Ref: 3786\7f686858
91313 Ref: 3787\7f686877
91314 Ref: 3788\7f687873
91315 Ref: 3789\7f687977
91316 Ref: 3790\7f688494
91317 Ref: 3791\7f688944
91318 Node: 8.5.2\7f689858
91319 Ref: 3792\7f690158
91320 Ref: S0201\7f690158
91321 Ref: 3793\7f690162
91322 Ref: 3794\7f690218
91323 Ref: 3795\7f690232
91324 Node: 8.5.3\7f690635
91325 Ref: 3796\7f690923
91326 Ref: S0202\7f690923
91327 Ref: 3797\7f690936
91328 Ref: 3798\7f690985
91329 Ref: 3799\7f690999
91330 Node: 8.5.4\7f691908
91331 Ref: 3800\7f692155
91332 Ref: 3801\7f692213
91333 Ref: 3802\7f692475
91334 Ref: S0203\7f692475
91335 Ref: 3803\7f692490
91336 Ref: 3804\7f692521
91337 Ref: 3805\7f692570
91338 Ref: 3806\7f692589
91339 Ref: 3807\7f692664
91340 Ref: 3808\7f692926
91341 Ref: 3809\7f693589
91342 Ref: 3810\7f693864
91343 Ref: 3811\7f693998
91344 Ref: 3812\7f694281
91345 Ref: 3813\7f696197
91346 Ref: 3814\7f696197
91347 Node: 8.5.5\7f699142
91348 Ref: 3815\7f699421
91349 Ref: S0204\7f699421
91350 Ref: 3816\7f699453
91351 Ref: 3817\7f699510
91352 Ref: 3818\7f699529
91353 Ref: 3819\7f699581
91354 Ref: 3820\7f699640
91355 Ref: 3821\7f699659
91356 Ref: 3822\7f699710
91357 Ref: 3823\7f699768
91358 Ref: 3824\7f699787
91359 Node: 8.6\7f700614
91360 Ref: 3825\7f700751
91361 Ref: 3826\7f701027
91362 Ref: 3827\7f701630
91363 Ref: 3828\7f702021
91364 Ref: 3829\7f702359
91365 Ref: 3830\7f702359
91366 Ref: 3831\7f703002
91367 Ref: 3832\7f703088
91368 Ref: 3833\7f703090
91369 Ref: 3834\7f703090
91370 Ref: 3835\7f703318
91371 Ref: 3836\7f703619
91372 Ref: 3837\7f703814
91373 Ref: 3838\7f704606
91374 Ref: 3839\7f704992
91375 Ref: 3840\7f705189
91376 Ref: 3841\7f705342
91377 Ref: 3842\7f705342
91378 Ref: 3843\7f705599
91379 Ref: 3844\7f706529
91380 Ref: 3845\7f706666
91381 Ref: 3846\7f706797
91382 Ref: 3847\7f706851
91383 Ref: 3848\7f707586
91384 Ref: 3849\7f707586
91385 Ref: 3850\7f708125
91386 Ref: 3851\7f708938
91387 Ref: 3852\7f709232
91388 Ref: 3853\7f709634
91389 Node: 9\7f710437
91390 Ref: 3854\7f710561
91391 Ref: 3855\7f710640
91392 Ref: 3856\7f710642
91393 Ref: 3857\7f710874
91394 Ref: 3858\7f710875
91395 Ref: 3859\7f710875
91396 Ref: 3860\7f710875
91397 Ref: 3861\7f710934
91398 Ref: 3862\7f712095
91399 Ref: 3863\7f712339
91400 Ref: 3864\7f712341
91401 Ref: 3865\7f712341
91402 Ref: 3866\7f712341
91403 Ref: 3867\7f712341
91404 Ref: 3868\7f712341
91405 Ref: 3869\7f712341
91406 Ref: 3870\7f712341
91407 Ref: 3871\7f712489
91408 Node: 9.1\7f713562
91409 Ref: 3872\7f713683
91410 Ref: 3873\7f714092
91411 Ref: S0205\7f714092
91412 Ref: 3874\7f714115
91413 Ref: 3875\7f714136
91414 Ref: 3876\7f714175
91415 Ref: 3877\7f714216
91416 Ref: 3878\7f714247
91417 Ref: 3879\7f714298
91418 Ref: S0206\7f714298
91419 Ref: 3880\7f714316
91420 Ref: 3881\7f714351
91421 Ref: 3882\7f714391
91422 Ref: 3883\7f714422
91423 Ref: 3884\7f714463
91424 Ref: S0207\7f714463
91425 Ref: 3885\7f714479
91426 Ref: 3886\7f714518
91427 Ref: 3887\7f714547
91428 Ref: 3888\7f714578
91429 Ref: S0208\7f714578
91430 Ref: 3889\7f714582
91431 Ref: 3890\7f714603
91432 Ref: 3891\7f714636
91433 Ref: S0209\7f714636
91434 Ref: 3892\7f714659
91435 Ref: 3893\7f714693
91436 Ref: 3894\7f714728
91437 Ref: 3895\7f714769
91438 Ref: 3896\7f714818
91439 Ref: 3897\7f715095
91440 Ref: 3898\7f715283
91441 Ref: 3899\7f716323
91442 Ref: 3900\7f716324
91443 Ref: 3901\7f716324
91444 Ref: 3902\7f716377
91445 Ref: 3903\7f717018
91446 Ref: 3904\7f717382
91447 Ref: 3905\7f717577
91448 Ref: 3906\7f717658
91449 Ref: 3907\7f717869
91450 Ref: 3908\7f717938
91451 Ref: 3909\7f718060
91452 Ref: 3910\7f718227
91453 Ref: 3911\7f718478
91454 Node: 9.2\7f721318
91455 Ref: 3912\7f721508
91456 Ref: 3913\7f721610
91457 Ref: 3914\7f721612
91458 Ref: 3915\7f721612
91459 Ref: 3916\7f721612
91460 Ref: 3917\7f721757
91461 Ref: 3918\7f723706
91462 Ref: 3919\7f723706
91463 Ref: 3920\7f723863
91464 Node: 9.3\7f725456
91465 Ref: 3921\7f725658
91466 Ref: 3922\7f725658
91467 Ref: 3923\7f725658
91468 Ref: 3924\7f725658
91469 Ref: 3925\7f726471
91470 Ref: 3926\7f726969
91471 Node: 9.4\7f729871
91472 Ref: 3927\7f730024
91473 Ref: 3928\7f730024
91474 Ref: 3929\7f730024
91475 Ref: 3930\7f730024
91476 Ref: 3931\7f730194
91477 Ref: 3932\7f730196
91478 Ref: 3933\7f730196
91479 Ref: 3934\7f730577
91480 Ref: 3935\7f730657
91481 Ref: S0210\7f730657
91482 Ref: 3936\7f730684
91483 Ref: 3937\7f730705
91484 Ref: 3938\7f730744
91485 Ref: 3939\7f730784
91486 Ref: 3940\7f730815
91487 Ref: 3941\7f730875
91488 Ref: S0211\7f730875
91489 Ref: 3942\7f730897
91490 Ref: 3943\7f730931
91491 Ref: 3944\7f730971
91492 Ref: 3945\7f731002
91493 Ref: 3946\7f731052
91494 Ref: S0212\7f731052
91495 Ref: 3947\7f731068
91496 Ref: 3948\7f731128
91497 Ref: 3949\7f731184
91498 Ref: 3950\7f731237
91499 Ref: S0213\7f731237
91500 Ref: 3951\7f731241
91501 Ref: 3952\7f731277
91502 Ref: 3953\7f731307
91503 Ref: 3954\7f731358
91504 Ref: S0214\7f731358
91505 Ref: 3955\7f731362
91506 Ref: 3956\7f731407
91507 Ref: 3957\7f731453
91508 Ref: S0215\7f731453
91509 Ref: 3958\7f731480
91510 Ref: 3959\7f731514
91511 Ref: 3960\7f731549
91512 Ref: 3961\7f731598
91513 Ref: 3962\7f731645
91514 Ref: S0216\7f731645
91515 Ref: 3963\7f731649
91516 Ref: 3964\7f731685
91517 Ref: 3965\7f731713
91518 Ref: 3966\7f731736
91519 Ref: 3967\7f732048
91520 Ref: 3968\7f732281
91521 Ref: 3969\7f733342
91522 Ref: 3970\7f733343
91523 Ref: 3971\7f733343
91524 Ref: 3972\7f733343
91525 Ref: 3973\7f733399
91526 Ref: 3974\7f734150
91527 Ref: 3975\7f734526
91528 Ref: 3976\7f734775
91529 Ref: 3977\7f734857
91530 Ref: 3978\7f735787
91531 Ref: 3979\7f735997
91532 Ref: 3980\7f736076
91533 Ref: 3981\7f736209
91534 Ref: 3982\7f736425
91535 Ref: 3983\7f736543
91536 Ref: 3984\7f736956
91537 Ref: 3985\7f737412
91538 Ref: 3986\7f737412
91539 Ref: 3987\7f737717
91540 Node: 9.5\7f740350
91541 Ref: 3988\7f740475
91542 Ref: 3989\7f740475
91543 Ref: 3990\7f740984
91544 Ref: 3991\7f741485
91545 Ref: 3992\7f741729
91546 Ref: 3993\7f742671
91547 Ref: 3994\7f742671
91548 Ref: 3995\7f742671
91549 Ref: 3996\7f743663
91550 Ref: S0217\7f743663
91551 Ref: 3997\7f744086
91552 Ref: 3998\7f744086
91553 Ref: 3999\7f745273
91554 Node: 9.5.1\7f745727
91555 Ref: 4000\7f745890
91556 Ref: 4001\7f745890
91557 Ref: 4002\7f745890
91558 Ref: 4003\7f746688
91559 Ref: 4004\7f747353
91560 Ref: 4005\7f747662
91561 Ref: 4006\7f747662
91562 Ref: 4007\7f747974
91563 Ref: 4008\7f747974
91564 Ref: 4009\7f748364
91565 Ref: 4010\7f748465
91566 Ref: 4011\7f748467
91567 Ref: 4012\7f748957
91568 Node: 9.5.2\7f751272
91569 Ref: 4013\7f751648
91570 Ref: S0218\7f751648
91571 Ref: 4014\7f751662
91572 Ref: 4015\7f751698
91573 Ref: 4016\7f751720
91574 Ref: 4017\7f751750
91575 Ref: 4018\7f751786
91576 Ref: 4019\7f751833
91577 Ref: S0219\7f751833
91578 Ref: 4020\7f751859
91579 Ref: 4021\7f751873
91580 Ref: 4022\7f751887
91581 Ref: 4023\7f751919
91582 Ref: 4024\7f751969
91583 Ref: 4025\7f752002
91584 Ref: S0220\7f752002
91585 Ref: 4026\7f752006
91586 Ref: 4027\7f752036
91587 Ref: S0221\7f752036
91588 Ref: 4028\7f752054
91589 Ref: 4029\7f752075
91590 Ref: 4030\7f752099
91591 Ref: 4031\7f752131
91592 Ref: 4032\7f752170
91593 Ref: 4033\7f752219
91594 Ref: 4034\7f752262
91595 Ref: S0222\7f752262
91596 Ref: 4035\7f752269
91597 Ref: 4036\7f752297
91598 Ref: 4037\7f752342
91599 Ref: S0223\7f752342
91600 Ref: 4038\7f752352
91601 Ref: 4039\7f752395
91602 Ref: S0224\7f752395
91603 Ref: 4040\7f752404
91604 Ref: 4041\7f752427
91605 Ref: 4042\7f753024
91606 Ref: 4043\7f753150
91607 Ref: 4044\7f754411
91608 Ref: 4045\7f754938
91609 Ref: 4046\7f755404
91610 Ref: 4047\7f755497
91611 Ref: 4048\7f755631
91612 Ref: 4049\7f755746
91613 Ref: 4050\7f756194
91614 Ref: 4051\7f756552
91615 Ref: 4052\7f756552
91616 Ref: 4053\7f756552
91617 Ref: 4054\7f757010
91618 Ref: 4055\7f757012
91619 Ref: 4056\7f757291
91620 Ref: 4057\7f757429
91621 Ref: 4058\7f757964
91622 Ref: 4059\7f758164
91623 Ref: 4060\7f758166
91624 Ref: 4061\7f758166
91625 Ref: 4062\7f758792
91626 Ref: 4063\7f759176
91627 Node: 9.5.3\7f761421
91628 Ref: 4064\7f761534
91629 Ref: 4065\7f761605
91630 Ref: 4066\7f761607
91631 Ref: 4067\7f761890
91632 Ref: S0225\7f761890
91633 Ref: 4068\7f761901
91634 Ref: 4069\7f761907
91635 Ref: 4070\7f762460
91636 Ref: 4071\7f762460
91637 Ref: 4072\7f762460
91638 Ref: 4073\7f762460
91639 Ref: 4074\7f762603
91640 Ref: 4075\7f762603
91641 Ref: 4076\7f762890
91642 Ref: 4077\7f762890
91643 Ref: 4078\7f763052
91644 Ref: 4079\7f763232
91645 Ref: 4080\7f763381
91646 Ref: 4081\7f763578
91647 Ref: 4082\7f764587
91648 Ref: 4083\7f764728
91649 Ref: 4084\7f764728
91650 Ref: 4085\7f765343
91651 Ref: 4086\7f765634
91652 Ref: 4087\7f765738
91653 Ref: 4088\7f765740
91654 Ref: 4089\7f766247
91655 Ref: 4090\7f766629
91656 Ref: 4091\7f767414
91657 Node: 9.5.4\7f770638
91658 Ref: 4092\7f770912
91659 Ref: 4093\7f771058
91660 Ref: 4094\7f771060
91661 Ref: 4095\7f771129
91662 Ref: S0226\7f771129
91663 Ref: 4096\7f771161
91664 Ref: 4097\7f771234
91665 Ref: 4098\7f771629
91666 Ref: 4099\7f772032
91667 Ref: 4100\7f772446
91668 Ref: 4101\7f773143
91669 Ref: 4102\7f773511
91670 Ref: 4103\7f773783
91671 Ref: 4104\7f774878
91672 Ref: 4105\7f775807
91673 Node: 9.6\7f776158
91674 Ref: 4106\7f776309
91675 Ref: 4107\7f776782
91676 Ref: 4108\7f776849
91677 Ref: S0227\7f776849
91678 Ref: 4109\7f776853
91679 Ref: 4110\7f776878
91680 Ref: 4111\7f776938
91681 Ref: S0228\7f776938
91682 Ref: 4112\7f776961
91683 Ref: 4113\7f777005
91684 Ref: S0229\7f777005
91685 Ref: 4114\7f777022
91686 Ref: 4115\7f777086
91687 Ref: 4116\7f777191
91688 Ref: 4117\7f777333
91689 Ref: 4118\7f777333
91690 Ref: 4119\7f777333
91691 Ref: 4120\7f778257
91692 Ref: 4121\7f778299
91693 Ref: 4122\7f778337
91694 Ref: 4123\7f778396
91695 Ref: 4124\7f778450
91696 Ref: 4125\7f778504
91697 Ref: 4126\7f778572
91698 Ref: 4127\7f778611
91699 Ref: 4128\7f778668
91700 Ref: 4129\7f778726
91701 Ref: 4130\7f778782
91702 Ref: 4131\7f778845
91703 Ref: 4132\7f779095
91704 Ref: 4133\7f779802
91705 Ref: 4134\7f779967
91706 Ref: 4135\7f780047
91707 Ref: 4136\7f780210
91708 Ref: 4137\7f780460
91709 Ref: 4138\7f780601
91710 Ref: 4139\7f780801
91711 Ref: 4140\7f784284
91712 Ref: 4141\7f784284
91713 Ref: 4142\7f784860
91714 Ref: 4143\7f784860
91715 Node: 9.6.1\7f785345
91716 Ref: 4144\7f785622
91717 Ref: 4145\7f785720
91718 Ref: 4146\7f785766
91719 Ref: 4147\7f785825
91720 Ref: 4148\7f785928
91721 Ref: 4149\7f786024
91722 Ref: 4150\7f786190
91723 Ref: 4151\7f786265
91724 Ref: 4152\7f786789
91725 Ref: 4153\7f786918
91726 Ref: 4154\7f786931
91727 Ref: 4155\7f786939
91728 Ref: 4156\7f786948
91729 Ref: 4157\7f786959
91730 Ref: 4158\7f786976
91731 Ref: 4159\7f786989
91732 Ref: 4160\7f786999
91733 Ref: 4161\7f787031
91734 Ref: 4162\7f787143
91735 Ref: 4163\7f787205
91736 Ref: 4164\7f787267
91737 Ref: 4165\7f787329
91738 Ref: 4166\7f787406
91739 Ref: 4167\7f787577
91740 Ref: 4168\7f787749
91741 Ref: 4169\7f787919
91742 Ref: 4170\7f788090
91743 Ref: 4171\7f788263
91744 Ref: 4172\7f788365
91745 Ref: 4173\7f788469
91746 Ref: 4174\7f788738
91747 Ref: 4175\7f789027
91748 Ref: 4176\7f789584
91749 Ref: 4177\7f789979
91750 Ref: 4178\7f790496
91751 Ref: 4179\7f791064
91752 Ref: 4180\7f791494
91753 Ref: 4181\7f791684
91754 Ref: 4182\7f791808
91755 Ref: 4183\7f791944
91756 Node: 9.7\7f805662
91757 Ref: 4184\7f806062
91758 Ref: S0230\7f806062
91759 Ref: 4185\7f806075
91760 Ref: 4186\7f806101
91761 Ref: 4187\7f806127
91762 Ref: 4188\7f806159
91763 Node: 9.7.1\7f806542
91764 Ref: 4189\7f806865
91765 Ref: 4190\7f806933
91766 Ref: S0231\7f806933
91767 Ref: 4191\7f806961
91768 Ref: 4192\7f806978
91769 Ref: 4193\7f807016
91770 Ref: 4194\7f807033
91771 Ref: 4195\7f807074
91772 Ref: 4196\7f807131
91773 Ref: S0232\7f807131
91774 Ref: 4197\7f807141
91775 Ref: 4198\7f807180
91776 Ref: S0233\7f807180
91777 Ref: 4199\7f807193
91778 Ref: 4200\7f807221
91779 Ref: 4201\7f807248
91780 Ref: 4202\7f807296
91781 Ref: S0234\7f807296
91782 Ref: 4203\7f807308
91783 Ref: 4204\7f807326
91784 Ref: 4205\7f807375
91785 Ref: S0235\7f807375
91786 Ref: 4206\7f807387
91787 Ref: 4207\7f807404
91788 Ref: 4208\7f807457
91789 Ref: S0236\7f807457
91790 Ref: 4209\7f807696
91791 Ref: 4210\7f808153
91792 Ref: 4211\7f808330
91793 Ref: 4212\7f808975
91794 Ref: 4213\7f809624
91795 Ref: 4214\7f810779
91796 Node: 9.7.2\7f811687
91797 Ref: 4215\7f812095
91798 Ref: 4216\7f812163
91799 Ref: S0237\7f812163
91800 Ref: 4217\7f812190
91801 Ref: 4218\7f812231
91802 Ref: 4219\7f812300
91803 Ref: S0238\7f812300
91804 Ref: 4220\7f812312
91805 Ref: 4221\7f812337
91806 Ref: 4222\7f812396
91807 Ref: S0239\7f812396
91808 Ref: 4223\7f812408
91809 Ref: 4224\7f812435
91810 Ref: 4225\7f812887
91811 Node: 9.7.3\7f814361
91812 Ref: 4226\7f814863
91813 Ref: S0240\7f814863
91814 Ref: 4227\7f814890
91815 Ref: 4228\7f814933
91816 Ref: 4229\7f815025
91817 Node: 9.7.4\7f815816
91818 Ref: 4230\7f816163
91819 Ref: S0241\7f816163
91820 Ref: 4231\7f816190
91821 Ref: 4232\7f816239
91822 Ref: 4233\7f816303
91823 Ref: S0242\7f816303
91824 Ref: 4234\7f816307
91825 Ref: 4235\7f816330
91826 Ref: 4236\7f816390
91827 Ref: S0243\7f816390
91828 Ref: 4237\7f816394
91829 Ref: 4238\7f816421
91830 Ref: 4239\7f816459
91831 Ref: S0244\7f816459
91832 Ref: 4240\7f816463
91833 Ref: 4241\7f816539
91834 Ref: 4242\7f816539
91835 Ref: 4243\7f817416
91836 Ref: 4244\7f818472
91837 Ref: 4245\7f818472
91838 Ref: 4246\7f818472
91839 Ref: 4247\7f818902
91840 Ref: 4248\7f818903
91841 Ref: 4249\7f818903
91842 Ref: 4250\7f818903
91843 Ref: 4251\7f818903
91844 Node: 9.8\7f819183
91845 Ref: 4252\7f819708
91846 Ref: S0245\7f819708
91847 Ref: 4253\7f819724
91848 Ref: 4254\7f819737
91849 Ref: 4255\7f819796
91850 Ref: 4256\7f819941
91851 Ref: 4257\7f820039
91852 Ref: 4258\7f820039
91853 Ref: 4259\7f820041
91854 Ref: 4260\7f820041
91855 Ref: 4261\7f820211
91856 Ref: 4262\7f820211
91857 Ref: 4263\7f820637
91858 Ref: 4264\7f821335
91859 Ref: 4265\7f822321
91860 Ref: 4266\7f822834
91861 Ref: 4267\7f823117
91862 Ref: 4268\7f823440
91863 Ref: 4269\7f823440
91864 Ref: 4270\7f823440
91865 Ref: 4271\7f823440
91866 Node: 9.9\7f824029
91867 Ref: 4272\7f824330
91868 Ref: 4273\7f824345
91869 Ref: 4274\7f824442
91870 Ref: 4275\7f824443
91871 Ref: 4276\7f824608
91872 Ref: 4277\7f824623
91873 Ref: 4278\7f825127
91874 Ref: 4279\7f825142
91875 Node: 9.10\7f826183
91876 Ref: 4280\7f826346
91877 Ref: 4281\7f826346
91878 Ref: 4282\7f827037
91879 Ref: 4283\7f827509
91880 Ref: 4284\7f829051
91881 Ref: 4285\7f829313
91882 Node: 9.11\7f829827
91883 Node: 10\7f833350
91884 Ref: 4286\7f833741
91885 Ref: 4287\7f833741
91886 Ref: 4288\7f833741
91887 Ref: 4289\7f834046
91888 Node: 10.1\7f834535
91889 Ref: 4290\7f834647
91890 Ref: 4291\7f834647
91891 Ref: 4292\7f834647
91892 Ref: 4293\7f834962
91893 Ref: 4294\7f835266
91894 Ref: 4295\7f835513
91895 Node: 10.1.1\7f836061
91896 Ref: 4296\7f836418
91897 Ref: 4297\7f836611
91898 Ref: S0246\7f836611
91899 Ref: 4298\7f836617
91900 Ref: 4299\7f836659
91901 Ref: S0247\7f836659
91902 Ref: 4300\7f836673
91903 Ref: 4301\7f836688
91904 Ref: 4302\7f836710
91905 Ref: 4303\7f836725
91906 Ref: 4304\7f836753
91907 Ref: S0248\7f836753
91908 Ref: 4305\7f836768
91909 Ref: 4306\7f836802
91910 Ref: 4307\7f836839
91911 Ref: 4308\7f836905
91912 Ref: S0249\7f836905
91913 Ref: 4309\7f836920
91914 Ref: 4310\7f836947
91915 Ref: 4311\7f836977
91916 Ref: 4312\7f837001
91917 Ref: 4313\7f837064
91918 Ref: S0250\7f837064
91919 Ref: 4314\7f837077
91920 Ref: 4315\7f837114
91921 Ref: 4316\7f837151
91922 Ref: 4317\7f837208
91923 Ref: S0251\7f837208
91924 Ref: 4318\7f837212
91925 Ref: 4319\7f837231
91926 Ref: 4320\7f837268
91927 Ref: S0252\7f837268
91928 Ref: 4321\7f837272
91929 Ref: 4322\7f837459
91930 Ref: 4323\7f837459
91931 Ref: 4324\7f837459
91932 Ref: 4325\7f837459
91933 Ref: 4326\7f837459
91934 Ref: 4327\7f837766
91935 Ref: 4328\7f838083
91936 Ref: 4329\7f838083
91937 Ref: 4330\7f838307
91938 Ref: 4331\7f838600
91939 Ref: 4332\7f838830
91940 Ref: 4333\7f838968
91941 Ref: 4334\7f839039
91942 Ref: 4335\7f839039
91943 Ref: 4336\7f839039
91944 Ref: 4337\7f839039
91945 Ref: 4338\7f839302
91946 Ref: 4339\7f839424
91947 Ref: 4340\7f839613
91948 Ref: 4341\7f843479
91949 Ref: 4342\7f843479
91950 Node: 10.1.2\7f846602
91951 Ref: 4343\7f846926
91952 Ref: S0253\7f846926
91953 Ref: 4344\7f846932
91954 Ref: 4345\7f846966
91955 Ref: S0254\7f846966
91956 Ref: 4346\7f846970
91957 Ref: 4347\7f846985
91958 Ref: 4348\7f847017
91959 Ref: S0255\7f847017
91960 Ref: 4349\7f847021
91961 Ref: 4350\7f847044
91962 Ref: 4351\7f847098
91963 Ref: S0256\7f847098
91964 Ref: 4352\7f847139
91965 Ref: 4353\7f847166
91966 Ref: 4354\7f847207
91967 Ref: S0257\7f847207
91968 Ref: 4355\7f847240
91969 Ref: 4356\7f847267
91970 Ref: 4357\7f847326
91971 Ref: 4358\7f847690
91972 Ref: 4359\7f847690
91973 Ref: 4360\7f847750
91974 Ref: 4361\7f847751
91975 Node: 10.1.3\7f853040
91976 Ref: 4362\7f853570
91977 Ref: S0258\7f853570
91978 Ref: 4363\7f853574
91979 Ref: 4364\7f853598
91980 Ref: 4365\7f853618
91981 Ref: 4366\7f853641
91982 Ref: 4367\7f853691
91983 Ref: S0259\7f853691
91984 Ref: 4368\7f853705
91985 Ref: 4369\7f853735
91986 Ref: 4370\7f853784
91987 Ref: 4371\7f853832
91988 Ref: S0260\7f853832
91989 Ref: 4372\7f853858
91990 Ref: 4373\7f853902
91991 Ref: 4374\7f853947
91992 Ref: S0261\7f853947
91993 Ref: 4375\7f853970
91994 Ref: 4376\7f854014
91995 Ref: 4377\7f854064
91996 Ref: S0262\7f854064
91997 Ref: 4378\7f854092
91998 Ref: 4379\7f854136
91999 Ref: 4380\7f854174
92000 Ref: S0263\7f854174
92001 Ref: 4381\7f854189
92002 Ref: 4382\7f854207
92003 Ref: 4383\7f854269
92004 Ref: 4384\7f854362
92005 Ref: 4385\7f854627
92006 Ref: 4386\7f855509
92007 Ref: 4387\7f855755
92008 Node: 10.1.4\7f857561
92009 Ref: 4388\7f857704
92010 Ref: 4389\7f857704
92011 Ref: 4390\7f859372
92012 Ref: 4391\7f859556
92013 Ref: 4392\7f861203
92014 Ref: 4393\7f861620
92015 Node: 10.1.5\7f861946
92016 Ref: 4394\7f862237
92017 Ref: 4395\7f862237
92018 Ref: 4396\7f862292
92019 Ref: 4397\7f864156
92020 Ref: 4398\7f864156
92021 Ref: 4399\7f864156
92022 Ref: 4400\7f864156
92023 Ref: 4401\7f864573
92024 Ref: 4402\7f864573
92025 Node: 10.1.6\7f865685
92026 Ref: 4403\7f866108
92027 Ref: 4404\7f866108
92028 Ref: 4405\7f866108
92029 Ref: 4406\7f866108
92030 Ref: 4407\7f866760
92031 Ref: 4408\7f866760
92032 Ref: 4409\7f866760
92033 Ref: 4410\7f866760
92034 Ref: 4411\7f867232
92035 Ref: 4412\7f867232
92036 Ref: 4413\7f867455
92037 Ref: 4414\7f867455
92038 Ref: 4415\7f867654
92039 Node: 10.2\7f868009
92040 Ref: 4416\7f868115
92041 Ref: 4417\7f868115
92042 Ref: 4418\7f868115
92043 Ref: 4419\7f868338
92044 Ref: 4420\7f868338
92045 Ref: 4421\7f868543
92046 Ref: 4422\7f869028
92047 Ref: 4423\7f869029
92048 Ref: 4424\7f869029
92049 Ref: 4425\7f869555
92050 Ref: 4426\7f869744
92051 Ref: 4427\7f870112
92052 Ref: 4428\7f870114
92053 Ref: 4429\7f871000
92054 Ref: 4430\7f872682
92055 Ref: 4431\7f872803
92056 Ref: 4432\7f873367
92057 Ref: 4433\7f873367
92058 Ref: 4434\7f873631
92059 Ref: 4435\7f874039
92060 Node: 10.2.1\7f876140
92061 Ref: 4436\7f876245
92062 Ref: 4437\7f876448
92063 Ref: 4438\7f876449
92064 Ref: 4439\7f876476
92065 Ref: 4440\7f876487
92066 Ref: 4441\7f876492
92067 Ref: 4442\7f876637
92068 Ref: 4443\7f876638
92069 Ref: 4444\7f876667
92070 Ref: 4445\7f876729
92071 Ref: 4446\7f877610
92072 Ref: 4447\7f878151
92073 Ref: 4448\7f878295
92074 Ref: 4449\7f878295
92075 Ref: 4450\7f878681
92076 Ref: 4451\7f878841
92077 Ref: 4452\7f879012
92078 Ref: 4453\7f881341
92079 Ref: 4454\7f882287
92080 Ref: 4455\7f882288
92081 Ref: 4456\7f882307
92082 Ref: 4457\7f882319
92083 Ref: 4458\7f882324
92084 Ref: 4459\7f882418
92085 Ref: 4460\7f883818
92086 Ref: 4461\7f883916
92087 Ref: 4462\7f883916
92088 Ref: 4463\7f884348
92089 Ref: 4464\7f885770
92090 Ref: 4465\7f885771
92091 Ref: 4466\7f885794
92092 Ref: 4467\7f885814
92093 Ref: 4468\7f885839
92094 Ref: 4469\7f885840
92095 Ref: 4470\7f885867
92096 Ref: 4471\7f885887
92097 Ref: 4472\7f885912
92098 Ref: 4473\7f885913
92099 Ref: 4474\7f885942
92100 Ref: 4475\7f886045
92101 Ref: 4476\7f886050
92102 Ref: 4477\7f886151
92103 Ref: 4478\7f886306
92104 Ref: 4479\7f887022
92105 Ref: 4480\7f887022
92106 Node: 11\7f887220
92107 Ref: 4481\7f887445
92108 Ref: 4482\7f887447
92109 Ref: 4483\7f887447
92110 Ref: 4484\7f887447
92111 Ref: 4485\7f887447
92112 Ref: 4486\7f887447
92113 Ref: 4487\7f887586
92114 Ref: 4488\7f887729
92115 Node: 11.1\7f888484
92116 Ref: 4489\7f888600
92117 Ref: 4490\7f888731
92118 Ref: S0264\7f888731
92119 Ref: 4491\7f888735
92120 Ref: 4492\7f888782
92121 Ref: 4493\7f889333
92122 Ref: 4494\7f889333
92123 Ref: 4495\7f889333
92124 Ref: 4496\7f889333
92125 Ref: 4497\7f889333
92126 Ref: 4498\7f889597
92127 Ref: 4499\7f889659
92128 Ref: 4500\7f889659
92129 Ref: 4501\7f889659
92130 Ref: 4502\7f889763
92131 Node: 11.2\7f890032
92132 Ref: 4503\7f890309
92133 Ref: S0265\7f890309
92134 Ref: 4504\7f890324
92135 Ref: 4505\7f890375
92136 Ref: 4506\7f890403
92137 Ref: 4507\7f890448
92138 Ref: S0266\7f890448
92139 Ref: 4508\7f890466
92140 Ref: 4509\7f890499
92141 Ref: 4510\7f890519
92142 Ref: 4511\7f890556
92143 Ref: 4512\7f890617
92144 Ref: S0267\7f890617
92145 Ref: 4513\7f890621
92146 Ref: 4514\7f890666
92147 Ref: S0268\7f890666
92148 Ref: 4515\7f890681
92149 Ref: 4516\7f890743
92150 Ref: 4517\7f891374
92151 Ref: 4518\7f891717
92152 Node: 11.3\7f892317
92153 Ref: 4519\7f892539
92154 Ref: S0269\7f892539
92155 Ref: 4520\7f892580
92156 Ref: 4521\7f892598
92157 Ref: 4522\7f892724
92158 Ref: 4523\7f893062
92159 Ref: 4524\7f893161
92160 Ref: 4525\7f893379
92161 Node: 11.4\7f893820
92162 Ref: 4526\7f894089
92163 Ref: 4527\7f894164
92164 Ref: 4528\7f894371
92165 Ref: 4529\7f894371
92166 Ref: 4530\7f894616
92167 Ref: 4531\7f894755
92168 Ref: 4532\7f895364
92169 Ref: 4533\7f895532
92170 Ref: 4534\7f895532
92171 Ref: 4535\7f895532
92172 Node: 11.4.1\7f896215
92173 Ref: 4536\7f896447
92174 Ref: 4537\7f896557
92175 Ref: 4538\7f896646
92176 Ref: 4539\7f896702
92177 Ref: 4540\7f896769
92178 Ref: 4541\7f896846
92179 Ref: 4542\7f896947
92180 Ref: 4543\7f897070
92181 Ref: 4544\7f897138
92182 Ref: 4545\7f897216
92183 Ref: 4546\7f897362
92184 Ref: 4547\7f897440
92185 Ref: 4548\7f897512
92186 Ref: 4549\7f897633
92187 Ref: 4550\7f897770
92188 Ref: 4551\7f897935
92189 Ref: 4552\7f898115
92190 Ref: 4553\7f898202
92191 Ref: 4554\7f898341
92192 Ref: 4555\7f899532
92193 Ref: 4556\7f899547
92194 Ref: 4557\7f900439
92195 Ref: 4558\7f901787
92196 Node: 11.4.2\7f903457
92197 Ref: 4559\7f904020
92198 Ref: 4560\7f904020
92199 Ref: 4561\7f904314
92200 Ref: 4562\7f904315
92201 Ref: 4563\7f904341
92202 Ref: 4564\7f904379
92203 Ref: 4565\7f904581
92204 Ref: 4566\7f904582
92205 Ref: 4567\7f904606
92206 Ref: 4568\7f904639
92207 Ref: 4569\7f904640
92208 Ref: 4570\7f904682
92209 Ref: 4571\7f904704
92210 Ref: 4572\7f904738
92211 Ref: 4573\7f904760
92212 Ref: 4574\7f904779
92213 Ref: 4575\7f904784
92214 Ref: 4576\7f907635
92215 Ref: 4577\7f907708
92216 Ref: 4578\7f907766
92217 Ref: 4579\7f907812
92218 Ref: 4580\7f908484
92219 Ref: 4581\7f908484
92220 Node: 11.4.3\7f910854
92221 Node: 11.5\7f913385
92222 Ref: 4582\7f913524
92223 Ref: 4583\7f913770
92224 Ref: 4584\7f913770
92225 Ref: 4585\7f913770
92226 Ref: 4586\7f913770
92227 Ref: 4587\7f913770
92228 Ref: 4588\7f913971
92229 Ref: 4589\7f914180
92230 Ref: 4590\7f914181
92231 Ref: 4591\7f914190
92232 Ref: 4592\7f914223
92233 Ref: 4593\7f914224
92234 Ref: 4594\7f914235
92235 Ref: 4595\7f914253
92236 Ref: 4596\7f914258
92237 Ref: 4597\7f914258
92238 Ref: 4598\7f914258
92239 Ref: 4599\7f915362
92240 Ref: 4600\7f915946
92241 Ref: 4601\7f916067
92242 Ref: 4602\7f916338
92243 Ref: 4603\7f916627
92244 Ref: 4604\7f916753
92245 Ref: 4605\7f917319
92246 Ref: 4606\7f917527
92247 Ref: 4607\7f917788
92248 Ref: 4608\7f918364
92249 Ref: 4609\7f918648
92250 Ref: 4610\7f918768
92251 Ref: 4611\7f918863
92252 Ref: 4612\7f919154
92253 Ref: 4613\7f919607
92254 Ref: 4614\7f919607
92255 Ref: 4615\7f919980
92256 Ref: 4616\7f920439
92257 Ref: 4617\7f920907
92258 Ref: 4618\7f921406
92259 Ref: 4619\7f921406
92260 Node: 11.6\7f922123
92261 Ref: 4620\7f922251
92262 Ref: 4621\7f922251
92263 Ref: 4622\7f922251
92264 Ref: 4623\7f922251
92265 Ref: 4624\7f922251
92266 Ref: 4625\7f922251
92267 Ref: 4626\7f922450
92268 Ref: 4627\7f923321
92269 Ref: 4628\7f923321
92270 Ref: 4629\7f924112
92271 Ref: 4630\7f924846
92272 Ref: 4631\7f925023
92273 Ref: 4632\7f925025
92274 Ref: 4633\7f925025
92275 Node: 12\7f925515
92276 Ref: 4634\7f925617
92277 Ref: 4635\7f925707
92278 Ref: 4636\7f925933
92279 Ref: 4637\7f925935
92280 Ref: 4638\7f925935
92281 Node: 12.1\7f927020
92282 Ref: 4639\7f927545
92283 Ref: S0270\7f927545
92284 Ref: 4640\7f927549
92285 Ref: 4641\7f927583
92286 Ref: 4642\7f927657
92287 Ref: S0271\7f927657
92288 Ref: 4643\7f927672
92289 Ref: 4644\7f927693
92290 Ref: 4645\7f927732
92291 Ref: 4646\7f927790
92292 Ref: S0272\7f927790
92293 Ref: 4647\7f927805
92294 Ref: 4648\7f927826
92295 Ref: 4649\7f927876
92296 Ref: S0273\7f927876
92297 Ref: 4650\7f927890
92298 Ref: 4651\7f927935
92299 Ref: 4652\7f927991
92300 Ref: S0274\7f927991
92301 Ref: 4653\7f928007
92302 Ref: 4654\7f928044
92303 Ref: 4655\7f928079
92304 Ref: 4656\7f928120
92305 Ref: 4657\7f928485
92306 Ref: 4658\7f928485
92307 Ref: 4659\7f928485
92308 Ref: 4660\7f928485
92309 Ref: 4661\7f928612
92310 Ref: 4662\7f929060
92311 Node: 12.2\7f931509
92312 Ref: 4663\7f931622
92313 Ref: 4664\7f931828
92314 Node: 12.3\7f933755
92315 Ref: 4665\7f933882
92316 Ref: 4666\7f934024
92317 Ref: S0275\7f934024
92318 Ref: 4667\7f934047
92319 Ref: 4668\7f934111
92320 Ref: 4669\7f934117
92321 Ref: 4670\7f934156
92322 Ref: 4671\7f934190
92323 Ref: 4672\7f934232
92324 Ref: 4673\7f934298
92325 Ref: 4674\7f934304
92326 Ref: 4675\7f934343
92327 Ref: 4676\7f934377
92328 Ref: 4677\7f934418
92329 Ref: 4678\7f934476
92330 Ref: 4679\7f934482
92331 Ref: 4680\7f934521
92332 Ref: 4681\7f934571
92333 Ref: S0276\7f934571
92334 Ref: 4682\7f934585
92335 Ref: 4683\7f934608
92336 Ref: 4684\7f934657
92337 Ref: S0277\7f934657
92338 Ref: 4685\7f934696
92339 Ref: 4686\7f934714
92340 Ref: 4687\7f934795
92341 Ref: S0278\7f934795
92342 Ref: 4688\7f934799
92343 Ref: 4689\7f934822
92344 Ref: 4690\7f934848
92345 Ref: 4691\7f934861
92346 Ref: 4692\7f934868
92347 Ref: 4693\7f934908
92348 Ref: 4694\7f934916
92349 Ref: 4695\7f934921
92350 Ref: 4696\7f935160
92351 Ref: 4697\7f935160
92352 Ref: 4698\7f935160
92353 Ref: 4699\7f937563
92354 Ref: 4700\7f937565
92355 Ref: 4701\7f937565
92356 Ref: 4702\7f937565
92357 Ref: 4703\7f937565
92358 Ref: 4704\7f937565
92359 Ref: 4705\7f937565
92360 Ref: 4706\7f937565
92361 Ref: 4707\7f939353
92362 Ref: 4708\7f940630
92363 Ref: 4709\7f941013
92364 Ref: 4710\7f941078
92365 Node: 12.4\7f942521
92366 Ref: 4711\7f942634
92367 Ref: 4712\7f942634
92368 Ref: 4713\7f942793
92369 Ref: S0279\7f942793
92370 Ref: 4714\7f942807
92371 Ref: 4715\7f942834
92372 Ref: 4716\7f942840
92373 Ref: 4717\7f942856
92374 Ref: 4718\7f942879
92375 Ref: 4719\7f942913
92376 Ref: 4720\7f942946
92377 Ref: 4721\7f942973
92378 Ref: 4722\7f942978
92379 Ref: 4723\7f943000
92380 Ref: 4724\7f943040
92381 Ref: 4725\7f943115
92382 Ref: 4726\7f943225
92383 Ref: 4727\7f943884
92384 Ref: 4728\7f944620
92385 Ref: 4729\7f944724
92386 Ref: 4730\7f945332
92387 Ref: 4731\7f945645
92388 Ref: 4732\7f945792
92389 Ref: 4733\7f946171
92390 Ref: 4734\7f946171
92391 Ref: 4735\7f946171
92392 Ref: 4736\7f946524
92393 Ref: 4737\7f946524
92394 Ref: 4738\7f946800
92395 Node: 12.5\7f947201
92396 Ref: 4739\7f947505
92397 Ref: S0280\7f947505
92398 Ref: 4740\7f947521
92399 Ref: 4741\7f947565
92400 Ref: 4742\7f947644
92401 Ref: S0281\7f947644
92402 Ref: 4743\7f947663
92403 Ref: 4744\7f947683
92404 Ref: 4745\7f947705
92405 Ref: 4746\7f947748
92406 Ref: 4747\7f947817
92407 Ref: S0282\7f947817
92408 Ref: 4748\7f947836
92409 Ref: 4749\7f947856
92410 Ref: 4750\7f947920
92411 Ref: S0283\7f947920
92412 Ref: 4751\7f947936
92413 Ref: 4752\7f947978
92414 Ref: 4753\7f948020
92415 Ref: 4754\7f948063
92416 Ref: 4755\7f948112
92417 Ref: 4756\7f948154
92418 Ref: 4757\7f948198
92419 Ref: 4758\7f948248
92420 Ref: 4759\7f948297
92421 Ref: 4760\7f948337
92422 Ref: 4761\7f948378
92423 Ref: 4762\7f948459
92424 Ref: 4763\7f948459
92425 Ref: 4764\7f948459
92426 Ref: 4765\7f948459
92427 Ref: 4766\7f948615
92428 Ref: 4767\7f948615
92429 Ref: 4768\7f948615
92430 Ref: 4769\7f948615
92431 Ref: 4770\7f948733
92432 Ref: 4771\7f948733
92433 Node: 12.5.1\7f951679
92434 Ref: 4772\7f952411
92435 Ref: S0284\7f952411
92436 Ref: 4773\7f952499
92437 Ref: S0285\7f952499
92438 Ref: 4774\7f952554
92439 Ref: 4775\7f952573
92440 Ref: 4776\7f952796
92441 Ref: 4777\7f952796
92442 Ref: 4778\7f955655
92443 Ref: 4779\7f958115
92444 Ref: 4780\7f958130
92445 Ref: 4781\7f959450
92446 Node: 12.5.2\7f960100
92447 Ref: 4782\7f960574
92448 Ref: S0286\7f960574
92449 Ref: 4783\7f960629
92450 Ref: S0287\7f960629
92451 Ref: 4784\7f960681
92452 Ref: S0288\7f960681
92453 Ref: 4785\7f960733
92454 Ref: S0289\7f960733
92455 Ref: 4786\7f960794
92456 Ref: S0290\7f960794
92457 Ref: 4787\7f960853
92458 Ref: S0291\7f960853
92459 Node: 12.5.3\7f961294
92460 Ref: 4788\7f961590
92461 Ref: S0292\7f961590
92462 Ref: 4789\7f961594
92463 Ref: 4790\7f962308
92464 Ref: 4791\7f962407
92465 Node: 12.5.4\7f963231
92466 Ref: 4792\7f963532
92467 Ref: S0293\7f963532
92468 Ref: 4793\7f963536
92469 Ref: 4794\7f963722
92470 Ref: 4795\7f964209
92471 Node: 12.5.5\7f964841
92472 Ref: 4796\7f965144
92473 Ref: S0294\7f965144
92474 Ref: 4797\7f965148
92475 Node: 12.6\7f966071
92476 Ref: 4798\7f966192
92477 Ref: 4799\7f966192
92478 Ref: 4800\7f966348
92479 Ref: S0295\7f966348
92480 Ref: 4801\7f966352
92481 Ref: 4802\7f966408
92482 Ref: 4803\7f966497
92483 Ref: S0296\7f966497
92484 Ref: 4804\7f966517
92485 Ref: 4805\7f966546
92486 Ref: 4806\7f966580
92487 Ref: 4807\7f966653
92488 Ref: S0297\7f966653
92489 Ref: 4808\7f966673
92490 Ref: 4809\7f966711
92491 Ref: 4810\7f966745
92492 Ref: 4811\7f966796
92493 Ref: S0298\7f966796
92494 Ref: 4812\7f966800
92495 Ref: 4813\7f966846
92496 Ref: S0299\7f966846
92497 Ref: 4814\7f966850
92498 Ref: 4815\7f967048
92499 Ref: 4816\7f967136
92500 Ref: 4817\7f967363
92501 Ref: 4818\7f967434
92502 Ref: 4819\7f968173
92503 Ref: 4820\7f969083
92504 Ref: 4821\7f971324
92505 Node: 12.7\7f975209
92506 Ref: 4822\7f975324
92507 Ref: 4823\7f975324
92508 Ref: 4824\7f975660
92509 Ref: S0300\7f975660
92510 Ref: 4825\7f975687
92511 Ref: 4826\7f975730
92512 Ref: 4827\7f975736
92513 Ref: 4828\7f975783
92514 Ref: 4829\7f975842
92515 Ref: S0301\7f975842
92516 Ref: 4830\7f975883
92517 Ref: 4831\7f975914
92518 Ref: 4832\7f975944
92519 Ref: 4833\7f976034
92520 Ref: S0302\7f976034
92521 Ref: 4834\7f976048
92522 Ref: 4835\7f976102
92523 Ref: 4836\7f976283
92524 Ref: 4837\7f978777
92525 Ref: 4838\7f979174
92526 Node: 12.8\7f981591
92527 Node: 13\7f984094
92528 Node: 13.1\7f984898
92529 Ref: 4839\7f985050
92530 Ref: 4840\7f985857
92531 Ref: 4841\7f985857
92532 Ref: 4842\7f985857
92533 Ref: 4843\7f986332
92534 Ref: 4844\7f986744
92535 Ref: S0303\7f986744
92536 Ref: S0304\7f986744
92537 Ref: 4845\7f986748
92538 Ref: 4846\7f986790
92539 Ref: 4847\7f986837
92540 Ref: 4848\7f986879
92541 Ref: 4849\7f986907
92542 Ref: S0305\7f986907
92543 Ref: 4850\7f986911
92544 Ref: 4851\7f986937
92545 Ref: 4852\7f986949
92546 Ref: 4853\7f986996
92547 Ref: 4854\7f987120
92548 Ref: 4855\7f988680
92549 Ref: 4856\7f988680
92550 Ref: 4857\7f989189
92551 Ref: 4858\7f989428
92552 Ref: 4859\7f989428
92553 Ref: 4860\7f989428
92554 Ref: 4861\7f989700
92555 Ref: 4862\7f989702
92556 Ref: 4863\7f989702
92557 Ref: 4864\7f989702
92558 Ref: 4865\7f990185
92559 Ref: 4866\7f990187
92560 Ref: 4867\7f990187
92561 Ref: 4868\7f990187
92562 Ref: 4869\7f992471
92563 Ref: 4870\7f994233
92564 Ref: 4871\7f994470
92565 Ref: 4872\7f994595
92566 Ref: 4873\7f995045
92567 Ref: 4874\7f995278
92568 Ref: 4875\7f995278
92569 Ref: 4876\7f995280
92570 Ref: 4877\7f995280
92571 Ref: 4878\7f995280
92572 Ref: 4879\7f995334
92573 Ref: 4880\7f995686
92574 Ref: 4881\7f996053
92575 Node: 13.1.1\7f998499
92576 Ref: 4882\7f998893
92577 Ref: 4883\7f998965
92578 Ref: S0306\7f998965
92579 Ref: 4884\7f998983
92580 Ref: 4885\7f998999
92581 Ref: 4886\7f999037
92582 Ref: 4887\7f999053
92583 Ref: 4888\7f999095
92584 Ref: S0307\7f999095
92585 Ref: 4889\7f999107
92586 Ref: 4890\7f999153
92587 Ref: S0308\7f999153
92588 Ref: 4891\7f999157
92589 Ref: 4892\7f999165
92590 Ref: 4893\7f999178
92591 Ref: 4894\7f999353
92592 Ref: 4895\7f999673
92593 Ref: 4896\7f999884
92594 Ref: 4897\7f999884
92595 Ref: 4898\7f1000079
92596 Ref: 4899\7f1003602
92597 Ref: 4900\7f1003944
92598 Ref: 4901\7f1004109
92599 Ref: 4902\7f1004294
92600 Node: 13.2\7f1006514
92601 Ref: 4903\7f1007400
92602 Ref: 4904\7f1007402
92603 Ref: 4905\7f1007402
92604 Ref: 4906\7f1008138
92605 Node: 13.3\7f1008911
92606 Ref: 4907\7f1009080
92607 Ref: 4908\7f1009080
92608 Ref: 4909\7f1009229
92609 Ref: 4910\7f1009384
92610 Ref: S0309\7f1009384
92611 Ref: 4911\7f1009404
92612 Ref: 4912\7f1009415
92613 Ref: 4913\7f1009440
92614 Ref: 4914\7f1009467
92615 Ref: 4915\7f1009478
92616 Ref: 4916\7f1009503
92617 Ref: 4917\7f1009740
92618 Ref: 4918\7f1009908
92619 Ref: 4919\7f1010299
92620 Ref: 4920\7f1010299
92621 Ref: 4921\7f1010501
92622 Ref: 4922\7f1010544
92623 Ref: 4923\7f1010909
92624 Ref: 4924\7f1010963
92625 Ref: 4925\7f1010963
92626 Ref: 4926\7f1010963
92627 Ref: 4927\7f1010963
92628 Ref: 4928\7f1010963
92629 Ref: 4929\7f1010963
92630 Ref: 4930\7f1010963
92631 Ref: 4931\7f1010963
92632 Ref: 4932\7f1010963
92633 Ref: 4933\7f1010963
92634 Ref: 4934\7f1010963
92635 Ref: 4935\7f1010963
92636 Ref: 4936\7f1010963
92637 Ref: 4937\7f1010963
92638 Ref: 4938\7f1010963
92639 Ref: 4939\7f1011114
92640 Ref: 4940\7f1011114
92641 Ref: 4941\7f1011184
92642 Ref: 4942\7f1011405
92643 Ref: 4943\7f1012052
92644 Ref: 4944\7f1012067
92645 Ref: 4945\7f1012633
92646 Ref: 4946\7f1012648
92647 Ref: 4947\7f1012769
92648 Ref: 4948\7f1012769
92649 Ref: 4949\7f1012824
92650 Ref: 4950\7f1013175
92651 Ref: 4951\7f1014347
92652 Ref: 4952\7f1014362
92653 Ref: 4953\7f1014848
92654 Ref: 4954\7f1014863
92655 Ref: 4955\7f1015191
92656 Ref: 4956\7f1015206
92657 Ref: 4957\7f1015546
92658 Ref: 4958\7f1015561
92659 Ref: 4959\7f1015784
92660 Ref: 4960\7f1015784
92661 Ref: 4961\7f1015837
92662 Ref: 4962\7f1015939
92663 Ref: 4963\7f1016232
92664 Ref: 4964\7f1017475
92665 Ref: 4965\7f1018626
92666 Ref: 4966\7f1018641
92667 Ref: 4967\7f1018800
92668 Ref: 4968\7f1018815
92669 Ref: 4969\7f1019001
92670 Ref: 4970\7f1019001
92671 Ref: 4971\7f1019124
92672 Ref: 4972\7f1019447
92673 Ref: 4973\7f1019462
92674 Ref: 4974\7f1020068
92675 Ref: 4975\7f1020070
92676 Ref: 4976\7f1020505
92677 Ref: 4977\7f1020505
92678 Ref: 4978\7f1021154
92679 Ref: 4979\7f1022988
92680 Ref: 4980\7f1023003
92681 Ref: 4981\7f1024176
92682 Ref: 4982\7f1024176
92683 Ref: 4983\7f1024583
92684 Ref: 4984\7f1024583
92685 Ref: 4985\7f1024583
92686 Ref: 4986\7f1024919
92687 Ref: 4987\7f1024934
92688 Ref: 4988\7f1025068
92689 Ref: 4989\7f1025083
92690 Ref: 4990\7f1025308
92691 Ref: 4991\7f1025308
92692 Ref: 4992\7f1025362
92693 Ref: 4993\7f1026143
92694 Ref: 4994\7f1026158
92695 Ref: 4995\7f1026921
92696 Ref: 4996\7f1026936
92697 Ref: 4997\7f1028036
92698 Ref: 4998\7f1028051
92699 Ref: 4999\7f1028051
92700 Ref: 5000\7f1028051
92701 Ref: 5001\7f1028357
92702 Ref: 5002\7f1028357
92703 Node: 13.4\7f1031627
92704 Ref: 5003\7f1031954
92705 Ref: S0310\7f1031954
92706 Ref: 5004\7f1031986
92707 Ref: 5005\7f1032001
92708 Ref: 5006\7f1032053
92709 Ref: S0311\7f1032053
92710 Ref: 5007\7f1032057
92711 Ref: 5008\7f1032126
92712 Ref: 5009\7f1032887
92713 Ref: 5010\7f1032970
92714 Ref: 5011\7f1033113
92715 Ref: 5012\7f1033113
92716 Ref: 5013\7f1033390
92717 Node: 13.5\7f1034372
92718 Ref: 5014\7f1034483
92719 Ref: 5015\7f1034483
92720 Ref: 5016\7f1034483
92721 Ref: 5017\7f1034483
92722 Ref: 5018\7f1034483
92723 Ref: 5019\7f1034483
92724 Ref: 5020\7f1034483
92725 Ref: 5021\7f1034483
92726 Ref: 5022\7f1034483
92727 Node: 13.5.1\7f1034850
92728 Ref: 5023\7f1035179
92729 Ref: 5024\7f1035259
92730 Ref: S0312\7f1035259
92731 Ref: 5025\7f1035291
92732 Ref: 5026\7f1035325
92733 Ref: 5027\7f1035351
92734 Ref: 5028\7f1035416
92735 Ref: S0313\7f1035416
92736 Ref: 5029\7f1035440
92737 Ref: 5030\7f1035454
92738 Ref: 5031\7f1035469
92739 Ref: 5032\7f1035482
92740 Ref: 5033\7f1035508
92741 Ref: S0314\7f1035508
92742 Ref: 5034\7f1035520
92743 Ref: 5035\7f1035548
92744 Ref: S0315\7f1035548
92745 Ref: 5036\7f1035560
92746 Ref: 5037\7f1035594
92747 Ref: S0316\7f1035594
92748 Ref: 5038\7f1035606
92749 Ref: 5039\7f1035676
92750 Ref: 5040\7f1035676
92751 Ref: 5041\7f1035676
92752 Ref: 5042\7f1035676
92753 Ref: 5043\7f1039824
92754 Node: 13.5.2\7f1043380
92755 Ref: 5044\7f1043571
92756 Ref: 5045\7f1043685
92757 Ref: 5046\7f1043700
92758 Ref: 5047\7f1044103
92759 Ref: 5048\7f1044118
92760 Ref: 5049\7f1044721
92761 Ref: 5050\7f1044736
92762 Ref: 5051\7f1045302
92763 Ref: 5052\7f1045302
92764 Node: 13.5.3\7f1045734
92765 Ref: 5053\7f1045975
92766 Ref: 5054\7f1046062
92767 Ref: 5055\7f1046064
92768 Ref: 5056\7f1046064
92769 Ref: 5057\7f1046297
92770 Ref: 5058\7f1046299
92771 Ref: 5059\7f1046299
92772 Ref: 5060\7f1046511
92773 Ref: 5061\7f1046526
92774 Ref: 5062\7f1046641
92775 Ref: 5063\7f1046643
92776 Ref: 5064\7f1046825
92777 Ref: 5065\7f1046825
92778 Ref: 5066\7f1047055
92779 Ref: 5067\7f1047226
92780 Node: 13.6\7f1047671
92781 Ref: 5068\7f1047806
92782 Ref: 5069\7f1047806
92783 Node: 13.7\7f1049280
92784 Ref: 5070\7f1049658
92785 Ref: 5071\7f1049726
92786 Ref: 5072\7f1049778
92787 Ref: 5073\7f1049890
92788 Ref: 5074\7f1049954
92789 Ref: 5075\7f1050020
92790 Ref: 5076\7f1050088
92791 Ref: 5077\7f1050159
92792 Ref: 5078\7f1050221
92793 Ref: 5079\7f1050292
92794 Ref: 5080\7f1050360
92795 Ref: 5081\7f1050432
92796 Ref: 5082\7f1050559
92797 Ref: 5083\7f1050597
92798 Ref: 5084\7f1050642
92799 Ref: 5085\7f1050701
92800 Ref: 5086\7f1050775
92801 Ref: 5087\7f1050848
92802 Ref: 5088\7f1051540
92803 Ref: 5089\7f1051554
92804 Ref: 5090\7f1051572
92805 Ref: 5091\7f1051593
92806 Ref: 5092\7f1051744
92807 Ref: 5093\7f1051814
92808 Ref: 5094\7f1051925
92809 Ref: 5095\7f1052029
92810 Ref: 5096\7f1055017
92811 Node: 13.7.1\7f1055772
92812 Ref: 5097\7f1056030
92813 Ref: 5098\7f1056125
92814 Ref: 5099\7f1056192
92815 Ref: 5100\7f1056270
92816 Ref: 5101\7f1056381
92817 Ref: 5102\7f1056541
92818 Ref: 5103\7f1057231
92819 Ref: 5104\7f1057291
92820 Ref: 5105\7f1057400
92821 Ref: 5106\7f1057695
92822 Ref: 5107\7f1057697
92823 Ref: 5108\7f1058432
92824 Node: 13.7.2\7f1058496
92825 Ref: 5109\7f1058786
92826 Ref: 5110\7f1059029
92827 Ref: 5111\7f1059137
92828 Ref: 5112\7f1059534
92829 Node: 13.8\7f1059829
92830 Ref: 5113\7f1059960
92831 Ref: 5114\7f1060145
92832 Ref: S0317\7f1060145
92833 Ref: 5115\7f1060149
92834 Ref: 5116\7f1060846
92835 Ref: 5117\7f1061199
92836 Ref: 5118\7f1061199
92837 Node: 13.9\7f1062703
92838 Ref: 5119\7f1062841
92839 Ref: 5120\7f1062841
92840 Ref: 5121\7f1062841
92841 Ref: 5122\7f1062841
92842 Ref: 5123\7f1062841
92843 Ref: 5124\7f1063176
92844 Ref: 5125\7f1064098
92845 Ref: 5126\7f1064098
92846 Ref: 5127\7f1065454
92847 Ref: 5128\7f1065653
92848 Ref: 5129\7f1065653
92849 Node: 13.9.1\7f1066098
92850 Ref: 5130\7f1066556
92851 Ref: 5131\7f1066762
92852 Ref: 5132\7f1066762
92853 Ref: 5133\7f1067060
92854 Ref: 5134\7f1068051
92855 Ref: 5135\7f1068297
92856 Ref: 5136\7f1068490
92857 Ref: 5137\7f1068490
92858 Ref: 5138\7f1068749
92859 Ref: 5139\7f1068751
92860 Ref: 5140\7f1069545
92861 Ref: 5141\7f1070213
92862 Node: 13.9.2\7f1070972
92863 Ref: 5142\7f1071417
92864 Ref: 5143\7f1071432
92865 Ref: 5144\7f1071554
92866 Node: 13.10\7f1072772
92867 Ref: 5145\7f1073241
92868 Ref: 5146\7f1073256
92869 Ref: 5147\7f1073548
92870 Node: 13.11\7f1074034
92871 Ref: 5148\7f1074160
92872 Ref: 5149\7f1074160
92873 Ref: 5150\7f1074160
92874 Ref: 5151\7f1074160
92875 Ref: 5152\7f1075077
92876 Ref: 5153\7f1075185
92877 Ref: 5154\7f1075369
92878 Ref: 5155\7f1075631
92879 Ref: 5156\7f1075893
92880 Ref: 5157\7f1076093
92881 Ref: 5158\7f1076093
92882 Ref: 5159\7f1076166
92883 Ref: 5160\7f1076166
92884 Ref: 5161\7f1076166
92885 Ref: 5162\7f1076366
92886 Ref: 5163\7f1076381
92887 Ref: 5164\7f1076513
92888 Ref: 5165\7f1076528
92889 Ref: 5166\7f1076792
92890 Ref: 5167\7f1076792
92891 Ref: 5168\7f1076792
92892 Ref: 5169\7f1076792
92893 Ref: 5170\7f1076992
92894 Ref: 5171\7f1076992
92895 Ref: 5172\7f1076992
92896 Ref: 5173\7f1076992
92897 Ref: 5174\7f1077295
92898 Ref: 5175\7f1077481
92899 Ref: 5176\7f1077483
92900 Ref: 5177\7f1077483
92901 Ref: 5178\7f1077937
92902 Ref: 5179\7f1078290
92903 Ref: 5180\7f1078524
92904 Ref: 5181\7f1080849
92905 Ref: 5182\7f1080849
92906 Ref: 5183\7f1080851
92907 Node: 13.11.1\7f1086894
92908 Ref: 5184\7f1087314
92909 Ref: 5185\7f1087329
92910 Ref: 5186\7f1087647
92911 Ref: 5187\7f1087662
92912 Node: 13.11.2\7f1088205
92913 Ref: 5188\7f1088368
92914 Ref: 5189\7f1088368
92915 Ref: 5190\7f1088368
92916 Ref: 5191\7f1088368
92917 Ref: 5192\7f1088368
92918 Ref: 5193\7f1088753
92919 Ref: 5194\7f1089193
92920 Ref: 5195\7f1090350
92921 Ref: 5196\7f1090350
92922 Ref: 5197\7f1090350
92923 Ref: 5198\7f1090350
92924 Ref: 5199\7f1090563
92925 Ref: 5200\7f1090709
92926 Ref: 5201\7f1090709
92927 Ref: 5202\7f1090798
92928 Ref: 5203\7f1090798
92929 Ref: 5204\7f1091159
92930 Ref: 5205\7f1091159
92931 Node: 13.11.3\7f1092158
92932 Ref: 5206\7f1092459
92933 Ref: 5207\7f1092460
92934 Ref: 5208\7f1092482
92935 Ref: 5209\7f1092541
92936 Ref: S0318\7f1092541
92937 Ref: 5210\7f1092559
92938 Ref: 5211\7f1093122
92939 Ref: 5212\7f1093122
92940 Ref: 5213\7f1093122
92941 Ref: 5214\7f1094001
92942 Ref: 5215\7f1094001
92943 Node: 13.11.4\7f1095458
92944 Ref: 5216\7f1095987
92945 Ref: 5217\7f1096091
92946 Ref: 5218\7f1096200
92947 Ref: 5219\7f1096267
92948 Ref: 5220\7f1096385
92949 Ref: 5221\7f1096602
92950 Ref: 5222\7f1096742
92951 Ref: 5223\7f1096900
92952 Ref: 5224\7f1097312
92953 Ref: 5225\7f1097542
92954 Ref: 5226\7f1097716
92955 Ref: 5227\7f1098002
92956 Ref: 5228\7f1098296
92957 Ref: 5229\7f1098566
92958 Ref: 5230\7f1098566
92959 Ref: 5231\7f1098566
92960 Ref: 5232\7f1098566
92961 Ref: 5233\7f1098566
92962 Ref: 5234\7f1099341
92963 Ref: 5235\7f1100483
92964 Ref: 5236\7f1100483
92965 Ref: 5237\7f1100928
92966 Ref: 5238\7f1101539
92967 Ref: 5239\7f1101539
92968 Ref: 5240\7f1101650
92969 Ref: 5241\7f1101650
92970 Ref: 5242\7f1101712
92971 Ref: 5243\7f1102116
92972 Ref: 5244\7f1102116
92973 Ref: 5245\7f1102116
92974 Node: 13.11.5\7f1104148
92975 Ref: 5246\7f1104521
92976 Ref: 5247\7f1105012
92977 Node: 13.11.6\7f1105286
92978 Node: 13.12\7f1111454
92979 Ref: 5248\7f1112011
92980 Ref: 5249\7f1112012
92981 Ref: 5250\7f1112025
92982 Ref: 5251\7f1112038
92983 Ref: 5252\7f1112075
92984 Ref: S0319\7f1112075
92985 Ref: 5253\7f1112092
92986 Ref: 5254\7f1112136
92987 Ref: 5255\7f1112150
92988 Ref: 5256\7f1112229
92989 Ref: S0320\7f1112229
92990 Ref: 5257\7f1112233
92991 Ref: 5258\7f1112241
92992 Ref: 5259\7f1112304
92993 Ref: 5260\7f1112668
92994 Ref: 5261\7f1112668
92995 Ref: 5262\7f1115140
92996 Ref: 5263\7f1115141
92997 Ref: 5264\7f1115158
92998 Ref: 5265\7f1115180
92999 Ref: 5266\7f1115685
93000 Ref: 5267\7f1115685
93001 Node: 13.12.1\7f1116564
93002 Ref: 5268\7f1116905
93003 Ref: 5269\7f1116905
93004 Ref: 5270\7f1117192
93005 Ref: 5271\7f1117192
93006 Ref: 5272\7f1117421
93007 Ref: 5273\7f1117421
93008 Ref: 5274\7f1119845
93009 Ref: 5275\7f1119845
93010 Ref: 5276\7f1120088
93011 Ref: 5277\7f1120088
93012 Ref: 5278\7f1120416
93013 Ref: 5279\7f1120416
93014 Ref: 5280\7f1120910
93015 Ref: 5281\7f1120910
93016 Ref: 5282\7f1121030
93017 Ref: 5283\7f1121030
93018 Ref: 5284\7f1121199
93019 Ref: 5285\7f1121199
93020 Ref: 5286\7f1121354
93021 Ref: 5287\7f1121354
93022 Ref: 5288\7f1122599
93023 Node: 13.13\7f1123022
93024 Ref: 5289\7f1123126
93025 Ref: 5290\7f1123126
93026 Node: 13.13.1\7f1123556
93027 Ref: 5291\7f1124402
93028 Ref: 5292\7f1124459
93029 Ref: 5293\7f1124480
93030 Ref: 5294\7f1124616
93031 Ref: 5295\7f1124676
93032 Ref: 5296\7f1124748
93033 Ref: 5297\7f1124858
93034 Ref: 5298\7f1124982
93035 Ref: 5299\7f1125161
93036 Node: 13.13.2\7f1126339
93037 Ref: 5300\7f1126798
93038 Ref: 5301\7f1126813
93039 Ref: 5302\7f1127515
93040 Ref: 5303\7f1127515
93041 Ref: 5304\7f1127889
93042 Ref: 5305\7f1128505
93043 Ref: 5306\7f1128520
93044 Ref: 5307\7f1128833
93045 Ref: 5308\7f1128848
93046 Ref: 5309\7f1131910
93047 Ref: 5310\7f1131925
93048 Ref: 5311\7f1132365
93049 Ref: 5312\7f1132380
93050 Ref: 5313\7f1132969
93051 Ref: 5314\7f1132984
93052 Ref: 5315\7f1133358
93053 Ref: 5316\7f1133373
93054 Ref: 5317\7f1135329
93055 Ref: 5318\7f1135344
93056 Ref: 5319\7f1136097
93057 Ref: 5320\7f1136112
93058 Ref: 5321\7f1136946
93059 Ref: 5322\7f1136946
93060 Ref: 5323\7f1137193
93061 Ref: 5324\7f1137947
93062 Ref: 5325\7f1138197
93063 Ref: 5326\7f1138375
93064 Ref: 5327\7f1138375
93065 Ref: 5328\7f1138375
93066 Ref: 5329\7f1138375
93067 Ref: 5330\7f1138375
93068 Ref: 5331\7f1138375
93069 Ref: 5332\7f1138375
93070 Ref: 5333\7f1138375
93071 Ref: 5334\7f1138784
93072 Ref: 5335\7f1138786
93073 Ref: 5336\7f1138786
93074 Ref: 5337\7f1138786
93075 Ref: 5338\7f1138786
93076 Ref: 5339\7f1138786
93077 Ref: 5340\7f1138786
93078 Ref: 5341\7f1138786
93079 Ref: 5342\7f1138925
93080 Ref: 5343\7f1140906
93081 Ref: 5344\7f1140906
93082 Ref: 5345\7f1141763
93083 Node: 13.14\7f1144649
93084 Ref: 5346\7f1145125
93085 Ref: 5347\7f1145125
93086 Ref: 5348\7f1145446
93087 Ref: 5349\7f1145774
93088 Ref: 5350\7f1145978
93089 Ref: 5351\7f1146272
93090 Ref: 5352\7f1146411
93091 Ref: 5353\7f1146562
93092 Ref: 5354\7f1146967
93093 Ref: 5355\7f1147074
93094 Ref: 5356\7f1147652
93095 Ref: 5357\7f1147748
93096 Ref: 5358\7f1148151
93097 Ref: 5359\7f1148339
93098 Ref: 5360\7f1148586
93099 Ref: 5361\7f1148888
93100 Ref: 5362\7f1148888
93101 Ref: 5363\7f1149237
93102 Ref: 5364\7f1149237
93103 Ref: 5365\7f1149632
93104 Ref: 5366\7f1149845
93105 Ref: 5367\7f1149988
93106 Ref: 5368\7f1150114
93107 Ref: 5369\7f1150260
93108 Ref: 5370\7f1150351
93109 Ref: 5371\7f1150557
93110 Ref: 5372\7f1150768
93111 Ref: 5373\7f1150827
93112 Ref: 5374\7f1150829
93113 Ref: 5375\7f1151072
93114 Ref: 5376\7f1151074
93115 Ref: 5377\7f1152168
93116 Node: Annex A\7f1152170
93117 Ref: 5378\7f1152328
93118 Ref: 5379\7f1152328
93119 Ref: 5380\7f1162993
93120 Node: A.1\7f1164460
93121 Ref: 5381\7f1164695
93122 Ref: 5382\7f1164903
93123 Ref: 5383\7f1165153
93124 Ref: 5384\7f1165225
93125 Ref: 5385\7f1166336
93126 Ref: 5386\7f1166397
93127 Ref: 5387\7f1166458
93128 Ref: 5388\7f1168324
93129 Ref: 5389\7f1170943
93130 Ref: 5390\7f1174634
93131 Ref: 5391\7f1174941
93132 Ref: 5392\7f1175076
93133 Ref: 5393\7f1175132
93134 Ref: 5394\7f1175190
93135 Ref: 5395\7f1176075
93136 Ref: 5396\7f1176262
93137 Ref: 5397\7f1176474
93138 Ref: 5398\7f1176715
93139 Ref: 5399\7f1176752
93140 Ref: 5400\7f1176789
93141 Ref: 5401\7f1176826
93142 Ref: 5402\7f1177588
93143 Node: A.2\7f1179724
93144 Ref: 5403\7f1179943
93145 Node: A.3\7f1180260
93146 Node: A.3.1\7f1181194
93147 Ref: 5404\7f1181514
93148 Ref: 5405\7f1181679
93149 Ref: 5406\7f1181864
93150 Node: A.3.2\7f1182423
93151 Ref: 5407\7f1182775
93152 Ref: 5408\7f1182872
93153 Ref: 5409\7f1182947
93154 Ref: 5410\7f1183022
93155 Ref: 5411\7f1183097
93156 Ref: 5412\7f1183172
93157 Ref: 5413\7f1183247
93158 Ref: 5414\7f1183322
93159 Ref: 5415\7f1183397
93160 Ref: 5416\7f1183515
93161 Ref: 5417\7f1183590
93162 Ref: 5418\7f1183665
93163 Ref: 5419\7f1183740
93164 Ref: 5420\7f1183815
93165 Ref: 5421\7f1183890
93166 Ref: 5422\7f1183965
93167 Ref: 5423\7f1184044
93168 Ref: 5424\7f1184178
93169 Ref: 5425\7f1184243
93170 Ref: 5426\7f1184308
93171 Ref: 5427\7f1184376
93172 Ref: 5428\7f1184435
93173 Ref: 5429\7f1184494
93174 Ref: 5430\7f1184630
93175 Ref: 5431\7f1184726
93176 Ref: 5432\7f1184791
93177 Ref: 5433\7f1184860
93178 Ref: 5434\7f1185004
93179 Ref: 5435\7f1185727
93180 Ref: 5436\7f1185918
93181 Ref: 5437\7f1186111
93182 Ref: 5438\7f1186362
93183 Ref: 5439\7f1186588
93184 Ref: 5440\7f1186831
93185 Ref: 5441\7f1187090
93186 Ref: 5442\7f1187281
93187 Ref: 5443\7f1187515
93188 Ref: 5444\7f1187709
93189 Node: A.3.3\7f1191682
93190 Ref: 5445\7f1192073
93191 Ref: 5446\7f1192135
93192 Ref: 5447\7f1192143
93193 Ref: 5448\7f1192215
93194 Ref: 5449\7f1192287
93195 Ref: 5450\7f1192359
93196 Ref: 5451\7f1192431
93197 Ref: 5452\7f1192503
93198 Ref: 5453\7f1192575
93199 Ref: 5454\7f1192647
93200 Ref: 5455\7f1192719
93201 Ref: 5456\7f1192791
93202 Ref: 5457\7f1192863
93203 Ref: 5458\7f1192936
93204 Ref: 5459\7f1193009
93205 Ref: 5460\7f1193082
93206 Ref: 5461\7f1193155
93207 Ref: 5462\7f1193228
93208 Ref: 5463\7f1193304
93209 Ref: 5464\7f1193377
93210 Ref: 5465\7f1193450
93211 Ref: 5466\7f1193523
93212 Ref: 5467\7f1193596
93213 Ref: 5468\7f1193669
93214 Ref: 5469\7f1193742
93215 Ref: 5470\7f1193815
93216 Ref: 5471\7f1193888
93217 Ref: 5472\7f1193961
93218 Ref: 5473\7f1194034
93219 Ref: 5474\7f1194107
93220 Ref: 5475\7f1194180
93221 Ref: 5476\7f1194253
93222 Ref: 5477\7f1194326
93223 Ref: 5478\7f1194399
93224 Ref: 5479\7f1194514
93225 Ref: 5480\7f1194595
93226 Ref: 5481\7f1194676
93227 Ref: 5482\7f1194757
93228 Ref: 5483\7f1194838
93229 Ref: 5484\7f1194919
93230 Ref: 5485\7f1195000
93231 Ref: 5486\7f1195081
93232 Ref: 5487\7f1195162
93233 Ref: 5488\7f1195243
93234 Ref: 5489\7f1195324
93235 Ref: 5490\7f1195405
93236 Ref: 5491\7f1195486
93237 Ref: 5492\7f1195567
93238 Ref: 5493\7f1195648
93239 Ref: 5494\7f1195706
93240 Ref: 5495\7f1195787
93241 Ref: 5496\7f1195948
93242 Ref: 5497\7f1196029
93243 Ref: 5498\7f1196110
93244 Ref: 5499\7f1196191
93245 Ref: 5500\7f1196272
93246 Ref: 5501\7f1196353
93247 Ref: 5502\7f1196434
93248 Ref: 5503\7f1196590
93249 Ref: 5504\7f1196671
93250 Ref: 5505\7f1196752
93251 Ref: 5506\7f1196833
93252 Ref: 5507\7f1196914
93253 Ref: 5508\7f1196999
93254 Ref: 5509\7f1197080
93255 Ref: 5510\7f1197161
93256 Ref: 5511\7f1197242
93257 Ref: 5512\7f1197323
93258 Ref: 5513\7f1197405
93259 Ref: 5514\7f1197487
93260 Ref: 5515\7f1197569
93261 Ref: 5516\7f1197651
93262 Ref: 5517\7f1197733
93263 Ref: 5518\7f1197815
93264 Ref: 5519\7f1197897
93265 Ref: 5520\7f1197979
93266 Ref: 5521\7f1198061
93267 Ref: 5522\7f1198143
93268 Ref: 5523\7f1198225
93269 Ref: 5524\7f1198311
93270 Ref: 5525\7f1198393
93271 Ref: 5526\7f1198475
93272 Ref: 5527\7f1198557
93273 Ref: 5528\7f1198639
93274 Ref: 5529\7f1198721
93275 Ref: 5530\7f1198803
93276 Ref: 5531\7f1198885
93277 Ref: 5532\7f1198967
93278 Ref: 5533\7f1199049
93279 Ref: 5534\7f1199131
93280 Ref: 5535\7f1199213
93281 Ref: 5536\7f1199295
93282 Ref: 5537\7f1199377
93283 Ref: 5538\7f1199459
93284 Ref: 5539\7f1199541
93285 Ref: 5540\7f1199651
93286 Ref: 5541\7f1199660
93287 Ref: 5542\7f1199714
93288 Ref: 5543\7f1199768
93289 Ref: 5544\7f1199822
93290 Ref: 5545\7f1199880
93291 Ref: 5546\7f1199954
93292 Ref: 5547\7f1200028
93293 Ref: 5548\7f1200102
93294 Ref: 5549\7f1200176
93295 Ref: 5550\7f1200250
93296 Ref: 5551\7f1200324
93297 Ref: 5552\7f1200398
93298 Ref: 5553\7f1200472
93299 Ref: 5554\7f1200546
93300 Ref: 5555\7f1200620
93301 Ref: 5556\7f1200694
93302 Ref: 5557\7f1200768
93303 Ref: 5558\7f1200842
93304 Ref: 5559\7f1200916
93305 Ref: 5560\7f1200990
93306 Ref: 5561\7f1201068
93307 Ref: 5562\7f1201142
93308 Ref: 5563\7f1201216
93309 Ref: 5564\7f1201290
93310 Ref: 5565\7f1201364
93311 Ref: 5566\7f1201438
93312 Ref: 5567\7f1201512
93313 Ref: 5568\7f1201586
93314 Ref: 5569\7f1201664
93315 Ref: 5570\7f1201738
93316 Ref: 5571\7f1201812
93317 Ref: 5572\7f1201886
93318 Ref: 5573\7f1201960
93319 Ref: 5574\7f1202034
93320 Ref: 5575\7f1202108
93321 Ref: 5576\7f1202182
93322 Ref: 5577\7f1202358
93323 Ref: 5578\7f1202444
93324 Ref: 5579\7f1202516
93325 Ref: 5580\7f1202602
93326 Ref: 5581\7f1202688
93327 Ref: 5582\7f1202774
93328 Ref: 5583\7f1202860
93329 Ref: 5584\7f1202946
93330 Ref: 5585\7f1203032
93331 Ref: 5586\7f1203118
93332 Ref: 5587\7f1203204
93333 Ref: 5588\7f1203290
93334 Ref: 5589\7f1203376
93335 Ref: 5590\7f1203462
93336 Ref: 5591\7f1203548
93337 Ref: 5592\7f1203628
93338 Ref: 5593\7f1203714
93339 Ref: 5594\7f1203862
93340 Ref: 5595\7f1203948
93341 Ref: 5596\7f1204017
93342 Ref: 5597\7f1204103
93343 Ref: 5598\7f1204189
93344 Ref: 5599\7f1204275
93345 Ref: 5600\7f1204361
93346 Ref: 5601\7f1204447
93347 Ref: 5602\7f1204533
93348 Ref: 5603\7f1204603
93349 Ref: 5604\7f1204689
93350 Ref: 5605\7f1204775
93351 Ref: 5606\7f1204861
93352 Ref: 5607\7f1204947
93353 Ref: 5608\7f1205033
93354 Ref: 5609\7f1205119
93355 Ref: 5610\7f1205205
93356 Ref: 5611\7f1205291
93357 Ref: 5612\7f1205439
93358 Ref: 5613\7f1205525
93359 Ref: 5614\7f1205611
93360 Ref: 5615\7f1205697
93361 Ref: 5616\7f1205783
93362 Ref: 5617\7f1205869
93363 Ref: 5618\7f1205955
93364 Ref: 5619\7f1206041
93365 Ref: 5620\7f1206127
93366 Ref: 5621\7f1206213
93367 Ref: 5622\7f1206299
93368 Ref: 5623\7f1206385
93369 Ref: 5624\7f1206471
93370 Ref: 5625\7f1206557
93371 Ref: 5626\7f1206643
93372 Ref: 5627\7f1206729
93373 Ref: 5628\7f1206877
93374 Ref: 5629\7f1206963
93375 Ref: 5630\7f1207049
93376 Ref: 5631\7f1207135
93377 Ref: 5632\7f1207221
93378 Ref: 5633\7f1207307
93379 Ref: 5634\7f1207393
93380 Ref: 5635\7f1207479
93381 Ref: 5636\7f1207565
93382 Ref: 5637\7f1207651
93383 Ref: 5638\7f1207737
93384 Ref: 5639\7f1207823
93385 Ref: 5640\7f1207909
93386 Ref: 5641\7f1207995
93387 Ref: 5642\7f1208081
93388 Ref: 5643\7f1208167
93389 Ref: 5644\7f1208315
93390 Ref: 5645\7f1208401
93391 Ref: 5646\7f1208487
93392 Ref: 5647\7f1208573
93393 Ref: 5648\7f1208659
93394 Ref: 5649\7f1208745
93395 Ref: 5650\7f1208831
93396 Ref: 5651\7f1208917
93397 Ref: 5652\7f1209003
93398 Ref: 5653\7f1209089
93399 Ref: 5654\7f1209175
93400 Ref: 5655\7f1209261
93401 Ref: 5656\7f1209347
93402 Ref: 5657\7f1209433
93403 Ref: 5658\7f1209519
93404 Ref: 5659\7f1209605
93405 Ref: 5660\7f1209753
93406 Ref: 5661\7f1209839
93407 Ref: 5662\7f1209925
93408 Ref: 5663\7f1210011
93409 Ref: 5664\7f1210097
93410 Ref: 5665\7f1210183
93411 Ref: 5666\7f1210269
93412 Ref: 5667\7f1210355
93413 Ref: 5668\7f1210441
93414 Ref: 5669\7f1210527
93415 Ref: 5670\7f1210613
93416 Ref: 5671\7f1210699
93417 Ref: 5672\7f1210785
93418 Ref: 5673\7f1210871
93419 Ref: 5674\7f1210957
93420 Ref: 5675\7f1211043
93421 Node: A.3.4\7f1211380
93422 Ref: 5676\7f1211708
93423 Ref: 5677\7f1211765
93424 Ref: 5678\7f1211843
93425 Ref: 5679\7f1211921
93426 Ref: 5680\7f1211999
93427 Ref: 5681\7f1212077
93428 Ref: 5682\7f1212171
93429 Ref: 5683\7f1212267
93430 Ref: 5684\7f1212347
93431 Ref: 5685\7f1212424
93432 Ref: 5686\7f1212525
93433 Ref: 5687\7f1212620
93434 Ref: 5688\7f1212726
93435 Ref: 5689\7f1212831
93436 Ref: 5690\7f1212987
93437 Ref: 5691\7f1213138
93438 Ref: 5692\7f1213300
93439 Ref: 5693\7f1213456
93440 Ref: 5694\7f1213638
93441 Node: A.3.5\7f1217987
93442 Ref: 5695\7f1218455
93443 Ref: 5696\7f1218509
93444 Ref: 5697\7f1218568
93445 Ref: 5698\7f1218641
93446 Ref: 5699\7f1218713
93447 Ref: 5700\7f1218784
93448 Ref: 5701\7f1218855
93449 Ref: 5702\7f1218927
93450 Ref: 5703\7f1219035
93451 Ref: 5704\7f1219119
93452 Ref: 5705\7f1219198
93453 Ref: 5706\7f1219272
93454 Ref: 5707\7f1219354
93455 Ref: 5708\7f1219425
93456 Ref: 5709\7f1219504
93457 Ref: 5710\7f1219592
93458 Ref: 5711\7f1219664
93459 Ref: 5712\7f1219738
93460 Ref: 5713\7f1219811
93461 Ref: 5714\7f1219890
93462 Ref: 5715\7f1219957
93463 Node: A.3.6\7f1226216
93464 Ref: 5716\7f1226418
93465 Node: A.4\7f1226620
93466 Node: A.4.1\7f1227693
93467 Ref: 5717\7f1228001
93468 Ref: 5718\7f1228067
93469 Ref: 5719\7f1228120
93470 Ref: 5720\7f1228173
93471 Ref: 5721\7f1228239
93472 Ref: 5722\7f1228258
93473 Ref: 5723\7f1228273
93474 Ref: 5724\7f1228286
93475 Ref: 5725\7f1228333
93476 Ref: 5726\7f1228383
93477 Ref: 5727\7f1228432
93478 Ref: 5728\7f1228478
93479 Ref: 5729\7f1228526
93480 Node: A.4.2\7f1228584
93481 Ref: 5730\7f1228979
93482 Ref: 5731\7f1229114
93483 Ref: 5732\7f1229206
93484 Ref: 5733\7f1229262
93485 Ref: 5734\7f1229446
93486 Ref: 5735\7f1229532
93487 Ref: 5736\7f1229614
93488 Ref: 5737\7f1229696
93489 Ref: 5738\7f1230251
93490 Ref: 5739\7f1230382
93491 Ref: 5740\7f1230742
93492 Ref: 5741\7f1230793
93493 Ref: 5742\7f1230878
93494 Ref: 5743\7f1230959
93495 Ref: 5744\7f1231107
93496 Ref: 5745\7f1231222
93497 Ref: 5746\7f1231345
93498 Ref: 5747\7f1231410
93499 Ref: 5748\7f1231514
93500 Ref: 5749\7f1231608
93501 Ref: 5750\7f1231702
93502 Ref: 5751\7f1235288
93503 Ref: 5752\7f1235405
93504 Ref: 5753\7f1237008
93505 Node: A.4.3\7f1237553
93506 Ref: 5754\7f1238864
93507 Ref: 5755\7f1239025
93508 Ref: 5756\7f1239330
93509 Ref: 5757\7f1239638
93510 Ref: 5758\7f1239934
93511 Ref: 5759\7f1240233
93512 Ref: 5760\7f1240491
93513 Ref: 5761\7f1240789
93514 Ref: 5762\7f1241041
93515 Ref: 5763\7f1241250
93516 Ref: 5764\7f1241403
93517 Ref: 5765\7f1241643
93518 Ref: 5766\7f1241837
93519 Ref: 5767\7f1241977
93520 Ref: 5768\7f1242305
93521 Ref: 5769\7f1242623
93522 Ref: 5770\7f1242768
93523 Ref: 5771\7f1242892
93524 Ref: 5772\7f1243046
93525 Ref: 5773\7f1243225
93526 Ref: 5774\7f1243475
93527 Ref: 5775\7f1243909
93528 Ref: 5776\7f1244083
93529 Ref: 5777\7f1244298
93530 Ref: 5778\7f1244481
93531 Ref: 5779\7f1244708
93532 Ref: 5780\7f1244880
93533 Ref: 5781\7f1245185
93534 Ref: 5782\7f1245304
93535 Ref: 5783\7f1245517
93536 Ref: 5784\7f1245701
93537 Ref: 5785\7f1245989
93538 Ref: 5786\7f1246162
93539 Ref: 5787\7f1246374
93540 Ref: 5788\7f1246547
93541 Ref: 5789\7f1263746
93542 Node: A.4.4\7f1263874
93543 Ref: 5790\7f1264811
93544 Ref: 5791\7f1264990
93545 Ref: 5792\7f1265025
93546 Ref: 5793\7f1265088
93547 Ref: 5794\7f1265124
93548 Ref: 5795\7f1265198
93549 Ref: 5796\7f1265268
93550 Ref: 5797\7f1265415
93551 Ref: 5798\7f1265587
93552 Ref: 5799\7f1265670
93553 Ref: 5800\7f1265852
93554 Ref: 5801\7f1266021
93555 Ref: 5802\7f1266224
93556 Ref: 5803\7f1266427
93557 Ref: 5804\7f1266633
93558 Ref: 5805\7f1266840
93559 Ref: 5806\7f1267032
93560 Ref: 5807\7f1267216
93561 Ref: 5808\7f1267951
93562 Ref: 5809\7f1268096
93563 Ref: 5810\7f1268291
93564 Ref: 5811\7f1268480
93565 Ref: 5812\7f1268680
93566 Ref: 5813\7f1270369
93567 Ref: 5814\7f1270704
93568 Ref: 5815\7f1271027
93569 Ref: 5816\7f1271350
93570 Ref: 5817\7f1271631
93571 Ref: 5818\7f1271955
93572 Ref: 5819\7f1272230
93573 Ref: 5820\7f1272459
93574 Ref: 5821\7f1272629
93575 Ref: 5822\7f1272891
93576 Ref: 5823\7f1273105
93577 Ref: 5824\7f1273262
93578 Ref: 5825\7f1273616
93579 Ref: 5826\7f1273960
93580 Ref: 5827\7f1274130
93581 Ref: 5828\7f1274268
93582 Ref: 5829\7f1274447
93583 Ref: 5830\7f1274643
93584 Ref: 5831\7f1274994
93585 Ref: 5832\7f1275316
93586 Ref: 5833\7f1275581
93587 Ref: 5834\7f1275816
93588 Ref: 5835\7f1276097
93589 Ref: 5836\7f1276348
93590 Ref: 5837\7f1276548
93591 Ref: 5838\7f1276759
93592 Ref: 5839\7f1276899
93593 Ref: 5840\7f1277011
93594 Ref: 5841\7f1277223
93595 Ref: 5842\7f1277404
93596 Ref: 5843\7f1277665
93597 Ref: 5844\7f1277896
93598 Ref: 5845\7f1278157
93599 Ref: 5846\7f1278834
93600 Ref: 5847\7f1279042
93601 Ref: 5848\7f1279247
93602 Node: A.4.5\7f1285455
93603 Ref: 5849\7f1286287
93604 Ref: 5850\7f1286383
93605 Ref: 5851\7f1286481
93606 Ref: 5852\7f1286557
93607 Ref: 5853\7f1286627
93608 Ref: 5854\7f1286681
93609 Ref: 5855\7f1286796
93610 Ref: 5856\7f1286894
93611 Ref: 5857\7f1286993
93612 Ref: 5858\7f1287075
93613 Ref: 5859\7f1287199
93614 Ref: 5860\7f1287324
93615 Ref: 5861\7f1287439
93616 Ref: 5862\7f1288095
93617 Ref: 5863\7f1288233
93618 Ref: 5864\7f1288421
93619 Ref: 5865\7f1288600
93620 Ref: 5866\7f1288791
93621 Ref: 5867\7f1290425
93622 Ref: 5868\7f1290744
93623 Ref: 5869\7f1291051
93624 Ref: 5870\7f1291360
93625 Ref: 5871\7f1291628
93626 Ref: 5872\7f1291937
93627 Ref: 5873\7f1292188
93628 Ref: 5874\7f1292407
93629 Ref: 5875\7f1292570
93630 Ref: 5876\7f1292819
93631 Ref: 5877\7f1293023
93632 Ref: 5878\7f1293173
93633 Ref: 5879\7f1293511
93634 Ref: 5880\7f1293839
93635 Ref: 5881\7f1294004
93636 Ref: 5882\7f1294138
93637 Ref: 5883\7f1294312
93638 Ref: 5884\7f1294501
93639 Ref: 5885\7f1294771
93640 Ref: 5886\7f1295012
93641 Ref: 5887\7f1295206
93642 Ref: 5888\7f1295370
93643 Ref: 5889\7f1295576
93644 Ref: 5890\7f1295752
93645 Ref: 5891\7f1295944
93646 Ref: 5892\7f1296106
93647 Ref: 5893\7f1296245
93648 Ref: 5894\7f1296353
93649 Ref: 5895\7f1296557
93650 Ref: 5896\7f1296731
93651 Ref: 5897\7f1296924
93652 Ref: 5898\7f1297087
93653 Ref: 5899\7f1297280
93654 Ref: 5900\7f1297950
93655 Node: A.4.6\7f1301670
93656 Ref: 5901\7f1302151
93657 Ref: 5902\7f1302232
93658 Ref: 5903\7f1302288
93659 Ref: 5904\7f1302344
93660 Ref: 5905\7f1302400
93661 Ref: 5906\7f1302456
93662 Ref: 5907\7f1302512
93663 Ref: 5908\7f1302568
93664 Ref: 5909\7f1302624
93665 Ref: 5910\7f1302680
93666 Ref: 5911\7f1302736
93667 Ref: 5912\7f1302792
93668 Ref: 5913\7f1302851
93669 Ref: 5914\7f1302969
93670 Ref: 5915\7f1303087
93671 Node: A.4.7\7f1303689
93672 Ref: 5916\7f1304676
93673 Ref: 5917\7f1304678
93674 Ref: 5918\7f1304678
93675 Ref: 5919\7f1304678
93676 Ref: 5920\7f1304678
93677 Ref: 5921\7f1304678
93678 Ref: 5922\7f1304678
93679 Ref: 5923\7f1304678
93680 Ref: 5924\7f1304678
93681 Ref: 5925\7f1304678
93682 Ref: 5926\7f1304678
93683 Ref: 5927\7f1304678
93684 Ref: 5928\7f1304678
93685 Ref: 5929\7f1304678
93686 Ref: 5930\7f1304678
93687 Ref: 5931\7f1304678
93688 Ref: 5932\7f1304792
93689 Ref: 5933\7f1304950
93690 Ref: 5934\7f1305052
93691 Ref: 5935\7f1305113
93692 Ref: 5936\7f1305319
93693 Ref: 5937\7f1305426
93694 Ref: 5938\7f1305530
93695 Ref: 5939\7f1305634
93696 Ref: 5940\7f1306313
93697 Ref: 5941\7f1306454
93698 Ref: 5942\7f1306839
93699 Ref: 5943\7f1306900
93700 Ref: 5944\7f1307007
93701 Ref: 5945\7f1307105
93702 Ref: 5946\7f1307284
93703 Ref: 5947\7f1307409
93704 Ref: 5948\7f1307547
93705 Ref: 5949\7f1307617
93706 Ref: 5950\7f1307731
93707 Ref: 5951\7f1307839
93708 Ref: 5952\7f1307943
93709 Ref: 5953\7f1310023
93710 Ref: 5954\7f1310633
93711 Node: A.4.8\7f1310776
93712 Ref: 5955\7f1311913
93713 Ref: 5956\7f1311915
93714 Ref: 5957\7f1311915
93715 Ref: 5958\7f1311915
93716 Ref: 5959\7f1311915
93717 Ref: 5960\7f1311915
93718 Ref: 5961\7f1311915
93719 Ref: 5962\7f1311915
93720 Ref: 5963\7f1311915
93721 Ref: 5964\7f1311915
93722 Ref: 5965\7f1311915
93723 Ref: 5966\7f1311915
93724 Ref: 5967\7f1311915
93725 Ref: 5968\7f1311915
93726 Ref: 5969\7f1311915
93727 Ref: 5970\7f1311915
93728 Ref: 5971\7f1312088
93729 Ref: 5972\7f1312219
93730 Ref: 5973\7f1312333
93731 Ref: 5974\7f1312401
93732 Ref: 5975\7f1312631
93733 Ref: 5976\7f1312753
93734 Ref: 5977\7f1312869
93735 Ref: 5978\7f1312983
93736 Ref: 5979\7f1313743
93737 Ref: 5980\7f1313899
93738 Ref: 5981\7f1314319
93739 Ref: 5982\7f1314392
93740 Ref: 5983\7f1314513
93741 Ref: 5984\7f1314626
93742 Ref: 5985\7f1314838
93743 Ref: 5986\7f1314975
93744 Ref: 5987\7f1315133
93745 Ref: 5988\7f1315210
93746 Ref: 5989\7f1315339
93747 Ref: 5990\7f1315462
93748 Ref: 5991\7f1315580
93749 Ref: 5992\7f1315831
93750 Ref: 5993\7f1317866
93751 Ref: 5994\7f1318055
93752 Ref: 5995\7f1318732
93753 Node: A.4.9\7f1318885
93754 Ref: 5996\7f1319223
93755 Ref: 5997\7f1319814
93756 Ref: 5998\7f1320316
93757 Ref: 5999\7f1320656
93758 Ref: 6000\7f1321309
93759 Ref: 6001\7f1321693
93760 Ref: 6002\7f1322122
93761 Node: A.4.10\7f1322576
93762 Ref: 6003\7f1322912
93763 Ref: 6004\7f1323587
93764 Ref: 6005\7f1323963
93765 Ref: 6006\7f1324384
93766 Ref: 6007\7f1324788
93767 Ref: 6008\7f1325178
93768 Ref: 6009\7f1325553
93769 Ref: 6010\7f1325971
93770 Node: A.4.11\7f1326209
93771 Ref: 6011\7f1326727
93772 Ref: 6012\7f1326885
93773 Ref: 6013\7f1326954
93774 Ref: 6014\7f1326997
93775 Ref: 6015\7f1327042
93776 Ref: 6016\7f1327085
93777 Ref: 6017\7f1327126
93778 Ref: 6018\7f1327310
93779 Ref: 6019\7f1327447
93780 Ref: 6020\7f1327584
93781 Ref: 6021\7f1327711
93782 Ref: 6022\7f1327888
93783 Ref: 6023\7f1328055
93784 Ref: 6024\7f1328312
93785 Ref: 6025\7f1328529
93786 Ref: 6026\7f1328689
93787 Ref: 6027\7f1328895
93788 Ref: 6028\7f1329080
93789 Ref: 6029\7f1329258
93790 Ref: 6030\7f1329450
93791 Ref: 6031\7f1329580
93792 Ref: 6032\7f1329727
93793 Ref: 6033\7f1329857
93794 Ref: 6034\7f1329924
93795 Ref: 6035\7f1330029
93796 Ref: 6036\7f1330222
93797 Ref: 6037\7f1330419
93798 Ref: 6038\7f1330554
93799 Ref: 6039\7f1330706
93800 Ref: 6040\7f1330841
93801 Ref: 6041\7f1330913
93802 Ref: 6042\7f1331028
93803 Ref: 6043\7f1331236
93804 Ref: 6044\7f1331438
93805 Ref: 6045\7f1331578
93806 Ref: 6046\7f1331735
93807 Ref: 6047\7f1331875
93808 Ref: 6048\7f1331952
93809 Ref: 6049\7f1332414
93810 Ref: 6050\7f1332414
93811 Ref: 6051\7f1332414
93812 Ref: 6052\7f1332414
93813 Node: A.5\7f1342152
93814 Ref: 6053\7f1342840
93815 Ref: 6054\7f1342875
93816 Ref: 6055\7f1342911
93817 Ref: 6056\7f1343044
93818 Node: A.5.1\7f1343713
93819 Ref: 6057\7f1344347
93820 Ref: 6058\7f1344477
93821 Ref: 6059\7f1344558
93822 Ref: 6060\7f1344639
93823 Ref: 6061\7f1344720
93824 Ref: 6062\7f1344885
93825 Ref: 6063\7f1344966
93826 Ref: 6064\7f1345047
93827 Ref: 6065\7f1345128
93828 Ref: 6066\7f1345209
93829 Ref: 6067\7f1345290
93830 Ref: 6068\7f1345371
93831 Ref: 6069\7f1345452
93832 Ref: 6070\7f1345536
93833 Ref: 6071\7f1345617
93834 Ref: 6072\7f1345698
93835 Ref: 6073\7f1345779
93836 Ref: 6074\7f1345860
93837 Ref: 6075\7f1346062
93838 Ref: 6076\7f1346264
93839 Ref: 6077\7f1346466
93840 Ref: 6078\7f1346671
93841 Ref: 6079\7f1346752
93842 Ref: 6080\7f1346833
93843 Ref: 6081\7f1346914
93844 Ref: 6082\7f1346995
93845 Ref: 6083\7f1347076
93846 Ref: 6084\7f1347157
93847 Ref: 6085\7f1347238
93848 Ref: 6086\7f1347362
93849 Ref: 6087\7f1351614
93850 Ref: 6088\7f1351614
93851 Ref: 6089\7f1351614
93852 Ref: 6090\7f1352410
93853 Ref: 6091\7f1352658
93854 Ref: 6092\7f1353216
93855 Node: A.5.2\7f1355541
93856 Ref: 6093\7f1355966
93857 Ref: 6094\7f1357058
93858 Ref: 6095\7f1357106
93859 Ref: 6096\7f1357155
93860 Ref: 6097\7f1357221
93861 Ref: 6098\7f1357297
93862 Ref: 6099\7f1357398
93863 Ref: 6100\7f1357484
93864 Ref: 6101\7f1357524
93865 Ref: 6102\7f1357627
93866 Ref: 6103\7f1357719
93867 Ref: 6104\7f1357813
93868 Ref: 6105\7f1357874
93869 Ref: 6106\7f1358060
93870 Ref: 6107\7f1358172
93871 Ref: 6108\7f1358317
93872 Ref: 6109\7f1358368
93873 Ref: 6110\7f1358438
93874 Ref: 6111\7f1358539
93875 Ref: 6112\7f1358625
93876 Ref: 6113\7f1358665
93877 Ref: 6114\7f1358768
93878 Ref: 6115\7f1358860
93879 Ref: 6116\7f1358954
93880 Ref: 6117\7f1359015
93881 Ref: 6118\7f1359204
93882 Ref: 6119\7f1359515
93883 Ref: 6120\7f1361189
93884 Ref: 6121\7f1361425
93885 Ref: 6122\7f1362485
93886 Ref: 6123\7f1362485
93887 Ref: 6124\7f1362485
93888 Ref: 6125\7f1362777
93889 Ref: 6126\7f1362779
93890 Node: A.5.3\7f1370579
93891 Ref: 6127\7f1370784
93892 Ref: 6128\7f1370912
93893 Ref: 6129\7f1370927
93894 Ref: 6130\7f1371085
93895 Ref: 6131\7f1371617
93896 Ref: 6132\7f1371632
93897 Ref: 6133\7f1372030
93898 Ref: 6134\7f1372045
93899 Ref: 6135\7f1372430
93900 Ref: 6136\7f1372445
93901 Ref: 6137\7f1372823
93902 Ref: 6138\7f1372838
93903 Ref: 6139\7f1373354
93904 Ref: 6140\7f1373452
93905 Ref: 6141\7f1373536
93906 Ref: 6142\7f1373538
93907 Ref: 6143\7f1373815
93908 Ref: 6144\7f1373830
93909 Ref: 6145\7f1374143
93910 Ref: 6146\7f1374158
93911 Ref: 6147\7f1374509
93912 Ref: 6148\7f1374524
93913 Ref: 6149\7f1374968
93914 Ref: 6150\7f1375274
93915 Ref: 6151\7f1375391
93916 Ref: 6152\7f1375406
93917 Ref: 6153\7f1375668
93918 Ref: 6154\7f1375683
93919 Ref: 6155\7f1376073
93920 Ref: 6156\7f1376088
93921 Ref: 6157\7f1376329
93922 Ref: 6158\7f1376699
93923 Ref: 6159\7f1376701
93924 Ref: 6160\7f1376888
93925 Ref: 6161\7f1376903
93926 Ref: 6162\7f1377139
93927 Ref: 6163\7f1377439
93928 Ref: 6164\7f1377441
93929 Ref: 6165\7f1377619
93930 Ref: 6166\7f1377634
93931 Ref: 6167\7f1378075
93932 Ref: 6168\7f1378090
93933 Ref: 6169\7f1378585
93934 Ref: 6170\7f1378600
93935 Ref: 6171\7f1379037
93936 Ref: 6172\7f1379052
93937 Ref: 6173\7f1379519
93938 Ref: 6174\7f1379534
93939 Ref: 6175\7f1380177
93940 Ref: 6176\7f1380195
93941 Ref: 6177\7f1380210
93942 Ref: 6178\7f1380592
93943 Ref: 6179\7f1380607
93944 Ref: 6180\7f1380778
93945 Ref: 6181\7f1381095
93946 Ref: 6182\7f1381097
93947 Ref: 6183\7f1381245
93948 Ref: 6184\7f1381260
93949 Ref: 6185\7f1381435
93950 Ref: 6186\7f1381646
93951 Ref: 6187\7f1381648
93952 Ref: 6188\7f1381929
93953 Ref: 6189\7f1381944
93954 Ref: 6190\7f1382122
93955 Ref: 6191\7f1382331
93956 Ref: 6192\7f1382333
93957 Ref: 6193\7f1382546
93958 Ref: 6194\7f1382561
93959 Ref: 6195\7f1383211
93960 Ref: 6196\7f1383226
93961 Ref: 6197\7f1383226
93962 Ref: 6198\7f1383408
93963 Ref: 6199\7f1383423
93964 Ref: 6200\7f1383587
93965 Ref: 6201\7f1383838
93966 Ref: 6202\7f1383839
93967 Ref: 6203\7f1384107
93968 Ref: 6204\7f1384226
93969 Ref: 6205\7f1384241
93970 Ref: 6206\7f1384832
93971 Ref: 6207\7f1384847
93972 Ref: 6208\7f1385266
93973 Ref: 6209\7f1385281
93974 Ref: 6210\7f1385442
93975 Ref: 6211\7f1385457
93976 Ref: 6212\7f1385594
93977 Ref: 6213\7f1385609
93978 Ref: 6214\7f1386043
93979 Ref: 6215\7f1386058
93980 Ref: 6216\7f1386494
93981 Ref: 6217\7f1386509
93982 Node: A.5.4\7f1386930
93983 Ref: 6218\7f1387115
93984 Ref: 6219\7f1387240
93985 Ref: 6220\7f1387255
93986 Ref: 6221\7f1387430
93987 Ref: 6222\7f1387445
93988 Ref: 6223\7f1387757
93989 Ref: 6224\7f1387772
93990 Node: A.6\7f1388105
93991 Ref: 6225\7f1388216
93992 Ref: 6226\7f1388216
93993 Node: A.7\7f1388907
93994 Ref: 6227\7f1389100
93995 Ref: 6228\7f1389100
93996 Ref: 6229\7f1389100
93997 Ref: 6230\7f1389676
93998 Ref: 6231\7f1391397
93999 Ref: 6232\7f1391399
94000 Ref: 6233\7f1391399
94001 Ref: 6234\7f1391462
94002 Ref: 6235\7f1392726
94003 Ref: 6236\7f1392728
94004 Node: A.8\7f1393520
94005 Ref: 6237\7f1393707
94006 Ref: 6238\7f1393707
94007 Ref: 6239\7f1393707
94008 Ref: 6240\7f1394136
94009 Ref: 6241\7f1394555
94010 Ref: 6242\7f1394555
94011 Ref: 6243\7f1394555
94012 Ref: 6244\7f1395111
94013 Node: A.8.1\7f1395610
94014 Ref: 6245\7f1395992
94015 Ref: 6246\7f1396009
94016 Ref: 6247\7f1396055
94017 Ref: 6248\7f1396153
94018 Ref: 6249\7f1396363
94019 Ref: 6250\7f1396555
94020 Ref: 6251\7f1396606
94021 Ref: 6252\7f1396657
94022 Ref: 6253\7f1396729
94023 Ref: 6254\7f1396782
94024 Ref: 6255\7f1396846
94025 Ref: 6256\7f1396907
94026 Ref: 6257\7f1396972
94027 Ref: 6258\7f1397082
94028 Ref: 6259\7f1397154
94029 Ref: 6260\7f1397228
94030 Ref: 6261\7f1397310
94031 Ref: 6262\7f1397379
94032 Ref: 6263\7f1397446
94033 Ref: 6264\7f1397513
94034 Ref: 6265\7f1397579
94035 Ref: 6266\7f1397648
94036 Ref: 6267\7f1397714
94037 Ref: 6268\7f1397911
94038 Node: A.8.2\7f1397972
94039 Node: A.8.3\7f1405526
94040 Node: A.8.4\7f1407298
94041 Ref: 6269\7f1407674
94042 Ref: 6270\7f1407691
94043 Ref: 6271\7f1407737
94044 Ref: 6272\7f1407796
94045 Ref: 6273\7f1407860
94046 Ref: 6274\7f1407958
94047 Ref: 6275\7f1408170
94048 Ref: 6276\7f1408362
94049 Ref: 6277\7f1408413
94050 Ref: 6278\7f1408464
94051 Ref: 6279\7f1408536
94052 Ref: 6280\7f1408589
94053 Ref: 6281\7f1408653
94054 Ref: 6282\7f1408714
94055 Ref: 6283\7f1408779
94056 Ref: 6284\7f1408889
94057 Ref: 6285\7f1409031
94058 Ref: 6286\7f1409106
94059 Ref: 6287\7f1409248
94060 Ref: 6288\7f1409322
94061 Ref: 6289\7f1409399
94062 Ref: 6290\7f1409466
94063 Ref: 6291\7f1409528
94064 Ref: 6292\7f1409610
94065 Ref: 6293\7f1409679
94066 Ref: 6294\7f1409746
94067 Ref: 6295\7f1409813
94068 Ref: 6296\7f1409879
94069 Ref: 6297\7f1409948
94070 Ref: 6298\7f1410014
94071 Ref: 6299\7f1410207
94072 Node: A.8.5\7f1410264
94073 Node: A.9\7f1413618
94074 Ref: 6300\7f1414211
94075 Ref: 6301\7f1414259
94076 Ref: 6302\7f1414379
94077 Ref: 6303\7f1414523
94078 Ref: 6304\7f1414602
94079 Ref: 6305\7f1414691
94080 Node: A.10\7f1415447
94081 Ref: 6306\7f1417673
94082 Ref: 6307\7f1417673
94083 Ref: 6308\7f1418064
94084 Ref: 6309\7f1418388
94085 Ref: 6310\7f1418388
94086 Ref: 6311\7f1418388
94087 Ref: 6312\7f1419682
94088 Ref: 6313\7f1419688
94089 Ref: 6314\7f1419688
94090 Ref: 6315\7f1419688
94091 Ref: 6316\7f1419688
94092 Ref: 6317\7f1420501
94093 Ref: 6318\7f1420501
94094 Node: A.10.1\7f1421946
94095 Ref: 6319\7f1422230
94096 Ref: 6320\7f1422247
94097 Ref: 6321\7f1422293
94098 Ref: 6322\7f1422356
94099 Ref: 6323\7f1422416
94100 Ref: 6324\7f1422466
94101 Ref: 6325\7f1422547
94102 Ref: 6326\7f1422621
94103 Ref: 6327\7f1422675
94104 Ref: 6328\7f1422764
94105 Ref: 6329\7f1422985
94106 Ref: 6330\7f1423182
94107 Ref: 6331\7f1423234
94108 Ref: 6332\7f1423286
94109 Ref: 6333\7f1423359
94110 Ref: 6334\7f1423415
94111 Ref: 6335\7f1423480
94112 Ref: 6336\7f1423542
94113 Ref: 6337\7f1423608
94114 Ref: 6338\7f1423732
94115 Ref: 6339\7f1423783
94116 Ref: 6340\7f1423834
94117 Ref: 6341\7f1423888
94118 Ref: 6342\7f1423939
94119 Ref: 6343\7f1423990
94120 Ref: 6344\7f1424045
94121 Ref: 6345\7f1424096
94122 Ref: 6346\7f1424147
94123 Ref: 6347\7f1424198
94124 Ref: 6348\7f1424261
94125 Ref: 6349\7f1424314
94126 Ref: 6350\7f1424367
94127 Ref: 6351\7f1424424
94128 Ref: 6352\7f1424477
94129 Ref: 6353\7f1424530
94130 Ref: 6354\7f1424612
94131 Ref: 6355\7f1424659
94132 Ref: 6356\7f1424742
94133 Ref: 6357\7f1424813
94134 Ref: 6358\7f1424869
94135 Ref: 6359\7f1424940
94136 Ref: 6360\7f1424996
94137 Ref: 6361\7f1425061
94138 Ref: 6362\7f1425109
94139 Ref: 6363\7f1425174
94140 Ref: 6364\7f1425268
94141 Ref: 6365\7f1425387
94142 Ref: 6366\7f1425456
94143 Ref: 6367\7f1425575
94144 Ref: 6368\7f1425644
94145 Ref: 6369\7f1425711
94146 Ref: 6370\7f1425761
94147 Ref: 6371\7f1425813
94148 Ref: 6372\7f1425845
94149 Ref: 6373\7f1425897
94150 Ref: 6374\7f1425930
94151 Ref: 6375\7f1425997
94152 Ref: 6376\7f1426047
94153 Ref: 6377\7f1426114
94154 Ref: 6378\7f1426164
94155 Ref: 6379\7f1426237
94156 Ref: 6380\7f1426295
94157 Ref: 6381\7f1426368
94158 Ref: 6382\7f1426425
94159 Ref: 6383\7f1426491
94160 Ref: 6384\7f1426540
94161 Ref: 6385\7f1426606
94162 Ref: 6386\7f1426655
94163 Ref: 6387\7f1426721
94164 Ref: 6388\7f1426809
94165 Ref: 6389\7f1426876
94166 Ref: 6390\7f1426925
94167 Ref: 6391\7f1426991
94168 Ref: 6392\7f1427040
94169 Ref: 6393\7f1427216
94170 Ref: 6394\7f1427337
94171 Ref: 6395\7f1427456
94172 Ref: 6396\7f1427520
94173 Ref: 6397\7f1427696
94174 Ref: 6398\7f1427852
94175 Ref: 6399\7f1427916
94176 Ref: 6400\7f1427962
94177 Ref: 6401\7f1428025
94178 Ref: 6402\7f1428071
94179 Ref: 6403\7f1428214
94180 Ref: 6404\7f1428288
94181 Ref: 6405\7f1428351
94182 Ref: 6406\7f1428397
94183 Ref: 6407\7f1428465
94184 Ref: 6408\7f1428626
94185 Ref: 6409\7f1428650
94186 Ref: 6410\7f1428697
94187 Ref: 6411\7f1428762
94188 Ref: 6412\7f1428901
94189 Ref: 6413\7f1428997
94190 Ref: 6414\7f1429211
94191 Ref: 6415\7f1429378
94192 Ref: 6416\7f1429510
94193 Ref: 6417\7f1429733
94194 Ref: 6418\7f1429757
94195 Ref: 6419\7f1429804
94196 Ref: 6420\7f1429869
94197 Ref: 6421\7f1430008
94198 Ref: 6422\7f1430104
94199 Ref: 6423\7f1430318
94200 Ref: 6424\7f1430485
94201 Ref: 6425\7f1430617
94202 Ref: 6426\7f1430906
94203 Ref: 6427\7f1430928
94204 Ref: 6428\7f1430966
94205 Ref: 6429\7f1431015
94206 Ref: 6430\7f1431072
94207 Ref: 6431\7f1431212
94208 Ref: 6432\7f1431308
94209 Ref: 6433\7f1431567
94210 Ref: 6434\7f1431784
94211 Ref: 6435\7f1431915
94212 Ref: 6436\7f1432184
94213 Ref: 6437\7f1432206
94214 Ref: 6438\7f1432251
94215 Ref: 6439\7f1432295
94216 Ref: 6440\7f1432352
94217 Ref: 6441\7f1432492
94218 Ref: 6442\7f1432588
94219 Ref: 6443\7f1432847
94220 Ref: 6444\7f1433064
94221 Ref: 6445\7f1433196
94222 Ref: 6446\7f1433475
94223 Ref: 6447\7f1433499
94224 Ref: 6448\7f1433544
94225 Ref: 6449\7f1433588
94226 Ref: 6450\7f1433645
94227 Ref: 6451\7f1433785
94228 Ref: 6452\7f1433881
94229 Ref: 6453\7f1434140
94230 Ref: 6454\7f1434357
94231 Ref: 6455\7f1434489
94232 Ref: 6456\7f1434826
94233 Ref: 6457\7f1434854
94234 Ref: 6458\7f1434895
94235 Ref: 6459\7f1434967
94236 Ref: 6460\7f1435057
94237 Ref: 6461\7f1435104
94238 Ref: 6462\7f1435322
94239 Ref: 6463\7f1435497
94240 Ref: 6464\7f1435630
94241 Ref: 6465\7f1435819
94242 Ref: 6466\7f1435888
94243 Ref: 6467\7f1435955
94244 Ref: 6468\7f1436022
94245 Ref: 6469\7f1436088
94246 Ref: 6470\7f1436157
94247 Ref: 6471\7f1436223
94248 Ref: 6472\7f1436290
94249 Ref: 6473\7f1436479
94250 Node: A.10.2\7f1436500
94251 Node: A.10.3\7f1438922
94252 Ref: 6474\7f1442259
94253 Node: A.10.4\7f1442877
94254 Node: A.10.5\7f1445410
94255 Node: A.10.6\7f1455440
94256 Ref: 6475\7f1457526
94257 Node: A.10.7\7f1461546
94258 Ref: 6476\7f1463306
94259 Ref: 6477\7f1464661
94260 Ref: 6478\7f1466495
94261 Ref: 6479\7f1467208
94262 Node: A.10.8\7f1469274
94263 Ref: 6480\7f1473787
94264 Node: A.10.9\7f1474665
94265 Ref: 6481\7f1481371
94266 Node: A.10.10\7f1483017
94267 Node: A.10.11\7f1487598
94268 Ref: 6482\7f1488190
94269 Ref: 6483\7f1488214
94270 Ref: 6484\7f1488321
94271 Ref: 6485\7f1488395
94272 Ref: 6486\7f1488507
94273 Ref: 6487\7f1488585
94274 Ref: 6488\7f1488691
94275 Ref: 6489\7f1488766
94276 Ref: 6490\7f1488868
94277 Node: A.10.12\7f1490285
94278 Ref: 6491\7f1490743
94279 Ref: 6492\7f1490767
94280 Ref: 6493\7f1490886
94281 Ref: 6494\7f1490972
94282 Ref: 6495\7f1491096
94283 Ref: 6496\7f1491186
94284 Ref: 6497\7f1491304
94285 Ref: 6498\7f1491391
94286 Ref: 6499\7f1491505
94287 Node: A.11\7f1493138
94288 Ref: 6500\7f1493671
94289 Ref: 6501\7f1493954
94290 Ref: 6502\7f1493954
94291 Ref: 6503\7f1494228
94292 Ref: 6504\7f1494525
94293 Ref: 6505\7f1494527
94294 Ref: 6506\7f1494831
94295 Ref: 6507\7f1494831
94296 Ref: 6508\7f1495357
94297 Ref: 6509\7f1495357
94298 Node: A.12\7f1495903
94299 Node: A.12.1\7f1496405
94300 Ref: 6510\7f1496545
94301 Ref: 6511\7f1497505
94302 Ref: 6512\7f1497505
94303 Ref: 6513\7f1497611
94304 Ref: 6514\7f1497708
94305 Ref: 6515\7f1497777
94306 Ref: 6516\7f1497824
94307 Ref: 6517\7f1497891
94308 Ref: 6518\7f1497961
94309 Ref: 6519\7f1498081
94310 Ref: 6520\7f1498305
94311 Ref: 6521\7f1498498
94312 Ref: 6522\7f1498551
94313 Ref: 6523\7f1498604
94314 Ref: 6524\7f1498678
94315 Ref: 6525\7f1498734
94316 Ref: 6526\7f1498797
94317 Ref: 6527\7f1498857
94318 Ref: 6528\7f1498921
94319 Ref: 6529\7f1498989
94320 Ref: 6530\7f1499061
94321 Ref: 6531\7f1499297
94322 Ref: 6532\7f1499518
94323 Ref: 6533\7f1499779
94324 Ref: 6534\7f1499941
94325 Ref: 6535\7f1500147
94326 Ref: 6536\7f1500225
94327 Ref: 6537\7f1500293
94328 Ref: 6538\7f1500357
94329 Ref: 6539\7f1500438
94330 Ref: 6540\7f1500497
94331 Ref: 6541\7f1500567
94332 Ref: 6542\7f1500635
94333 Ref: 6543\7f1500703
94334 Ref: 6544\7f1500770
94335 Ref: 6545\7f1500840
94336 Ref: 6546\7f1500907
94337 Ref: 6547\7f1501110
94338 Ref: 6548\7f1504687
94339 Node: A.12.2\7f1505020
94340 Ref: 6549\7f1505418
94341 Ref: 6550\7f1505473
94342 Ref: 6551\7f1505553
94343 Node: A.12.3\7f1506177
94344 Ref: 6552\7f1506600
94345 Ref: 6553\7f1506660
94346 Ref: 6554\7f1506740
94347 Node: A.12.4\7f1506927
94348 Ref: 6555\7f1507366
94349 Ref: 6556\7f1507431
94350 Ref: 6557\7f1507513
94351 Node: A.13\7f1507707
94352 Ref: 6558\7f1508096
94353 Ref: 6559\7f1508139
94354 Ref: 6560\7f1508173
94355 Ref: 6561\7f1508207
94356 Ref: 6562\7f1508241
94357 Ref: 6563\7f1508275
94358 Ref: 6564\7f1508309
94359 Ref: 6565\7f1508343
94360 Ref: 6566\7f1508377
94361 Ref: 6567\7f1511884
94362 Ref: 6568\7f1512215
94363 Ref: 6569\7f1512217
94364 Node: A.14\7f1512219
94365 Ref: 6570\7f1512380
94366 Node: A.15\7f1513082
94367 Ref: 6571\7f1513522
94368 Ref: 6572\7f1513584
94369 Ref: 6573\7f1513634
94370 Ref: 6574\7f1513700
94371 Ref: 6575\7f1513743
94372 Ref: 6576\7f1513800
94373 Ref: 6577\7f1513839
94374 Ref: 6578\7f1513896
94375 Ref: 6579\7f1514697
94376 Node: A.16\7f1516562
94377 Ref: 6580\7f1517004
94378 Ref: 6581\7f1517074
94379 Ref: 6582\7f1517130
94380 Ref: 6583\7f1517192
94381 Ref: 6584\7f1517330
94382 Ref: 6585\7f1517395
94383 Ref: 6586\7f1517524
94384 Ref: 6587\7f1517585
94385 Ref: 6588\7f1517641
94386 Ref: 6589\7f1517706
94387 Ref: 6590\7f1517921
94388 Ref: 6591\7f1517988
94389 Ref: 6592\7f1518057
94390 Ref: 6593\7f1518135
94391 Ref: 6594\7f1518202
94392 Ref: 6595\7f1518269
94393 Ref: 6596\7f1518480
94394 Ref: 6597\7f1518596
94395 Ref: 6598\7f1518724
94396 Ref: 6599\7f1518798
94397 Ref: 6600\7f1518869
94398 Ref: 6601\7f1518934
94399 Ref: 6602\7f1518999
94400 Ref: 6603\7f1519064
94401 Ref: 6604\7f1519184
94402 Ref: 6605\7f1519244
94403 Ref: 6606\7f1519308
94404 Ref: 6607\7f1519364
94405 Ref: 6608\7f1519625
94406 Ref: 6609\7f1519690
94407 Ref: 6610\7f1519769
94408 Ref: 6611\7f1520237
94409 Ref: 6612\7f1520343
94410 Ref: 6613\7f1520447
94411 Ref: 6614\7f1520549
94412 Ref: 6615\7f1520651
94413 Ref: 6616\7f1520760
94414 Ref: 6617\7f1520833
94415 Ref: 6618\7f1520904
94416 Ref: 6619\7f1520974
94417 Ref: 6620\7f1521501
94418 Ref: 6621\7f1521503
94419 Ref: 6622\7f1521503
94420 Ref: 6623\7f1521710
94421 Ref: 6624\7f1521712
94422 Ref: 6625\7f1522374
94423 Ref: 6626\7f1522376
94424 Ref: 6627\7f1522565
94425 Ref: 6628\7f1522702
94426 Ref: 6629\7f1537062
94427 Ref: 6630\7f1543910
94428 Node: A.16.1\7f1545914
94429 Ref: 6631\7f1546476
94430 Ref: 6632\7f1546499
94431 Ref: 6633\7f1546571
94432 Ref: 6634\7f1546651
94433 Ref: 6635\7f1546733
94434 Ref: 6636\7f1546816
94435 Ref: 6637\7f1546886
94436 Ref: 6638\7f1546961
94437 Ref: 6639\7f1547077
94438 Ref: 6640\7f1547211
94439 Ref: 6641\7f1547286
94440 Ref: 6642\7f1547357
94441 Node: A.17\7f1551945
94442 Ref: 6643\7f1552103
94443 Ref: 6644\7f1552581
94444 Ref: 6645\7f1552656
94445 Ref: 6646\7f1552720
94446 Ref: 6647\7f1552803
94447 Ref: 6648\7f1552868
94448 Ref: 6649\7f1552934
94449 Ref: 6650\7f1552978
94450 Ref: 6651\7f1553008
94451 Ref: 6652\7f1556102
94452 Ref: 6653\7f1556478
94453 Node: A.18\7f1558133
94454 Ref: 6654\7f1558746
94455 Ref: 6655\7f1558746
94456 Ref: 6656\7f1559201
94457 Ref: 6657\7f1559202
94458 Ref: 6658\7f1559589
94459 Node: A.18.1\7f1561672
94460 Ref: 6659\7f1562012
94461 Ref: 6660\7f1562064
94462 Ref: 6661\7f1562123
94463 Ref: 6662\7f1562182
94464 Node: A.18.2\7f1562620
94465 Ref: 6663\7f1563189
94466 Ref: 6664\7f1563189
94467 Ref: 6665\7f1563197
94468 Ref: 6666\7f1563197
94469 Ref: 6667\7f1563720
94470 Ref: 6668\7f1564197
94471 Ref: 6669\7f1564295
94472 Ref: 6670\7f1564463
94473 Ref: 6671\7f1564546
94474 Ref: 6672\7f1564844
94475 Ref: 6673\7f1564925
94476 Ref: 6674\7f1564971
94477 Ref: 6675\7f1565031
94478 Ref: 6676\7f1565103
94479 Ref: 6677\7f1565285
94480 Ref: 6678\7f1565355
94481 Ref: 6679\7f1565816
94482 Ref: 6680\7f1565889
94483 Ref: 6681\7f1566025
94484 Ref: 6682\7f1566096
94485 Ref: 6683\7f1566220
94486 Ref: 6684\7f1566290
94487 Ref: 6685\7f1566348
94488 Ref: 6686\7f1566473
94489 Ref: 6687\7f1566549
94490 Ref: 6688\7f1566683
94491 Ref: 6689\7f1566756
94492 Ref: 6690\7f1566959
94493 Ref: 6691\7f1567158
94494 Ref: 6692\7f1567347
94495 Ref: 6693\7f1567496
94496 Ref: 6694\7f1567725
94497 Ref: 6695\7f1568116
94498 Ref: 6696\7f1568257
94499 Ref: 6697\7f1568440
94500 Ref: 6698\7f1568600
94501 Ref: 6699\7f1568779
94502 Ref: 6700\7f1568936
94503 Ref: 6701\7f1569014
94504 Ref: 6702\7f1569115
94505 Ref: 6703\7f1569218
94506 Ref: 6704\7f1569392
94507 Ref: 6705\7f1569558
94508 Ref: 6706\7f1569777
94509 Ref: 6707\7f1570019
94510 Ref: 6708\7f1570253
94511 Ref: 6709\7f1570540
94512 Ref: 6710\7f1570723
94513 Ref: 6711\7f1570951
94514 Ref: 6712\7f1571066
94515 Ref: 6713\7f1571250
94516 Ref: 6714\7f1571363
94517 Ref: 6715\7f1571544
94518 Ref: 6716\7f1571745
94519 Ref: 6717\7f1571997
94520 Ref: 6718\7f1572180
94521 Ref: 6719\7f1572355
94522 Ref: 6720\7f1572489
94523 Ref: 6721\7f1572621
94524 Ref: 6722\7f1572691
94525 Ref: 6723\7f1572804
94526 Ref: 6724\7f1572912
94527 Ref: 6725\7f1572987
94528 Ref: 6726\7f1573052
94529 Ref: 6727\7f1573142
94530 Ref: 6728\7f1573220
94531 Ref: 6729\7f1573284
94532 Ref: 6730\7f1573373
94533 Ref: 6731\7f1573437
94534 Ref: 6732\7f1573493
94535 Ref: 6733\7f1573561
94536 Ref: 6734\7f1573621
94537 Ref: 6735\7f1573838
94538 Ref: 6736\7f1574019
94539 Ref: 6737\7f1574259
94540 Ref: 6738\7f1574464
94541 Ref: 6739\7f1574627
94542 Ref: 6740\7f1574767
94543 Ref: 6741\7f1575300
94544 Ref: 6742\7f1575345
94545 Ref: 6743\7f1575419
94546 Ref: 6744\7f1575480
94547 Ref: 6745\7f1576168
94548 Ref: 6746\7f1576256
94549 Ref: 6747\7f1578151
94550 Ref: 6748\7f1578564
94551 Ref: 6749\7f1578916
94552 Ref: 6750\7f1578916
94553 Ref: 6751\7f1589182
94554 Ref: 6752\7f1613464
94555 Ref: 6753\7f1614972
94556 Ref: 6754\7f1615359
94557 Ref: 6755\7f1616436
94558 Ref: 6756\7f1616436
94559 Ref: 6757\7f1617029
94560 Ref: 6758\7f1617649
94561 Ref: 6759\7f1617649
94562 Ref: 6760\7f1618266
94563 Ref: 6761\7f1618389
94564 Node: A.18.3\7f1620542
94565 Ref: 6762\7f1620962
94566 Ref: 6763\7f1620964
94567 Ref: 6764\7f1620970
94568 Ref: 6765\7f1621481
94569 Ref: 6766\7f1621852
94570 Ref: 6767\7f1621971
94571 Ref: 6768\7f1622265
94572 Ref: 6769\7f1622345
94573 Ref: 6770\7f1622386
94574 Ref: 6771\7f1622445
94575 Ref: 6772\7f1622516
94576 Ref: 6773\7f1622694
94577 Ref: 6774\7f1622762
94578 Ref: 6775\7f1622830
94579 Ref: 6776\7f1622886
94580 Ref: 6777\7f1622970
94581 Ref: 6778\7f1623167
94582 Ref: 6779\7f1623316
94583 Ref: 6780\7f1623705
94584 Ref: 6781\7f1623846
94585 Ref: 6782\7f1624023
94586 Ref: 6783\7f1624178
94587 Ref: 6784\7f1624252
94588 Ref: 6785\7f1624310
94589 Ref: 6786\7f1624409
94590 Ref: 6787\7f1624641
94591 Ref: 6788\7f1624926
94592 Ref: 6789\7f1625152
94593 Ref: 6790\7f1625334
94594 Ref: 6791\7f1625513
94595 Ref: 6792\7f1625686
94596 Ref: 6793\7f1625818
94597 Ref: 6794\7f1625948
94598 Ref: 6795\7f1626016
94599 Ref: 6796\7f1626123
94600 Ref: 6797\7f1626242
94601 Ref: 6798\7f1626401
94602 Ref: 6799\7f1626612
94603 Ref: 6800\7f1626772
94604 Ref: 6801\7f1626835
94605 Ref: 6802\7f1626923
94606 Ref: 6803\7f1626985
94607 Ref: 6804\7f1627072
94608 Ref: 6805\7f1627135
94609 Ref: 6806\7f1627203
94610 Ref: 6807\7f1627260
94611 Ref: 6808\7f1627320
94612 Ref: 6809\7f1627499
94613 Ref: 6810\7f1627702
94614 Ref: 6811\7f1627862
94615 Ref: 6812\7f1628000
94616 Ref: 6813\7f1628523
94617 Ref: 6814\7f1628568
94618 Ref: 6815\7f1628640
94619 Ref: 6816\7f1628699
94620 Ref: 6817\7f1629445
94621 Ref: 6818\7f1629527
94622 Ref: 6819\7f1630986
94623 Ref: 6820\7f1631601
94624 Ref: 6821\7f1631856
94625 Ref: 6822\7f1631856
94626 Ref: 6823\7f1636015
94627 Ref: 6824\7f1653642
94628 Ref: 6825\7f1655160
94629 Ref: 6826\7f1655455
94630 Ref: 6827\7f1655845
94631 Ref: 6828\7f1656377
94632 Ref: 6829\7f1656377
94633 Ref: 6830\7f1657110
94634 Ref: 6831\7f1657112
94635 Node: A.18.4\7f1658763
94636 Ref: 6832\7f1659263
94637 Ref: 6833\7f1659265
94638 Ref: 6834\7f1660035
94639 Ref: 6835\7f1660113
94640 Ref: 6836\7f1660138
94641 Ref: 6837\7f1660586
94642 Ref: 6838\7f1660592
94643 Ref: 6839\7f1660592
94644 Ref: 6840\7f1660592
94645 Ref: 6841\7f1661531
94646 Ref: 6842\7f1662023
94647 Ref: 6843\7f1662280
94648 Ref: 6844\7f1662280
94649 Ref: 6845\7f1668044
94650 Ref: 6846\7f1677242
94651 Ref: 6847\7f1677629
94652 Ref: 6848\7f1678142
94653 Ref: 6849\7f1678142
94654 Ref: 6850\7f1678725
94655 Ref: 6851\7f1678879
94656 Node: A.18.5\7f1679775
94657 Ref: 6852\7f1680493
94658 Ref: 6853\7f1680596
94659 Ref: 6854\7f1680888
94660 Ref: 6855\7f1680968
94661 Ref: 6856\7f1681007
94662 Ref: 6857\7f1681066
94663 Ref: 6858\7f1681137
94664 Ref: 6859\7f1681311
94665 Ref: 6860\7f1681380
94666 Ref: 6861\7f1681513
94667 Ref: 6862\7f1681580
94668 Ref: 6863\7f1681647
94669 Ref: 6864\7f1681702
94670 Ref: 6865\7f1681766
94671 Ref: 6866\7f1681839
94672 Ref: 6867\7f1682035
94673 Ref: 6868\7f1682256
94674 Ref: 6869\7f1682699
94675 Ref: 6870\7f1682840
94676 Ref: 6871\7f1683016
94677 Ref: 6872\7f1683169
94678 Ref: 6873\7f1683347
94679 Ref: 6874\7f1683503
94680 Ref: 6875\7f1683575
94681 Ref: 6876\7f1683659
94682 Ref: 6877\7f1683756
94683 Ref: 6878\7f1684034
94684 Ref: 6879\7f1684253
94685 Ref: 6880\7f1684424
94686 Ref: 6881\7f1684598
94687 Ref: 6882\7f1684772
94688 Ref: 6883\7f1684886
94689 Ref: 6884\7f1684998
94690 Ref: 6885\7f1685107
94691 Ref: 6886\7f1685180
94692 Ref: 6887\7f1685245
94693 Ref: 6888\7f1685302
94694 Ref: 6889\7f1685419
94695 Ref: 6890\7f1685548
94696 Ref: 6891\7f1685702
94697 Ref: 6892\7f1685791
94698 Ref: 6893\7f1685926
94699 Ref: 6894\7f1686062
94700 Ref: 6895\7f1686672
94701 Ref: 6896\7f1686679
94702 Ref: 6897\7f1687208
94703 Ref: 6898\7f1687712
94704 Ref: 6899\7f1687939
94705 Ref: 6900\7f1687946
94706 Ref: 6901\7f1687946
94707 Ref: 6902\7f1687946
94708 Ref: 6903\7f1688132
94709 Node: A.18.6\7f1692186
94710 Ref: 6904\7f1692818
94711 Ref: 6905\7f1692927
94712 Ref: 6906\7f1693002
94713 Ref: 6907\7f1693294
94714 Ref: 6908\7f1693374
94715 Ref: 6909\7f1693413
94716 Ref: 6910\7f1693472
94717 Ref: 6911\7f1693543
94718 Ref: 6912\7f1693717
94719 Ref: 6913\7f1693784
94720 Ref: 6914\7f1693851
94721 Ref: 6915\7f1693906
94722 Ref: 6916\7f1693970
94723 Ref: 6917\7f1694043
94724 Ref: 6918\7f1694239
94725 Ref: 6919\7f1694460
94726 Ref: 6920\7f1694903
94727 Ref: 6921\7f1695044
94728 Ref: 6922\7f1695220
94729 Ref: 6923\7f1695373
94730 Ref: 6924\7f1695551
94731 Ref: 6925\7f1695707
94732 Ref: 6926\7f1695779
94733 Ref: 6927\7f1695835
94734 Ref: 6928\7f1695932
94735 Ref: 6929\7f1696210
94736 Ref: 6930\7f1696429
94737 Ref: 6931\7f1696600
94738 Ref: 6932\7f1696774
94739 Ref: 6933\7f1696948
94740 Ref: 6934\7f1697062
94741 Ref: 6935\7f1697174
94742 Ref: 6936\7f1697284
94743 Ref: 6937\7f1697347
94744 Ref: 6938\7f1697408
94745 Ref: 6939\7f1697470
94746 Ref: 6940\7f1697546
94747 Ref: 6941\7f1697614
94748 Ref: 6942\7f1697675
94749 Ref: 6943\7f1697750
94750 Ref: 6944\7f1697817
94751 Ref: 6945\7f1697881
94752 Ref: 6946\7f1697937
94753 Ref: 6947\7f1698005
94754 Ref: 6948\7f1698065
94755 Ref: 6949\7f1698171
94756 Ref: 6950\7f1698289
94757 Ref: 6951\7f1698397
94758 Ref: 6952\7f1698509
94759 Ref: 6953\7f1699104
94760 Ref: 6954\7f1699241
94761 Ref: 6955\7f1699747
94762 Ref: 6956\7f1700407
94763 Ref: 6957\7f1700611
94764 Ref: 6958\7f1700618
94765 Ref: 6959\7f1700618
94766 Ref: 6960\7f1700618
94767 Ref: 6961\7f1700618
94768 Node: A.18.7\7f1707237
94769 Ref: 6962\7f1707720
94770 Ref: 6963\7f1707720
94771 Ref: 6964\7f1708492
94772 Ref: 6965\7f1708570
94773 Ref: 6966\7f1708882
94774 Ref: 6967\7f1708888
94775 Ref: 6968\7f1708888
94776 Ref: 6969\7f1708888
94777 Ref: 6970\7f1709857
94778 Ref: 6971\7f1710357
94779 Ref: 6972\7f1710473
94780 Ref: 6973\7f1710473
94781 Ref: 6974\7f1715560
94782 Ref: 6975\7f1724995
94783 Ref: 6976\7f1725202
94784 Ref: 6977\7f1727291
94785 Ref: 6978\7f1729663
94786 Ref: 6979\7f1730051
94787 Ref: 6980\7f1730564
94788 Ref: 6981\7f1730564
94789 Ref: 6982\7f1731164
94790 Ref: 6983\7f1731318
94791 Node: A.18.8\7f1732219
94792 Ref: 6984\7f1732919
94793 Ref: 6985\7f1733022
94794 Ref: 6986\7f1733266
94795 Ref: 6987\7f1733346
94796 Ref: 6988\7f1733385
94797 Ref: 6989\7f1733444
94798 Ref: 6990\7f1733515
94799 Ref: 6991\7f1733689
94800 Ref: 6992\7f1733763
94801 Ref: 6993\7f1733831
94802 Ref: 6994\7f1733901
94803 Ref: 6995\7f1734034
94804 Ref: 6996\7f1734101
94805 Ref: 6997\7f1734168
94806 Ref: 6998\7f1734223
94807 Ref: 6999\7f1734296
94808 Ref: 7000\7f1734492
94809 Ref: 7001\7f1734811
94810 Ref: 7002\7f1734988
94811 Ref: 7003\7f1735060
94812 Ref: 7004\7f1735144
94813 Ref: 7005\7f1735241
94814 Ref: 7006\7f1735464
94815 Ref: 7007\7f1735580
94816 Ref: 7008\7f1735698
94817 Ref: 7009\7f1735816
94818 Ref: 7010\7f1735934
94819 Ref: 7011\7f1736050
94820 Ref: 7012\7f1736160
94821 Ref: 7013\7f1736258
94822 Ref: 7014\7f1736394
94823 Ref: 7015\7f1736506
94824 Ref: 7016\7f1736657
94825 Ref: 7017\7f1736765
94826 Ref: 7018\7f1736910
94827 Ref: 7019\7f1737038
94828 Ref: 7020\7f1737214
94829 Ref: 7021\7f1737281
94830 Ref: 7022\7f1737387
94831 Ref: 7023\7f1737449
94832 Ref: 7024\7f1737513
94833 Ref: 7025\7f1737569
94834 Ref: 7026\7f1737679
94835 Ref: 7027\7f1737837
94836 Ref: 7028\7f1737929
94837 Ref: 7029\7f1738075
94838 Ref: 7030\7f1738222
94839 Ref: 7031\7f1738795
94840 Ref: 7032\7f1738837
94841 Ref: 7033\7f1738904
94842 Ref: 7034\7f1739042
94843 Ref: 7035\7f1739225
94844 Ref: 7036\7f1739345
94845 Ref: 7037\7f1739462
94846 Ref: 7038\7f1739588
94847 Ref: 7039\7f1739724
94848 Ref: 7040\7f1739973
94849 Ref: 7041\7f1740137
94850 Ref: 7042\7f1740329
94851 Ref: 7043\7f1740516
94852 Ref: 7044\7f1740833
94853 Ref: 7045\7f1741104
94854 Ref: 7046\7f1741643
94855 Ref: 7047\7f1742144
94856 Ref: 7048\7f1742328
94857 Ref: 7049\7f1742554
94858 Ref: 7050\7f1742561
94859 Ref: 7051\7f1742561
94860 Ref: 7052\7f1742561
94861 Ref: 7053\7f1742762
94862 Ref: 7054\7f1747046
94863 Ref: 7055\7f1747422
94864 Node: A.18.9\7f1747814
94865 Ref: 7056\7f1748417
94866 Ref: 7057\7f1748526
94867 Ref: 7058\7f1748609
94868 Ref: 7059\7f1748853
94869 Ref: 7060\7f1748933
94870 Ref: 7061\7f1748972
94871 Ref: 7062\7f1749031
94872 Ref: 7063\7f1749102
94873 Ref: 7064\7f1749276
94874 Ref: 7065\7f1749351
94875 Ref: 7066\7f1749419
94876 Ref: 7067\7f1749486
94877 Ref: 7068\7f1749553
94878 Ref: 7069\7f1749608
94879 Ref: 7070\7f1749681
94880 Ref: 7071\7f1749877
94881 Ref: 7072\7f1750196
94882 Ref: 7073\7f1750373
94883 Ref: 7074\7f1750445
94884 Ref: 7075\7f1750501
94885 Ref: 7076\7f1750598
94886 Ref: 7077\7f1750821
94887 Ref: 7078\7f1750937
94888 Ref: 7079\7f1751055
94889 Ref: 7080\7f1751173
94890 Ref: 7081\7f1751291
94891 Ref: 7082\7f1751407
94892 Ref: 7083\7f1751517
94893 Ref: 7084\7f1751580
94894 Ref: 7085\7f1751642
94895 Ref: 7086\7f1751740
94896 Ref: 7087\7f1751876
94897 Ref: 7088\7f1751988
94898 Ref: 7089\7f1752139
94899 Ref: 7090\7f1752247
94900 Ref: 7091\7f1752392
94901 Ref: 7092\7f1752520
94902 Ref: 7093\7f1752697
94903 Ref: 7094\7f1752764
94904 Ref: 7095\7f1752870
94905 Ref: 7096\7f1752932
94906 Ref: 7097\7f1753008
94907 Ref: 7098\7f1753069
94908 Ref: 7099\7f1753144
94909 Ref: 7100\7f1753208
94910 Ref: 7101\7f1753264
94911 Ref: 7102\7f1753332
94912 Ref: 7103\7f1753392
94913 Ref: 7104\7f1753513
94914 Ref: 7105\7f1753636
94915 Ref: 7106\7f1753763
94916 Ref: 7107\7f1754422
94917 Ref: 7108\7f1754559
94918 Ref: 7109\7f1755186
94919 Ref: 7110\7f1755229
94920 Ref: 7111\7f1755328
94921 Ref: 7112\7f1755396
94922 Ref: 7113\7f1755538
94923 Ref: 7114\7f1755724
94924 Ref: 7115\7f1755846
94925 Ref: 7116\7f1755965
94926 Ref: 7117\7f1756094
94927 Ref: 7118\7f1756225
94928 Ref: 7119\7f1756360
94929 Ref: 7120\7f1756484
94930 Ref: 7121\7f1756737
94931 Ref: 7122\7f1756901
94932 Ref: 7123\7f1757093
94933 Ref: 7124\7f1757280
94934 Ref: 7125\7f1757729
94935 Ref: 7126\7f1758274
94936 Ref: 7127\7f1758458
94937 Ref: 7128\7f1758667
94938 Ref: 7129\7f1758674
94939 Ref: 7130\7f1758674
94940 Ref: 7131\7f1758674
94941 Ref: 7132\7f1758674
94942 Ref: 7133\7f1765005
94943 Node: A.18.10\7f1765894
94944 Ref: 7134\7f1766538
94945 Ref: 7135\7f1766958
94946 Ref: 7136\7f1766960
94947 Ref: 7137\7f1766960
94948 Ref: 7138\7f1767192
94949 Ref: 7139\7f1767192
94950 Ref: 7140\7f1767248
94951 Ref: 7141\7f1767392
94952 Ref: 7142\7f1767512
94953 Ref: 7143\7f1767775
94954 Ref: 7144\7f1768125
94955 Ref: 7145\7f1768234
94956 Ref: 7146\7f1768528
94957 Ref: 7147\7f1768609
94958 Ref: 7148\7f1768651
94959 Ref: 7149\7f1768709
94960 Ref: 7150\7f1768779
94961 Ref: 7151\7f1768892
94962 Ref: 7152\7f1769090
94963 Ref: 7153\7f1769157
94964 Ref: 7154\7f1769229
94965 Ref: 7155\7f1769310
94966 Ref: 7156\7f1769378
94967 Ref: 7157\7f1769445
94968 Ref: 7158\7f1769512
94969 Ref: 7159\7f1769575
94970 Ref: 7160\7f1769631
94971 Ref: 7161\7f1769704
94972 Ref: 7162\7f1769901
94973 Ref: 7163\7f1770050
94974 Ref: 7164\7f1770268
94975 Ref: 7165\7f1770435
94976 Ref: 7166\7f1770574
94977 Ref: 7167\7f1770749
94978 Ref: 7168\7f1770902
94979 Ref: 7169\7f1770974
94980 Ref: 7170\7f1771032
94981 Ref: 7171\7f1771131
94982 Ref: 7172\7f1771252
94983 Ref: 7173\7f1771379
94984 Ref: 7174\7f1771485
94985 Ref: 7175\7f1771607
94986 Ref: 7176\7f1771751
94987 Ref: 7177\7f1771891
94988 Ref: 7178\7f1772012
94989 Ref: 7179\7f1772150
94990 Ref: 7180\7f1772297
94991 Ref: 7181\7f1772417
94992 Ref: 7182\7f1772546
94993 Ref: 7183\7f1772618
94994 Ref: 7184\7f1772698
94995 Ref: 7185\7f1773013
94996 Ref: 7186\7f1773387
94997 Ref: 7187\7f1773696
94998 Ref: 7188\7f1773956
94999 Ref: 7189\7f1774212
95000 Ref: 7190\7f1774341
95001 Ref: 7191\7f1774578
95002 Ref: 7192\7f1774881
95003 Ref: 7193\7f1775126
95004 Ref: 7194\7f1775469
95005 Ref: 7195\7f1775745
95006 Ref: 7196\7f1775810
95007 Ref: 7197\7f1775878
95008 Ref: 7198\7f1775960
95009 Ref: 7199\7f1776027
95010 Ref: 7200\7f1776108
95011 Ref: 7201\7f1776179
95012 Ref: 7202\7f1776255
95013 Ref: 7203\7f1776320
95014 Ref: 7204\7f1776389
95015 Ref: 7205\7f1776534
95016 Ref: 7206\7f1776686
95017 Ref: 7207\7f1777457
95018 Ref: 7208\7f1777539
95019 Ref: 7209\7f1779051
95020 Ref: 7210\7f1779618
95021 Ref: 7211\7f1779871
95022 Ref: 7212\7f1779871
95023 Ref: 7213\7f1786723
95024 Ref: 7214\7f1817792
95025 Ref: 7215\7f1818180
95026 Ref: 7216\7f1818707
95027 Ref: 7217\7f1818707
95028 Ref: 7218\7f1819296
95029 Node: A.18.11\7f1820676
95030 Ref: 7219\7f1821289
95031 Node: A.18.12\7f1822023
95032 Ref: 7220\7f1822719
95033 Node: A.18.13\7f1823287
95034 Ref: 7221\7f1823891
95035 Node: A.18.14\7f1824497
95036 Ref: 7222\7f1825106
95037 Node: A.18.15\7f1825713
95038 Ref: 7223\7f1826302
95039 Node: A.18.16\7f1826600
95040 Ref: 7224\7f1827194
95041 Node: A.18.17\7f1827493
95042 Ref: 7225\7f1828103
95043 Node: A.18.18\7f1828746
95044 Ref: 7226\7f1829378
95045 Ref: 7227\7f1829706
95046 Ref: 7228\7f1829823
95047 Ref: 7229\7f1829911
95048 Ref: 7230\7f1830035
95049 Ref: 7231\7f1830109
95050 Ref: 7232\7f1830179
95051 Ref: 7233\7f1830237
95052 Ref: 7234\7f1830311
95053 Ref: 7235\7f1830448
95054 Ref: 7236\7f1830593
95055 Ref: 7237\7f1830742
95056 Ref: 7238\7f1830903
95057 Ref: 7239\7f1831039
95058 Ref: 7240\7f1831153
95059 Ref: 7241\7f1831254
95060 Ref: 7242\7f1831330
95061 Ref: 7243\7f1831392
95062 Ref: 7244\7f1832128
95063 Ref: 7245\7f1832672
95064 Ref: 7246\7f1833082
95065 Ref: 7247\7f1833082
95066 Ref: 7248\7f1836227
95067 Ref: 7249\7f1838683
95068 Ref: 7250\7f1839078
95069 Ref: 7251\7f1839749
95070 Node: A.18.19\7f1840407
95071 Ref: 7252\7f1841885
95072 Ref: 7253\7f1842416
95073 Node: A.18.20\7f1843508
95074 Ref: 7254\7f1844937
95075 Ref: 7255\7f1845742
95076 Ref: 7256\7f1846267
95077 Node: A.18.21\7f1847266
95078 Ref: 7257\7f1848781
95079 Ref: 7258\7f1849103
95080 Ref: 7259\7f1849910
95081 Ref: 7260\7f1850432
95082 Node: A.18.22\7f1851522
95083 Ref: 7261\7f1852911
95084 Ref: 7262\7f1853405
95085 Ref: 7263\7f1853927
95086 Node: A.18.23\7f1855020
95087 Ref: 7264\7f1856518
95088 Ref: 7265\7f1856840
95089 Ref: 7266\7f1857643
95090 Ref: 7267\7f1858165
95091 Node: A.18.24\7f1859150
95092 Ref: 7268\7f1860537
95093 Ref: 7269\7f1861027
95094 Ref: 7270\7f1861549
95095 Node: A.18.25\7f1862537
95096 Ref: 7271\7f1864862
95097 Ref: 7272\7f1865387
95098 Node: A.18.26\7f1866376
95099 Ref: 7273\7f1867162
95100 Ref: 7274\7f1868021
95101 Ref: 7275\7f1868430
95102 Ref: 7276\7f1869391
95103 Ref: 7277\7f1869707
95104 Ref: 7278\7f1871067
95105 Node: A.18.27\7f1871852
95106 Ref: 7279\7f1872547
95107 Ref: 7280\7f1872618
95108 Ref: 7281\7f1872674
95109 Ref: 7282\7f1872844
95110 Ref: 7283\7f1873013
95111 Ref: 7284\7f1873093
95112 Ref: 7285\7f1873436
95113 Node: A.18.28\7f1874786
95114 Ref: 7286\7f1875558
95115 Ref: 7287\7f1875762
95116 Ref: 7288\7f1875965
95117 Ref: 7289\7f1876059
95118 Ref: 7290\7f1876161
95119 Ref: 7291\7f1876234
95120 Node: A.18.29\7f1876601
95121 Ref: 7292\7f1877405
95122 Ref: 7293\7f1877607
95123 Ref: 7294\7f1877868
95124 Ref: 7295\7f1877962
95125 Ref: 7296\7f1878064
95126 Ref: 7297\7f1878137
95127 Node: A.18.30\7f1878720
95128 Ref: 7298\7f1879724
95129 Ref: 7299\7f1879924
95130 Ref: 7300\7f1880127
95131 Ref: 7301\7f1880221
95132 Ref: 7302\7f1880328
95133 Ref: 7303\7f1880555
95134 Ref: 7304\7f1880628
95135 Node: A.18.31\7f1882155
95136 Ref: 7305\7f1883191
95137 Ref: 7306\7f1883389
95138 Ref: 7307\7f1883648
95139 Ref: 7308\7f1883742
95140 Ref: 7309\7f1883849
95141 Ref: 7310\7f1884076
95142 Ref: 7311\7f1884149
95143 Node: A.18.32\7f1884734
95144 Node: A.19\7f1889518
95145 Ref: 7312\7f1889643
95146 Ref: 7313\7f1889940
95147 Ref: 7314\7f1890035
95148 Ref: 7315\7f1890111
95149 Ref: 7316\7f1890181
95150 Ref: 7317\7f1890241
95151 Ref: 7318\7f1890317
95152 Ref: 7319\7f1890365
95153 Ref: 7320\7f1890443
95154 Ref: 7321\7f1890443
95155 Node: Annex B\7f1891196
95156 Ref: 7322\7f1891353
95157 Ref: 7323\7f1891353
95158 Ref: 7324\7f1891353
95159 Node: B.1\7f1892465
95160 Ref: 7325\7f1892712
95161 Ref: 7326\7f1892712
95162 Ref: 7327\7f1892718
95163 Ref: 7328\7f1892718
95164 Ref: 7329\7f1892985
95165 Ref: 7330\7f1892986
95166 Ref: 7331\7f1893557
95167 Ref: 7332\7f1893557
95168 Ref: 7333\7f1893557
95169 Ref: 7334\7f1893557
95170 Ref: 7335\7f1893557
95171 Ref: 7336\7f1893559
95172 Ref: 7337\7f1893559
95173 Ref: 7338\7f1893559
95174 Ref: 7339\7f1893559
95175 Ref: 7340\7f1893586
95176 Ref: 7341\7f1893586
95177 Ref: 7342\7f1894326
95178 Ref: 7343\7f1894327
95179 Ref: 7344\7f1894349
95180 Ref: 7345\7f1894672
95181 Ref: 7346\7f1894705
95182 Ref: 7347\7f1894803
95183 Ref: 7348\7f1895246
95184 Ref: 7349\7f1895315
95185 Ref: 7350\7f1895721
95186 Ref: 7351\7f1896799
95187 Ref: 7352\7f1896916
95188 Ref: 7353\7f1896916
95189 Ref: 7354\7f1898628
95190 Ref: 7355\7f1898824
95191 Ref: 7356\7f1899705
95192 Ref: 7357\7f1899705
95193 Ref: 7358\7f1900017
95194 Ref: 7359\7f1900862
95195 Ref: 7360\7f1900864
95196 Ref: 7361\7f1900864
95197 Ref: 7362\7f1900864
95198 Node: B.2\7f1902982
95199 Ref: 7363\7f1903530
95200 Ref: 7364\7f1904737
95201 Ref: 7365\7f1904737
95202 Node: B.3\7f1906406
95203 Ref: 7366\7f1906545
95204 Ref: 7367\7f1906545
95205 Ref: 7368\7f1907209
95206 Ref: 7369\7f1907291
95207 Ref: 7370\7f1907363
95208 Ref: 7371\7f1907438
95209 Ref: 7372\7f1907512
95210 Ref: 7373\7f1907639
95211 Ref: 7374\7f1907691
95212 Ref: 7375\7f1907743
95213 Ref: 7376\7f1907798
95214 Ref: 7377\7f1907902
95215 Ref: 7378\7f1907961
95216 Ref: 7379\7f1908020
95217 Ref: 7380\7f1908083
95218 Ref: 7381\7f1908184
95219 Ref: 7382\7f1908239
95220 Ref: 7383\7f1908299
95221 Ref: 7384\7f1908384
95222 Ref: 7385\7f1908447
95223 Ref: 7386\7f1908510
95224 Ref: 7387\7f1908612
95225 Ref: 7388\7f1908670
95226 Ref: 7389\7f1908743
95227 Ref: 7390\7f1908806
95228 Ref: 7391\7f1908867
95229 Ref: 7392\7f1909016
95230 Ref: 7393\7f1909094
95231 Ref: 7394\7f1909235
95232 Ref: 7395\7f1909373
95233 Ref: 7396\7f1909587
95234 Ref: 7397\7f1909845
95235 Ref: 7398\7f1909906
95236 Ref: 7399\7f1909987
95237 Ref: 7400\7f1910054
95238 Ref: 7401\7f1910130
95239 Ref: 7402\7f1910270
95240 Ref: 7403\7f1910349
95241 Ref: 7404\7f1910496
95242 Ref: 7405\7f1910640
95243 Ref: 7406\7f1910860
95244 Ref: 7407\7f1911169
95245 Ref: 7408\7f1911233
95246 Ref: 7409\7f1911321
95247 Ref: 7410\7f1911387
95248 Ref: 7411\7f1911459
95249 Ref: 7412\7f1911607
95250 Ref: 7413\7f1911683
95251 Ref: 7414\7f1911831
95252 Ref: 7415\7f1911980
95253 Ref: 7416\7f1912206
95254 Ref: 7417\7f1912428
95255 Ref: 7418\7f1912493
95256 Ref: 7419\7f1912582
95257 Ref: 7420\7f1912653
95258 Ref: 7421\7f1912731
95259 Ref: 7422\7f1912881
95260 Ref: 7423\7f1912957
95261 Ref: 7424\7f1913111
95262 Ref: 7425\7f1913266
95263 Ref: 7426\7f1913497
95264 Ref: 7427\7f1913709
95265 Ref: 7428\7f1916847
95266 Ref: 7429\7f1917289
95267 Node: B.3.1\7f1927275
95268 Ref: 7430\7f1928014
95269 Ref: 7431\7f1928069
95270 Ref: 7432\7f1928131
95271 Ref: 7433\7f1928227
95272 Ref: 7434\7f1928298
95273 Ref: 7435\7f1928354
95274 Ref: 7436\7f1928515
95275 Ref: 7437\7f1928595
95276 Ref: 7438\7f1928664
95277 Ref: 7439\7f1928703
95278 Ref: 7440\7f1928760
95279 Ref: 7441\7f1928828
95280 Ref: 7442\7f1928927
95281 Ref: 7443\7f1928991
95282 Ref: 7444\7f1929086
95283 Ref: 7445\7f1929152
95284 Ref: 7446\7f1929357
95285 Ref: 7447\7f1929543
95286 Ref: 7448\7f1934013
95287 Ref: 7449\7f1934278
95288 Ref: 7450\7f1934390
95289 Ref: 7451\7f1934447
95290 Node: B.3.2\7f1935060
95291 Ref: 7452\7f1936340
95292 Ref: 7453\7f1936396
95293 Ref: 7454\7f1936447
95294 Ref: 7455\7f1936601
95295 Ref: 7456\7f1936713
95296 Ref: 7457\7f1937300
95297 Ref: 7458\7f1937392
95298 Ref: 7459\7f1937526
95299 Ref: 7460\7f1937698
95300 Ref: 7461\7f1937934
95301 Ref: 7462\7f1940973
95302 Ref: 7463\7f1941062
95303 Ref: 7464\7f1941206
95304 Ref: 7465\7f1941424
95305 Ref: 7466\7f1941577
95306 Ref: 7467\7f1941904
95307 Node: B.3.3\7f1943665
95308 Ref: 7468\7f1943786
95309 Ref: 7469\7f1944605
95310 Ref: 7470\7f1944605
95311 Ref: 7471\7f1944690
95312 Ref: 7472\7f1944690
95313 Ref: 7473\7f1944690
95314 Ref: 7474\7f1945642
95315 Ref: 7475\7f1947710
95316 Ref: 7476\7f1947980
95317 Node: B.4\7f1949626
95318 Ref: 7477\7f1949757
95319 Ref: 7478\7f1949757
95320 Ref: 7479\7f1950768
95321 Ref: 7480\7f1950887
95322 Ref: 7481\7f1950948
95323 Ref: 7482\7f1951013
95324 Ref: 7483\7f1951071
95325 Ref: 7484\7f1951123
95326 Ref: 7485\7f1951192
95327 Ref: 7486\7f1951277
95328 Ref: 7487\7f1951338
95329 Ref: 7488\7f1951440
95330 Ref: 7489\7f1951505
95331 Ref: 7490\7f1951596
95332 Ref: 7491\7f1951699
95333 Ref: 7492\7f1951803
95334 Ref: 7493\7f1951869
95335 Ref: 7494\7f1951940
95336 Ref: 7495\7f1952110
95337 Ref: 7496\7f1952265
95338 Ref: 7497\7f1952411
95339 Ref: 7498\7f1952445
95340 Ref: 7499\7f1952501
95341 Ref: 7500\7f1952557
95342 Ref: 7501\7f1952613
95343 Ref: 7502\7f1952669
95344 Ref: 7503\7f1952739
95345 Ref: 7504\7f1952772
95346 Ref: 7505\7f1952824
95347 Ref: 7506\7f1952876
95348 Ref: 7507\7f1952942
95349 Ref: 7508\7f1952975
95350 Ref: 7509\7f1953027
95351 Ref: 7510\7f1953162
95352 Ref: 7511\7f1953212
95353 Ref: 7512\7f1953289
95354 Ref: 7513\7f1953403
95355 Ref: 7514\7f1953524
95356 Ref: 7515\7f1953647
95357 Ref: 7516\7f1953723
95358 Ref: 7517\7f1953852
95359 Ref: 7518\7f1954061
95360 Ref: 7519\7f1954190
95361 Ref: 7520\7f1954265
95362 Ref: 7521\7f1954400
95363 Ref: 7522\7f1954618
95364 Ref: 7523\7f1954743
95365 Ref: 7524\7f1954814
95366 Ref: 7525\7f1954945
95367 Ref: 7526\7f1955161
95368 Ref: 7527\7f1955228
95369 Ref: 7528\7f1955299
95370 Ref: 7529\7f1955366
95371 Ref: 7530\7f1957127
95372 Node: B.5\7f1968671
95373 Ref: 7531\7f1968794
95374 Ref: 7532\7f1968794
95375 Ref: 7533\7f1969609
95376 Ref: 7534\7f1969656
95377 Ref: 7535\7f1969721
95378 Ref: 7536\7f1969785
95379 Ref: 7537\7f1969852
95380 Ref: 7538\7f1969895
95381 Ref: 7539\7f1970003
95382 Ref: 7540\7f1970078
95383 Ref: 7541\7f1970136
95384 Ref: 7542\7f1970200
95385 Ref: 7543\7f1970278
95386 Ref: 7544\7f1970353
95387 Ref: 7545\7f1970460
95388 Ref: 7546\7f1970532
95389 Ref: 7547\7f1970604
95390 Ref: 7548\7f1970677
95391 Ref: 7549\7f1970755
95392 Ref: 7550\7f1970936
95393 Node: Annex C\7f1974722
95394 Ref: 7551\7f1974861
95395 Ref: 7552\7f1974861
95396 Ref: 7553\7f1974861
95397 Ref: 7554\7f1974861
95398 Ref: 7555\7f1974861
95399 Ref: 7556\7f1974861
95400 Node: C.1\7f1975344
95401 Ref: 7557\7f1975630
95402 Ref: 7558\7f1976117
95403 Ref: 7559\7f1976117
95404 Ref: 7560\7f1976117
95405 Ref: 7561\7f1976117
95406 Node: C.2\7f1978466
95407 Ref: 7562\7f1978780
95408 Node: C.3\7f1978908
95409 Ref: 7563\7f1979155
95410 Ref: 7564\7f1979208
95411 Ref: 7565\7f1979307
95412 Ref: 7566\7f1979412
95413 Ref: 7567\7f1979540
95414 Ref: 7568\7f1979638
95415 Ref: 7569\7f1979724
95416 Ref: 7570\7f1979865
95417 Ref: 7571\7f1979867
95418 Ref: 7572\7f1980143
95419 Ref: 7573\7f1980145
95420 Ref: 7574\7f1980765
95421 Node: C.3.1\7f1986313
95422 Ref: 7575\7f1986994
95423 Ref: 7576\7f1986994
95424 Ref: 7577\7f1987186
95425 Ref: 7578\7f1987186
95426 Ref: 7579\7f1987537
95427 Ref: 7580\7f1988020
95428 Ref: 7581\7f1988020
95429 Ref: 7582\7f1988345
95430 Ref: 7583\7f1988347
95431 Ref: 7584\7f1988412
95432 Ref: 7585\7f1988526
95433 Ref: 7586\7f1988526
95434 Ref: 7587\7f1988526
95435 Ref: 7588\7f1988881
95436 Ref: 7589\7f1988934
95437 Ref: 7590\7f1989734
95438 Ref: 7591\7f1990001
95439 Ref: 7592\7f1991785
95440 Node: C.3.2\7f1993064
95441 Ref: 7593\7f1993300
95442 Ref: 7594\7f1993379
95443 Ref: 7595\7f1993432
95444 Ref: 7596\7f1993554
95445 Ref: 7597\7f1993640
95446 Ref: 7598\7f1993726
95447 Ref: 7599\7f1993831
95448 Ref: 7600\7f1993963
95449 Ref: 7601\7f1994150
95450 Ref: 7602\7f1994228
95451 Ref: 7603\7f1994324
95452 Ref: 7604\7f1994538
95453 Ref: 7605\7f1995560
95454 Ref: 7606\7f1996336
95455 Ref: 7607\7f1996629
95456 Ref: 7608\7f1996950
95457 Node: C.4\7f1998893
95458 Ref: 7609\7f1999759
95459 Node: C.5\7f2001423
95460 Ref: 7610\7f2001772
95461 Ref: 7611\7f2001773
95462 Ref: 7612\7f2001796
95463 Ref: 7613\7f2001980
95464 Ref: 7614\7f2001982
95465 Ref: 7615\7f2002527
95466 Ref: 7616\7f2002527
95467 Node: C.6\7f2003757
95468 Ref: 7617\7f2004327
95469 Ref: 7618\7f2004327
95470 Ref: 7619\7f2004404
95471 Ref: 7620\7f2004404
95472 Ref: 7621\7f2004475
95473 Ref: 7622\7f2004475
95474 Ref: 7623\7f2004757
95475 Ref: 7624\7f2004757
95476 Ref: 7625\7f2004850
95477 Ref: 7626\7f2004850
95478 Ref: 7627\7f2005124
95479 Ref: 7628\7f2005124
95480 Ref: 7629\7f2005316
95481 Ref: 7630\7f2005649
95482 Ref: 7631\7f2006405
95483 Ref: 7632\7f2006405
95484 Ref: 7633\7f2006680
95485 Ref: 7634\7f2009296
95486 Ref: 7635\7f2009403
95487 Ref: 7636\7f2009814
95488 Node: C.7\7f2010890
95489 Node: C.7.1\7f2011429
95490 Ref: 7637\7f2011713
95491 Ref: 7638\7f2011777
95492 Ref: 7639\7f2011855
95493 Ref: 7640\7f2011978
95494 Ref: 7641\7f2012048
95495 Ref: 7642\7f2012099
95496 Ref: 7643\7f2012150
95497 Ref: 7644\7f2012214
95498 Ref: 7645\7f2012285
95499 Ref: 7646\7f2012356
95500 Ref: 7647\7f2013951
95501 Ref: 7648\7f2013966
95502 Ref: 7649\7f2014160
95503 Ref: 7650\7f2014175
95504 Ref: 7651\7f2014492
95505 Ref: 7652\7f2014619
95506 Ref: 7653\7f2014619
95507 Ref: 7654\7f2014744
95508 Ref: 7655\7f2014875
95509 Ref: 7656\7f2015021
95510 Node: C.7.2\7f2015850
95511 Ref: 7657\7f2016292
95512 Ref: 7658\7f2016309
95513 Ref: 7659\7f2016371
95514 Ref: 7660\7f2016454
95515 Ref: 7661\7f2016549
95516 Ref: 7662\7f2016658
95517 Ref: 7663\7f2017838
95518 Ref: 7664\7f2017953
95519 Ref: 7665\7f2018355
95520 Ref: 7666\7f2018840
95521 Ref: 7667\7f2019040
95522 Ref: 7668\7f2019240
95523 Node: C.7.3\7f2024188
95524 Ref: 7669\7f2024526
95525 Ref: 7670\7f2024592
95526 Ref: 7671\7f2024675
95527 Ref: 7672\7f2024907
95528 Ref: 7673\7f2025001
95529 Ref: 7674\7f2025082
95530 Ref: 7675\7f2025223
95531 Ref: 7676\7f2025405
95532 Ref: 7677\7f2025405
95533 Ref: 7678\7f2026502
95534 Ref: 7679\7f2026502
95535 Ref: 7680\7f2026502
95536 Ref: 7681\7f2026502
95537 Ref: 7682\7f2026502
95538 Ref: 7683\7f2026502
95539 Node: Annex D\7f2028744
95540 Ref: 7684\7f2028879
95541 Ref: 7685\7f2028879
95542 Node: D.1\7f2032163
95543 Ref: 7686\7f2032908
95544 Ref: 7687\7f2032908
95545 Ref: 7688\7f2033044
95546 Ref: 7689\7f2033044
95547 Ref: 7690\7f2034567
95548 Ref: 7691\7f2034567
95549 Ref: 7692\7f2034567
95550 Ref: 7693\7f2034567
95551 Ref: 7694\7f2034567
95552 Ref: 7695\7f2035546
95553 Ref: 7696\7f2035964
95554 Ref: 7697\7f2035966
95555 Node: D.2\7f2038628
95556 Node: D.2.1\7f2039147
95557 Ref: 7698\7f2039529
95558 Ref: 7699\7f2039595
95559 Ref: 7700\7f2039611
95560 Ref: 7701\7f2040201
95561 Ref: 7702\7f2040201
95562 Ref: 7703\7f2040201
95563 Ref: 7704\7f2040201
95564 Ref: 7705\7f2040591
95565 Ref: 7706\7f2040591
95566 Ref: 7707\7f2040591
95567 Ref: 7708\7f2040591
95568 Ref: 7709\7f2040591
95569 Ref: 7710\7f2040591
95570 Ref: 7711\7f2041376
95571 Ref: 7712\7f2042844
95572 Node: D.2.2\7f2044540
95573 Ref: 7713\7f2045000
95574 Ref: 7714\7f2045001
95575 Ref: 7715\7f2045032
95576 Ref: 7716\7f2045143
95577 Ref: 7717\7f2045144
95578 Ref: 7718\7f2045193
95579 Ref: 7719\7f2045220
95580 Ref: 7720\7f2045246
95581 Ref: 7721\7f2046805
95582 Ref: 7722\7f2046805
95583 Ref: 7723\7f2046931
95584 Ref: 7724\7f2046933
95585 Ref: 7725\7f2047298
95586 Ref: 7726\7f2047712
95587 Node: D.2.3\7f2049098
95588 Ref: 7727\7f2049421
95589 Ref: 7728\7f2049421
95590 Ref: 7729\7f2050510
95591 Ref: 7730\7f2050510
95592 Ref: 7731\7f2050922
95593 Ref: 7732\7f2051250
95594 Node: D.2.4\7f2052340
95595 Ref: 7733\7f2052690
95596 Ref: 7734\7f2052690
95597 Ref: 7735\7f2052806
95598 Ref: 7736\7f2052868
95599 Ref: 7737\7f2052902
95600 Ref: 7738\7f2054508
95601 Ref: 7739\7f2054508
95602 Node: D.2.5\7f2055701
95603 Ref: 7740\7f2056082
95604 Ref: 7741\7f2056082
95605 Ref: 7742\7f2056234
95606 Ref: 7743\7f2056237
95607 Ref: 7744\7f2056355
95608 Ref: 7745\7f2056484
95609 Ref: 7746\7f2056616
95610 Ref: 7747\7f2056721
95611 Node: D.2.6\7f2059680
95612 Ref: 7748\7f2060460
95613 Ref: 7749\7f2060460
95614 Ref: 7750\7f2060621
95615 Ref: 7751\7f2060637
95616 Ref: 7752\7f2060671
95617 Ref: 7753\7f2060777
95618 Ref: 7754\7f2060944
95619 Ref: 7755\7f2061118
95620 Ref: 7756\7f2061589
95621 Ref: 7757\7f2061589
95622 Ref: 7758\7f2065971
95623 Ref: 7759\7f2066337
95624 Node: D.3\7f2067371
95625 Ref: 7760\7f2067817
95626 Ref: 7761\7f2067818
95627 Ref: 7762\7f2067840
95628 Ref: 7763\7f2067912
95629 Ref: 7764\7f2067983
95630 Ref: 7765\7f2068048
95631 Ref: 7766\7f2068048
95632 Ref: 7767\7f2068151
95633 Ref: 7768\7f2068957
95634 Ref: 7769\7f2069454
95635 Ref: 7770\7f2069456
95636 Ref: 7771\7f2069551
95637 Ref: 7772\7f2069551
95638 Ref: 7773\7f2069562
95639 Ref: 7774\7f2070918
95640 Ref: 7775\7f2070918
95641 Ref: 7776\7f2070918
95642 Ref: 7777\7f2071392
95643 Ref: 7778\7f2071544
95644 Ref: 7779\7f2071840
95645 Node: D.4\7f2074549
95646 Ref: 7780\7f2074680
95647 Ref: 7781\7f2074959
95648 Ref: 7782\7f2074960
95649 Ref: 7783\7f2074982
95650 Ref: 7784\7f2075054
95651 Ref: 7785\7f2075140
95652 Ref: 7786\7f2075205
95653 Ref: 7787\7f2075205
95654 Ref: 7788\7f2075306
95655 Ref: 7789\7f2075750
95656 Ref: 7790\7f2075750
95657 Ref: 7791\7f2075881
95658 Ref: 7792\7f2075881
95659 Ref: 7793\7f2075890
95660 Node: D.5\7f2078575
95661 Node: D.5.1\7f2078902
95662 Ref: 7794\7f2079355
95663 Ref: 7795\7f2079428
95664 Ref: 7796\7f2079642
95665 Ref: 7797\7f2080134
95666 Ref: 7798\7f2080189
95667 Ref: 7799\7f2080554
95668 Node: D.5.2\7f2083366
95669 Ref: 7800\7f2083779
95670 Ref: 7801\7f2083794
95671 Ref: 7802\7f2084851
95672 Node: D.6\7f2085792
95673 Node: D.7\7f2088871
95674 Ref: 7803\7f2089289
95675 Ref: 7804\7f2089289
95676 Ref: 7805\7f2089407
95677 Ref: 7806\7f2089407
95678 Ref: 7807\7f2089840
95679 Ref: 7808\7f2089840
95680 Ref: 7809\7f2089995
95681 Ref: 7810\7f2089995
95682 Ref: 7811\7f2090114
95683 Ref: 7812\7f2090114
95684 Ref: 7813\7f2090566
95685 Ref: 7814\7f2090570
95686 Ref: 7815\7f2090570
95687 Ref: 7816\7f2091047
95688 Ref: 7817\7f2091049
95689 Ref: 7818\7f2091056
95690 Ref: 7819\7f2091056
95691 Ref: 7820\7f2091343
95692 Ref: 7821\7f2091343
95693 Ref: 7822\7f2091447
95694 Ref: 7823\7f2091447
95695 Ref: 7824\7f2091543
95696 Ref: 7825\7f2091543
95697 Ref: 7826\7f2092026
95698 Ref: 7827\7f2092035
95699 Ref: 7828\7f2092035
95700 Ref: 7829\7f2092262
95701 Ref: 7830\7f2092262
95702 Ref: 7831\7f2092340
95703 Ref: 7832\7f2092340
95704 Ref: 7833\7f2092416
95705 Ref: 7834\7f2092416
95706 Ref: 7835\7f2092616
95707 Ref: 7836\7f2092616
95708 Ref: 7837\7f2092911
95709 Ref: 7838\7f2092911
95710 Ref: 7839\7f2093037
95711 Ref: 7840\7f2093037
95712 Ref: 7841\7f2093712
95713 Ref: 7842\7f2093714
95714 Ref: 7843\7f2093834
95715 Ref: 7844\7f2093834
95716 Ref: 7845\7f2094245
95717 Ref: 7846\7f2094245
95718 Ref: 7847\7f2094550
95719 Ref: 7848\7f2094551
95720 Ref: 7849\7f2094551
95721 Ref: 7850\7f2094624
95722 Ref: 7851\7f2094624
95723 Ref: 7852\7f2095132
95724 Ref: 7853\7f2095133
95725 Ref: 7854\7f2095133
95726 Ref: 7855\7f2095205
95727 Ref: 7856\7f2095205
95728 Ref: 7857\7f2095680
95729 Ref: 7858\7f2095681
95730 Ref: 7859\7f2095681
95731 Ref: 7860\7f2095755
95732 Ref: 7861\7f2095755
95733 Ref: 7862\7f2096033
95734 Ref: 7863\7f2096042
95735 Ref: 7864\7f2096042
95736 Ref: 7865\7f2096752
95737 Node: D.8\7f2097308
95738 Ref: 7866\7f2097628
95739 Ref: 7867\7f2097644
95740 Ref: 7868\7f2097663
95741 Ref: 7869\7f2097698
95742 Ref: 7870\7f2097732
95743 Ref: 7871\7f2097812
95744 Ref: 7872\7f2097836
95745 Ref: 7873\7f2097881
95746 Ref: 7874\7f2097925
95747 Ref: 7875\7f2097969
95748 Ref: 7876\7f2098016
95749 Ref: 7877\7f2098064
95750 Ref: 7878\7f2099428
95751 Ref: 7879\7f2099490
95752 Ref: 7880\7f2099558
95753 Ref: 7881\7f2099620
95754 Ref: 7882\7f2099682
95755 Ref: 7883\7f2099744
95756 Ref: 7884\7f2099806
95757 Ref: 7885\7f2099868
95758 Ref: 7886\7f2099936
95759 Ref: 7887\7f2100016
95760 Ref: 7888\7f2100163
95761 Ref: 7889\7f2100569
95762 Ref: 7890\7f2100569
95763 Ref: 7891\7f2102063
95764 Ref: 7892\7f2104586
95765 Ref: 7893\7f2106098
95766 Node: D.9\7f2107810
95767 Ref: 7894\7f2108808
95768 Ref: 7895\7f2108808
95769 Ref: 7896\7f2110385
95770 Ref: 7897\7f2110385
95771 Node: D.10\7f2111805
95772 Ref: 7898\7f2112292
95773 Ref: 7899\7f2112362
95774 Ref: 7900\7f2112417
95775 Ref: 7901\7f2112474
95776 Ref: 7902\7f2112531
95777 Ref: 7903\7f2112601
95778 Ref: 7904\7f2112913
95779 Ref: 7905\7f2112932
95780 Ref: 7906\7f2113702
95781 Ref: 7907\7f2113702
95782 Ref: 7908\7f2113702
95783 Node: D.10.1\7f2114805
95784 Ref: 7909\7f2115227
95785 Ref: 7910\7f2115300
95786 Ref: 7911\7f2115379
95787 Ref: 7912\7f2115478
95788 Node: D.11\7f2117115
95789 Ref: 7913\7f2117621
95790 Ref: 7914\7f2117694
95791 Ref: 7915\7f2117757
95792 Ref: 7916\7f2117823
95793 Ref: 7917\7f2117984
95794 Ref: 7918\7f2117984
95795 Ref: 7919\7f2117984
95796 Ref: 7920\7f2118951
95797 Ref: 7921\7f2118996
95798 Ref: 7922\7f2119107
95799 Node: D.12\7f2121320
95800 Node: D.13\7f2124145
95801 Ref: 7923\7f2124324
95802 Node: D.14\7f2127067
95803 Ref: 7924\7f2127490
95804 Ref: 7925\7f2127509
95805 Ref: 7926\7f2127533
95806 Ref: 7927\7f2127577
95807 Ref: 7928\7f2127621
95808 Ref: 7929\7f2127694
95809 Ref: 7930\7f2127752
95810 Ref: 7931\7f2128478
95811 Ref: 7932\7f2128579
95812 Ref: 7933\7f2128695
95813 Ref: 7934\7f2128783
95814 Ref: 7935\7f2128904
95815 Ref: 7936\7f2129041
95816 Ref: 7937\7f2129041
95817 Ref: 7938\7f2130527
95818 Ref: 7939\7f2131932
95819 Node: D.14.1\7f2134021
95820 Ref: 7940\7f2134467
95821 Ref: 7941\7f2134486
95822 Ref: 7942\7f2134639
95823 Ref: 7943\7f2134723
95824 Ref: 7944\7f2134837
95825 Ref: 7945\7f2135007
95826 Ref: 7946\7f2135175
95827 Ref: 7947\7f2135244
95828 Ref: 7948\7f2135371
95829 Ref: 7949\7f2135425
95830 Ref: 7950\7f2135978
95831 Ref: 7951\7f2135980
95832 Ref: 7952\7f2136152
95833 Ref: 7953\7f2137307
95834 Ref: 7954\7f2138809
95835 Node: D.14.2\7f2139736
95836 Ref: 7955\7f2140207
95837 Ref: 7956\7f2140225
95838 Ref: 7957\7f2140395
95839 Ref: 7958\7f2140503
95840 Ref: 7959\7f2140625
95841 Ref: 7960\7f2140739
95842 Ref: 7961\7f2140861
95843 Ref: 7962\7f2140987
95844 Ref: 7963\7f2141113
95845 Ref: 7964\7f2141211
95846 Ref: 7965\7f2141280
95847 Ref: 7966\7f2141354
95848 Ref: 7967\7f2141427
95849 Ref: 7968\7f2141498
95850 Ref: 7969\7f2141576
95851 Ref: 7970\7f2141702
95852 Ref: 7971\7f2141794
95853 Ref: 7972\7f2141910
95854 Ref: 7973\7f2142189
95855 Ref: 7974\7f2142646
95856 Ref: 7975\7f2142646
95857 Ref: 7976\7f2142646
95858 Ref: 7977\7f2142906
95859 Ref: 7978\7f2142908
95860 Ref: 7979\7f2146767
95861 Node: D.14.3\7f2147650
95862 Ref: 7980\7f2148093
95863 Ref: 7981\7f2148111
95864 Ref: 7982\7f2148206
95865 Node: D.15\7f2149393
95866 Ref: 7983\7f2149845
95867 Ref: 7984\7f2149863
95868 Ref: 7985\7f2149915
95869 Ref: 7986\7f2150031
95870 Ref: 7987\7f2150207
95871 Ref: 7988\7f2150387
95872 Ref: 7989\7f2150484
95873 Ref: 7990\7f2150613
95874 Ref: 7991\7f2150890
95875 Ref: 7992\7f2151104
95876 Ref: 7993\7f2151106
95877 Ref: 7994\7f2151291
95878 Node: D.16\7f2154464
95879 Ref: 7995\7f2154834
95880 Ref: 7996\7f2154899
95881 Ref: 7997\7f2154950
95882 Ref: 7998\7f2155017
95883 Ref: 7999\7f2155083
95884 Ref: 8000\7f2155610
95885 Ref: 8001\7f2155610
95886 Node: D.16.1\7f2157118
95887 Ref: 8002\7f2157626
95888 Ref: 8003\7f2157635
95889 Ref: 8004\7f2157696
95890 Ref: 8005\7f2157748
95891 Ref: 8006\7f2157832
95892 Ref: 8007\7f2157908
95893 Ref: 8008\7f2157986
95894 Ref: 8009\7f2158065
95895 Ref: 8010\7f2158268
95896 Ref: 8011\7f2158537
95897 Ref: 8012\7f2158717
95898 Ref: 8013\7f2158896
95899 Ref: 8014\7f2159931
95900 Ref: 8015\7f2159931
95901 Node: Annex E\7f2164692
95902 Ref: 8016\7f2165051
95903 Ref: 8017\7f2165051
95904 Ref: 8018\7f2165051
95905 Ref: 8019\7f2165352
95906 Ref: 8020\7f2165493
95907 Node: E.1\7f2166790
95908 Ref: 8021\7f2167019
95909 Ref: 8022\7f2167019
95910 Ref: 8023\7f2167796
95911 Ref: 8024\7f2167939
95912 Ref: 8025\7f2168232
95913 Ref: 8026\7f2168232
95914 Ref: 8027\7f2168232
95915 Ref: 8028\7f2168232
95916 Ref: 8029\7f2168821
95917 Ref: 8030\7f2168836
95918 Ref: 8031\7f2169213
95919 Ref: 8032\7f2169344
95920 Node: E.2\7f2171055
95921 Ref: 8033\7f2171468
95922 Ref: 8034\7f2171468
95923 Ref: 8035\7f2171468
95924 Ref: 8036\7f2171468
95925 Ref: 8037\7f2171468
95926 Ref: 8038\7f2171468
95927 Ref: 8039\7f2172157
95928 Ref: 8040\7f2172291
95929 Ref: 8041\7f2172424
95930 Ref: 8042\7f2172532
95931 Node: E.2.1\7f2174083
95932 Ref: 8043\7f2174591
95933 Ref: 8044\7f2174596
95934 Ref: 8045\7f2174663
95935 Ref: 8046\7f2174664
95936 Ref: 8047\7f2174693
95937 Ref: 8048\7f2174751
95938 Ref: 8049\7f2174885
95939 Ref: 8050\7f2174885
95940 Ref: 8051\7f2175309
95941 Ref: 8052\7f2175309
95942 Ref: 8053\7f2175628
95943 Ref: 8054\7f2175830
95944 Ref: 8055\7f2175830
95945 Ref: 8056\7f2175830
95946 Node: E.2.2\7f2176128
95947 Ref: 8057\7f2176437
95948 Ref: 8058\7f2176442
95949 Ref: 8059\7f2176507
95950 Ref: 8060\7f2176508
95951 Ref: 8061\7f2176535
95952 Ref: 8062\7f2176593
95953 Ref: 8063\7f2176721
95954 Ref: 8064\7f2176721
95955 Ref: 8065\7f2177414
95956 Ref: 8066\7f2177550
95957 Ref: 8067\7f2177552
95958 Node: E.2.3\7f2181035
95959 Ref: 8068\7f2181379
95960 Ref: 8069\7f2181384
95961 Ref: 8070\7f2181458
95962 Ref: 8071\7f2181459
95963 Ref: 8072\7f2181495
95964 Ref: 8073\7f2181580
95965 Ref: 8074\7f2181581
95966 Ref: 8075\7f2181612
95967 Ref: 8076\7f2181623
95968 Ref: 8077\7f2181628
95969 Ref: 8078\7f2181730
95970 Ref: 8079\7f2181730
95971 Ref: 8080\7f2181730
95972 Ref: 8081\7f2181730
95973 Ref: 8082\7f2181730
95974 Ref: 8083\7f2181878
95975 Ref: 8084\7f2181878
95976 Ref: 8085\7f2183260
95977 Ref: 8086\7f2183261
95978 Ref: 8087\7f2183731
95979 Ref: 8088\7f2183731
95980 Ref: 8089\7f2183731
95981 Node: E.3\7f2184882
95982 Ref: 8090\7f2185308
95983 Ref: 8091\7f2185323
95984 Ref: 8092\7f2185519
95985 Ref: 8093\7f2185534
95986 Ref: 8094\7f2185748
95987 Ref: 8095\7f2186089
95988 Ref: 8096\7f2186477
95989 Ref: 8097\7f2186477
95990 Ref: 8098\7f2186889
95991 Node: E.4\7f2187056
95992 Ref: 8099\7f2187187
95993 Ref: 8100\7f2187187
95994 Ref: 8101\7f2187187
95995 Ref: 8102\7f2187187
95996 Ref: 8103\7f2187187
95997 Ref: 8104\7f2188688
95998 Ref: 8105\7f2188688
95999 Ref: 8106\7f2188688
96000 Ref: 8107\7f2189375
96001 Ref: 8108\7f2189375
96002 Ref: 8109\7f2189676
96003 Ref: 8110\7f2190116
96004 Ref: 8111\7f2191116
96005 Ref: 8112\7f2191116
96006 Ref: 8113\7f2191216
96007 Ref: 8114\7f2191216
96008 Ref: 8115\7f2191507
96009 Ref: 8116\7f2191665
96010 Ref: 8117\7f2191665
96011 Ref: 8118\7f2192018
96012 Node: E.4.1\7f2193514
96013 Ref: 8119\7f2194250
96014 Ref: 8120\7f2194250
96015 Ref: 8121\7f2195109
96016 Ref: 8122\7f2195109
96017 Node: E.4.2\7f2195725
96018 Node: E.5\7f2199705
96019 Ref: 8123\7f2199846
96020 Ref: 8124\7f2199846
96021 Ref: 8125\7f2200242
96022 Ref: 8126\7f2200259
96023 Ref: 8127\7f2200316
96024 Ref: 8128\7f2200370
96025 Ref: 8129\7f2200533
96026 Ref: 8130\7f2200721
96027 Ref: 8131\7f2200880
96028 Ref: 8132\7f2201083
96029 Ref: 8133\7f2201242
96030 Ref: 8134\7f2201401
96031 Ref: 8135\7f2202697
96032 Ref: 8136\7f2203072
96033 Ref: 8137\7f2203739
96034 Ref: 8138\7f2203739
96035 Node: Annex F\7f2206432
96036 Ref: 8139\7f2206571
96037 Node: F.1\7f2208430
96038 Ref: 8140\7f2208631
96039 Ref: 8141\7f2208631
96040 Ref: 8142\7f2208913
96041 Ref: 8143\7f2208913
96042 Node: F.2\7f2209260
96043 Ref: 8144\7f2209518
96044 Ref: 8145\7f2209555
96045 Ref: 8146\7f2209611
96046 Ref: 8147\7f2209670
96047 Ref: 8148\7f2209722
96048 Ref: 8149\7f2209777
96049 Ref: 8150\7f2210094
96050 Node: F.3\7f2211773
96051 Ref: 8151\7f2212063
96052 Node: F.3.1\7f2216979
96053 Ref: 8152\7f2217106
96054 Ref: 8153\7f2217106
96055 Node: F.3.2\7f2224130
96056 Ref: 8154\7f2225371
96057 Node: F.3.3\7f2236344
96058 Ref: 8155\7f2237099
96059 Ref: 8156\7f2237116
96060 Ref: 8157\7f2237156
96061 Ref: 8158\7f2237291
96062 Ref: 8159\7f2237447
96063 Ref: 8160\7f2237514
96064 Ref: 8161\7f2237571
96065 Ref: 8162\7f2237640
96066 Ref: 8163\7f2237685
96067 Ref: 8164\7f2237742
96068 Ref: 8165\7f2237799
96069 Ref: 8166\7f2237856
96070 Ref: 8167\7f2238386
96071 Ref: 8168\7f2238424
96072 Ref: 8169\7f2238579
96073 Ref: 8170\7f2238778
96074 Ref: 8171\7f2239207
96075 Ref: 8172\7f2239654
96076 Ref: 8173\7f2240048
96077 Node: F.3.4\7f2247165
96078 Ref: 8174\7f2247366
96079 Ref: 8175\7f2247366
96080 Node: F.3.5\7f2248003
96081 Ref: 8176\7f2248202
96082 Ref: 8177\7f2248202
96083 Node: Annex G\7f2248889
96084 Ref: 8178\7f2249006
96085 Node: G.1\7f2250581
96086 Node: G.1.1\7f2251520
96087 Ref: 8179\7f2251776
96088 Ref: 8180\7f2251920
96089 Ref: 8181\7f2252024
96090 Ref: 8182\7f2252108
96091 Ref: 8183\7f2252140
96092 Ref: 8184\7f2252189
96093 Ref: 8185\7f2252243
96094 Ref: 8186\7f2252297
96095 Ref: 8187\7f2252355
96096 Ref: 8188\7f2252452
96097 Ref: 8189\7f2252549
96098 Ref: 8190\7f2252650
96099 Ref: 8191\7f2252727
96100 Ref: 8192\7f2252804
96101 Ref: 8193\7f2252884
96102 Ref: 8194\7f2253026
96103 Ref: 8195\7f2253090
96104 Ref: 8196\7f2253202
96105 Ref: 8197\7f2253304
96106 Ref: 8198\7f2253532
96107 Ref: 8199\7f2254051
96108 Ref: 8200\7f2256793
96109 Ref: 8201\7f2260489
96110 Ref: 8202\7f2260489
96111 Ref: 8203\7f2260489
96112 Ref: 8204\7f2260831
96113 Ref: 8205\7f2261186
96114 Node: G.1.2\7f2267257
96115 Ref: 8206\7f2267618
96116 Ref: 8207\7f2267888
96117 Ref: 8208\7f2267942
96118 Ref: 8209\7f2267996
96119 Ref: 8210\7f2268050
96120 Ref: 8211\7f2268335
96121 Ref: 8212\7f2268386
96122 Ref: 8213\7f2268437
96123 Ref: 8214\7f2268488
96124 Ref: 8215\7f2268542
96125 Ref: 8216\7f2268596
96126 Ref: 8217\7f2268650
96127 Ref: 8218\7f2268704
96128 Ref: 8219\7f2268761
96129 Ref: 8220\7f2268813
96130 Ref: 8221\7f2268865
96131 Ref: 8222\7f2268917
96132 Ref: 8223\7f2268972
96133 Ref: 8224\7f2269027
96134 Ref: 8225\7f2269082
96135 Ref: 8226\7f2269137
96136 Ref: 8227\7f2269243
96137 Ref: 8228\7f2273746
96138 Ref: 8229\7f2273746
96139 Ref: 8230\7f2273746
96140 Ref: 8231\7f2274696
96141 Ref: 8232\7f2275081
96142 Ref: 8233\7f2277645
96143 Ref: 8234\7f2278447
96144 Node: G.1.3\7f2279326
96145 Ref: 8235\7f2280004
96146 Ref: 8236\7f2280177
96147 Ref: 8237\7f2280212
96148 Ref: 8238\7f2280261
96149 Ref: 8239\7f2280314
96150 Ref: 8240\7f2280452
96151 Ref: 8241\7f2280547
96152 Ref: 8242\7f2280800
96153 Ref: 8243\7f2281012
96154 Ref: 8244\7f2281142
96155 Ref: 8245\7f2281365
96156 Node: G.1.4\7f2288037
96157 Ref: 8246\7f2288244
96158 Ref: 8247\7f2288244
96159 Node: G.1.5\7f2288655
96160 Ref: 8248\7f2288860
96161 Ref: 8249\7f2288860
96162 Node: G.2\7f2289291
96163 Ref: 8250\7f2289492
96164 Ref: 8251\7f2289492
96165 Ref: 8252\7f2289972
96166 Node: G.2.1\7f2290565
96167 Ref: 8253\7f2291587
96168 Ref: 8254\7f2291875
96169 Ref: 8255\7f2291976
96170 Ref: 8256\7f2292357
96171 Ref: 8257\7f2292746
96172 Ref: 8258\7f2293705
96173 Ref: 8259\7f2293705
96174 Ref: 8260\7f2293984
96175 Node: G.2.2\7f2294948
96176 Ref: 8261\7f2295487
96177 Ref: 8262\7f2295487
96178 Ref: 8263\7f2296181
96179 Ref: 8264\7f2296181
96180 Ref: 8265\7f2296523
96181 Ref: 8266\7f2296523
96182 Ref: 8267\7f2297320
96183 Ref: 8268\7f2297320
96184 Ref: 8269\7f2298117
96185 Ref: 8270\7f2298119
96186 Ref: 8271\7f2298119
96187 Ref: 8272\7f2298455
96188 Ref: 8273\7f2298456
96189 Node: G.2.3\7f2299912
96190 Ref: 8274\7f2301276
96191 Ref: 8275\7f2301444
96192 Ref: 8276\7f2306992
96193 Ref: 8277\7f2306994
96194 Ref: 8278\7f2307145
96195 Node: G.2.4\7f2307364
96196 Ref: 8279\7f2307715
96197 Ref: 8280\7f2307715
96198 Ref: 8281\7f2308177
96199 Ref: 8282\7f2308179
96200 Ref: 8283\7f2308331
96201 Ref: 8284\7f2309344
96202 Node: G.2.5\7f2313036
96203 Node: G.2.6\7f2314803
96204 Ref: 8285\7f2315471
96205 Ref: 8286\7f2315936
96206 Ref: 8287\7f2316210
96207 Ref: 8288\7f2316596
96208 Ref: 8289\7f2316598
96209 Ref: 8290\7f2316845
96210 Node: G.3\7f2322343
96211 Node: G.3.1\7f2323101
96212 Ref: 8291\7f2323462
96213 Ref: 8292\7f2323545
96214 Ref: 8293\7f2323612
96215 Ref: 8294\7f2324755
96216 Ref: 8295\7f2325237
96217 Ref: 8296\7f2326188
96218 Ref: 8297\7f2326266
96219 Ref: 8298\7f2326330
96220 Ref: 8299\7f2326393
96221 Ref: 8300\7f2326532
96222 Ref: 8301\7f2326606
96223 Ref: 8302\7f2326832
96224 Ref: 8303\7f2327061
96225 Ref: 8304\7f2328522
96226 Ref: 8305\7f2330789
96227 Ref: 8306\7f2338173
96228 Node: G.3.2\7f2340797
96229 Ref: 8307\7f2341460
96230 Ref: 8308\7f2341546
96231 Ref: 8309\7f2341614
96232 Ref: 8310\7f2341880
96233 Ref: 8311\7f2341941
96234 Ref: 8312\7f2342008
96235 Ref: 8313\7f2342114
96236 Ref: 8314\7f2342224
96237 Ref: 8315\7f2342321
96238 Ref: 8316\7f2342424
96239 Ref: 8317\7f2342636
96240 Ref: 8318\7f2342707
96241 Ref: 8319\7f2342835
96242 Ref: 8320\7f2342939
96243 Ref: 8321\7f2343323
96244 Ref: 8322\7f2345237
96245 Ref: 8323\7f2345548
96246 Ref: 8324\7f2345609
96247 Ref: 8325\7f2345677
96248 Ref: 8326\7f2345783
96249 Ref: 8327\7f2345894
96250 Ref: 8328\7f2345991
96251 Ref: 8329\7f2346094
96252 Ref: 8330\7f2346312
96253 Ref: 8331\7f2346383
96254 Ref: 8332\7f2346511
96255 Ref: 8333\7f2346615
96256 Ref: 8334\7f2346997
96257 Ref: 8335\7f2347072
96258 Ref: 8336\7f2349963
96259 Ref: 8337\7f2350061
96260 Ref: 8338\7f2350131
96261 Ref: 8339\7f2350200
96262 Ref: 8340\7f2350335
96263 Ref: 8341\7f2350411
96264 Ref: 8342\7f2350643
96265 Ref: 8343\7f2350878
96266 Ref: 8344\7f2352636
96267 Ref: 8345\7f2360041
96268 Ref: 8346\7f2375033
96269 Node: Annex H\7f2378246
96270 Ref: 8347\7f2378393
96271 Ref: 8348\7f2378393
96272 Ref: 8349\7f2379054
96273 Ref: 8350\7f2379184
96274 Ref: 8351\7f2379185
96275 Node: H.1\7f2379668
96276 Ref: 8352\7f2380035
96277 Ref: 8353\7f2380036
96278 Ref: 8354\7f2380107
96279 Ref: 8355\7f2380107
96280 Node: H.2\7f2381480
96281 Ref: 8356\7f2381698
96282 Node: H.3\7f2382497
96283 Node: H.3.1\7f2382799
96284 Ref: 8357\7f2383294
96285 Ref: 8358\7f2383295
96286 Ref: 8359\7f2383359
96287 Ref: 8360\7f2383359
96288 Node: H.3.2\7f2386154
96289 Ref: 8361\7f2386680
96290 Ref: 8362\7f2386681
96291 Ref: 8363\7f2386706
96292 Ref: 8364\7f2386721
96293 Ref: 8365\7f2386991
96294 Ref: 8366\7f2387126
96295 Node: H.4\7f2388853
96296 Ref: 8367\7f2389384
96297 Ref: 8368\7f2389384
96298 Ref: 8369\7f2389546
96299 Ref: 8370\7f2389546
96300 Ref: 8371\7f2389622
96301 Ref: 8372\7f2389622
96302 Ref: 8373\7f2389767
96303 Ref: 8374\7f2389767
96304 Ref: 8375\7f2389864
96305 Ref: 8376\7f2389864
96306 Ref: 8377\7f2389950
96307 Ref: 8378\7f2389950
96308 Ref: 8379\7f2390470
96309 Ref: 8380\7f2390472
96310 Ref: 8381\7f2390512
96311 Ref: 8382\7f2390512
96312 Ref: 8383\7f2390802
96313 Ref: 8384\7f2390802
96314 Ref: 8385\7f2390988
96315 Ref: 8386\7f2390988
96316 Ref: 8387\7f2391313
96317 Ref: 8388\7f2391315
96318 Ref: 8389\7f2391320
96319 Ref: 8390\7f2391320
96320 Ref: 8391\7f2391358
96321 Ref: 8392\7f2391359
96322 Ref: 8393\7f2391406
96323 Ref: 8394\7f2391406
96324 Ref: 8395\7f2391522
96325 Ref: 8396\7f2391522
96326 Ref: 8397\7f2391722
96327 Ref: 8398\7f2391722
96328 Ref: 8399\7f2391843
96329 Ref: 8400\7f2391843
96330 Ref: 8401\7f2391968
96331 Ref: 8402\7f2391968
96332 Ref: 8403\7f2393530
96333 Ref: 8404\7f2393715
96334 Node: H.5\7f2394363
96335 Ref: 8405\7f2394733
96336 Ref: 8406\7f2394734
96337 Ref: 8407\7f2394805
96338 Ref: 8408\7f2394805
96339 Node: H.6\7f2395475
96340 Ref: 8409\7f2395828
96341 Ref: 8410\7f2395829
96342 Ref: 8411\7f2395866
96343 Ref: 8412\7f2396050
96344 Ref: 8413\7f2396050
96345 Ref: 8414\7f2396452
96346 Node: Annex J\7f2398660
96347 Ref: 8415\7f2398803
96348 Node: J.1\7f2399761
96349 Node: J.2\7f2400859
96350 Node: J.3\7f2402024
96351 Ref: 8416\7f2402537
96352 Ref: S0321\7f2402537
96353 Ref: 8417\7f2402555
96354 Ref: 8418\7f2402567
96355 Ref: 8419\7f2402637
96356 Ref: 8420\7f2402931
96357 Ref: 8421\7f2404113
96358 Ref: 8422\7f2404326
96359 Ref: 8423\7f2404558
96360 Node: J.4\7f2404658
96361 Ref: 8424\7f2404909
96362 Ref: 8425\7f2404909
96363 Node: J.5\7f2405439
96364 Node: J.6\7f2408043
96365 Node: J.7\7f2408334
96366 Ref: 8426\7f2408494
96367 Ref: S0322\7f2408494
96368 Ref: 8427\7f2408503
96369 Ref: 8428\7f2408522
96370 Node: J.7.1\7f2408753
96371 Ref: 8429\7f2409280
96372 Ref: 8430\7f2409282
96373 Ref: 8431\7f2409282
96374 Ref: 8432\7f2409684
96375 Ref: 8433\7f2409844
96376 Ref: 8434\7f2410119
96377 Ref: 8435\7f2410269
96378 Ref: 8436\7f2410938
96379 Node: J.8\7f2413473
96380 Ref: 8437\7f2413636
96381 Ref: S0323\7f2413636
96382 Ref: 8438\7f2413655
96383 Node: J.9\7f2413966
96384 Ref: 8439\7f2414215
96385 Ref: 8440\7f2414215
96386 Ref: 8441\7f2414426
96387 Node: J.10\7f2414730
96388 Ref: 8442\7f2415073
96389 Ref: 8443\7f2415074
96390 Ref: 8444\7f2415083
96391 Ref: 8445\7f2415102
96392 Node: J.11\7f2416367
96393 Ref: 8446\7f2416743
96394 Ref: 8447\7f2416743
96395 Node: J.12\7f2417034
96396 Node: J.13\7f2417380
96397 Ref: 8448\7f2417822
96398 Ref: 8449\7f2417969
96399 Ref: 8450\7f2418120
96400 Node: J.14\7f2418272
96401 Node: J.15\7f2419536
96402 Node: J.15.1\7f2420240
96403 Ref: 8451\7f2420497
96404 Ref: 8452\7f2420497
96405 Ref: 8453\7f2420517
96406 Ref: 8454\7f2420518
96407 Ref: 8455\7f2420526
96408 Ref: 8456\7f2420532
96409 Node: J.15.2\7f2421246
96410 Ref: 8457\7f2421527
96411 Ref: 8458\7f2421527
96412 Ref: 8459\7f2421547
96413 Ref: 8460\7f2421548
96414 Ref: 8461\7f2421569
96415 Ref: 8462\7f2421592
96416 Node: J.15.3\7f2422047
96417 Ref: 8463\7f2422313
96418 Ref: 8464\7f2422313
96419 Ref: 8465\7f2422333
96420 Ref: 8466\7f2422334
96421 Ref: 8467\7f2422354
96422 Node: J.15.4\7f2422680
96423 Ref: 8468\7f2422930
96424 Ref: 8469\7f2422931
96425 Ref: 8470\7f2422945
96426 Ref: 8471\7f2423181
96427 Node: J.15.5\7f2423417
96428 Ref: 8472\7f2423595
96429 Ref: 8473\7f2423600
96430 Ref: 8474\7f2423600
96431 Ref: 8475\7f2423600
96432 Ref: 8476\7f2423600
96433 Ref: 8477\7f2423600
96434 Ref: 8478\7f2423600
96435 Ref: 8479\7f2423600
96436 Ref: 8480\7f2423600
96437 Ref: 8481\7f2423600
96438 Ref: 8482\7f2423600
96439 Ref: 8483\7f2423600
96440 Ref: 8484\7f2423600
96441 Ref: 8485\7f2423759
96442 Ref: 8486\7f2423760
96443 Ref: 8487\7f2423805
96444 Ref: 8488\7f2423828
96445 Ref: 8489\7f2423890
96446 Ref: 8490\7f2423944
96447 Ref: 8491\7f2423976
96448 Ref: 8492\7f2423977
96449 Ref: 8493\7f2424022
96450 Ref: 8494\7f2424045
96451 Ref: 8495\7f2424107
96452 Ref: 8496\7f2424161
96453 Ref: 8497\7f2424193
96454 Ref: 8498\7f2424194
96455 Ref: 8499\7f2424232
96456 Ref: 8500\7f2424259
96457 Ref: 8501\7f2424511
96458 Ref: 8502\7f2424511
96459 Ref: 8503\7f2424854
96460 Node: J.15.6\7f2426436
96461 Ref: 8504\7f2426735
96462 Ref: 8505\7f2426735
96463 Ref: 8506\7f2426755
96464 Ref: 8507\7f2426756
96465 Ref: 8508\7f2426787
96466 Node: J.15.7\7f2427197
96467 Ref: 8509\7f2427502
96468 Ref: 8510\7f2427503
96469 Ref: 8511\7f2427530
96470 Ref: 8512\7f2427616
96471 Ref: 8513\7f2427617
96472 Ref: 8514\7f2427641
96473 Ref: 8515\7f2427646
96474 Ref: 8516\7f2427981
96475 Ref: 8517\7f2428356
96476 Node: J.15.8\7f2429012
96477 Ref: 8518\7f2429369
96478 Ref: 8519\7f2429370
96479 Ref: 8520\7f2429378
96480 Ref: 8521\7f2429409
96481 Ref: 8522\7f2429410
96482 Ref: 8523\7f2429420
96483 Ref: 8524\7f2429451
96484 Ref: 8525\7f2429452
96485 Ref: 8526\7f2429475
96486 Ref: 8527\7f2429506
96487 Ref: 8528\7f2429507
96488 Ref: 8529\7f2429532
96489 Ref: 8530\7f2429563
96490 Ref: 8531\7f2429564
96491 Ref: 8532\7f2429591
96492 Ref: 8533\7f2429622
96493 Ref: 8534\7f2429623
96494 Ref: 8535\7f2429647
96495 Ref: 8536\7f2430588
96496 Ref: 8537\7f2430590
96497 Ref: 8538\7f2430590
96498 Ref: 8539\7f2430590
96499 Ref: 8540\7f2430590
96500 Ref: 8541\7f2430590
96501 Ref: 8542\7f2430590
96502 Ref: 8543\7f2430590
96503 Ref: 8544\7f2430590
96504 Ref: 8545\7f2430590
96505 Ref: 8546\7f2430590
96506 Ref: 8547\7f2430590
96507 Node: J.15.9\7f2430762
96508 Ref: 8548\7f2430986
96509 Ref: 8549\7f2430987
96510 Ref: 8550\7f2430992
96511 Ref: 8551\7f2431148
96512 Node: J.15.10\7f2431855
96513 Ref: 8552\7f2432127
96514 Ref: 8553\7f2432128
96515 Ref: 8554\7f2432317
96516 Node: J.15.11\7f2432769
96517 Ref: 8555\7f2433060
96518 Ref: 8556\7f2433061
96519 Ref: 8557\7f2433167
96520 Ref: 8558\7f2433168
96521 Ref: 8559\7f2433348
96522 Ref: 8560\7f2433348
96523 Node: J.15.12\7f2434788
96524 Ref: 8561\7f2435058
96525 Ref: 8562\7f2435059
96526 Ref: 8563\7f2435239
96527 Node: J.15.13\7f2435874
96528 Ref: 8564\7f2436153
96529 Ref: 8565\7f2436153
96530 Ref: 8566\7f2436173
96531 Ref: 8567\7f2436174
96532 Ref: 8568\7f2436188
96533 Node: Annex K\7f2436609
96534 Node: K.1\7f2437039
96535 Ref: 8569\7f2437162
96536 Node: K.2\7f2446438
96537 Ref: 8570\7f2446567
96538 Ref: 8571\7f2448180
96539 Ref: 8572\7f2448391
96540 Ref: 8573\7f2448393
96541 Ref: 8574\7f2452779
96542 Ref: 8575\7f2452794
96543 Ref: 8576\7f2454171
96544 Ref: 8577\7f2454541
96545 Ref: 8578\7f2454543
96546 Ref: 8579\7f2455348
96547 Ref: 8580\7f2455557
96548 Ref: 8581\7f2455559
96549 Ref: 8582\7f2458495
96550 Ref: 8583\7f2458510
96551 Ref: 8584\7f2458816
96552 Ref: 8585\7f2458816
96553 Ref: 8586\7f2468618
96554 Ref: 8587\7f2468633
96555 Ref: 8588\7f2468633
96556 Ref: 8589\7f2469817
96557 Ref: 8590\7f2470068
96558 Ref: 8591\7f2470069
96559 Ref: 8592\7f2474116
96560 Ref: 8593\7f2480125
96561 Ref: 8594\7f2484094
96562 Ref: 8595\7f2484259
96563 Ref: 8596\7f2484260
96564 Ref: 8597\7f2484761
96565 Ref: 8598\7f2484762
96566 Ref: 8599\7f2487465
96567 Ref: 8600\7f2487782
96568 Ref: 8601\7f2487784
96569 Ref: 8602\7f2491052
96570 Ref: 8603\7f2491646
96571 Ref: 8604\7f2491946
96572 Ref: 8605\7f2491948
96573 Ref: 8606\7f2495974
96574 Ref: 8607\7f2496139
96575 Ref: 8608\7f2496140
96576 Ref: 8609\7f2496626
96577 Ref: 8610\7f2496627
96578 Ref: 8611\7f2499432
96579 Ref: 8612\7f2499447
96580 Ref: 8613\7f2499856
96581 Ref: 8614\7f2501046
96582 Ref: 8615\7f2501916
96583 Node: Annex L\7f2504643
96584 Ref: 8616\7f2504792
96585 Ref: 8617\7f2504888
96586 Ref: 8618\7f2504889
96587 Ref: 8619\7f2504920
96588 Ref: 8620\7f2504963
96589 Ref: 8621\7f2504964
96590 Ref: 8622\7f2504990
96591 Ref: 8623\7f2505023
96592 Ref: 8624\7f2505074
96593 Ref: 8625\7f2505075
96594 Ref: 8626\7f2505099
96595 Ref: 8627\7f2505148
96596 Ref: 8628\7f2505149
96597 Ref: 8629\7f2505186
96598 Ref: 8630\7f2505208
96599 Ref: 8631\7f2505237
96600 Ref: 8632\7f2505259
96601 Ref: 8633\7f2505343
96602 Ref: 8634\7f2505344
96603 Ref: 8635\7f2505358
96604 Ref: 8636\7f2505442
96605 Ref: 8637\7f2505443
96606 Ref: 8638\7f2505451
96607 Ref: 8639\7f2505534
96608 Ref: 8640\7f2505535
96609 Ref: 8641\7f2505560
96610 Ref: 8642\7f2505643
96611 Ref: 8643\7f2505644
96612 Ref: 8644\7f2505668
96613 Ref: 8645\7f2505673
96614 Ref: 8646\7f2505791
96615 Ref: 8647\7f2505792
96616 Ref: 8648\7f2505830
96617 Ref: 8649\7f2505852
96618 Ref: 8650\7f2505902
96619 Ref: 8651\7f2505903
96620 Ref: 8652\7f2505908
96621 Ref: 8653\7f2505957
96622 Ref: 8654\7f2505958
96623 Ref: 8655\7f2505980
96624 Ref: 8656\7f2506042
96625 Ref: 8657\7f2506043
96626 Ref: 8658\7f2506089
96627 Ref: 8659\7f2506090
96628 Ref: 8660\7f2506113
96629 Ref: 8661\7f2506161
96630 Ref: 8662\7f2506162
96631 Ref: 8663\7f2506229
96632 Ref: 8664\7f2506230
96633 Ref: 8665\7f2506253
96634 Ref: 8666\7f2506273
96635 Ref: 8667\7f2506314
96636 Ref: 8668\7f2506315
96637 Ref: 8669\7f2506342
96638 Ref: 8670\7f2506362
96639 Ref: 8671\7f2506403
96640 Ref: 8672\7f2506404
96641 Ref: 8673\7f2506433
96642 Ref: 8674\7f2506513
96643 Ref: 8675\7f2506514
96644 Ref: 8676\7f2506554
96645 Ref: 8677\7f2506577
96646 Ref: 8678\7f2506634
96647 Ref: 8679\7f2506683
96648 Ref: 8680\7f2506769
96649 Ref: 8681\7f2506770
96650 Ref: 8682\7f2506810
96651 Ref: 8683\7f2506833
96652 Ref: 8684\7f2506890
96653 Ref: 8685\7f2506939
96654 Ref: 8686\7f2506990
96655 Ref: 8687\7f2506991
96656 Ref: 8688\7f2507014
96657 Ref: 8689\7f2507064
96658 Ref: 8690\7f2507065
96659 Ref: 8691\7f2507089
96660 Ref: 8692\7f2507174
96661 Ref: 8693\7f2507175
96662 Ref: 8694\7f2507183
96663 Ref: 8695\7f2507189
96664 Ref: 8696\7f2507231
96665 Ref: 8697\7f2507232
96666 Ref: 8698\7f2507257
96667 Ref: 8699\7f2507272
96668 Ref: 8700\7f2507352
96669 Ref: 8701\7f2507353
96670 Ref: 8702\7f2507380
96671 Ref: 8703\7f2507459
96672 Ref: 8704\7f2507460
96673 Ref: 8705\7f2507529
96674 Ref: 8706\7f2507530
96675 Ref: 8707\7f2507552
96676 Ref: 8708\7f2507595
96677 Ref: 8709\7f2507596
96678 Ref: 8710\7f2507601
96679 Ref: 8711\7f2507644
96680 Ref: 8712\7f2507645
96681 Ref: 8713\7f2507667
96682 Ref: 8714\7f2507751
96683 Ref: 8715\7f2507752
96684 Ref: 8716\7f2507773
96685 Ref: 8717\7f2507796
96686 Ref: 8718\7f2507843
96687 Ref: 8719\7f2507844
96688 Ref: 8720\7f2507893
96689 Ref: 8721\7f2507894
96690 Ref: 8722\7f2507903
96691 Ref: 8723\7f2507985
96692 Ref: 8724\7f2507986
96693 Ref: 8725\7f2508006
96694 Ref: 8726\7f2508052
96695 Ref: 8727\7f2508053
96696 Ref: 8728\7f2508093
96697 Ref: 8729\7f2508094
96698 Ref: 8730\7f2508131
96699 Ref: 8731\7f2508178
96700 Ref: 8732\7f2508179
96701 Ref: 8733\7f2508208
96702 Ref: 8734\7f2508255
96703 Ref: 8735\7f2508256
96704 Ref: 8736\7f2508283
96705 Ref: 8737\7f2508363
96706 Ref: 8738\7f2508364
96707 Ref: 8739\7f2508425
96708 Ref: 8740\7f2508426
96709 Ref: 8741\7f2508470
96710 Ref: 8742\7f2508497
96711 Ref: 8743\7f2508523
96712 Ref: 8744\7f2508573
96713 Ref: 8745\7f2508574
96714 Ref: 8746\7f2508591
96715 Ref: 8747\7f2508613
96716 Ref: 8748\7f2508714
96717 Ref: 8749\7f2508715
96718 Ref: 8750\7f2508734
96719 Ref: 8751\7f2508775
96720 Ref: 8752\7f2508776
96721 Ref: 8753\7f2508798
96722 Ref: 8754\7f2508882
96723 Ref: 8755\7f2508883
96724 Ref: 8756\7f2508967
96725 Ref: 8757\7f2508968
96726 Ref: 8758\7f2509004
96727 Ref: 8759\7f2509044
96728 Ref: 8760\7f2509045
96729 Ref: 8761\7f2509072
96730 Ref: 8762\7f2509112
96731 Ref: 8763\7f2509113
96732 Ref: 8764\7f2509126
96733 Ref: 8765\7f2509139
96734 Ref: 8766\7f2509187
96735 Ref: 8767\7f2509188
96736 Ref: 8768\7f2509232
96737 Ref: 8769\7f2509233
96738 Ref: 8770\7f2509262
96739 Ref: 8771\7f2509341
96740 Ref: 8772\7f2509342
96741 Ref: 8773\7f2509356
96742 Ref: 8774\7f2509402
96743 Ref: 8775\7f2509403
96744 Ref: 8776\7f2509412
96745 Ref: 8777\7f2509456
96746 Ref: 8778\7f2509457
96747 Ref: 8779\7f2509488
96748 Ref: 8780\7f2509574
96749 Ref: 8781\7f2509575
96750 Ref: 8782\7f2509606
96751 Ref: 8783\7f2509656
96752 Ref: 8784\7f2509657
96753 Ref: 8785\7f2509668
96754 Ref: 8786\7f2509751
96755 Ref: 8787\7f2509752
96756 Ref: 8788\7f2509762
96757 Ref: 8789\7f2509847
96758 Ref: 8790\7f2509848
96759 Ref: 8791\7f2509875
96760 Node: Annex M\7f2509912
96761 Ref: 8792\7f2510089
96762 Node: M.1\7f2510834
96763 Ref: 8793\7f2510979
96764 Ref: 8794\7f2510979
96765 Node: M.2\7f2518248
96766 Ref: 8795\7f2518411
96767 Ref: 8796\7f2518490
96768 Ref: 8797\7f2532586
96769 Node: M.3\7f2539118
96770 Ref: 8798\7f2539235
96771 Ref: 8799\7f2539235
96772 Node: Annex N\7f2569629
96773 Ref: 8800\7f2569748
96774 Ref: 8801\7f2569970
96775 Ref: 8802\7f2570124
96776 Ref: 8803\7f2570288
96777 Ref: 8804\7f2570605
96778 Ref: 8805\7f2570848
96779 Ref: 8806\7f2570983
96780 Ref: 8807\7f2571183
96781 Ref: 8808\7f2571467
96782 Ref: 8809\7f2571675
96783 Ref: 8810\7f2571770
96784 Ref: 8811\7f2571787
96785 Ref: 8812\7f2572052
96786 Ref: 8813\7f2572312
96787 Ref: 8814\7f2572370
96788 Ref: 8815\7f2572511
96789 Ref: 8816\7f2572741
96790 Ref: 8817\7f2572886
96791 Ref: 8818\7f2572988
96792 Ref: 8819\7f2572990
96793 Ref: 8820\7f2573252
96794 Ref: 8821\7f2573787
96795 Ref: 8822\7f2573954
96796 Ref: 8823\7f2574125
96797 Ref: 8824\7f2574392
96798 Ref: 8825\7f2574544
96799 Ref: 8826\7f2574611
96800 Ref: 8827\7f2574759
96801 Ref: 8828\7f2574908
96802 Ref: 8829\7f2575059
96803 Ref: 8830\7f2575202
96804 Ref: 8831\7f2575309
96805 Ref: 8832\7f2575403
96806 Ref: 8833\7f2575405
96807 Ref: 8834\7f2575523
96808 Ref: 8835\7f2575639
96809 Ref: 8836\7f2576282
96810 Ref: 8837\7f2576535
96811 Ref: 8838\7f2576702
96812 Ref: 8839\7f2577165
96813 Ref: 8840\7f2577507
96814 Ref: 8841\7f2577670
96815 Ref: 8842\7f2577839
96816 Ref: 8843\7f2578054
96817 Ref: 8844\7f2578316
96818 Ref: 8845\7f2578419
96819 Ref: 8846\7f2578593
96820 Ref: 8847\7f2578841
96821 Ref: 8848\7f2579017
96822 Ref: 8849\7f2579406
96823 Ref: 8850\7f2579584
96824 Ref: 8851\7f2579916
96825 Ref: 8852\7f2580038
96826 Ref: 8853\7f2580263
96827 Ref: 8854\7f2580380
96828 Ref: 8855\7f2580488
96829 Ref: 8856\7f2581105
96830 Ref: 8857\7f2581244
96831 Ref: 8858\7f2581523
96832 Ref: 8859\7f2581648
96833 Ref: 8860\7f2581892
96834 Ref: 8861\7f2582077
96835 Ref: 8862\7f2582410
96836 Ref: 8863\7f2582600
96837 Ref: 8864\7f2582738
96838 Ref: 8865\7f2582849
96839 Ref: 8866\7f2582979
96840 Ref: 8867\7f2583115
96841 Ref: 8868\7f2583255
96842 Ref: 8869\7f2583333
96843 Ref: 8870\7f2583638
96844 Ref: 8871\7f2583817
96845 Ref: 8872\7f2584132
96846 Ref: 8873\7f2584377
96847 Ref: 8874\7f2584625
96848 Ref: 8875\7f2585074
96849 Ref: 8876\7f2585303
96850 Ref: 8877\7f2585579
96851 Node: Annex P\7f2585702
96852 Ref: 8878\7f2585829
96853 Ref: 8879\7f2585829
96854 Ref: 8880\7f2585829
96855 Ref: 8881\7f2585829
96856 Ref: 8882\7f2585829
96857 Ref: 8883\7f2585995
96858 Ref: 8884\7f2586013
96859 Ref: 8885\7f2586032
96860 Ref: 8886\7f2586107
96861 Ref: 8887\7f2586134
96862 Ref: 8888\7f2586161
96863 Ref: 8889\7f2586188
96864 Ref: 8890\7f2586214
96865 Ref: 8891\7f2586237
96866 Ref: 8892\7f2586308
96867 Ref: 8893\7f2586335
96868 Ref: 8894\7f2586368
96869 Ref: 8895\7f2586393
96870 Ref: 8896\7f2586459
96871 Ref: 8897\7f2586477
96872 Ref: 8898\7f2586537
96873 Ref: 8899\7f2586547
96874 Ref: 8900\7f2586557
96875 Ref: 8901\7f2586605
96876 Ref: 8902\7f2586613
96877 Ref: 8903\7f2586624
96878 Ref: 8904\7f2586676
96879 Ref: 8905\7f2586690
96880 Ref: 8906\7f2586825
96881 Ref: 8907\7f2586832
96882 Ref: 8908\7f2586848
96883 Ref: 8909\7f2586866
96884 Ref: 8910\7f2586911
96885 Ref: 8911\7f2586972
96886 Ref: 8912\7f2586989
96887 Ref: 8913\7f2587000
96888 Ref: 8914\7f2587061
96889 Ref: 8915\7f2587138
96890 Ref: 8916\7f2587202
96891 Ref: 8917\7f2587286
96892 Ref: 8918\7f2587359
96893 Ref: 8919\7f2587421
96894 Ref: 8920\7f2587434
96895 Ref: 8921\7f2587465
96896 Ref: 8922\7f2587587
96897 Ref: 8923\7f2587602
96898 Ref: 8924\7f2587634
96899 Ref: 8925\7f2587649
96900 Ref: 8926\7f2587686
96901 Ref: 8927\7f2587702
96902 Ref: 8928\7f2587733
96903 Ref: 8929\7f2587749
96904 Ref: 8930\7f2587817
96905 Ref: 8931\7f2587838
96906 Ref: 8932\7f2587868
96907 Ref: 8933\7f2587891
96908 Ref: 8934\7f2587920
96909 Ref: 8935\7f2587947
96910 Ref: 8936\7f2587989
96911 Ref: 8937\7f2588020
96912 Ref: 8938\7f2588062
96913 Ref: 8939\7f2588086
96914 Ref: 8940\7f2588117
96915 Ref: 8941\7f2588143
96916 Ref: 8942\7f2588173
96917 Ref: 8943\7f2588243
96918 Ref: 8944\7f2588302
96919 Ref: 8945\7f2588334
96920 Ref: 8946\7f2588372
96921 Ref: 8947\7f2588407
96922 Ref: 8948\7f2588505
96923 Ref: 8949\7f2588526
96924 Ref: 8950\7f2588554
96925 Ref: 8951\7f2588590
96926 Ref: 8952\7f2588623
96927 Ref: 8953\7f2588655
96928 Ref: 8954\7f2588739
96929 Ref: 8955\7f2588771
96930 Ref: 8956\7f2588805
96931 Ref: 8957\7f2588830
96932 Ref: 8958\7f2588862
96933 Ref: 8959\7f2588889
96934 Ref: 8960\7f2588922
96935 Ref: 8961\7f2588950
96936 Ref: 8962\7f2589043
96937 Ref: 8963\7f2589066
96938 Ref: 8964\7f2589099
96939 Ref: 8965\7f2589173
96940 Ref: 8966\7f2589189
96941 Ref: 8967\7f2589203
96942 Ref: 8968\7f2589266
96943 Ref: 8969\7f2589312
96944 Ref: 8970\7f2589332
96945 Ref: 8971\7f2589412
96946 Ref: 8972\7f2589431
96947 Ref: 8973\7f2589451
96948 Ref: 8974\7f2589530
96949 Ref: 8975\7f2589549
96950 Ref: 8976\7f2589632
96951 Ref: 8977\7f2589680
96952 Ref: 8978\7f2589709
96953 Ref: 8979\7f2589735
96954 Ref: 8980\7f2589767
96955 Ref: 8981\7f2589815
96956 Ref: 8982\7f2589843
96957 Ref: 8983\7f2589869
96958 Ref: 8984\7f2589901
96959 Ref: 8985\7f2589949
96960 Ref: 8986\7f2589981
96961 Ref: 8987\7f2590007
96962 Ref: 8988\7f2590039
96963 Ref: 8989\7f2590072
96964 Ref: 8990\7f2590164
96965 Ref: 8991\7f2590187
96966 Ref: 8992\7f2590268
96967 Ref: 8993\7f2590314
96968 Ref: 8994\7f2590420
96969 Ref: 8995\7f2590445
96970 Ref: 8996\7f2590467
96971 Ref: 8997\7f2590542
96972 Ref: 8998\7f2590583
96973 Ref: 8999\7f2590619
96974 Ref: 9000\7f2590640
96975 Ref: 9001\7f2590726
96976 Ref: 9002\7f2590763
96977 Ref: 9003\7f2590870
96978 Ref: 9004\7f2590892
96979 Ref: 9005\7f2590982
96980 Ref: 9006\7f2591054
96981 Ref: 9007\7f2591087
96982 Ref: 9008\7f2591191
96983 Ref: 9009\7f2591225
96984 Ref: 9010\7f2591308
96985 Ref: 9011\7f2591379
96986 Ref: 9012\7f2591407
96987 Ref: 9013\7f2591508
96988 Ref: 9014\7f2591520
96989 Ref: 9015\7f2591622
96990 Ref: 9016\7f2591650
96991 Ref: 9017\7f2591721
96992 Ref: 9018\7f2591755
96993 Ref: 9019\7f2591876
96994 Ref: 9020\7f2591888
96995 Ref: 9021\7f2591996
96996 Ref: 9022\7f2592021
96997 Ref: 9023\7f2592033
96998 Ref: 9024\7f2592136
96999 Ref: 9025\7f2592148
97000 Ref: 9026\7f2592225
97001 Ref: 9027\7f2592258
97002 Ref: 9028\7f2592361
97003 Ref: 9029\7f2592389
97004 Ref: 9030\7f2592419
97005 Ref: 9031\7f2592499
97006 Ref: 9032\7f2592594
97007 Ref: 9033\7f2592625
97008 Ref: 9034\7f2592664
97009 Ref: 9035\7f2592750
97010 Ref: 9036\7f2592771
97011 Ref: 9037\7f2592845
97012 Ref: 9038\7f2592882
97013 Ref: 9039\7f2592949
97014 Ref: 9040\7f2592967
97015 Ref: 9041\7f2593038
97016 Ref: 9042\7f2593059
97017 Ref: 9043\7f2593111
97018 Ref: 9044\7f2593139
97019 Ref: 9045\7f2593290
97020 Ref: 9046\7f2593320
97021 Ref: 9047\7f2593413
97022 Ref: 9048\7f2593441
97023 Ref: 9049\7f2593457
97024 Ref: 9050\7f2593474
97025 Ref: 9051\7f2593508
97026 Ref: 9052\7f2593535
97027 Ref: 9053\7f2593557
97028 Ref: 9054\7f2593630
97029 Ref: 9055\7f2593705
97030 Ref: 9056\7f2593733
97031 Ref: 9057\7f2593838
97032 Ref: 9058\7f2593868
97033 Ref: 9059\7f2593887
97034 Ref: 9060\7f2593985
97035 Ref: 9061\7f2594084
97036 Ref: 9062\7f2594195
97037 Ref: 9063\7f2594211
97038 Ref: 9064\7f2594238
97039 Ref: 9065\7f2594254
97040 Ref: 9066\7f2594327
97041 Ref: 9067\7f2594351
97042 Ref: 9068\7f2594424
97043 Ref: 9069\7f2594451
97044 Ref: 9070\7f2594476
97045 Ref: 9071\7f2594516
97046 Ref: 9072\7f2594609
97047 Ref: 9073\7f2594636
97048 Ref: 9074\7f2594656
97049 Ref: 9075\7f2594735
97050 Ref: 9076\7f2594770
97051 Ref: 9077\7f2594836
97052 Ref: 9078\7f2594855
97053 Ref: 9079\7f2594918
97054 Ref: 9080\7f2594947
97055 Ref: 9081\7f2594974
97056 Ref: 9082\7f2595046
97057 Ref: 9083\7f2595137
97058 Ref: 9084\7f2595168
97059 Ref: 9085\7f2595219
97060 Ref: 9086\7f2595367
97061 Ref: 9087\7f2595444
97062 Ref: 9088\7f2595472
97063 Ref: 9089\7f2595555
97064 Ref: 9090\7f2595571
97065 Ref: 9091\7f2595609
97066 Ref: 9092\7f2595625
97067 Ref: 9093\7f2595732
97068 Ref: 9094\7f2595757
97069 Ref: 9095\7f2595944
97070 Ref: 9096\7f2596000
97071 Ref: 9097\7f2596140
97072 Ref: 9098\7f2596174
97073 Ref: 9099\7f2596197
97074 Ref: 9100\7f2596242
97075 Ref: 9101\7f2596270
97076 Ref: 9102\7f2596314
97077 Ref: 9103\7f2596413
97078 Ref: 9104\7f2596434
97079 Ref: 9105\7f2596519
97080 Ref: 9106\7f2596593
97081 Ref: 9107\7f2596618
97082 Ref: 9108\7f2596685
97083 Ref: 9109\7f2596705
97084 Ref: 9110\7f2596721
97085 Ref: 9111\7f2596766
97086 Ref: 9112\7f2596780
97087 Ref: 9113\7f2596841
97088 Ref: 9114\7f2596859
97089 Ref: 9115\7f2596874
97090 Ref: 9116\7f2596886
97091 Ref: 9117\7f2596945
97092 Ref: 9118\7f2596961
97093 Ref: 9119\7f2596992
97094 Ref: 9120\7f2597014
97095 Ref: 9121\7f2597030
97096 Ref: 9122\7f2597053
97097 Ref: 9123\7f2597083
97098 Ref: 9124\7f2597103
97099 Ref: 9125\7f2597127
97100 Ref: 9126\7f2597149
97101 Ref: 9127\7f2597180
97102 Ref: 9128\7f2597206
97103 Ref: 9129\7f2597267
97104 Ref: 9130\7f2597280
97105 Ref: 9131\7f2597331
97106 Ref: 9132\7f2597338
97107 Ref: 9133\7f2597408
97108 Ref: 9134\7f2597466
97109 Ref: 9135\7f2597519
97110 Ref: 9136\7f2597526
97111 Ref: 9137\7f2597540
97112 Ref: 9138\7f2597589
97113 Ref: 9139\7f2597596
97114 Ref: 9140\7f2597661
97115 Ref: 9141\7f2597670
97116 Ref: 9142\7f2597728
97117 Ref: 9143\7f2597741
97118 Ref: 9144\7f2597761
97119 Ref: 9145\7f2597827
97120 Ref: 9146\7f2597834
97121 Ref: 9147\7f2597916
97122 Ref: 9148\7f2597935
97123 Ref: 9149\7f2598043
97124 Ref: 9150\7f2598050
97125 Ref: 9151\7f2598148
97126 Ref: 9152\7f2598230
97127 Ref: 9153\7f2598313
97128 Ref: 9154\7f2598320
97129 Ref: 9155\7f2598386
97130 Ref: 9156\7f2598405
97131 Ref: 9157\7f2598427
97132 Ref: 9158\7f2598497
97133 Ref: 9159\7f2598606
97134 Ref: 9160\7f2598638
97135 Ref: 9161\7f2598759
97136 Ref: 9162\7f2598785
97137 Ref: 9163\7f2598806
97138 Ref: 9164\7f2598907
97139 Ref: 9165\7f2598934
97140 Ref: 9166\7f2599027
97141 Ref: 9167\7f2599046
97142 Ref: 9168\7f2599125
97143 Ref: 9169\7f2599138
97144 Ref: 9170\7f2599205
97145 Ref: 9171\7f2599234
97146 Ref: 9172\7f2599324
97147 Ref: 9173\7f2599336
97148 Ref: 9174\7f2599350
97149 Ref: 9175\7f2599373
97150 Ref: 9176\7f2599387
97151 Ref: 9177\7f2599410
97152 Ref: 9178\7f2599432
97153 Ref: 9179\7f2599446
97154 Ref: 9180\7f2599536
97155 Ref: 9181\7f2599567
97156 Ref: 9182\7f2599665
97157 Ref: 9183\7f2599689
97158 Ref: 9184\7f2599709
97159 Ref: 9185\7f2599786
97160 Ref: 9186\7f2599800
97161 Ref: 9187\7f2599815
97162 Ref: 9188\7f2599834
97163 Ref: 9189\7f2599854
97164 Ref: 9190\7f2599867
97165 Ref: 9191\7f2599882
97166 Ref: 9192\7f2599900
97167 Ref: 9193\7f2599920
97168 Ref: 9194\7f2599934
97169 Ref: 9195\7f2600001
97170 Ref: 9196\7f2600022
97171 Ref: 9197\7f2600049
97172 Ref: 9198\7f2600069
97173 Ref: 9199\7f2600096
97174 Ref: 9200\7f2600117
97175 Ref: 9201\7f2600144
97176 Ref: 9202\7f2600170
97177 Ref: 9203\7f2600197
97178 Ref: 9204\7f2600222
97179 Ref: 9205\7f2600294
97180 Ref: 9206\7f2600313
97181 Ref: 9207\7f2600333
97182 Ref: 9208\7f2600400
97183 Ref: 9209\7f2600419
97184 Ref: 9210\7f2600439
97185 Ref: 9211\7f2600468
97186 Ref: 9212\7f2600495
97187 Ref: 9213\7f2600569
97188 Ref: 9214\7f2600590
97189 Ref: 9215\7f2600655
97190 Ref: 9216\7f2600675
97191 Ref: 9217\7f2600683
97192 Ref: 9218\7f2600743
97193 Ref: 9219\7f2600766
97194 Ref: 9220\7f2600772
97195 Ref: 9221\7f2600801
97196 Ref: 9222\7f2600840
97197 Ref: 9223\7f2600848
97198 Ref: 9224\7f2600869
97199 Ref: 9225\7f2600912
97200 Ref: 9226\7f2600924
97201 Ref: 9227\7f2600939
97202 Ref: 9228\7f2600953
97203 Ref: 9229\7f2601006
97204 Ref: 9230\7f2601031
97205 Ref: 9231\7f2601048
97206 Ref: 9232\7f2601066
97207 Ref: 9233\7f2601073
97208 Ref: 9234\7f2601086
97209 Ref: 9235\7f2601107
97210 Ref: 9236\7f2601134
97211 Ref: 9237\7f2601639
97212 Ref: 9238\7f2601655
97213 Ref: 9239\7f2601727
97214 Ref: 9240\7f2601752
97215 Ref: 9241\7f2601778
97216 Ref: 9242\7f2601803
97217 Ref: 9243\7f2601839
97218 Ref: 9244\7f2601899
97219 Ref: 9245\7f2601981
97220 Ref: 9246\7f2602004
97221 Ref: 9247\7f2602044
97222 Ref: 9248\7f2602146
97223 Ref: 9249\7f2602193
97224 Ref: 9250\7f2602260
97225 Ref: 9251\7f2602271
97226 Ref: 9252\7f2602309
97227 Ref: 9253\7f2602332
97228 Ref: 9254\7f2602343
97229 Ref: 9255\7f2602369
97230 Ref: 9256\7f2602479
97231 Ref: 9257\7f2602544
97232 Ref: 9258\7f2602557
97233 Ref: 9259\7f2602578
97234 Ref: 9260\7f2602591
97235 Ref: 9261\7f2602655
97236 Ref: 9262\7f2602669
97237 Ref: 9263\7f2602683
97238 Ref: 9264\7f2602696
97239 Ref: 9265\7f2602758
97240 Ref: 9266\7f2602781
97241 Ref: 9267\7f2602813
97242 Ref: 9268\7f2602836
97243 Ref: 9269\7f2602923
97244 Ref: 9270\7f2602980
97245 Ref: 9271\7f2602991
97246 Ref: 9272\7f2603003
97247 Ref: 9273\7f2603058
97248 Ref: 9274\7f2603065
97249 Ref: 9275\7f2603085
97250 Ref: 9276\7f2603092
97251 Ref: 9277\7f2603156
97252 Ref: 9278\7f2603181
97253 Ref: 9279\7f2603206
97254 Ref: 9280\7f2603231
97255 Ref: 9281\7f2603250
97256 Ref: 9282\7f2603285
97257 Ref: 9283\7f2603313
97258 Ref: 9284\7f2603344
97259 Ref: 9285\7f2603366
97260 Ref: 9286\7f2603392
97261 Ref: 9287\7f2603412
97262 Ref: 9288\7f2603438
97263 Ref: 9289\7f2603511
97264 Ref: 9290\7f2603528
97265 Ref: 9291\7f2603553
97266 Ref: 9292\7f2603572
97267 Ref: 9293\7f2603598
97268 Ref: 9294\7f2603634
97269 Ref: 9295\7f2603655
97270 Ref: 9296\7f2603763
97271 Ref: 9297\7f2603835
97272 Ref: 9298\7f2603914
97273 Ref: 9299\7f2603922
97274 Ref: 9300\7f2603988
97275 Ref: 9301\7f2604014
97276 Ref: 9302\7f2604052
97277 Ref: 9303\7f2604078
97278 Ref: 9304\7f2604127
97279 Ref: 9305\7f2604235
97280 Ref: 9306\7f2604261
97281 Ref: 9307\7f2604300
97282 Ref: 9308\7f2604415
97283 Ref: 9309\7f2604450
97284 Ref: 9310\7f2604531
97285 Ref: 9311\7f2604566
97286 Ref: 9312\7f2604603
97287 Ref: 9313\7f2604653
97288 Ref: 9314\7f2604717
97289 Ref: 9315\7f2604741
97290 Ref: 9316\7f2604784
97291 Ref: 9317\7f2604873
97292 Ref: 9318\7f2604906
97293 Ref: 9319\7f2604997
97294 Ref: 9320\7f2605039
97295 Ref: 9321\7f2605053
97296 Ref: 9322\7f2605076
97297 Ref: 9323\7f2605124
97298 Ref: 9324\7f2605189
97299 Ref: 9325\7f2605250
97300 Ref: 9326\7f2605304
97301 Ref: 9327\7f2605359
97302 Ref: 9328\7f2605435
97303 Ref: 9329\7f2605447
97304 Ref: 9330\7f2605513
97305 Ref: 9331\7f2605581
97306 Ref: 9332\7f2605612
97307 Ref: 9333\7f2605651
97308 Ref: 9334\7f2605737
97309 Ref: 9335\7f2605770
97310 Ref: 9336\7f2605855
97311 Ref: 9337\7f2605882
97312 Ref: 9338\7f2605966
97313 Ref: 9339\7f2605986
97314 Ref: 9340\7f2606061
97315 Ref: 9341\7f2606081
97316 Ref: 9342\7f2606094
97317 Ref: 9343\7f2606158
97318 Ref: 9344\7f2606187
97319 Ref: 9345\7f2606274
97320 Ref: 9346\7f2606294
97321 Ref: 9347\7f2606364
97322 Ref: 9348\7f2606432
97323 Ref: 9349\7f2606495
97324 Ref: 9350\7f2606576
97325 Ref: 9351\7f2606597
97326 Ref: 9352\7f2606613
97327 Ref: 9353\7f2606636
97328 Ref: 9354\7f2606656
97329 Ref: 9355\7f2606724
97330 Ref: 9356\7f2606751
97331 Ref: 9357\7f2606839
97332 Ref: 9358\7f2606876
97333 Ref: 9359\7f2606882
97334 Ref: 9360\7f2606898
97335 Ref: 9361\7f2606921
97336 Ref: 9362\7f2606950
97337 Ref: 9363\7f2606977
97338 Ref: 9364\7f2606999
97339 Ref: 9365\7f2607133
97340 Ref: 9366\7f2607164
97341 Ref: 9367\7f2607202
97342 Ref: 9368\7f2607239
97343 Ref: 9369\7f2607284
97344 Ref: 9370\7f2607329
97345 Ref: 9371\7f2607415
97346 Ref: 9372\7f2607440
97347 Ref: 9373\7f2607447
97348 Ref: 9374\7f2607531
97349 Ref: 9375\7f2607554
97350 Ref: 9376\7f2607561
97351 Ref: 9377\7f2607644
97352 Ref: 9378\7f2607669
97353 Ref: 9379\7f2607770
97354 Ref: 9380\7f2607788
97355 Ref: 9381\7f2607868
97356 Ref: 9382\7f2607890
97357 Ref: 9383\7f2607955
97358 Ref: 9384\7f2608041
97359 Ref: 9385\7f2608083
97360 Ref: 9386\7f2608119
97361 Ref: 9387\7f2608202
97362 Ref: 9388\7f2608254
97363 Ref: 9389\7f2608361
97364 Ref: 9390\7f2608382
97365 Ref: 9391\7f2608471
97366 Ref: 9392\7f2608501
97367 Ref: 9393\7f2608546
97368 Ref: 9394\7f2608639
97369 Ref: 9395\7f2608669
97370 Ref: 9396\7f2608708
97371 Ref: 9397\7f2608733
97372 Ref: 9398\7f2608804
97373 Ref: 9399\7f2608895
97374 Ref: 9400\7f2608936
97375 Ref: 9401\7f2608973
97376 Ref: 9402\7f2609026
97377 Ref: 9403\7f2609066
97378 Ref: 9404\7f2609084
97379 Ref: 9405\7f2609160
97380 Ref: 9406\7f2609201
97381 Ref: 9407\7f2609238
97382 Ref: 9408\7f2609283
97383 Ref: 9409\7f2609330
97384 Ref: 9410\7f2609348
97385 Ref: 9411\7f2609428
97386 Ref: 9412\7f2609449
97387 Ref: 9413\7f2609527
97388 Ref: 9414\7f2609622
97389 Ref: 9415\7f2609643
97390 Ref: 9416\7f2609724
97391 Ref: 9417\7f2609764
97392 Ref: 9418\7f2609806
97393 Ref: 9419\7f2609936
97394 Ref: 9420\7f2609957
97395 Ref: 9421\7f2610032
97396 Ref: 9422\7f2610048
97397 Ref: 9423\7f2610114
97398 Ref: 9424\7f2610130
97399 Ref: 9425\7f2610206
97400 Ref: 9426\7f2610245
97401 Ref: 9427\7f2610287
97402 Ref: 9428\7f2610327
97403 Ref: 9429\7f2610370
97404 Ref: 9430\7f2610467
97405 Ref: 9431\7f2610490
97406 Ref: 9432\7f2610506
97407 Ref: 9433\7f2610540
97408 Ref: 9434\7f2610559
97409 Ref: 9435\7f2610591
97410 Ref: 9436\7f2610613
97411 Ref: 9437\7f2610646
97412 Ref: 9438\7f2610665
97413 Ref: 9439\7f2610749
97414 Ref: 9440\7f2610805
97415 Ref: 9441\7f2610819
97416 Ref: 9442\7f2610909
97417 Ref: 9443\7f2610958
97418 Ref: 9444\7f2610972
97419 Ref: 9445\7f2611068
97420 Ref: 9446\7f2611099
97421 Ref: 9447\7f2611148
97422 Ref: 9448\7f2611167
97423 Ref: 9449\7f2611277
97424 Ref: 9450\7f2611334
97425 Ref: 9451\7f2611353
97426 Ref: 9452\7f2611405
97427 Ref: 9453\7f2611464
97428 Ref: 9454\7f2611483
97429 Ref: 9455\7f2611534
97430 Ref: 9456\7f2611592
97431 Ref: 9457\7f2611611
97432 Ref: 9458\7f2611703
97433 Ref: 9459\7f2611724
97434 Ref: 9460\7f2611763
97435 Ref: 9461\7f2611804
97436 Ref: 9462\7f2611835
97437 Ref: 9463\7f2611919
97438 Ref: 9464\7f2611954
97439 Ref: 9465\7f2611994
97440 Ref: 9466\7f2612025
97441 Ref: 9467\7f2612099
97442 Ref: 9468\7f2612138
97443 Ref: 9469\7f2612167
97444 Ref: 9470\7f2612217
97445 Ref: 9471\7f2612237
97446 Ref: 9472\7f2612308
97447 Ref: 9473\7f2612342
97448 Ref: 9474\7f2612377
97449 Ref: 9475\7f2612418
97450 Ref: 9476\7f2612467
97451 Ref: 9477\7f2612558
97452 Ref: 9478\7f2612579
97453 Ref: 9479\7f2612618
97454 Ref: 9480\7f2612658
97455 Ref: 9481\7f2612689
97456 Ref: 9482\7f2612786
97457 Ref: 9483\7f2612820
97458 Ref: 9484\7f2612860
97459 Ref: 9485\7f2612891
97460 Ref: 9486\7f2612974
97461 Ref: 9487\7f2613034
97462 Ref: 9488\7f2613090
97463 Ref: 9489\7f2613162
97464 Ref: 9490\7f2613197
97465 Ref: 9491\7f2613227
97466 Ref: 9492\7f2613299
97467 Ref: 9493\7f2613343
97468 Ref: 9494\7f2613431
97469 Ref: 9495\7f2613465
97470 Ref: 9496\7f2613500
97471 Ref: 9497\7f2613549
97472 Ref: 9498\7f2613615
97473 Ref: 9499\7f2613650
97474 Ref: 9500\7f2613678
97475 Ref: 9501\7f2613701
97476 Ref: 9502\7f2613867
97477 Ref: 9503\7f2613903
97478 Ref: 9504\7f2613925
97479 Ref: 9505\7f2613955
97480 Ref: 9506\7f2613991
97481 Ref: 9507\7f2614083
97482 Ref: 9508\7f2614097
97483 Ref: 9509\7f2614111
97484 Ref: 9510\7f2614143
97485 Ref: 9511\7f2614193
97486 Ref: 9512\7f2614249
97487 Ref: 9513\7f2614315
97488 Ref: 9514\7f2614336
97489 Ref: 9515\7f2614360
97490 Ref: 9516\7f2614392
97491 Ref: 9517\7f2614431
97492 Ref: 9518\7f2614480
97493 Ref: 9519\7f2614548
97494 Ref: 9520\7f2614576
97495 Ref: 9521\7f2614649
97496 Ref: 9522\7f2614719
97497 Ref: 9523\7f2614742
97498 Ref: 9524\7f2614833
97499 Ref: 9525\7f2614839
97500 Ref: 9526\7f2614938
97501 Ref: 9527\7f2615001
97502 Ref: 9528\7f2615025
97503 Ref: 9529\7f2615124
97504 Ref: 9530\7f2615201
97505 Ref: 9531\7f2615267
97506 Ref: 9532\7f2615293
97507 Ref: 9533\7f2615319
97508 Ref: 9534\7f2615351
97509 Ref: 9535\7f2615442
97510 Ref: 9536\7f2615459
97511 Ref: 9537\7f2615497
97512 Ref: 9538\7f2615514
97513 Ref: 9539\7f2615555
97514 Ref: 9540\7f2615640
97515 Ref: 9541\7f2615711
97516 Ref: 9542\7f2615739
97517 Ref: 9543\7f2615766
97518 Ref: 9544\7f2615845
97519 Ref: 9545\7f2615863
97520 Ref: 9546\7f2615943
97521 Ref: 9547\7f2615960
97522 Ref: 9548\7f2616117
97523 Ref: 9549\7f2616158
97524 Ref: 9550\7f2616256
97525 Ref: 9551\7f2616281
97526 Ref: 9552\7f2616367
97527 Ref: 9553\7f2616394
97528 Ref: 9554\7f2616491
97529 Ref: 9555\7f2616534
97530 Ref: 9556\7f2616649
97531 Ref: 9557\7f2616698
97532 Ref: 9558\7f2616785
97533 Ref: 9559\7f2616807
97534 Ref: 9560\7f2616888
97535 Ref: 9561\7f2616914
97536 Ref: 9562\7f2616975
97537 Ref: 9563\7f2617053
97538 Ref: 9564\7f2617066
97539 Ref: 9565\7f2617117
97540 Ref: 9566\7f2617193
97541 Ref: 9567\7f2617208
97542 Ref: 9568\7f2617230
97543 Ref: 9569\7f2617245
97544 Ref: 9570\7f2617307
97545 Ref: 9571\7f2617341
97546 Ref: 9572\7f2617378
97547 Ref: 9573\7f2617479
97548 Ref: 9574\7f2617506
97549 Ref: 9575\7f2617536
97550 Ref: 9576\7f2617560
97551 Ref: 9577\7f2617656
97552 Ref: 9578\7f2617693
97553 Ref: 9579\7f2617730
97554 Ref: 9580\7f2617811
97555 Ref: 9581\7f2617829
97556 Ref: 9582\7f2617890
97557 Ref: 9583\7f2617942
97558 Ref: 9584\7f2618000
97559 Ref: 9585\7f2618014
97560 Ref: 9586\7f2618068
97561 Ref: 9587\7f2618090
97562 Ref: 9588\7f2618200
97563 Ref: 9589\7f2618227
97564 Ref: 9590\7f2618316
97565 Ref: 9591\7f2618343
97566 Ref: 9592\7f2618391
97567 Ref: 9593\7f2618414
97568 Ref: 9594\7f2618434
97569 Ref: 9595\7f2618457
97570 Ref: 9596\7f2618539
97571 Ref: 9597\7f2618569
97572 Ref: 9598\7f2618618
97573 Ref: 9599\7f2618712
97574 Ref: 9600\7f2618756
97575 Ref: 9601\7f2618844
97576 Ref: 9602\7f2618888
97577 Ref: 9603\7f2618986
97578 Ref: 9604\7f2619030
97579 Ref: 9605\7f2619102
97580 Ref: 9606\7f2619120
97581 Ref: 9607\7f2619183
97582 Ref: 9608\7f2619229
97583 Ref: 9609\7f2619323
97584 Ref: 9610\7f2619374
97585 Ref: 9611\7f2619402
97586 Ref: 9612\7f2619483
97587 Ref: 9613\7f2619516
97588 Ref: 9614\7f2619536
97589 Ref: 9615\7f2619573
97590 Ref: 9616\7f2619656
97591 Ref: 9617\7f2619732
97592 Ref: 9618\7f2619827
97593 Ref: 9619\7f2619845
97594 Ref: 9620\7f2619907
97595 Ref: 9621\7f2619940
97596 Ref: 9622\7f2620045
97597 Ref: 9623\7f2620066
97598 Ref: 9624\7f2620105
97599 Ref: 9625\7f2620196
97600 Ref: 9626\7f2620217
97601 Ref: 9627\7f2620298
97602 Ref: 9628\7f2620343
97603 Ref: 9629\7f2620433
97604 Ref: 9630\7f2620470
97605 Ref: 9631\7f2620505
97606 Ref: 9632\7f2620546
97607 Ref: 9633\7f2620643
97608 Ref: 9634\7f2620707
97609 Ref: 9635\7f2620713
97610 Ref: 9636\7f2620752
97611 Ref: 9637\7f2620786
97612 Ref: 9638\7f2620828
97613 Ref: 9639\7f2620894
97614 Ref: 9640\7f2620900
97615 Ref: 9641\7f2620939
97616 Ref: 9642\7f2620973
97617 Ref: 9643\7f2621014
97618 Ref: 9644\7f2621072
97619 Ref: 9645\7f2621078
97620 Ref: 9646\7f2621117
97621 Ref: 9647\7f2621199
97622 Ref: 9648\7f2621222
97623 Ref: 9649\7f2621328
97624 Ref: 9650\7f2621346
97625 Ref: 9651\7f2621449
97626 Ref: 9652\7f2621471
97627 Ref: 9653\7f2621497
97628 Ref: 9654\7f2621510
97629 Ref: 9655\7f2621517
97630 Ref: 9656\7f2621557
97631 Ref: 9657\7f2621627
97632 Ref: 9658\7f2621654
97633 Ref: 9659\7f2621660
97634 Ref: 9660\7f2621676
97635 Ref: 9661\7f2621699
97636 Ref: 9662\7f2621733
97637 Ref: 9663\7f2621766
97638 Ref: 9664\7f2621793
97639 Ref: 9665\7f2621798
97640 Ref: 9666\7f2621820
97641 Ref: 9667\7f2621860
97642 Ref: 9668\7f2621948
97643 Ref: 9669\7f2621992
97644 Ref: 9670\7f2622104
97645 Ref: 9671\7f2622124
97646 Ref: 9672\7f2622146
97647 Ref: 9673\7f2622189
97648 Ref: 9674\7f2622291
97649 Ref: 9675\7f2622311
97650 Ref: 9676\7f2622407
97651 Ref: 9677\7f2622449
97652 Ref: 9678\7f2622491
97653 Ref: 9679\7f2622534
97654 Ref: 9680\7f2622583
97655 Ref: 9681\7f2622625
97656 Ref: 9682\7f2622669
97657 Ref: 9683\7f2622719
97658 Ref: 9684\7f2622768
97659 Ref: 9685\7f2622808
97660 Ref: 9686\7f2622849
97661 Ref: 9687\7f2623095
97662 Ref: 9688\7f2623114
97663 Ref: 9689\7f2623665
97664 Ref: 9690\7f2623748
97665 Ref: 9691\7f2623835
97666 Ref: 9692\7f2623920
97667 Ref: 9693\7f2623976
97668 Ref: 9694\7f2624099
97669 Ref: 9695\7f2624128
97670 Ref: 9696\7f2624162
97671 Ref: 9697\7f2624269
97672 Ref: 9698\7f2624307
97673 Ref: 9699\7f2624341
97674 Ref: 9700\7f2624412
97675 Ref: 9701\7f2624479
97676 Ref: 9702\7f2624563
97677 Ref: 9703\7f2624606
97678 Ref: 9704\7f2624612
97679 Ref: 9705\7f2624659
97680 Ref: 9706\7f2624775
97681 Ref: 9707\7f2624806
97682 Ref: 9708\7f2624836
97683 Ref: 9709\7f2624954
97684 Ref: 9710\7f2625008
97685 Ref: 9711\7f2625071
97686 Ref: 9712\7f2625112
97687 Ref: 9713\7f2625159
97688 Ref: 9714\7f2625201
97689 Ref: 9715\7f2625251
97690 Ref: 9716\7f2625276
97691 Ref: 9717\7f2625288
97692 Ref: 9718\7f2625335
97693 Ref: 9719\7f2625406
97694 Ref: 9720\7f2625422
97695 Ref: 9721\7f2625460
97696 Ref: 9722\7f2625476
97697 Ref: 9723\7f2625547
97698 Ref: 9724\7f2625615
97699 Ref: 9725\7f2625622
97700 Ref: 9726\7f2625635
97701 Ref: 9727\7f2625719
97702 Ref: 9728\7f2625730
97703 Ref: 9729\7f2625755
97704 Ref: 9730\7f2625782
97705 Ref: 9731\7f2625793
97706 Ref: 9732\7f2625818
97707 Ref: 9733\7f2625915
97708 Ref: 9734\7f2625930
97709 Ref: 9735\7f2626004
97710 Ref: 9736\7f2626108
97711 Ref: 9737\7f2626142
97712 Ref: 9738\7f2626168
97713 Ref: 9739\7f2626277
97714 Ref: 9740\7f2626291
97715 Ref: 9741\7f2626306
97716 Ref: 9742\7f2626319
97717 Ref: 9743\7f2626376
97718 Ref: 9744\7f2626435
97719 Ref: 9745\7f2626500
97720 Ref: 9746\7f2626562
97721 Ref: 9747\7f2626652
97722 Ref: 9748\7f2626718
97723 Ref: 9749\7f2626762
97724 Ref: 9750\7f2626776
97725 Ref: 9751\7f2626874
97726 Ref: 9752\7f2626881
97727 Ref: 9753\7f2626950
97728 Ref: 9754\7f2626962
97729 Ref: 9755\7f2627022
97730 Ref: 9756\7f2627041
97731 Ref: 9757\7f2627106
97732 Ref: 9758\7f2627143
97733 Ref: 9759\7f2627143
97734 Ref: 9760\7f2627143
97735 Ref: 9761\7f2627143
97736 Ref: 9762\7f2627143
97737 Node: Annex Q\7f2672390
97738 Node: Q.1\7f2672956
97739 Ref: 9763\7f2673132
97740 Node: Q.2\7f2684481
97741 Ref: 9764\7f2684699
97742 Ref: 9765\7f2684699
97743 Node: Q.3\7f2700537
97744 Ref: 9766\7f2700734
97745 Node: Q.4\7f2767592
97746 Ref: 9767\7f2767786
97747 Node: Q.5\7f2771439
97748 Ref: 9768\7f2771666
97749 Ref: 9769\7f2771666
97750 Ref: 9770\7f2771666
97751 Node: Index\7f2795368
97752 Node: operators\7f2795662
97753 Node: A\7f2797110
97754 Node: B\7f2834414
97755 Node: C\7f2842127
97756 Node: D\7f2876813
97757 Node: E\7f2897982
97758 Node: F\7f2929271
97759 Node: G\7f2942606
97760 Node: H\7f2949982
97761 Node: I\7f2954126
97762 Node: J\7f2980179
97763 Node: K\7f2980369
97764 Node: L\7f2981149
97765 Node: M\7f2996538
97766 Node: N\7f3005964
97767 Node: O\7f3020139
97768 Node: P\7f3027294
97769 Node: Q\7f3053726
97770 Node: R\7f3055527
97771 Node: S\7f3077125
97772 Node: T\7f3106157
97773 Node: U\7f3124058
97774 Node: V\7f3134956
97775 Node: W\7f3138969
97776 Node: X\7f3145056
97777 Node: Y\7f3145190
97778 \1f
97779 End Tag Table