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

5.5.1 Типы итераторов, определенные пользователем

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

Существует следующий язык-определенный обобщенный пакет библиотеки:
generic
type Курсор;
with function Есть_Элемент (Позиция : Курсор) return Булево;
package Ada.Iterator_Interfaces is
pragma Pure (Iterator_Interfaces);
type Итератор_Вперёд is limited interface;
function Первый (Объект : Итератор_Вперёд) return Курсор is abstract;
function Следующий (Объект : Итератор_Вперёд; Позиция : Курсор)
return Курсор is abstract;
type Обратимый_Итератор is limited interface and Итератор_Вперёд;
function Последний (Объект : Обратимый_Итератор) return Курсор is abstract;
function Предыдущий (Объект : Обратимый_Итератор; Позиция : Курсор)
return Курсор is abstract;
end Ada.Iterator_Interfaces;
Тип итератора — это тип, происходящий от интерфейса Forward_Iterator из некоторого экземпляра Ada.Iterator_Interfaces. Тип обратимого итератора — это тип, происходящий от интерфейса Reversible_Iterator из некоторого экземпляра Ada.Iterator_Interfaces. Объект итератора — это объект типа итератора. Объект обратимого итератора — это объект типа обратимого итератора. Формальный подтип Курсор из связанного экземпляра Ada.Iterator_Interfaces является подтипом итерационного курсора для типа итератора.
Для типа индексируемого контейнера T (см. 4.1.6) могут быть указаны следующие операционные аспекты, связанные с типом:
Default_Iterator

Этот аспект задается именем, обозначающим ровно одну функцию, объявленную непосредственно в том же списке объявлений, в котором объявлен T, первый параметр которой имеет тип T или T'Class или параметр доступа, указатель на тип T или T'Class, а остальные параметры, если таковые имеются, имеют значения по умолчанию, а тип результата — тип итератора. Эта функция является функцией по умолчанию для итератора для T. Ее подтип результата является подтипом итератора по умолчанию для T. Подтип итерационного курсора для подтипа итератора по умолчанию — это подтип курсора по умолчанию для T.
Iterator_Element

Этот аспект задается именем, обозначающим подтип. Это подтип элемента по умолчанию для T.
Эти аспекты наследуются потомками типа T (включая T'Class).
Тип итерируемого контейнера — это тип индексируемого контейнера со специфицированными аспектами Default_Iterator и Iterator_Element. Тип обратимого итерируемого контейнера — это тип итерируемого контейнера, для которого тип итератора по умолчанию является типом обратимого итератора. Объект итерируемого контейнера — это объект типа итерируемого контейнера. Объект обратимого итерируемого контейнера — это объект типа обратимого итерируемого контейнера.
Аспекты Default_Iterator и Iterator_Element непереопределяемые (см. 13.1.1).

Правила правомерности

Аспект Constant_Indexing (если таковой имеется) типа итерируемого контейнера T должен обозначать ровно одну функцию со следующими свойствами:
  • тип результата функции покрывает тип элемента по умолчанию для T или является типом ссылки (см. 4.1.5) с дискриминантом доступа, обозначающим тип, покрываемый типом элемента по умолчанию для T;
  • тип второго параметра функции покрывает тип курсора по умолчанию для T;
  • если параметров больше двух, все дополнительные параметры имеют значения по умолчанию.
Эта функция (если таковая имеется) является функцией по умолчанию для постоянного индексирования для T.
Аспект Variable_Indexing (если таковой имеется) типа итерируемого контейнера T должен обозначать ровно одну функцию со следующими свойствами:
  • тип результата функции является типом ссылки (см. 4.1.5) с дискриминантом доступа, обозначающим тип, покрываемый типом элемента по умолчанию для T;
  • тип второго параметра функции покрывает тип курсора по умолчанию для T;
  • если параметров больше двух, все дополнительные параметры имеют значения по умолчанию.
Эта функция (если таковая имеется) является функцией по умолчанию для переменного индексирования для T.


Spec-Zone.ru

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