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

A.4.5 Обработка строк неограниченной длины

В пакет Strings.Unbounded, определенный языком, предоставляется частный тип Unbounded_String и набор операций. Объект типа Unbounded_String представляет строку, нижняя граница которой — 1, а длина может концептуально изменяться от 0 до Natural'Last. Подпрограммы для обработки строк фиксированной длины либо перегружены непосредственно для Unbounded_String, либо изменены в соответствии с необходимостью, чтобы отразить гибкость длины. Поскольку тип Unbounded_String является частным, предоставляются соответствующие операции конструктора и селектора.

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

В библиотечном пакете Strings.Unbounded содержится следующее объявление:
with Ada.Strings.Maps;
package Ada.Strings.Unbounded
with Preelaborate, Nonblocking, Global => in out synchronized is
type Unbounded_String is private
with Preelaborable_Initialization;
Null_Unbounded_String : constant Unbounded_String;
function Length (Source : in Unbounded_String) return Natural;
type String_Access is access all String;
procedure Free (X : in out String_Access);
-- Преобразование, конкатенация и функции выбора
function To_Unbounded_String (Source : in String)
return Unbounded_String;
function To_Unbounded_String (Length : in Natural)
return Unbounded_String;
function To_String (Source : in Unbounded_String) return String;
procedure Set_Unbounded_String
(Target : out Unbounded_String;
Source : in String);
procedure Append (Source : in out Unbounded_String;
New_Item : in Unbounded_String);
procedure Append (Source : in out Unbounded_String;
New_Item : in String);
procedure Append (Source : in out Unbounded_String;
New_Item : in Character);
function "&" (Left, Right : in Unbounded_String)
return Unbounded_String;
function "&" (Left : in Unbounded_String; Right : in String)
return Unbounded_String;
function "&" (Left : in String; Right : in Unbounded_String)
return Unbounded_String;
function "&" (Left : in Unbounded_String; Right : in Character)
return Unbounded_String;
function "&" (Left : in Character; Right : in Unbounded_String)
return Unbounded_String;
function Element (Source : in Unbounded_String;
Index : in Positive)
return Character;
procedure Replace_Element (Source : in out Unbounded_String;
Index : in Positive;
By : in Character);
function Slice (Source : in Unbounded_String;
Low : in Positive;
High : in Natural)
return String;
function Unbounded_Slice
(Source : in Unbounded_String;
Low : in Positive;
High : in Natural)
return Unbounded_String;
procedure Unbounded_Slice
(Source : in Unbounded_String;
Target : out Unbounded_String;
Low : in Positive;
High : in Natural);
function "=" (Left, Right : in Unbounded_String) return Boolean;
function "=" (Left : in Unbounded_String; Right : in String)
return Boolean;
function "=" (Left : in String; Right : in Unbounded_String)
return Boolean;
function "<" (Left, Right : in Unbounded_String) return Boolean;
function "<" (Left : in Unbounded_String; Right : in String)
return Boolean;
function "<" (Left : in String; Right : in Unbounded_String)
return Boolean;
function "<=" (Left, Right : in Unbounded_String) return Boolean;
function "<=" (Left : in Unbounded_String; Right : in String)
return Boolean;
function "<=" (Left : in String; Right : in Unbounded_String)
return Boolean;
function ">" (Left, Right : in Unbounded_String) return Boolean;
function ">" (Left : in Unbounded_String; Right : in String)
return Boolean;
function ">" (Left : in String; Right : in Unbounded_String)
return Boolean;
function ">=" (Left, Right : in Unbounded_String) return Boolean;
function ">=" (Left : in Unbounded_String; Right : in String)
return Boolean;
function ">=" (Left : in String; Right : in Unbounded_String)
return Boolean;
-- Подпрограммы поиска
function Index (Source : in Unbounded_String;
Pattern : in String;
From : in Positive;
Going : in Direction := Forward;
Mapping : in Maps.Character_Mapping := Maps.Identity)
return Natural;
function Index (Source : in Unbounded_String;
Pattern : in String;
From : in Positive;
Going : in Direction := Forward;
Mapping : in Maps.Character_Mapping_Function)
return Natural;
function Index (Source : in Unbounded_String;
Pattern : in String;
Going : in Direction := Forward;
Mapping : in Maps.Character_Mapping
:= Maps.Identity)
return Natural;
function Index (Source : in Unbounded_String;
Pattern : in String;
Going : in Direction := Forward;
Mapping : in Maps.Character_Mapping_Function)
return Natural;
function Index (Source : in Unbounded_String;
Set : in Maps.Character_Set;
From : in Positive;
Test : in Membership := Inside;
Going : in Direction := Forward)
return Natural;
function Index (Source : in Unbounded_String;
Set : in Maps.Character_Set;
Test : in Membership := Inside;
Going : in Direction := Forward) return Natural;
function Index_Non_Blank (Source : in Unbounded_String;
From : in Positive;
Going : in Direction := Forward)
return Natural;
function Index_Non_Blank (Source : in Unbounded_String;
Going : in Direction := Forward)
return Natural;
function Count (Source : in Unbounded_String;
Pattern : in String;
Mapping : in Maps.Character_Mapping
:= Maps.Identity)
return Natural;
function Count (Source : in Unbounded_String;
Pattern : in String;
Mapping : in Maps.Character_Mapping_Function)
return Natural;
function Count (Source : in Unbounded_String;
Set : in Maps.Character_Set)
return Natural;
procedure Find_Token (Source : in Unbounded_String;
Set : in Maps.Character_Set;
From : in Positive;
Test : in Membership;
First : out Positive;
Last : out Natural);
procedure Find_Token (Source : in Unbounded_String;
Set : in Maps.Character_Set;
Test : in Membership;
First : out Positive;
Last : out Natural);
-- Подпрограммы перевода строк
function Translate (Source : in Unbounded_String;
Mapping : in Maps.Character_Mapping)
return Unbounded_String;
procedure Translate (Source : in out Unbounded_String;
Mapping : in Maps.Character_Mapping);
function Translate (Source : in Unbounded_String;
Mapping : in Maps.Character_Mapping_Function)
return Unbounded_String;
procedure Translate (Source : in out Unbounded_String;
Mapping : in Maps.Character_Mapping_Function);
-- Подпрограммы преобразования строк
function Replace_Slice (Source : in Unbounded_String;
Low : in Positive;
High : in Natural;
By : in String)
return Unbounded_String;
procedure Replace_Slice (Source : in out Unbounded_String;
Low : in Positive;
High : in Natural;
By : in String);
function Insert (Source : in Unbounded_String;
Before : in Positive;
New_Item : in String)
return Unbounded_String;
procedure Insert (Source : in out Unbounded_String;
Before : in Positive;
New_Item : in String);
function Overwrite (Source : in Unbounded_String;
Position : in Positive;
New_Item : in String)
return Unbounded_String;
procedure Overwrite (Source : in out Unbounded_String;
Position : in Positive;
New_Item : in String);
function Delete (Source : in Unbounded_String;
From : in Positive;
Through : in Natural)
return Unbounded_String;
procedure Delete (Source : in out Unbounded_String;
From : in Positive;
Through : in Natural);
функция Trim (Source : вход Unbounded_String;
Side : вход Trim_End)
возвращает Unbounded_String;
процедура Trim (Source : вход выход Unbounded_String;
Side : вход Trim_End);
функция Trim (Source : вход Unbounded_String;
Left : вход Maps.Character_Set;
Right : вход Maps.Character_Set)
возвращает Unbounded_String;
процедура Trim (Source : вход выход Unbounded_String;
Left : вход Maps.Character_Set;
Right : вход Maps.Character_Set);
функция Head (Source : вход Unbounded_String;
Count : вход Natural;
Pad : вход Character := Space)
возвращает Unbounded_String;
процедура Head (Source : вход выход Unbounded_String;
Count : вход Natural;
Pad : вход Character := Space);
функция Tail (Source : вход Unbounded_String;
Count : вход Natural;
Pad : вход Character := Space)
возвращает Unbounded_String;
процедура Tail (Source : вход выход Unbounded_String;
Count : вход Natural;
Pad : вход Character := Space);
функция "*" (Left : вход Natural;
Right : вход Character)
возвращает Unbounded_String;
функция "*" (Left : вход Natural;
Right : вход String)
возвращает Unbounded_String;
функция "*" (Left : вход Natural;
Right : вход Unbounded_String)
возвращает Unbounded_String;
private
... -- не указано языком
end Ada.Strings.Unbounded;
Тип Unbounded_String требует завершения (см. 7.6).
Null_Unbounded_String представляет пустую строку. Если объект типа Unbounded_String не инициализирован иначе, он будет инициализирован тем же значением, что и Null_Unbounded_String.
Функция Length возвращает длину строки, представленной Source.
Тип String_Access предоставляет (неприватный) тип доступа для явного обработки строк неограниченной длины. Процедура Free выполняет неконтролируемое освобождение объекта типа String_Access.
Функция To_Unbounded_String(Source : in String) возвращает Unbounded_String, представляющий Source. Функция To_Unbounded_String(Length : in Natural) возвращает Unbounded_String, представляющий неинициализированную строку, длина которой равна Length.
Функция To_String возвращает строку с нижней границей 1, представленную Source. To_String и To_Unbounded_String связаны следующим образом:
  • Если S - строка, то To_String(To_Unbounded_String(S)) = S.
  • Если U - Unbounded_String, то To_Unbounded_String(To_String(U)) = U.
