Справочник по Ada 2005
3.5.5 Операции дискретных типов
Статическая семантика
Для каждого дискретного подтипа S определены следующие атрибуты:
S'Pos
S'Pos обозначает функцию со следующим описанием:
function S'Pos(Arg : S'Base)
return universal_integer
return universal_integer
Эта функция возвращает номер позиции значения Arg, как значение типа universal_integer.
S'Val
S'Val обозначает функцию со следующим описанием:
function S'Val(Arg : universal_integer)
return S'Base
return S'Base
Эта функция возвращает значение типа S, номер позиции которого равен значению Arg. При вызове S'Val, если в базовом диапазоне типа нет значения с заданным номером позиции, то возникает исключение Constraint_Error.
Рекомендации по реализации
При вызове S'Pos для подтипа перечисления, если значение операнда не соответствует внутреннему коду никакой константы перечисления его типа (возможно, из-за неинициализированной переменной), реализация должна сгенерировать исключение Program_Error. Это особенно важно для типов перечисления с несмежными внутренними кодами, заданными в определении_представления_перечисления.
ПРИМЕЧАНИЯ
30 Индексирование и итерация циклов используют значения дискретных типов.
31 Предопределенные операции дискретного типа включают операцию присваивания, квалификацию, тесты на принадлежность и реляционные операторы; для булевого типа они включают формы управления коротким замыканием и логические операторы; для целого типа они включают преобразование типов в и из других числовых типов, а также бинарные и унарные операторы сложения – и +, операторы умножения, унарный оператор abs и оператор возведения в степень. Операция присваивания описана в 5.2. Другие предопределенные операции описаны в разделе 4.
32 Как и для всех типов, объекты дискретного типа имеют атрибуты Size и Address (см. 13.3).
33 Для подтипа дискретного типа результат, возвращаемый атрибутом Val, может не принадлежать подтипу; аналогично, фактический параметр атрибута Pos не обязательно должен принадлежать подтипу. Следующие соотношения выполняются (в отсутствие исключений) для этих атрибутов:
S'Val(S'Pos(X)) = X
S'Pos(S'Val(N)) = N
S'Pos(S'Val(N)) = N
Примеры
Примеры атрибутов дискретных подтипов:
-- Для типов и подтипов, объявленных в подпункте 3.5.1, выполняются следующие условия:
-- Color'First = White, Color'Last = Black
-- Rainbow'First = Red, Rainbow'Last = Blue
-- Rainbow'First = Red, Rainbow'Last = Blue
-- Color'Succ(Blue) = Rainbow'Succ(Blue) = Brown
-- Color'Pos(Blue) = Rainbow'Pos(Blue) = 4
-- Color'Val(0) = Rainbow'Val(0) = White
-- Color'Pos(Blue) = Rainbow'Pos(Blue) = 4
-- Color'Val(0) = Rainbow'Val(0) = White