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

3.6.1 Ограничения индексов и дискретные диапазоны

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

Синтаксис

index_constraint ::= (discrete_range {, discrete_range})
discrete_range ::= discrete_subtype_indication | range

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

Тип discrete_range — это тип подтипа, определённого subtype_indication, или тип range. Для ограничения индексов каждый discrete_range должен иметь тип соответствующего индекса.

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

Ограничение индексов должно появляться только в subtype_indication, метка подтипа которой обозначает либо неявный тип массива, либо неявный тип доступа, подтип которого является неявным типом массива; в обоих случаях ограничение индексов должно предоставлять discrete_range для каждого индекса типа массива.

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

discrete_range определяет диапазон, границы которого заданы range или диапазоном подтипа, определённого subtype_indication.

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

Ограничение индексов является совместимым с неявным типом массива тогда и только тогда, когда диапазон индексов, определённый каждым discrete_range, совместим (см. 3.5) с соответствующим подтипом индекса. Если любой из discrete_range определяет пустой диапазон, массив, ограниченный таким образом, является пустым массивом, не имеющим компонентов. Значение массива удовлетворяет ограничению индексов, если в каждой позиции индекса значение массива и ограничение индексов имеют одинаковые границы индексов.
Разработка ограничения индексов состоит из вычисления discrete_range (ов) в произвольном порядке. Вычисление discrete_range состоит из разработки subtype_indication или вычисления range.
ПРИМЕЧАНИЯ
51 Разработка subtype_indication, состоящей из метки подтипа, за которой следует ограничение индексов, проверяет совместимость ограничения индексов с меткой подтипа (см. 3.2.2).
52 Даже если значение массива не удовлетворяет ограничению индексов подтипа массива, Constraint_Error не поднимается при преобразовании в подтип массива, до тех пор, пока длина каждой размерности значения массива и подтипа массива не совпадают. См. 4.6.

Примеры

Примеры объявлений массивов, включающих ограничение индексов:
Board : Matrix(1 .. 8, 1 .. 8); -- см. 3.6
Rectangle : Matrix(1 .. 20, 1 .. 30);
Inverse : Matrix(1 .. N, 1 .. N); -- N необязательно статично
Filter : Bit_Vector(0 .. 31);
Пример объявления массива с ограниченным подтипом массива:
My_Schedule : Schedule; -- все массивы типа Schedule имеют одинаковые границы
Пример типа записи с компонентом, который является массивом:
type Var_Line(Length : Natural) is
record
Image : String(1 .. Length);
end record;
Null_Line : Var_Line(0); -- Null_Line.Image — это пустой массив


Spec-Zone.ru

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