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

3.5.5 Операции дискретных типов

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

Для каждого дискретного подтипа S определены следующие атрибуты:
S'Pos
S'Pos обозначает функцию со следующим описанием:
function S'Pos(Arg : S'Base)
return universal_integer
Эта функция возвращает номер позиции значения Arg в виде значения типа universal_integer.
S'Val
S'Val обозначает функцию со следующим описанием:
function S'Val(Arg : universal_integer)
return S'Base
Эта функция возвращает значение типа S, номер позиции которого равен значению Arg. При вычислении вызова S'Val, если в базовом диапазоне типа нет значения с заданным номером позиции, генерируется исключение Constraint_Error.

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

При вычислении вызова S'Pos для подтипа перечисления, если значение операнда не соответствует внутреннему коду ни одной константы перечисления его типа (возможно, из-за неинициализированной переменной), реализация должна генерировать исключение Program_Error. Это особенно важно для типов перечисления с несмежными внутренними кодами, заданными в enumeration_representation_clause.
ПРИМЕЧАНИЯ
28 Индексация и итерация циклов используют значения дискретных типов.
29 Предопределенные операции дискретного типа включают операцию присваивания, квалификацию, тесты на принадлежность и реляционные операторы; для булевого типа они включают краткую форму управления и логические операторы; для целочисленного типа они включают преобразование типов к другим числовым типам и обратно, а также бинарные и унарные операторы сложения - и +, операторы умножения, унарный оператор abs и оператор возведения в степень. Операция присваивания описана в 5.2. Другие предопределенные операции описаны в разделе 4.
30 Как и для всех типов, объекты дискретного типа имеют атрибуты Size и Address (см. 13.3).
31 Для подтипа дискретного типа результат, возвращаемый атрибутом Val, может не принадлежать подтипу; аналогично, фактический параметр атрибута Pos не обязательно должен принадлежать подтипу. Следующие соотношения (при отсутствии исключений) выполняются для этих атрибутов:
S'Val(S'Pos(X)) = X
S'Pos(S'Val(N)) = N

Примеры

Примеры атрибутов дискретных подтипов:
-- Для типов и подтипов, объявленных в подпункте 3.5.1, выполняются следующие условия:
-- Color'First = White, Color'Last = Black
-- 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


Spec-Zone.ru

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