Contents Index Search Previous Next

1

For every discrete
subtype S, the following attributes are defined:

2

- S'Pos
- S'Pos denotes a function with the following specification:

3

4

- This function returns the position
number of the value of
*Arg*, as a value of type*universal_integer*.

5

- S'Val
- S'Val denotes a function with the following specification:

6

7

- {
*evaluation (Val)*[partial]} {*Constraint_Error (raised by failure of run-time check)*} This function returns a value of the type of S whose position number equals the value of*Arg*. {*Range_Check*[partial]} {*check, language-defined (Range_Check)*} For the evaluation of a call on S'Val, if there is no value in the base range of its type with the given position number, Constraint_Error is raised.

7.a

7.b

8

For the evaluation of a call on S'Pos for an enumeration
subtype, if the value of the operand does not correspond to the internal
code for any enumeration literal of its type [(perhaps due to an uninitialized
variable)], then the implementation should raise Program_Error. {*Program_Error
(raised by failure of run-time check)*} This
is particularly important for enumeration types with noncontiguous internal
codes specified by an enumeration_representation_clause.

8.a

NOTES

9

28 Indexing and loop iteration
use values of discrete types.

10

29 {*predefined
operations (of a discrete type)* [partial]} The
predefined operations of a discrete type include the assignment operation,
qualification, the membership tests, and the relational operators; for
a boolean type they include the short-circuit control forms and the logical
operators; for an integer type they include type conversion to and from
other numeric types, as well as the binary and unary adding operators
- and +, the multiplying operators, the unary operator **abs**, and
the exponentiation operator. The assignment operation is described in
5.2. The other predefined operations are described
in Section 4.

11

30 As for all types, objects
of a discrete type have Size and Address attributes (see 13.3).

12

31 For
a subtype of a discrete type, the result delivered by the attribute Val
might not belong to the subtype; similarly, the actual parameter of the
attribute Pos need not belong to the subtype. The following relations
are satisfied (in the absence of an exception) by these attributes:

13

S'Pos(S'Val(N)) = N

14

15

16

-- Rainbow'First = Red, Rainbow'Last = Blue

17

-- Color'Pos(Blue) = Rainbow'Pos(Blue) = 4

-- Color'Val(0) = Rainbow'Val(0) = White

17.a

{*extensions to Ada 83*}
The attributes S'Succ, S'Pred, S'Width, S'Image,
and S'Value have been generalized to apply to real types as well (see
3.5, ``Scalar Types'').