Spec-Zone.ru › Ada 2012
Справочник Ada 2012

A.18.25 Универсальный пакет Containers.Bounded_Multiway_Trees

Определяемый языком универсальный пакет Containers.Bounded_Multiway_Trees предоставляет закрытый тип Tree и набор операций. Он предоставляет те же операции, что и пакет Containers.Multiway_Trees (см. A.18.10), с той разницей, что максимальный объём хранилища ограничен.

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

Декларация универсального библиотечного пакета Containers.Bounded_Multiway_Trees содержит те же содержимое и семантику, что и Containers.Multiway_Trees, за исключением:
  • Директива pragma Preelaborate заменяется на pragma Pure.
  • Тип Tree объявляется с дискриминантом, который определяет ёмкость (максимальное количество элементов) следующим образом:
type Tree (Capacity : Count_Type) is tagged private;
  • Тип Tree требует финализации тогда и только тогда, когда тип Element_Type требует финализации.
  • Выделение внутренней памяти включает проверку на превышение ёмкости, и Capacity_Error поднимается, если эта проверка терпит неудачу.
  • В процедуре Assign, если длина Source больше, чем ёмкость Target, то Capacity_Error распространяется.
  • Функция Copy объявлена следующим образом:
function Copy (Source : Tree; Capacity : Count_Type := 0)
return Tree;
Если Capacity равно 0, то ёмкость дерева равна количеству Source; если Capacity равно или больше Source.Count, ёмкость дерева равна значению параметра Capacity; в противном случае, операция распространяет Capacity_Error.
  • В пятипараметрической процедуре Splice_Subtree, если Source не тот же объект, что и Target, и если сумма Target.Count и Subtree_Node_Count (Position) больше Target.Capacity, то Splice_Subtree распространяет Capacity_Error.
  • В пятипараметрической процедуре Splice_Children, если Source не тот же объект, что и Target, и если сумма Target.Count и Subtree_Node_Count (Source_Parent)-1 больше Target.Capacity, то Splice_Children распространяет Capacity_Error.

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

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

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

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

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

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