OSDN Git Service

2005-03-08 Ed Schonberg <schonberg@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-chahan.adb
index ceb66b7..c94a999 100644 (file)
@@ -6,8 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                                                                          --
---          Copyright (C) 1992-2001 Free Software Foundation, Inc.          --
+--          Copyright (C) 1992-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -282,7 +281,7 @@ package body Ada.Characters.Handling is
    -- Is_Alphanumeric --
    ---------------------
 
-   function Is_Alphanumeric (Item : in Character) return Boolean is
+   function Is_Alphanumeric (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Alphanum) /= 0;
    end Is_Alphanumeric;
@@ -291,7 +290,7 @@ package body Ada.Characters.Handling is
    -- Is_Basic --
    --------------
 
-   function Is_Basic (Item : in Character) return Boolean is
+   function Is_Basic (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Basic) /= 0;
    end Is_Basic;
@@ -300,16 +299,21 @@ package body Ada.Characters.Handling is
    -- Is_Character --
    ------------------
 
-   function Is_Character (Item : in Wide_Character) return Boolean is
+   function Is_Character (Item : Wide_Character) return Boolean is
    begin
       return Wide_Character'Pos (Item) < 256;
    end Is_Character;
 
+   function Is_Character (Item : Wide_Wide_Character) return Boolean is
+   begin
+      return Wide_Wide_Character'Pos (Item) < 256;
+   end Is_Character;
+
    ----------------
    -- Is_Control --
    ----------------
 
-   function Is_Control (Item : in Character) return Boolean is
+   function Is_Control (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Control) /= 0;
    end Is_Control;
@@ -318,7 +322,7 @@ package body Ada.Characters.Handling is
    -- Is_Digit --
    --------------
 
-   function Is_Digit (Item : in Character) return Boolean is
+   function Is_Digit (Item : Character) return Boolean is
    begin
       return Item in '0' .. '9';
    end Is_Digit;
@@ -327,7 +331,7 @@ package body Ada.Characters.Handling is
    -- Is_Graphic --
    ----------------
 
-   function Is_Graphic (Item : in Character) return Boolean is
+   function Is_Graphic (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Graphic) /= 0;
    end Is_Graphic;
@@ -336,7 +340,7 @@ package body Ada.Characters.Handling is
    -- Is_Hexadecimal_Digit --
    --------------------------
 
-   function Is_Hexadecimal_Digit (Item : in Character) return Boolean is
+   function Is_Hexadecimal_Digit (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Hex_Digit) /= 0;
    end Is_Hexadecimal_Digit;
@@ -345,7 +349,7 @@ package body Ada.Characters.Handling is
    -- Is_ISO_646 --
    ----------------
 
-   function Is_ISO_646 (Item : in Character) return Boolean is
+   function Is_ISO_646 (Item : Character) return Boolean is
    begin
       return Item in ISO_646;
    end Is_ISO_646;
@@ -353,7 +357,7 @@ package body Ada.Characters.Handling is
    --  Note: much more efficient coding of the following function is possible
    --  by testing several 16#80# bits in a complete word in a single operation
 
-   function Is_ISO_646 (Item : in String) return Boolean is
+   function Is_ISO_646 (Item : String) return Boolean is
    begin
       for J in Item'Range loop
          if Item (J) not in ISO_646 then
@@ -368,7 +372,7 @@ package body Ada.Characters.Handling is
    -- Is_Letter --
    ---------------
 
-   function Is_Letter (Item : in Character) return Boolean is
+   function Is_Letter (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Letter) /= 0;
    end Is_Letter;
@@ -377,7 +381,7 @@ package body Ada.Characters.Handling is
    -- Is_Lower --
    --------------
 
-   function Is_Lower (Item : in Character) return Boolean is
+   function Is_Lower (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Lower) /= 0;
    end Is_Lower;
@@ -386,7 +390,7 @@ package body Ada.Characters.Handling is
    -- Is_Special --
    ----------------
 
-   function Is_Special (Item : in Character) return Boolean is
+   function Is_Special (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Special) /= 0;
    end Is_Special;
@@ -395,7 +399,7 @@ package body Ada.Characters.Handling is
    -- Is_String --
    ---------------
 
