A.4.7 Wide_String Handling
1/2
{
AI95-00302-03}
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 functions Strings.Wide_Hash, Strings.Wide_Fixed.Wide_Hash, Strings.Wide_Bounded.Wide_Hash,
and Strings.Wide_Unbounded.Wide_Hash. They provide the same string-handling
operations as the corresponding packages and functions for strings of
Character elements.
Static Semantics
2
The package Strings.Wide_Maps has the following declaration.
3
package Ada.Strings.Wide_Maps
is
pragma Preelaborate(Wide_Maps);
4/2
{
AI95-00161-01}
--
Representation for a set of Wide_Character values:
type Wide_Character_Set
is private;
pragma Preelaborable_Initialization(Wide_Character_Set);
5
Null_Set :
constant Wide_Character_Set;
6
type Wide_Character_Range
is
record
Low : Wide_Character;
High : Wide_Character;
end record;
--
Represents Wide_Character range Low..High
7
type Wide_Character_Ranges
is array (Positive
range <>)
of Wide_Character_Range;
8
function To_Set (Ranges :
in Wide_Character_Ranges)
return Wide_Character_Set;
9
function To_Set (Span :
in Wide_Character_Range)
return Wide_Character_Set;
10
function To_Ranges (Set :
in Wide_Character_Set)
return Wide_Character_Ranges;
11
function "=" (Left, Right : in Wide_Character_Set) return Boolean;
12
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;
13
function Is_In (Element :
in Wide_Character;
Set :
in Wide_Character_Set)
return Boolean;
14
function Is_Subset (Elements :
in Wide_Character_Set;
Set :
in Wide_Character_Set)
return Boolean;
15
function "<=" (Left : in Wide_Character_Set;
Right : in Wide_Character_Set)
return Boolean renames Is_Subset;
16
--
Alternative representation for a set of Wide_Character values:
subtype Wide_Character_Sequence
is Wide_String;
17
function To_Set (Sequence :
in Wide_Character_Sequence)
return Wide_Character_Set;
18
function To_Set (Singleton :
in Wide_Character)
return Wide_Character_Set;
19
function To_Sequence (Set :
in Wide_Character_Set)
return Wide_Character_Sequence;
20/2
{
AI95-00161-01}
--
Representation for a Wide_Character to Wide_Character mapping:
type Wide_Character_Mapping
is private;
pragma Preelaborable_Initialization(Wide_Character_Mapping);
21
function Value (Map :
in Wide_Character_Mapping;
Element :
in Wide_Character)
return Wide_Character;
22
Identity :
constant Wide_Character_Mapping;
23
function To_Mapping (From, To :
in Wide_Character_Sequence)
return Wide_Character_Mapping;
24
function To_Domain (Map :
in Wide_Character_Mapping)
return Wide_Character_Sequence;
25
function To_Range (Map :
in Wide_Character_Mapping)
return Wide_Character_Sequence;
26
type Wide_Character_Mapping_Function
is
access function (From :
in Wide_Character)
return Wide_Character;
27
private
... -- not specified by the language
end Ada.Strings.Wide_Maps;
28
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.
29/2
{
AI95-00302-03}
For each of the packages Strings.Fixed, Strings.Bounded, Strings.Unbounded,
and Strings.Maps.Constants, and for functions Strings.Hash, Strings.Fixed.Hash,
Strings.Bounded.Hash, and Strings.Unbounded.Hash, the corresponding wide
string package has the same contents except that
30
Wide_Space replaces Space
31
Wide_Character replaces Character
32
Wide_String replaces String
33
Wide_Character_Set replaces Character_Set
34
Wide_Character_Mapping replaces Character_Mapping
35
Wide_Character_Mapping_Function replaces Character_Mapping_Function
36
Wide_Maps replaces Maps
37
Bounded_Wide_String replaces Bounded_String
38
Null_Bounded_Wide_String replaces Null_Bounded_String
39
To_Bounded_Wide_String replaces To_Bounded_String
40
To_Wide_String replaces To_String
40.1/2
{
AI95-00301-01}
Set_Bounded_Wide_String replaces Set_Bounded_String
41
Unbounded_Wide_String replaces Unbounded_String
42
Null_Unbounded_Wide_String replaces Null_Unbounded_String
43
Wide_String_Access replaces String_Access
44
To_Unbounded_Wide_String replaces To_Unbounded_String
44.1/2
{
AI95-00301-01}
Set_Unbounded_Wide_String replaces Set_Unbounded_String
45
The following additional
declaration is present in Strings.Wide_Maps.Wide_Constants:
46/2
{
AI95-00285-01}
{
AI95-00395-01}
Character_Set :
constant Wide_Maps.Wide_Character_Set;
--
Contains each Wide_Character value WC such that
--
Characters.Conversions.Is_Character(WC) is True
46.1/2
{
AI95-00395-01}
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.
46.2/2
47
12
{Constraint_Error
(raised by failure of run-time check)} If
a null Wide_Character_Mapping_Function is passed to any of the Wide_String
handling subprograms, Constraint_Error is propagated.
48/2
Incompatibilities With Ada 95
48.a/2
{
AI95-00301-01}
{
incompatibilities with Ada 95}
Various new
operations are added to Strings.Wide_Fixed, Strings.Wide_Bounded, and
Strings.Wide_Unbounded. If one of these packages is referenced in a
use_clause,
and an entity
E with the same
defining_identifier
as a new entity is defined in a package that is also referenced in a
use_clause,
the entity
E may no longer be use-visible, resulting in errors.
This should be rare and is easily fixed if it does occur.
Extensions to Ada 95
48.b/2
{
AI95-00161-01}
{
extensions to Ada 95}
Amendment Correction:
Added
pragma
Preelaborable_Initialization to types Wide_Character_Set and Wide_Character_Mapping,
so that they can be used to declare default-initialized objects in preelaborated
units.
Wording Changes from Ada 95
48.c/2
48.d/2
{
AI95-00302-03}
Added wide versions of Strings.Hash and Strings.Unbounded.Hash.
48.e/2
{
AI95-00362-01}
Added wording so that Strings.Wide_Maps.Wide_Constants does not change
to Pure.
48.f/2
{
AI95-00395-01}
The second Note is now normative text, since there is no way to derive
it from the other rules. It's a little weird given the use of Unicode
character classifications in Ada 2005; but changing it would be inconsistent
with Ada 95 and a one-to-one mapping isn't necessarily correct anyway.