Процедура Set_Unbounded_String устанавливает Target в Unbounded_String, представляющий Source.
Для каждой из процедур Append результирующая строка, представленная параметром Source, задаётся конкатенацией исходного значения Source и значения New_Item.
Каждая из функций "&" возвращает Unbounded_String, полученный путём конкатенации строки или символа, заданного или представленного одним из параметров, со строкой или символом, заданным или представленным другим параметром, и применением To_Unbounded_String к результирующей строке конкатенации.
Подпрограммы Element, Replace_Element и Slice имеют тот же эффект, что и соответствующие подпрограммы строк ограниченной длины.
Функция Unbounded_Slice возвращает срез в позициях от Low до High в строке, представленной Source, как Unbounded_String. Процедура Unbounded_Slice устанавливает Target в Unbounded_String, представляющий срез в позициях от Low до High в строке, представленной Source. Обе подпрограммы распространяют Index_Error, если Low > Length(Source)+1 или High > Length(Source).
Каждая из функций "=", "<", ">", "<=", и ">=" возвращает тот же результат, что и соответствующая операция со строками, применённая к строковым значениям, заданным или представленным Left и Right.
Каждая из подпрограмм поиска (Index, Index_Non_Blank, Count, Find_Token) имеет тот же эффект, что и соответствующая подпрограмма в Strings.Fixed, применённая к строке, представленной параметром Unbounded_String.
Функция Translate имеет аналогичный эффект, как и соответствующая подпрограмма в Strings.Fixed. Перевод применяется к строке, представленной параметром Unbounded_String, и результат преобразуется (через To_Unbounded_String) в Unbounded_String.
Каждая из функций преобразования (Replace_Slice, Insert, Overwrite, Delete), селекторных функций (Trim, Head, Tail) и конструкторных функций ("*") аналогична соответствующей подпрограмме в Strings.Fixed. Для каждой из подпрограмм соответствующая подпрограмма строк фиксированной длины применяется к строке, представленной параметром Unbounded_String, а To_Unbounded_String применяется к результирующей строке.
Для каждой из процедур Translate, Replace_Slice, Insert, Overwrite, Delete, Trim, Head и Tail, результирующая строка, представленная параметром Source, задаётся соответствующей функцией для строк фиксированной длины, применённой к строке, представленной исходным значением Source.
Любой объём памяти, связанный с объектом Unbounded_String, не должен теряться при присваивании или выходе из области видимости.


Spec-Zone.ru

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