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

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 для булевых типов.
ПРИМЕЧАНИЯ
10 Для запроса внутренних кодов, используемых для типа перечисления, можно использовать 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