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

A.18.22 Обобщенный пакет Containers.Bounded_Ordered_Maps

Определяемый языком обобщенный пакет Containers.Bounded_Ordered_Maps предоставляет закрытый тип Map и набор операций. Он предоставляет те же операции, что и пакет Containers.Ordered_Maps (см. A.18.6), с той разницей, что максимальный объем хранения ограничен.

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

Декларация обобщенного библиотечного пакета Containers.Bounded_Ordered_Maps имеет то же содержимое и семантику, что и Containers.Ordered_Maps, за исключением:
  • Аспект Preelaborate заменен аспектом Pure. Аспект Global удален.
  • Тип Map объявлен с дискриминантом, который определяет емкость (максимальное количество элементов) следующим образом:
type Map (Capacity : Count_Type) is tagged private...
  • Определение aspect_definition для Preelaborable_Initialization для типа Map изменено на:
Preelaborable_Initialization =>
Element_Type'Preelaborable_Initialization
and
Key_Type'Preelaborable_Initialization
  • Тип Map требует завершения, если и только если тип Key_Type или тип Element_Type требует завершения.
  • Функция Empty заменена на:
function Empty (Capacity : Count_Type := определяемое реализацией)
return Map
with Post =>
Empty'Result.Capacity = Capacity and then
not Tampering_With_Elements_Prohibited (Empty'Result) and then
not Tampering_With_Cursors_Prohibited (Empty'Result) and then
Length (Empty'Result) = 0;
  • Для процедур Insert и Include часть условия предварительной проверки, которая гласит:
(<некоторое значение> <= Count_Type'Last - <некоторое другое значение>
or else raise Constraint_Error)
заменяется на:
(<некоторое значение> <= Count_Type'Last - <некоторое другое значение>
or else raise Constraint_Error) and then
(<некоторое значение> <= Container.Capacity - <некоторое другое значение>
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 : Map;
Capacity : Count_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_Elements_Prohibited (Copy'Result) and then
not Tampering_With_Cursors_Prohibited (Copy'Result) and then
Copy'Result.Capacity = (if Capacity = 0 then
Length (Source) else Capacity);
Возвращает карту с парами ключ/элемент, инициализированными значениями из Source.

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

Ошибка присваивания из объекта ограниченной карты, когда запрещено изменение элементов или курсоров этого объекта, является ограниченной ошибкой. Либо Program_Error поднимается при присваивании, выполнение продолжается с объектом назначения, запрещающим изменения элементов или курсоров, или выполнение продолжается нормально.

Ошибочное выполнение

При завершении объекта ограниченной карты M, если изменение курсоров запрещено для M, кроме как из-за присваивания от другой карты, выполнение является ошибочным.

Требования к реализации

Для каждого экземпляра Containers.Ordered_Maps и каждого экземпляра Containers.Bounded_Ordered_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