Справочное руководство по Ada 95
A.4.2 Пакет Strings.Maps
Пакет Strings.Maps определяет типы, операции и другие сущности, необходимые для наборов символов и отображения символов друг на друга.
Статическая семантика
Пакет библиотеки Strings.Maps имеет следующее объявление:
package Ada.Strings.Maps is
pragma Preelaborate(Maps);
pragma Preelaborate(Maps);
-- Представление набора значений символов:
type Character_Set is private;
type Character_Set is private;
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;
type Character_Mapping is private;
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, которое представляет набор, полученный применением соответствующей операции к набору(ам), представленному(ым) параметром(ами) оператора. "-" (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.
ПРИМЕЧАНИЯ
7 Character_Mapping и Character_Mapping_Function используются как для отображений эквивалентности символов в подпрограммах поиска (например, для отсутствия учета регистра), так и для трансформационных отображений в подпрограммах Translate.
8 To_Domain(Identity) и To_Range(Identity) каждое возвращает пустую строку.
Примеры
To_Mapping("ABCD", "ZZAB") возвращает Character_Mapping, который отображает 'A' и 'B' на 'Z', 'C' на 'A', 'D' на 'B', и каждый другой символ на себя.