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

A.18.20 Обобщенный пакет Containers.Bounded_Doubly_Linked_Lists

Определяемый языком обобщенный пакет Containers.Bounded_Doubly_Linked_Lists предоставляет закрытый тип List и набор операций. Он предоставляет те же операции, что и пакет Containers.Doubly_Linked_Lists (см. A.18.3), с той разницей, что максимальный объем памяти ограничен.

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

Декларация обобщенного библиотечного пакета Containers.Bounded_Doubly_Linked_Lists имеет то же содержимое и семантику, что и Containers.Doubly_Linked_Lists, за исключением:
  • Аспект Preelaborate заменяется аспектом Pure. Аспект Global удаляется.
  • Тип List объявляется с дискриминантом, который указывает емкость (максимальное количество элементов) следующим образом:
type List (Capacity : Count_Type) is tagged private...
  • Определение aspect_definition для Preelaborable_Initialization для типа List изменяется на:
Preelaborable_Initialization =>
Element_Type'Preelaborable_Initialization
  • Тип List требует завершения, если и только если тип Element_Type требует завершения.
  • Функция Empty заменяется на:
function Empty (Capacity : Count_Type := определяется реализацией)
return List
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, Prepend, Append, Merge и трехпараметрической Splice, где параметр Source имеет тип List, часть условия предусловия, гласящая:
(<некоторая длина> <= 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 : List; Capacity : Count_Type := 0)
return List
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.
  • Этот абзац был удален.
  • В четырехпараметрической процедуре Splice условие предусловия изменяется на:
Pre => (not Tampering_With_Cursors_Prohibited (Target)
or else raise Program_Error) and then
(not Tampering_With_Cursors_Prohibited (Source)
or else raise Program_Error) and then
(Position /= No_Element
or else raise Constraint_Error) and then
(Has_Element (Source, Position)
or else raise Program_Error) and then
(Before = No_Element or else Has_Element (Target, Before)
or else raise Program_Error) and then
(Target'Has_Same_Storage (Source) or else
Length (Target) /= Count_Type'Last
or else raise Constraint_Error) and then
(Target'Has_Same_Storage (Source) or else
Length (Target) /= Target.Capacity
or else raise Capacity_Error),

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

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

Ошибка выполнения

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

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

Для каждого экземпляра Containers.Doubly_Linked_Lists и каждого экземпляра Containers.Bounded_Doubly_Linked_Lists, если два экземпляра удовлетворяют следующим условиям, то выходные данные, генерируемые подпрограммами List'Output или List'Write любого экземпляра, должны быть читаемыми подпрограммами List'Input или List'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