Справочник Ada 2012
A.18.22 Универсальный пакет Containers.Bounded_Ordered_Maps
Определяемый языком универсальный пакет Containers.Bounded_Ordered_Maps предоставляет приватный тип Map и набор операций. Он предоставляет те же операции, что и пакет Containers.Ordered_Maps (см. A.18.6), с той разницей, что максимальный объём хранилища ограничен.
Статическая семантика
Декларация универсального библиотечного пакета Containers.Bounded_Ordered_Maps имеет то же содержимое и семантику, что и Containers.Ordered_Maps, за исключением:
- Тип Map объявляется с дискриминантом, который указывает ёмкость (максимальное количество элементов) следующим образом:
type Map (Capacity : Count_Type) is tagged private;
- Тип Map нуждается в завершении, только если тип Key_Type или тип Element_Type нуждается в завершении.
- Выделение нового узла включает проверку, что ёмкость не превышена, и Capacity_Error генерируется, если эта проверка завершается неудачно.
- В процедуре Assign, если длина Source больше ёмкости Target, тогда Capacity_Error распространяется.
- Функция Copy заменяется на:
function Copy (Source : Map;
Capacity : Count_Type := 0) return Map;
Capacity : Count_Type := 0) return Map;
Возвращает карту с парами ключ/элемент, инициализированными значениями в Source. Если Capacity равно 0, то ёмкость карты равна длине Source; если Capacity равно или больше длины Source, то ёмкость карты равна заданному значению; в противном случае, операция генерирует Capacity_Error.
Ограниченные (временно́й) ошибки
Ошибка ограничена в присваивании из объекта ограниченной карты, при одновременном вмешательстве в элементы или курсоры этого объекта запрещено. Либо Program_Error генерируется при присваивании, выполнение продолжается с объектом целевого назначения, запрещающим вмешательство в элементы или курсоры, или выполнение продолжается нормально.
Ошибка выполнения
Когда объект ограниченной карты M завершается, если вмешательство в курсоры запрещено для M, кроме случаев присваивания от другой карты, выполнение ошибочно.
Требования к реализации
Для каждого экземпляра Containers.Ordered_Maps и каждого экземпляра Containers.Bounded_Ordered_Maps, если два экземпляра удовлетворяют следующим условиям, то вывод, генерируемый подпрограммами Map'Output или Map'Write любого экземпляра, должен быть читаемым подпрограммами Map'Input или Map'Read другого экземпляра соответственно:
- параметры Element_Type двух экземпляров являются статически соответствующими подтипами одного типа; и
- вывод, генерируемый Element_Type'Output или Element_Type'Write, должен быть читаемым Element_Type'Input или Element_Type'Read соответственно (где Element_Type обозначает тип двух фактических параметров Element_Type); и
- предыдущие два условия также выполняются для параметров Key_Type экземпляров.
Рекомендации по реализации
Объекты ограниченных упорядоченных карт должны быть реализованы без неявных указателей или динамического выделения памяти.
Рекомендации по реализации для процедуры Move по минимизации копирования не применяются.