-   function Is_String (Item : in Wide_String) return Boolean is
+   function Is_String (Item : Wide_String) return Boolean is
    begin
       for J in Item'Range loop
          if Wide_Character'Pos (Item (J)) >= 256 then
@@ -406,25 +410,60 @@ package body Ada.Characters.Handling is
       return True;
    end Is_String;
 
+   function Is_String (Item : Wide_Wide_String) return Boolean is
+   begin
+      for J in Item'Range loop
+         if Wide_Wide_Character'Pos (Item (J)) >= 256 then
+            return False;
+         end if;
+      end loop;
+
+      return True;
+   end Is_String;
+
    --------------
    -- Is_Upper --
    --------------
 
-   function Is_Upper (Item : in Character) return Boolean is
+   function Is_Upper (Item : Character) return Boolean is
    begin
       return (Char_Map (Item) and Upper) /= 0;
    end Is_Upper;
 
+   -----------------------
+   -- Is_Wide_Character --
+   -----------------------
+
+   function Is_Wide_Character (Item : Wide_Wide_Character) return Boolean is
+   begin
+      return Wide_Wide_Character'Pos (Item) < 2**16;
+   end Is_Wide_Character;
+
+   --------------------
+   -- Is_Wide_String --
+   --------------------
+
+   function Is_Wide_String (Item : Wide_Wide_String) return Boolean is
+   begin
+      for J in Item'Range loop
+         if Wide_Wide_Character'Pos (Item (J)) >= 2**16 then
+            return False;
+         end if;
+      end loop;
+
+      return True;
+   end Is_Wide_String;
+
    --------------
    -- To_Basic --
    --------------
 
-   function To_Basic (Item : in Character) return Character is
+   function To_Basic (Item : Character) return Character is
    begin
       return Value (Basic_Map, Item);
    end To_Basic;
 
-   function To_Basic (Item : in String) return String is
+   function To_Basic (Item : String) return String is
       Result : String (1 .. Item'Length);
 
    begin
@@ -440,9 +479,8 @@ package body Ada.Characters.Handling is
    ------------------
 
    function To_Character
-     (Item       : in Wide_Character;
-      Substitute : in Character := ' ')
-      return       Character
+     (Item       : Wide_Character;
+      Substitute : Character := ' ') return Character
    is
    begin
       if Is_Character (Item) then
@@ -452,14 +490,25 @@ package body Ada.Characters.Handling is
       end if;
    end To_Character;
 
+   function To_Character
+     (Item       : Wide_Wide_Character;
+      Substitute : Character := ' ') return Character
+   is
+   begin
+      if Is_Character (Item) then
+         return Character'Val (Wide_Wide_Character'Pos (Item));
+      else
+         return Substitute;
+      end if;
+   end To_Character;
+
    ----------------
    -- To_ISO_646 --
    ----------------
 
    function To_ISO_646
-     (Item       : in Character;
-      Substitute : in ISO_646 := ' ')
-      return       ISO_646
+     (Item       : Character;
+      Substitute : ISO_646 := ' ') return ISO_646
    is
    begin
       if Item in ISO_646 then
@@ -470,9 +519,8 @@ package body Ada.Characters.Handling is
    end To_ISO_646;
 
    function To_ISO_646
