Spec-Zone.ru › Ada 2012
Руководство по 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, за исключением:
  • Предикат pragma Preelaborate заменяется на pragma Pure.
  • Тип Set объявляется со дискриминантами, которые задают как емкость (количество элементов), так и модуль (количество различных значений хеша) таблицы хеширования следующим образом:
type Set (Capacity : Count_Type;
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;
Возвращает множество, элементы которого инициализируются значениями в 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 по минимизации копирования не применяются.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API