Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

A.18.23 Общий пакет Containers.Bounded_Hashed_Sets

Определяемый языком общий пакет Containers.Bounded_Hashed_Sets предоставляет закрытый тип Set и набор операций. Он предоставляет те же операции, что и пакет Containers.Hashed_Sets (см. A.18.8), с той разницей, что максимальный размер хранения ограничен.

Статическая семантика

Декларация общего библиотечного пакета Containers.Bounded_Hashed_Sets имеет то же содержимое и семантику, что и Containers.Hashed_Sets, за исключением:
  • Аспект Preelaborate заменяется аспектом Pure. Аспект Global удаляется.
  • Тип Set объявляется со дискриминантами, которые указывают как емкость (количество элементов), так и модуль (количество различных значений хеша) хеш-таблицы следующим образом:
type Set (Capacity : Count_Type;
Modulus : Hash_Type) is tagged private...
  • Определение aspect_definition для Preelaborable_Initialization для типа Set изменяется на:
Preelaborable_Initialization =>
Element_Type'Preelaborable_Initialization
  • Тип Set требует финализации тогда и только тогда, когда тип Element_Type требует финализации.
  • В функции Empty пост условие изменяется на:
Post =>
Empty'Result.Capacity = Capacity and then
Empty'Result.Modulus = Default_Modulus (Capacity) and then
not Tampering_With_Cursors_Prohibited (Empty'Result) and then
Length (Empty'Result) = 0;
  • Описание Reserve_Capacity заменяется на:
procedure Reserve_Capacity (Container : in out Set;
Capacity : in Count_Type)
with Pre => Capacity <= Container.Capacity
or else raise Capacity_Error;
Эта операция не оказывает никакого влияния, кроме проверки предусловия.
  • Добавлена дополнительная операция сразу после Reserve_Capacity:
function Default_Modulus (Capacity : Count_Type) return Hash_Type;
Default_Modulus возвращает определённое реализацией значение для количества различных значений хеша, которое будет использоваться для данной ёмкости (максимального числа элементов).
  • Для процедур Insert и Include часть предусловия, которая гласит:
(<some length> <= Count_Type'Last - <some other length>
or else raise Constraint_Error)
заменяется на:
(<some length> <= Count_Type'Last - <some other length>
or else raise Constraint_Error) and then
(<some length> <= Container.Capacity - <some other length>
or else raise Capacity_Error)
  • В процедуре Assign предусловие изменяется на:
Pre => (not Tampering_With_Cursors_Prohibited (Target)
or else raise Program_Error) and then
(Length (Source) <= Target.Capacity
or else raise Capacity_Error),
  • Функция Copy заменяется на:
function Copy (Source : Set;
Capacity : Count_Type := 0;
Modulus : Hash_Type := 0) return Map
with Pre => Capacity = 0 or else Capacity >= Length (Source)
or else raise Capacity_Error,
Post =>
Length (Copy'Result) = Length (Source) and then
not Tampering_With_Cursors_Prohibited (Copy'Result) and then
Copy'Result.Capacity = (if Capacity = 0 then
Length (Source) else Capacity) and then
Copy'Result.Modulus = (if Modulus = 0 then
Default_Modulus (Capacity) else Modulus);
Возвращает множество с парами ключ/элемент, инициализированными из значений в Source.

Ограниченные (временно́й) ошибки

Ошибка присваивания из объекта ограниченного множества при одновременном изменении элементов или курсоров этого объекта запрещена. Либо 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