Руководство по Ada (Ada 2022)
A.18.32 Обобщённый пакет Containers.Bounded_Indefinite_Holders
Определяемый языком обобщённый пакет Containers.Bounded_Indefinite_Holders предоставляет частный тип Holder и набор операций для этого типа. Он предоставляет те же операции, что и пакет Containers.Indefinite_Holders (см. A.18.18), с той разницей, что максимальный объём хранилища ограничен.
Статическая семантика
Декларация обобщённого библиотечного пакета Containers.Bounded_Indefinite_Holders имеет то же содержимое и семантику, что и Containers.Indefinite_Holders, за исключением:
- В раздел контекста добавлено следующее:
with System.Storage_Elements; use System.Storage_Elements;
- После параметра Element_Type следует дополнительный обобщённый параметр:
Max_Element_Size_in_Storage_Elements : Storage_Count;
- Определение aspect_definition для Preelaborable_Initialization для типа Holder изменено на:
Preelaborable_Initialization =>
Element_Type'Preelaborable_Initialization
Element_Type'Preelaborable_Initialization
- Добавить в предварительное условие To_Holder и Replace_Element:
and then (New_Item'Size <=
Max_Element_Size_in_Storage_Elements * System.Storage_Unit
or else raise Program_Error)
Max_Element_Size_in_Storage_Elements * System.Storage_Unit
or else raise Program_Error)
Ограниченные (временно́й) ошибки
Ошибка ограниченного типа возникает при присваивании от объекта ограниченного хранилища, когда запрещено вмешиваться в элементы этого объекта. Либо Program_Error поднимается при присваивании, либо выполнение продолжается с целевым объектом, запрещающим вмешательство в элементы, либо выполнение продолжается нормально.
Требования к реализации
Для каждого экземпляра Containers.Indefinite_Holders и каждого экземпляра Containers.Bounded_Indefinite_Holders, если два экземпляра удовлетворяют следующим условиям, то выходные данные, генерируемые подпрограммами Holder'Output или Holder'Write любого экземпляра, должны быть читабельны подпрограммами Holder'Input или Holder'Read другого экземпляра соответственно:
- параметры Element_Type двух экземпляров являются статически соответствующими подтипами одного и того же типа;
- выходные данные, генерируемые Element_Type'Output или Element_Type'Write, должны быть читаемыми Element_Type'Input или Element_Type'Read соответственно (где Element_Type обозначает тип двух фактических параметров Element_Type).
Рекомендации по реализации
Объекты ограниченного хранилища должны реализовываться без динамического выделения памяти, а любая финализация должна быть тривиальной, если Element_Type не требует финализации.
Рекомендации по реализации для операций Move и Swap удаляются для ограниченных хранилищ; эти операции могут копировать элементы по мере необходимости.