Справочник 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, за исключением:
- Тип 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;
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 по минимизации копирования не применяются.