Справочник по Ada 2012
A.18.21 Обобщенный пакет Containers.Bounded_Hashed_Maps
Определяемый языком обобщенный пакет Containers.Bounded_Hashed_Maps предоставляет закрытый тип Map и набор операций. Он предоставляет те же операции, что и пакет Containers.Hashed_Maps (см. A.18.5), с той разницей, что максимальный объем хранения ограничен.
Статическая семантика
Декларация обобщенного библиотечного пакета Containers.Bounded_Hashed_Maps содержит те же элементы и семантику, что и Containers.Hashed_Maps, за исключением:
- Тип Map объявляется со спецификаторами, которые задают емкость (количество элементов) и модуль (количество различных значений хеша) хеш-таблицы следующим образом:
type Map (Capacity : Count_Type;
Modulus : Hash_Type) is tagged private;
Modulus : Hash_Type) is tagged private;
- Тип Map требует финализации тогда и только тогда, когда тип Key_Type или тип Element_Type требует финализации.
- Описание Reserve_Capacity заменено на:
Если указанная Capacity больше, чем емкость Container, то Reserve_Capacity распространяет Capacity_Error. В противном случае операция не оказывает никакого эффекта.
- Добавлена дополнительная операция сразу после Reserve_Capacity:
function Default_Modulus (Capacity : Count_Type) return Hash_Type;
Default_Modulus возвращает определенное реализацией значение для количества различных значений хеша, используемых для заданной емкости (максимального количества элементов).
- Функция Copy заменена на:
function Copy (Source : Map;
Capacity : Count_Type := 0;
Modulus : Hash_Type := 0) return Map;
Capacity : Count_Type := 0;
Modulus : Hash_Type := 0) return Map;
Возвращает карту с парами ключ/элемент, инициализированными значениями из Source. Если Capacity равно 0, то емкость карты равна длине Source; если Capacity равно или больше длины Source, емкость карты равна значению параметра Capacity; в противном случае операция распространяет Capacity_Error. Если аргумент Modulus равен 0, то модуль карты равен значению, возвращаемому вызовом Default_Modulus с емкостью карты в качестве аргумента; в противном случае модуль карты равен значению параметра Modulus.
Ограниченные (временно́й) ошибки
Присвоение значения ограниченной карте запрещено во время манипулирования элементами или курсорами этой карты. Либо Program_Error возникает при присвоении, выполнение продолжается с объектом назначения, запрещающим манипулирование элементами или курсорами, либо выполнение продолжается нормально.
Ошибка выполнения
Когда объект ограниченной карты M завершается, если манипулирование курсорами запрещено для M, кроме как из-за присвоения от другой карты, то выполнение является ошибочным.
Требования к реализации
Для каждой инстанции Containers.Hashed_Maps и каждой инстанции Containers.Bounded_Hashed_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 для минимизации копирования не применяются.