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

A.18.19 Общий пакет Containers.Bounded_Vectors

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

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

Объявление общего библиотечного пакета Containers.Bounded_Vectors имеет то же содержимое и семантику, что и Containers.Vectors, за исключением:
  • Аспект Preelaborate заменяется аспектом Pure. Аспект Global удаляется.
  • Тип Vector объявляется с дискриминантом, определяющим емкость:
type Vector (Capacity : Count_Type) is tagged private...
  • Определение aspect_definition для Preelaborable_Initialization для типа Vector изменено на:
Preelaborable_Initialization =>
Element_Type'Preelaborable_Initialization
  • Тип Vector нуждается в завершении, если и только если тип Element_Type нуждается в завершении.
  • Емкость (Capacity) опущена из Stable_Properties типа Vector.
  • В функции Empty пост условие изменено на:
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;
  • В функции Copy пост условие изменено на:
Post => Length (Copy'Result) = Length (Source) and then
(if Capacity > Length (Source) then
Copy'Result.Capacity = Capacity
else Copy'Result.Capacity >= Length (Source));
  • Описание Reserve_Capacity заменено на:
procedure Reserve_Capacity (Container : in out Vector;
Capacity : in Count_Type)
with Pre => Capacity <= Container.Capacity
or else raise Capacity_Error;
Эта операция не оказывает никакого влияния, кроме проверки предословия.
  • Часть пост условия, проверяющая емкость, опущена из подпрограмм Set_Length, Assign, Insert, Insert_Space, Prepend, Append и Delete.
  • Для процедур Insert, Insert_Space, Prepend и Append часть предословия, гласящая:
(<некоторое значение> <= Maximum_Length - <некоторое другое значение>
or else raise Constraint_Error)
заменяется на:
(<некоторое значение> <= Maximum_Length - <некоторое другое значение>
or else raise Constraint_Error) and then
(<некоторое значение> <= Container.Capacity - <некоторое другое значение>
or else raise Capacity_Error)

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

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

Ошибочное выполнение

При завершении объекта ограниченного вектора V, если вмешательство в курсоры запрещено для V, за исключением присваивания из другого вектора, то выполнение является ошибочным.

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

Для каждой экземпляра Containers.Vectors и каждой экземпляра Containers.Bounded_Vectors, если два экземпляра удовлетворяют следующим условиям, то выходные данные, генерируемые подпрограммами Vector'Output или Vector'Write любого экземпляра, должны быть читаемы подпрограммами Vector'Input или Vector'Read другого экземпляра соответственно:
  • параметры Element_Type двух экземпляров являются статически соответствующими подтипами одного и того же типа; и
  • выходные данные, генерируемые Element_Type'Output или Element_Type'Write, должны быть читаемы Element_Type'Input или Element_Type'Read соответственно (где Element_Type обозначает тип двух фактических параметров Element_Type); и
  • вышеупомянутые два условия также должны выполняться для параметров Index_Type экземпляров.

Рекомендации по реализации

Объекты ограниченных векторов должны быть реализованы без неявных указателей или динамического выделения.
Рекомендации по реализации процедуры Move для минимизации копирования не применяются.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API