A.4.8 Wide_Wide_String Handling
{
AI95-00285-01}
{
AI95-00395-01}
{
AI05-0286-1}
Facilities for handling strings of Wide_Wide_Character
elements are found in the packages Strings.Wide_Wide_Maps, Strings.Wide_Wide_Fixed,
Strings.Wide_Wide_Bounded, Strings.Wide_Wide_Unbounded, and Strings.Wide_Wide_Maps.Wide_Wide_Constants,
and in the library functions
Strings.Wide_Wide_Hash, Strings.Wide_Wide_Fixed.Wide_Wide_Hash, Strings.Wide_Wide_Bounded.Wide_Wide_Hash, and Strings.Wide_Wide_Unbounded.Wide_Wide_Hash,
Strings.Wide_Wide_Hash_Case_Insensitive, Strings.Wide_Wide_Fixed.Wide_Wide_Hash_Case_Insensitive,
Strings.Wide_Wide_Bounded.Wide_Wide_Hash_Case_Insensitive, Strings.Wide_Wide_Unbounded.Wide_Wide_Hash_Case_Insensitive,
Strings.Wide_Wide_Equal_Case_Insensitive, Strings.Wide_Wide_Fixed.Wide_Wide_Equal_Case_Insensitive,
Strings.Wide_Wide_Bounded.Wide_Wide_Equal_Case_Insensitive, and Strings.Wide_Wide_Unbounded.Wide_Wide_Equal_Case_Insensitive.
They provide the same string-handling operations as the corresponding
packages and functions for strings of Character elements.
Static Semantics
{
AI95-00285-01}
The library package Strings.Wide_Wide_Maps has
the following declaration.
package Ada.Strings.Wide_Wide_Maps is
pragma Preelaborate(Wide_Wide_Maps);
-- Representation for a set of Wide_Wide_Character values:
type Wide_Wide_Character_Set is private;
pragma Preelaborable_Initialization(Wide_Wide_Character_Set);
Null_Set : constant Wide_Wide_Character_Set;
type Wide_Wide_Character_Range is
record
Low : Wide_Wide_Character;
High : Wide_Wide_Character;
end record;
-- Represents Wide_Wide_Character range Low..High
type Wide_Wide_Character_Ranges is array (Positive range <>)
of Wide_Wide_Character_Range;
function To_Set (Ranges : in Wide_Wide_Character_Ranges)
return Wide_Wide_Character_Set;
function To_Set (Span : in Wide_Wide_Character_Range)
return Wide_Wide_Character_Set;
function To_Ranges (Set : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Ranges;
function "=" (Left, Right : in Wide_Wide_Character_Set) return Boolean;
function "not" (Right : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Set;
function "and" (Left, Right : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Set;
function "or" (Left, Right : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Set;
function "xor" (Left, Right : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Set;
function "-" (Left, Right : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Set;
function Is_In (Element : in Wide_Wide_Character;
Set : in Wide_Wide_Character_Set)
return Boolean;
function Is_Subset (Elements : in Wide_Wide_Character_Set;
Set : in Wide_Wide_Character_Set)
return Boolean;
function "<=" (Left : in Wide_Wide_Character_Set;
Right : in Wide_Wide_Character_Set)
return Boolean renames Is_Subset;
-- Alternative representation for a set of Wide_Wide_Character values:
subtype Wide_Wide_Character_Sequence is Wide_Wide_String;
function To_Set (Sequence : in Wide_Wide_Character_Sequence)
return Wide_Wide_Character_Set;
function To_Set (Singleton : in Wide_Wide_Character)
return Wide_Wide_Character_Set;
function To_Sequence (Set : in Wide_Wide_Character_Set)
return Wide_Wide_Character_Sequence;
-- Representation for a Wide_Wide_Character to Wide_Wide_Character
-- mapping:
type Wide_Wide_Character_Mapping is private;
pragma Preelaborable_Initialization(Wide_Wide_Character_Mapping);
function Value (Map : in Wide_Wide_Character_Mapping;
Element : in Wide_Wide_Character)
return Wide_Wide_Character;
Identity : constant Wide_Wide_Character_Mapping;
function To_Mapping (From, To : in Wide_Wide_Character_Sequence)
return Wide_Wide_Character_Mapping;
function To_Domain (Map : in Wide_Wide_Character_Mapping)
return Wide_Wide_Character_Sequence;
function To_Range (Map : in Wide_Wide_Character_Mapping)
return Wide_Wide_Character_Sequence;
type Wide_Wide_Character_Mapping_Function is
access function (From : in Wide_Wide_Character)
return Wide_Wide_Character;
private
... -- not specified by the language
end Ada.Strings.Wide_Wide_Maps;
{
AI95-00285-01}
The context clause for each
of the packages Strings.Wide_Wide_Fixed, Strings.Wide_Wide_Bounded, and
Strings.Wide_Wide_Unbounded identifies Strings.Wide_Wide_Maps instead
of Strings.Maps.
{
AI05-0223-1}
Types Wide_Wide_Character_Set and Wide_Wide_Character_Mapping
need finalization.
{
AI95-00285-01}
{
AI05-0286-1}
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, and
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 wide string package or function has the same contents
except that
Wide_Wide_Space replaces
Space
Wide_Wide_Character replaces
Character
Wide_Wide_String replaces
String
Wide_Wide_Character_Set replaces
Character_Set
Wide_Wide_Character_Mapping
replaces Character_Mapping
Wide_Wide_Character_Mapping_Function
replaces Character_Mapping_Function
Wide_Wide_Maps replaces Maps
Bounded_Wide_Wide_String
replaces Bounded_String
Null_Bounded_Wide_Wide_String
replaces Null_Bounded_String
To_Bounded_Wide_Wide_String
replaces To_Bounded_String
To_Wide_Wide_String replaces
To_String
{
AI95-00301-01}
Set_Bounded_Wide_Wide_String replaces Set_Bounded_String
Unbounded_Wide_Wide_String
replaces Unbounded_String
Null_Unbounded_Wide_Wide_String
replaces Null_Unbounded_String
Wide_Wide_String_Access replaces
String_Access
To_Unbounded_Wide_Wide_String
replaces To_Unbounded_String
{
AI95-00301-01}
Set_Unbounded_Wide_Wide_String replaces Set_Unbounded_String
Character_Set : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
-- Contains each Wide_Wide_Character value WWC such that
-- Characters.Conversions.Is_Character(WWC) is True
Wide_Character_Set : constant Wide_Wide_Maps.Wide_Wide_Character_Set;
-- Contains each Wide_Wide_Character value WWC such that
-- Characters.Conversions.Is_Wide_Character(WWC) is True
{
AI95-00395-01}
Each Wide_Wide_Character_Set constant in the package
Strings.Wide_Wide_Maps.Wide_Wide_Constants contains no values outside
the Character portion of Wide_Wide_Character. Similarly, each Wide_Wide_Character_Mapping
constant in this package is the identity mapping when applied to any
element outside the Character portion of Wide_Wide_Character.
18 {
AI95-00285-01}
If a null Wide_Wide_Character_Mapping_Function
is passed to any of the Wide_Wide_String handling subprograms, Constraint_Error
is propagated.
Extensions to Ada 95
{
AI95-00285-01}
{
AI95-00395-01}
The double-wide string-handling
packages (Strings.Wide_Wide_Maps, Strings.Wide_Wide_Fixed, Strings.Wide_Wide_Bounded,
Strings.Wide_Wide_Unbounded, and Strings.Wide_Wide_Maps.Wide_Wide_Constants),
and functions Strings.Wide_Wide_Hash and Strings.Wide_Wide_Unbounded.Wide_Wide_Hash
are new.
Extensions to Ada 2005
{
AI05-0286-1}
The case insenstive library
functions (Strings.Wide_Wide_Equal_Case_Insensitive, Strings.Wide_Wide_Fixed.Wide_Wide_Equal_Case_Insensitive,
Strings.Wide_Wide_Bounded.Wide_Wide_Equal_Case_Insensitive, Strings.Wide_Wide_Unbounded.Wide_Wide_Equal_Case_Insensitive,
Strings.Wide_Wide_Hash_Case_Insensitive, Strings.Wide_Wide_Fixed.Wide_Wide_Hash_Case_Insensitive,
Strings.Wide_Wide_Bounded.Wide_Wide_Hash_Case_Insensitive, and Strings.Wide_Wide_Unbounded.Wide_Wide_Hash_Case_Insensitive)
are new.
Wording Changes from Ada 2005
{
AI05-0223-1}
Correction: Identified Wide_Wide_Character_Set
and Wide_Wide_Character_Mapping as needing finalization. It is likely
that they are implemented with a controlled type, so this change is unlikely
to make any difference in practice.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe