Ada Reference Manual (Ada 2022) — Legal Information

# 13.4 Enumeration Representation Clauses

1
An enumeration_representation_clause specifies the internal codes for enumeration literals.

#### Syntax

2
enumeration_representation_clause ::=
for first_subtype_local_name use enumeration_aggregate;
3
enumeration_aggregate ::= array_aggregate

#### Name Resolution Rules

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.

#### Legality Rules

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.

#### Static Semantics

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.

#### Implementation Requirements

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.

#### Implementation Advice

9
The recommended level of support for enumeration_representation_clauses is:
10/5
An implementation should support at least the internal codes in the range System.Min_Int .. System.Max_Int. An implementation is not required to support enumeration_representation_clauses for boolean types.

#### Static Semantics

10.1/5
For every discrete subtype S, the following attributes are defined:
10.2/5
S'Enum_Rep
S'Enum_Rep denotes a function with the following specification:
10.3/5
function S'Enum_Rep (Arg : S'Base) return universal_integer
10.4/5
This function returns the representation value of the value of Arg, as a value of type universal_integer. The representation value is the internal code specified in an enumeration representation clause, if any, for the type corresponding to the value of Arg, and otherwise is the position number of the value.
10.5/5
S'Enum_Val
S'Enum_Val denotes a function with the following specification:
10.6/5
function S'Enum_Val (Arg : universal_integer) return S'Base
10.7/5
This function returns a value of the type of S whose representation value equals the value of Arg. For the evaluation of a call on S'Enum_Val, if there is no value in the base range of its type with the given representation value, Constraint_Error is raised.
11/5
NOTE Attribute Enum_Rep can be used to query the internal codes used for an enumeration type; attribute Enum_Val can be used to convert from an internal code to an enumeration value. The other attributes of the type, such as Succ, Pred, and Pos, are unaffected by an enumeration_representation_clause. For example, Pos always returns the position number, not an internal integer code that was specified in an enumeration_representation_clause.

#### Examples

12/5
Examples of enumeration representation clauses:
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);
15/5
-- See 3.5.2.
for Roman_Digit use ('I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000);
16/5
-- For an example of the use of attribute Enum_Rep, see 4.2.1.

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe