home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
gnat-2.06-src.tgz
/
tar.out
/
fsf
/
gnat
/
ada
/
a-stwima.ads
< prev
next >
Wrap
Text File
|
1996-09-28
|
6KB
|
182 lines
------------------------------------------------------------------------------
-- --
-- GNAT RUNTIME COMPONENTS --
-- --
-- A D A . S T R I N G S . W I D E _ M A P S --
-- --
-- S p e c --
-- --
-- $Revision: 1.7 $ --
-- --
-- This specification is adapted from the Ada Reference Manual for use with --
-- GNAT. In accordance with the copyright of that document, you can freely --
-- copy and modify this specification, provided that if you redistribute a --
-- modified version, any changes that you have made are clearly indicated. --
-- --
------------------------------------------------------------------------------
package Ada.Strings.Wide_Maps is
pragma Preelaborate (Wide_Maps);
-------------------------------------
-- Wide Character Set Declarations --
-------------------------------------
type Wide_Character_Set is private;
-- Representation for a set of Wide_Character values:
Null_Set : constant Wide_Character_Set;
------------------------------------------
-- Constructors for Wide Character Sets --
------------------------------------------
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;
---------------------------------------
-- Operations on Wide Character Sets --
---------------------------------------
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;
subtype Wide_Character_Sequence is Wide_String;
-- Alternative representation for a set of character values
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;
-----------------------------------------
-- Wide Character Mapping Declarations --
-----------------------------------------
type Wide_Character_Mapping is private;
-- Representation for a wide character to wide character mapping:
function Value
(Map : in Wide_Character_Mapping;
Element : in Wide_Character)
return Wide_Character;
Identity : constant Wide_Character_Mapping;
---------------------------------
-- Operations on Wide Mappings --
---------------------------------
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
type Wide_Character_Set is access all Wide_Character_Ranges;
-- The referenced value satisfies the following constraints:
--
-- The lower bound is 1
-- The ranges are in order by increasing Low values
-- The ranges are non-overlapping and discontiguous
--
-- This representation is chosen to facilitiate the coding of the
-- Is_In, To_Ranges and logical functions, and is also canonical.
Null_Set : constant Wide_Character_Set :=
new Wide_Character_Ranges (1 .. 0);
type Wide_Character_Sequence_Access is
access all Wide_Character_Sequence;
type Wide_Character_Mapping is record
Domain : Wide_Character_Sequence_Access;
Rangev : Wide_Character_Sequence_Access;
end record;
-- The two strings are of identical length, and corresponding positions
-- define the mapping. The characters of From are sorted in ascending
-- order to facilitate a binary search in the Value function. The lower
-- bound of each string is always 1. A character that does not appear in
-- From is mapped to itself, and corresponding character positions in
-- From and To are always distinct. This representation is canonical.
-- Note, Domain.all and Rangev.all are exactly the values returned by
-- the functions To_Domain and To_Range.
Null_String : aliased constant Wide_Character_Sequence := "";
Identity : constant Wide_Character_Mapping :=
(Domain => Null_String'Access,
Rangev => Null_String'Access);
end Ada.Strings.Wide_Maps;