Spec-Zone.ru › Ada 2012
Справочник Ada 2012

13.4 Описания представления перечислений

Определение enumeration_representation_clause указывает внутренние коды для литералов перечислений.

Синтаксис

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

Правила разрешения имен

enumeration_aggregate должен быть записан как одномерный array_aggregate, для которого тип индекса является не ограниченным типом перечисления, а каждое выражение компонента ожидается как выражение любого целого типа.

Правила допустимости

Идентификатор first_subtype_local_name в enumeration_representation_clause должен обозначать подтип перечисления.
Каждый компонент array_aggregate должен задаваться выражением expression, а не <>. Выражения в array_aggregate должны быть статическими и задавать различные целые коды для каждого значения типа перечисления; соответствующие целые коды должны удовлетворять предопределённому отношению порядка типа.

Статическая семантика

enumeration_representation_clause задаёт аспект кодирования представления. Кодирование состоит из внутреннего кода для каждого литерала перечисления, то есть целочисленного значения, используемого для внутреннего представления каждого литерала.

Требования к реализации

Для типов перечислений, не являющихся булевыми, если кодирование не указано для типа, то для каждого значения типа внутренний код должен быть равен его номеру позиции.

Рекомендации по реализации

Рекомендуемый уровень поддержки enumeration_representation_clause:
  • Реализация должна поддерживать по крайней мере внутренние коды в диапазоне System.Min_Int..System.Max_Int. Реализация не обязана поддерживать enumeration_representation_clause для булевых типов.
ПРИМЕЧАНИЯ
13 Можно использовать Unchecked_Conversion для запроса внутренних кодов, используемых для типа перечисления. Атрибуты типа, такие как Succ, Pred и Pos, не изменяются enumeration_representation_clause. Например, Pos всегда возвращает номер позиции, а не внутренний целочисленный код, который мог быть указан в enumeration_representation_clause.

Примеры

Пример описания представления перечисления:
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);


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API