Руководство по Ada 2012
A.18.23 Общий пакет Containers.Bounded_Hashed_Sets
Определяемый языком общий пакет Containers.Bounded_Hashed_Sets предоставляет закрытый тип множества и набор операций. Он предоставляет те же операции, что и пакет Containers.Hashed_Sets (см. A.18.8), с той разницей, что максимальный объем хранения ограничен.
Статическая семантика
Объявление общего библиотечного пакета Containers.Bounded_Hashed_Sets имеет то же содержимое и семантику, что и Containers.Hashed_Sets, за исключением:
- Тип Set объявляется со дискриминантами, которые задают как емкость (количество элементов), так и модуль (количество различных значений хеша) таблицы хеширования следующим образом:
type Set (Capacity : Count_Type;
Modulus : Hash_Type) is tagged private;
Modulus : Hash_Type) is tagged private;
- Тип Set нуждается в финализации тогда и только тогда, когда тип Element_Type нуждается в финализации.
- Описание Reserve_Capacity заменяется на:
Если указанная Capacity больше емкости контейнера, то Reserve_Capacity распространяет Capacity_Error. В противном случае операция не оказывает никакого влияния.
- Добавлена дополнительная операция сразу после Reserve_Capacity:
function Default_Modulus (Capacity : Count_Type) return Hash_Type;
Default_Modulus возвращает значение, определенное реализацией, для количества различных значений хеша, которые должны использоваться для данной емкости (максимального числа элементов).
- Функция Copy заменяется на:
function Copy (Source : Set;
Capacity : Count_Type := 0;
Modulus : Hash_Type := 0) return Set;
Capacity : Count_Type := 0;
Modulus : Hash_Type := 0) return Set;
Возвращает множество, элементы которого инициализируются значениями в Source. Если Capacity равно 0, то емкость множества равна длине Source; если Capacity равно или больше длины Source, емкость множества равна значению параметра Capacity; в противном случае операция распространяет Capacity_Error. Если аргумент Modulus равен 0, то модуль множества представляет собой значение, возвращаемое вызовом Default_Modulus с емкостью множества в качестве аргумента; в противном случае модуль множества представляет собой значение параметра Modulus.
Ограниченные (временно́й) ошибки
Ошибка является ограниченной, если присваивание выполняется от объекта ограниченного множества, в то время как манипуляции с элементами или курсорами этого объекта запрещены. Либо Program_Error поднимается при присваивании, выполнение продолжается с целевым объектом, запрещающим манипулирование элементами или курсорами, либо выполнение продолжается нормально.
Ошибка выполнения
Когда объект ограниченного множества S завершается, если манипулирование курсорами запрещено для S, кроме как из-за присваивания от другого множества, то выполнение является ошибочным.
Требования к реализации
Для каждой экземпляра Containers.Hashed_Sets и каждой экземпляра Containers.Bounded_Hashed_Sets, если две экземпляры удовлетворяют следующим условиям, то выходной сигнал, генерируемый подпрограммами Set'Output или Set'Write любой экземпляры, должен быть читабельным подпрограммами Set'Input или Set'Read другой экземпляры соответственно:
- параметры Element_Type двух экземпляров являются статически соответствующими подтипами одного и того же типа;
- выходной сигнал, генерируемый Element_Type'Output или Element_Type'Write, должен быть читабельным Element_Type'Input или Element_Type'Read соответственно (где Element_Type обозначает тип двух фактических параметров Element_Type).
Рекомендации по реализации
Объекты ограниченного хешированного множества должны быть реализованы без неявных указателей или динамического выделения.
Рекомендации по реализации процедуры Move по минимизации копирования не применяются.