A.4.7 Wide_String Handling
Facilities for handling strings of Wide_Character
elements are found in the packages Strings.Wide_Maps, Strings.Wide_Fixed,
Strings.Wide_Bounded, Strings.Wide_Unbounded, and Strings.Wide_Maps.Wide_Constants,
and in the library functions Strings.Wide_Hash, Strings.Wide_Fixed.Wide_Hash,
Strings.Wide_Bounded.Wide_Hash, Strings.Wide_Unbounded.Wide_Hash, Strings.Wide_Hash_Case_Insensitive,
Strings.Wide_Fixed.Wide_Hash_Case_Insensitive, Strings.Wide_Bounded.Wide_Hash_Case_Insensitive,
Strings.Wide_Unbounded.Wide_Hash_Case_Insensitive, Strings.Wide_Equal_Case_Insensitive,
Strings.Wide_Fixed.Wide_Equal_Case_Insensitive, Strings.Wide_Bounded.Wide_Equal_Case_Insensitive,
and Strings.Wide_Unbounded.Wide_Equal_Case_Insensitive. They provide
the same string-handling operations as the corresponding packages and
functions for strings of Character elements.
Static Semantics
The package Strings.Wide_Maps has the following declaration.
package Ada.Strings.Wide_Maps
with Preelaborate, Nonblocking, Global =>
in out synchronized is
--
Representation for a set of Wide_Character values:
type Wide_Character_Set
is private
with Preelaborable_Initialization;
Null_Set :
constant Wide_Character_Set;
type Wide_Character_Range
is
record
Low : Wide_Character;
High : Wide_Character;
end record;
--
Represents Wide_Character range Low..High
type Wide_Character_Ranges
is array (Positive
range <>)
of Wide_Character_Range;
function To_Set (Ranges :
in Wide_Character_Ranges)
return Wide_Character_Set;
function To_Set (Span :
in Wide_Character_Range)
return Wide_Character_Set;
function To_Ranges (Set :
in Wide_Character_Set)
return Wide_Character_Ranges;
function "=" (Left, Right : in Wide_Character_Set) return Boolean;
function "not" (Right : in Wide_Character_Set)
return Wide_Character_Set;
function "and" (Left, Right : in Wide_Character_Set)
return Wide_Character_Set;
function "or" (Left, Right : in Wide_Character_Set)
return Wide_Character_Set;
function "xor" (Left, Right : in Wide_Character_Set)
return Wide_Character_Set;
function "-" (Left, Right : in Wide_Character_Set)
return Wide_Character_Set;
function Is_In (Element :
in Wide_Character;
Set :
in Wide_Character_Set)
return Boolean;
function Is_Subset (Elements :
in Wide_Character_Set;
Set :
in Wide_Character_Set)
return Boolean;
function "<=" (Left : in Wide_Character_Set;
Right : in Wide_Character_Set)
return Boolean renames Is_Subset;
--
Alternative representation for a set of Wide_Character values:
subtype Wide_Character_Sequence
is Wide_String;
function To_Set (Sequence :
in Wide_Character_Sequence)
return Wide_Character_Set;
function To_Set (Singleton :
in Wide_Character)
return Wide_Character_Set;
function To_Sequence (Set :
in Wide_Character_Set)
return Wide_Character_Sequence;
--
Representation for a Wide_Character to Wide_Character mapping:
type Wide_Character_Mapping
is private
with Preelaborable_Initialization;
function Value (Map :
in Wide_Character_Mapping;
Element :
in Wide_Character)
return Wide_Character;
Identity :
constant Wide_Character_Mapping;
function To_Mapping (From, To :
in Wide_Character_Sequence)
return Wide_Character_Mapping;
function To_Domain (Map :
in Wide_Character_Mapping)
return Wide_Character_Sequence;
function To_Range (Map :
in Wide_Character_Mapping)
return Wide_Character_Sequence;
type Wide_Character_Mapping_Function
is
access function (From :
in Wide_Character)
return Wide_Character;
private
... -- not specified by the language
end Ada.Strings.Wide_Maps;
The context clause for each of the packages Strings.Wide_Fixed,
Strings.Wide_Bounded, and Strings.Wide_Unbounded identifies Strings.Wide_Maps
instead of Strings.Maps.
Types Wide_Character_Set and Wide_Character_Mapping
need finalization.
For each of the packages
Strings.Fixed, Strings.Bounded, Strings.Unbounded, and Strings.Maps.Constants,
and for library functions Strings.Hash, Strings.Fixed.Hash, Strings.Bounded.Hash,
Strings.Unbounded.Hash, Strings.Hash_Case_Insensitive, Strings.Fixed.Hash_Case_Insensitive,
Strings.Bounded.Hash_Case_Insensitive, Strings.Unbounded.Hash_Case_Insensitive,
Strings.Equal_Case_Insensitive, Strings.Fixed.Equal_Case_Insensitive,
Strings.Bounded.Equal_Case_Insensitive, and Strings.Unbounded.Equal_Case_Insensitive,
the corresponding wide string package or function has the same contents
except that
Wide_Space replaces Space
Wide_Character replaces Character
Wide_String replaces String
Wide_Character_Set replaces Character_Set
Wide_Character_Mapping replaces Character_Mapping
Wide_Character_Mapping_Function replaces Character_Mapping_Function
Wide_Maps replaces Maps
Bounded_Wide_String replaces Bounded_String
Null_Bounded_Wide_String replaces Null_Bounded_String
To_Bounded_Wide_String replaces To_Bounded_String
To_Wide_String replaces To_String
Set_Bounded_Wide_String replaces Set_Bounded_String
Unbounded_Wide_String replaces Unbounded_String
Null_Unbounded_Wide_String replaces Null_Unbounded_String
Wide_String_Access replaces String_Access
To_Unbounded_Wide_String replaces To_Unbounded_String
Set_Unbounded_Wide_String replaces Set_Unbounded_String
The following additional
declaration is present in Strings.Wide_Maps.Wide_Constants:
Character_Set :
constant Wide_Maps.Wide_Character_Set;
--
Contains each Wide_Character value WC such that
--
Characters.Conversions.Is_Character(WC) is True
Each Wide_Character_Set constant in the package
Strings.Wide_Maps.Wide_Constants contains no values outside the Character
portion of Wide_Character. Similarly, each Wide_Character_Mapping constant
in this package is the identity mapping when applied to any element outside
the Character portion of Wide_Character.
Aspect Pure is replaced by aspects Preelaborate,
Nonblocking, Global => in out synchronized in Strings.Wide_Maps.Wide_Constants.
NOTE If a null Wide_Character_Mapping_Function
is passed to any of the Wide_String handling subprograms, Constraint_Error
is propagated.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe