1
An enumeration_representation_clause specifies the internal codes for enumeration literals.
2
enumeration_representation_clause::=
for first_subtype_local_name use enumeration_aggregate;
3
enumeration_aggregate::= array_aggregate
4
The enumeration_aggregate shall be written as a one−dimensional array_aggregate, for which the index subtype is the unconstrained subtype of the enumeration type, and each component expression is expected to be of any integer type.
5
The first_subtype_local_name of an enumeration_representation_clause shall denote an enumeration subtype.
6/2
Each component of the array_aggregate shall be given by an expression rather than a <>. The expressions given in the array_aggregate shall be static, and shall specify distinct integer codes for each value of the enumeration type; the associated integer codes shall satisfy the predefined ordering relation of the type.
7
An enumeration_representation_clause specifies the coding aspect of representation. The coding consists of the internal code for each enumeration literal, that is, the integral value used internally to represent each literal.
8
For nonboolean enumeration types, if the coding is not specified for the type, then for each value of the type, the internal code shall be equal to its position number.
9
The recommended level of support for enumeration_representation_clauses is:
10
NOTES
11/1
10 Unchecked_Conversion may be used to query the internal codes used for an enumeration type. The attributes of the type, such as Succ, Pred, and Pos, are unaffected by the enumeration_representation_clause. For example, Pos always returns the position number, not the internal integer code that might have been specified in an enumeration_representation_clause}.
12
Example of an enumeration representation clause:
13
type Mix_Code is (ADD, SUB, MUL, LDA, STA, STZ);
14
for Mix_Code use (ADD => 1, SUB => 2, MUL => 3, LDA => 8, STA => 24, STZ =>33);