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

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, за исключением:
  • Предикат pragma Preelaborate заменяется на pragma Pure.
  • Тип List объявляется со дискриминантом, который определяет емкость (максимальное количество элементов) следующим образом:
type List (Capacity : Count_Type) is tagged private;
  • Тип List требует финализации тогда и только тогда, когда тип Element_Type требует финализации.
  • Выделение внутренней памяти включает проверку, что емкость не превышена, и при этом, если проверка завершается неудачно, возбуждается Capacity_Error.
  • В процедуре Assign, если длина Source больше емкости Target, то Capacity_Error распространяется.
  • Функция Copy заменяется на:
function Copy (Source : List; Capacity : Count_Type := 0)
return List;
Если Capacity равно 0, то емкость списка равна длине Source; если Capacity равно или больше длины Source, то емкость списка равна значению параметра Capacity; в противном случае операция распространяет Capacity_Error.
  • В процедуре Splice с тремя параметрами, у которой Source имеет тип List, если сумма длины Target и длины Source больше емкости Target, то Splice распространяет Capacity_Error.
  • В процедуре Splice с четырьмя параметрами, если длина Target равна емкости Target, то Splice распространяет 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