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


Spec-Zone.ru

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