Справочник по Ada 2012
3.6.2 Операции типов массивов
Правила допустимости
Аргумент N, используемый в attribute_designator для 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). Однако, если для типа многомерного массива указан стандарт Fortran, вместо этого следует использовать порядок следования столбцов (см. B.5, «Взаимодействие с Fortran»).
ПРИМЕЧАНИЯ
53 Атрибуты A'First и A'First(1) обозначают одно и то же значение. Аналогичное отношение существует для атрибутов A'Last, A'Range и A'Length. При условии, что тип индекса является целочисленным типом, выполняется следующее соотношение (кроме пустого массива):
A'Length(N) = A'Last(N) - A'First(N) + 1
54 Тип массива ограничен, если его компонентный тип ограничен (см. 7.5).
55 Предопределённые операции типа массива включают в себя проверки на членство, квалификацию и явное преобразование. Если тип массива не ограничен, они также включают присваивание и предопределённые операторы равенства. Для одномерного массива они включают предопределённые операторы конкатенации (если не ограничен) и, если тип компонента дискретный, предопределённые реляционные операторы; если тип компонента булев, то также включаются предопределённые логические операторы.
56 Компонент массива может быть назван с помощью indexed_component. Значение типа массива может быть указано с помощью array_aggregate. Для одномерного массива может быть указан срез массива; также определены строковые литералы, если тип компонента — тип символов.
Примеры
Примеры (используя массивы, объявленные в примерах подпункта 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