Справочник по Ada 2012
A.18.19 Обобщённый пакет Containers.Bounded_Vectors
Определяемый языком обобщённый пакет Containers.Bounded_Vectors предоставляет частный тип Vector и набор операций. Он предоставляет те же операции, что и пакет Containers.Vectors (см. A.18.2), с той разницей, что максимальный объём памяти ограничен.
Статическая семантика
Декларация обобщённого библиотечного пакета Containers.Bounded_Vectors имеет то же содержимое и семантику, что и Containers.Vectors, за исключением:
- Тип Vector объявляется с дискриминантом, который определяет ёмкость:
type Vector (Capacity : Count_Type) is tagged private;
- Тип Vector требует финализации тогда и только тогда, когда тип Element_Type требует финализации.
- В функции Copy, если параметр Capacity равен или больше длины Source, ёмкость вектора точно равна значению параметра Capacity.
- Описание Reserve_Capacity заменяется на:
Если указанная Capacity больше ёмкости Container, то Reserve_Capacity генерирует Capacity_Error. В противном случае операция не имеет эффекта.
Ограниченные (временно́й) ошибки
Присваивание от объекта ограниченного вектора, в то время как манипуляции с элементами или курсорами этого объекта запрещены, является ошибкой. Либо Program_Error возникает при присваивании, либо выполнение продолжается с целевым объектом, запрещающим манипуляции с элементами или курсорами, либо выполнение продолжается нормально.
Ошибочное выполнение
Когда объект ограниченного вектора V завершается, если манипуляции с курсорами для V запрещены, кроме как из-за присваивания от другого вектора, то выполнение является ошибочным.
Требования к реализации
Для каждого экземпляра Containers.Vectors и каждого экземпляра Containers.Bounded_Vectors, если два экземпляра соответствуют следующим условиям, то вывод, генерируемый подпрограммами Vector'Output или Vector'Write любого экземпляра, должен быть читаем подпрограммами Vector'Input или Vector'Read соответственно другого экземпляра:
- параметры Element_Type двух экземпляров являются статически совместимыми подтипами одного и того же типа;
- вывод, генерируемый подпрограммами Element_Type'Output или Element_Type'Write, должен быть читаем подпрограммами Element_Type'Input или Element_Type'Read соответственно (где Element_Type обозначает тип двух фактических параметров Element_Type); и
- предыдущие два условия также выполняются для параметров Index_Type экземпляров.
Рекомендации по реализации
Объекты ограниченных векторов должны реализовываться без неявных указателей или динамического выделения.
Рекомендации по реализации для процедуры Move по минимизации копирования не применяются.