Справочник по Ada (Ada 2022)
A.4.2 Пакет Strings.Maps
Пакет Strings.Maps определяет типы, операции и другие сущности, необходимые для наборов символов и отображений символов друг в друга.
Статическая семантика
В пакете библиотеки Strings.Maps имеется следующее объявление:
package Ada.Strings.Maps
with Pure is
with Pure is
-- Представление набора значений символов:
type Character_Set is private
with Preelaborable_Initialization;
type Character_Set is private
with Preelaborable_Initialization;
Null_Set : constant Character_Set;
type Character_Range is
record
Low : Character;
High : Character;
end record;
-- Представляет диапазон символов Low..High
record
Low : Character;
High : Character;
end record;
-- Представляет диапазон символов Low..High
type Character_Ranges is array (Positive range <>) of Character_Range;
function To_Set (Ranges : in Character_Ranges)return Character_Set;
function To_Set (Span : in Character_Range)return Character_Set;
function To_Ranges (Set : in Character_Set) return Character_Ranges;
function "=" (Left, Right : in Character_Set) return Boolean;
function "not" (Right : in Character_Set) return Character_Set;
function "and" (Left, Right : in Character_Set) return Character_Set;
function "or" (Left, Right : in Character_Set) return Character_Set;
function "xor" (Left, Right : in Character_Set) return Character_Set;
function "-" (Left, Right : in Character_Set) return Character_Set;
function "and" (Left, Right : in Character_Set) return Character_Set;
function "or" (Left, Right : in Character_Set) return Character_Set;
function "xor" (Left, Right : in Character_Set) return Character_Set;
function "-" (Left, Right : in Character_Set) return Character_Set;
function Is_In (Element : in Character;
Set : in Character_Set)
return Boolean;
Set : in Character_Set)
return Boolean;
function Is_Subset (Elements : in Character_Set;
Set : in Character_Set)
return Boolean;
Set : in Character_Set)
return Boolean;
function "<=" (Left : in Character_Set;
Right : in Character_Set)
return Boolean renames Is_Subset;
Right : in Character_Set)
return Boolean renames Is_Subset;
-- Альтернативное представление набора значений символов:
subtype Character_Sequence is String;
subtype Character_Sequence is String;
function To_Set (Sequence : in Character_Sequence)return Character_Set;
function To_Set (Singleton : in Character) return Character_Set;
function To_Sequence (Set : in Character_Set) return Character_Sequence;
-- Представление отображения символа на символ:
type Character_Mapping is private
with Preelaborable_Initialization;
type Character_Mapping is private
with Preelaborable_Initialization;
function Value (Map : in Character_Mapping;
Element : in Character)
return Character;
Element : in Character)
return Character;
Identity : constant Character_Mapping;
function To_Mapping (From, To : in Character_Sequence)
return Character_Mapping;
return Character_Mapping;
function To_Domain (Map : in Character_Mapping)
return Character_Sequence;
function To_Range (Map : in Character_Mapping)
return Character_Sequence;
return Character_Sequence;
function To_Range (Map : in Character_Mapping)
return Character_Sequence;
type Character_Mapping_Function is
access function (From : in Character) return Character;
access function (From : in Character) return Character;
private
... -- не указано языком
end Ada.Strings.Maps;
... -- не указано языком
end Ada.Strings.Maps;
Объект типа Character_Set представляет набор символов.
Null_Set представляет набор, не содержащий символов.
Объект Obj типа Character_Range представляет набор символов в диапазоне Obj.Low .. Obj.High.
Объект Obj типа Character_Ranges представляет объединение наборов, соответствующих Obj(I) для I в Obj'Range.
function To_Set (Ranges : in Character_Ranges) return Character_Set;
Если Ranges'Length=0, то возвращается Null_Set; в противном случае возвращаемое значение представляет набор, соответствующий Ranges.
function To_Set (Span : in Character_Range) return Character_Set;
Возвращаемое значение представляет набор, содержащий каждый символ в Span.
function To_Ranges (Set : in Character_Set) return Character_Ranges;
Если Set = Null_Set, то возвращается пустой массив Character_Ranges; в противном случае возвращается кратчайший массив смежных диапазонов значений Character в Set, в порядке возрастания Low.
function "=" (Left, Right : in Character_Set) return Boolean;
Функция "=" возвращает True, если Left и Right представляют идентичные множества, и False в противном случае.
Каждая из логических операций "not", "and", "or" и "xor" возвращает значение Character_Set, которое представляет набор, полученный применением соответствующей операции к набору(аm) , представленным параметром(ами) оператора. "–"(Left, Right) эквивалентно "and"(Left, "not"(Right)).
function Is_In (Element : in Character;
Set : in Character_Set);
return Boolean;
Set : in Character_Set);
return Boolean;
Is_In возвращает True, если Element находится в Set, и False в противном случае.
function Is_Subset (Elements : in Character_Set;
Set : in Character_Set)
return Boolean;
Set : in Character_Set)
return Boolean;
Is_Subset возвращает True, если Elements является подмножеством Set, и False в противном случае.
subtype Character_Sequence is String;
Подтип Character_Sequence используется для отображения набора значений символов, а также для идентификации области определения и области значений отображения символов.
function To_Set (Sequence : in Character_Sequence) return Character_Set;
function To_Set (Singleton : in Character) return Character_Set;
function To_Set (Singleton : in Character) return Character_Set;
Sequence отображает набор значений символов, которые он явно содержит (игнорируя дубликаты). Singleton отображает набор, состоящий из одного символа. Каждая из функций To_Set возвращает значение Character_Set, которое представляет набор, отображенный Sequence или Singleton.
function To_Sequence (Set : in Character_Set) return Character_Sequence;
Функция To_Sequence возвращает значение Character_Sequence, содержащее каждый из символов в наборе, представленном Set, в порядке возрастания без дубликатов.
type Character_Mapping is private;
Объект типа Character_Mapping представляет отображение символа на символ.
function Value (Map : in Character_Mapping;
Element : in Character)
return Character;
Element : in Character)
return Character;
Функция Value возвращает значение Character, которому Element сопоставляется с точки зрения отображения, представленного Map.
Символ C соответствует символу шаблона P относительно заданного значения Character_Mapping Map, если Value(Map, C) = P. Строка S соответствует строке шаблона P относительно заданного Character_Mapping, если их длины одинаковы и каждый символ в S соответствует своему соответствующему символу в строке шаблона P.
Подпрограммы обработки строк, которые обрабатывают отображения символов, имеют параметры, тип которых Character_Mapping.
Identity : constant Character_Mapping;
Identity отображает каждый символ на себя.
function To_Mapping (From, To : in Character_Sequence)
return Character_Mapping;
return Character_Mapping;
To_Mapping создает Character_Mapping таким образом, что каждый элемент из From отображается на соответствующий элемент из To, а каждый другой символ отображается на себя. Если From'Length /= To'Length или какой-либо символ повторяется в From, то Translation_Error передается дальше.
function To_Domain (Map : in Character_Mapping) return Character_Sequence;
To_Domain возвращает кратчайшее значение Character_Sequence D такое, что каждый символ, не находящийся в D, отображается на себя, и символы в D находятся в порядке возрастания. Нижняя граница D равна 1.
function To_Range (Map : in Character_Mapping) return Character_Sequence;
To_Range возвращает значение Character_Sequence R, такое что, если D = To_Domain(Map), то R имеет те же границы, что и D, и D(I) отображается на R(I) для каждого I в D'Range.
ПРИМЕЧАНИЕ 1 Character_Mapping и Character_Mapping_Function используются как для отображений эквивалентности символов в подпрограммах поиска (например, для отсутствия учета регистра), так и в качестве трансформационных отображений в подпрограммах Translate.
ПРИМЕЧАНИЕ 2 To_Domain(Identity) и To_Range(Identity) возвращают пустую строку.
Примеры
Пример использования Strings.Maps.To_Mapping:
To_Mapping("ABCD", "ZZAB") возвращает Character_Mapping, который отображает 'A' и 'B' на 'Z', 'C' на 'A', 'D' на 'B', а каждый другой символ на себя.