-     (Item       : in String;
-      Substitute : in ISO_646 := ' ')
-      return       String
+     (Item       : String;
+      Substitute : ISO_646 := ' ') return String
    is
       Result : String (1 .. Item'Length);
 
@@ -492,12 +540,12 @@ package body Ada.Characters.Handling is
    -- To_Lower --
    --------------
 
-   function To_Lower (Item : in Character) return Character is
+   function To_Lower (Item : Character) return Character is
    begin
       return Value (Lower_Case_Map, Item);
    end To_Lower;
 
-   function To_Lower (Item : in String) return String is
+   function To_Lower (Item : String) return String is
       Result : String (1 .. Item'Length);
 
    begin
@@ -513,9 +561,8 @@ package body Ada.Characters.Handling is
    ---------------
 
    function To_String
-     (Item       : in Wide_String;
-      Substitute : in Character := ' ')
-     return        String
+     (Item       : Wide_String;
+      Substitute : Character := ' ') return String
    is
       Result : String (1 .. Item'Length);
 
@@ -523,6 +570,21 @@ package body Ada.Characters.Handling is
       for J in Item'Range loop
          Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
       end loop;
+
+      return Result;
+   end To_String;
+
+   function To_String
+     (Item       : Wide_Wide_String;
+      Substitute : Character := ' ') return String
+   is
+      Result : String (1 .. Item'Length);
+
+   begin
+      for J in Item'Range loop
+         Result (J - (Item'First - 1)) := To_Character (Item (J), Substitute);
+      end loop;
+
       return Result;
    end To_String;
 
@@ -531,16 +593,14 @@ package body Ada.Characters.Handling is
    --------------
 
    function To_Upper
-     (Item : in Character)
-     return  Character
+     (Item : Character) return Character
    is
    begin
       return Value (Upper_Case_Map, Item);
    end To_Upper;
 
    function To_Upper
-     (Item : in String)
-      return String
+     (Item : String) return String
    is
       Result : String (1 .. Item'Length);
 
@@ -557,20 +617,30 @@ package body Ada.Characters.Handling is
    -----------------------
 
    function To_Wide_Character
-     (Item : in Character)
-      return Wide_Character
+     (Item : Character) return Wide_Character
    is
    begin
       return Wide_Character'Val (Character'Pos (Item));
    end To_Wide_Character;
 
+   function To_Wide_Character
+     (Item       : Wide_Wide_Character;
+      Substitute : Wide_Character := ' ') return Wide_Character
+   is
+   begin
+      if Wide_Wide_Character'Pos (Item) < 2**16 then
+         return Wide_Character'Val (Wide_Wide_Character'Pos (Item));
+      else
+         return Substitute;
+      end if;
+   end To_Wide_Character;
+
    --------------------
    -- To_Wide_String --
    --------------------
 
    function To_Wide_String
-     (Item : in String)
-      return Wide_String
+     (Item : String) return Wide_String
    is
       Result : Wide_String (1 .. Item'Length);
 
@@ -581,4 +651,68 @@ package body Ada.Characters.Handling is
 
       return Result;
    end To_Wide_String;
+
+   function To_Wide_String
+     (Item       : Wide_Wide_String;
+      Substitute : Wide_Character := ' ') return Wide_String
+   is
+      Result : Wide_String (1 .. Item'Length);
+
+   begin
+      for J in Item'Range loop
+         Result (J - (Item'First - 1)) :=
+           To_Wide_Character (Item (J), Substitute);
+      end loop;
+
+      return Result;
+   end To_Wide_String;
+
+   ----------------------------
+   -- To_Wide_Wide_Character --
+   ----------------------------
+
+   function To_Wide_Wide_Character
+     (Item : Character) return Wide_Wide_Character
+   is
+   begin
+      return Wide_Wide_Character'Val (Character'Pos (Item));
+   end To_Wide_Wide_Character;
+
+   function To_Wide_Wide_Character
+     (Item : Wide_Character) return Wide_Wide_Character
+   is
+   begin
+      return Wide_Wide_Character'Val (Wide_Character'Pos (Item));
+   end To_Wide_Wide_Character;
+
+   -------------------------
+   -- To_Wide_Wide_String --
+   -------------------------
+
+   function To_Wide_Wide_String
+     (Item : String) return Wide_Wide_String
+   is
+      Result : Wide_Wide_String (1 .. Item'Length);
+
+   begin
+      for J in Item'Range loop
+         Result (J - (Item'First - 1)) := To_Wide_Wide_Character (Item (J));
+      end loop;
+
+      return Result;
+   end To_Wide_Wide_String;
+
+   function To_Wide_Wide_String
+     (Item : Wide_String) return Wide_Wide_String
+   is
+      Result : Wide_Wide_String (1 .. Item'Length);
+
+   begin
+      for J in Item'Range loop
+         Result (J - (Item'First - 1)) := To_Wide_Wide_Character (Item (J));
+      end loop;
+
+      return Result;
+   end To_Wide_Wide_String;
+
 end Ada.Characters.Handling;