Справочник по Ada 2005
3.6.2 Операции типов массивов
Правила легальности
Аргумент N, используемый в обозначении_атрибута для N-го измерения массива, должен быть статическим выражением некоторого целочисленного типа. Значение N должно быть положительным (ненулевым) и не должно превышать размерности массива.
Статическая семантика
Следующие атрибуты определены для префикса A типа массива (после любого неявного разыменования) или обозначения ограниченного подтипа массива:
A'First
A'First обозначает нижнюю границу первого индексного диапазона; его тип — соответствующий тип индекса.
A'First(N)
A'First(N) обозначает нижнюю границу N-го индексного диапазона; его тип — соответствующий тип индекса.
A'Last
A'Last обозначает верхнюю границу первого индексного диапазона; его тип — соответствующий тип индекса.
A'Last(N)
A'Last(N) обозначает верхнюю границу N-го индексного диапазона; его тип — соответствующий тип индекса.
A'Range
A'Range эквивалентен диапазону A'First .. A'Last, за исключением того, что префикс A вычисляется только один раз.
A'Range(N)
A'Range(N) эквивалентен диапазону A'First(N) .. A'Last(N), за исключением того, что префикс A вычисляется только один раз.
A'Length
A'Length обозначает количество значений первого индексного диапазона (ноль для пустого диапазона); его тип — universal_integer.
A'Length(N)
A'Length(N) обозначает количество значений N-го индексного диапазона (ноль для пустого диапазона); его тип — universal_integer.
Рекомендации по реализации
Реализация обычно должна представлять многомерные массивы в порядке следования строк, согласуясь с обозначениями, используемыми для многомерных агрегатов массивов (см. 4.3.3). Однако, если для типа многомерного массива применяется pragma Convention(Fortran, ...), то вместо этого следует использовать порядок следования столбцов (см. B.5, «Интерфейс с Fortran»).
ПРИМЕЧАНИЯ
47 ссылка_на_атрибут A'First и A'First(1) обозначают одно и то же значение. Аналогичное соотношение существует для ссылка_на_атрибут A'Last, A'Range и A'Length. Следующее соотношение выполняется (кроме нулевого массива) для указанных атрибутов, если тип индекса — это целочисленный тип:
A'Length(N) = A'Last(N) - A'First(N) + 1
48 Тип массива ограничен, если его тип компонента ограничен (см. 7.5).
49 Предопределенные операции типа массива включают тесты на принадлежность, квалификацию и явное преобразование. Если тип массива не ограничен, они также включают присваивание и предопределенные операторы равенства. Для типа одномерного массива они включают предопределенные операторы конкатенации (если не ограничен) и, если тип компонента — дискретный, предопределенные операторы отношения; если тип компонента — boolean, то также включаются предопределенные логические операторы.
50 Компонент массива может быть назван с помощью индексированного_компонента. Значение типа массива можно указать с помощью агрегата_массива. Для типа одномерного массива можно назвать срез массива; также определены строковые литералы, если тип компонента — это тип символов.
Примеры
Примеры (используя массивы, объявленные в примерах подраздела 3.6.1):
-- Filter'First = 0 Filter'Last = 31 Filter'Length = 32
-- Rectangle'Last(1) = 20 Rectangle'Last(2) = 30
-- Rectangle'Last(1) = 20 Rectangle'Last(2) = 30