Справочник Ada 2012
A.18.24 Обобщённый пакет Containers.Bounded_Ordered_Sets
Определяемый языком обобщённый пакет Containers.Bounded_Ordered_Sets предоставляет приватный тип Set и набор операций. Он предоставляет те же операции, что и пакет Containers.Ordered_Sets (см. A.18.9), с разницей, что максимальный объём памяти ограничен.
Статическая семантика
Декларация обобщённого библиотечного пакета Containers.Bounded_Ordered_Sets имеет то же содержимое и семантику, что и Containers.Ordered_Sets за исключением:
- Тип Set объявлен с дискриминантом, определяющим ёмкость (максимальное количество элементов) следующим образом:
type Set (Capacity : Count_Type) is tagged private;
- Тип Set нуждается в завершении, если и только если тип Element_Type нуждается в завершении.
- Если Insert (или Include) добавляет элемент, выполняется проверка, не превышена ли ёмкость, и если проверка терпит неудачу, возникает ошибка Capacity_Error.
- В процедуре Assign, если длина Source больше, чем ёмкость Target, то ошибка Capacity_Error передаётся.
- Функция Copy заменена на:
function Copy (Source : Set;
Capacity : Count_Type := 0) return Set;
Capacity : Count_Type := 0) return Set;
Возвращает множество, элементы которого инициализированы значениями из Source. Если Capacity равно 0, то ёмкость множества равна длине Source; если Capacity равно или больше длины Source, то ёмкость множества равна заданному значению; в противном случае выполняется распространение ошибки Capacity_Error.
Ограниченные (временные) ошибки
Ошибка присваивания из объекта ограниченного множества, когда запрещено изменение элементов или курсоров этого объекта, является ограниченной ошибкой. Либо возникает ошибка Program_Error, либо выполнение продолжается с объектом-получателем, запрещающим изменение элементов или курсоров, либо выполнение продолжается нормально.
Ошибочное выполнение
Когда объект ограниченного множества S завершает свою работу, если вмешательство в курсоры запрещено для S иначе, чем из-за присваивания от другого множества, то выполнение является ошибочным.
Требования к реализации
Для каждого экземпляра Containers.Ordered_Sets и каждого экземпляра Containers.Bounded_Ordered_Sets, если два экземпляра удовлетворяют следующим условиям, то вывод, генерируемый подпрограммами Set'Output или Set'Write любого экземпляра, должен быть читаем подпрограммами Set'Input или Set'Read соответственно другого экземпляра:
- параметры Element_Type двух экземпляров являются статически соответствующими подтипами одного и того же типа; и
- вывод, генерируемый Element_Type'Output или Element_Type'Write, должен быть читаем Element_Type'Input или Element_Type'Read соответственно (где Element_Type обозначает тип двух фактических параметров Element_Type).
Рекомендации по реализации
Объекты ограниченных упорядоченных множеств должны реализовываться без неявных указателей или динамического выделения.
Рекомендация по реализации процедуры Move для минимизации копирования не применяется.