13.4 Enumeration Representation Clauses
Syntax
Name Resolution Rules
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
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
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
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
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
For every discrete
subtype S, the following attributes are defined:
S'Enum_Rep
S'Enum_Rep denotes a function
with the following specification:
function S'Enum_Rep (Arg : S'Base) return universal_integer
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.
S'Enum_Val
S'Enum_Val denotes a function
with the following specification:
function S'Enum_Val (Arg : universal_integer) return S'Base
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.
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
Examples of enumeration
representation clauses:
type Mix_Code is (ADD, SUB, MUL, LDA, STA, STZ);
for Mix_Code use
(ADD => 1, SUB => 2, MUL => 3, LDA => 8, STA => 24, STZ =>33);
--
See 3.5.2.
for Roman_Digit
use ('I' => 1,
'V' => 5,
'X' => 10,
'L' => 50,
'C' => 100,
'D' => 500,
'M' => 1000);
--
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