OSDN Git Service

* env.c [__alpha__ && __osf__] (AES_SOURCE): Define.
[pf3gnuchains/gcc-fork.git] / gcc / ada / s-wwdwch.adb
index ac3d1e9..001680e 100644 (file)
@@ -1,30 +1,28 @@
 ------------------------------------------------------------------------------
 --                                                                          --
---                         GNAT RUNTIME COMPONENTS                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
 --                     S Y S T E M . W W D _ W C H A R                      --
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2009, 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- --
--- ware  Foundation;  either version 2,  or (at your option) any later ver- --
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
--- for  more details.  You should have  received  a copy of the GNU General --
--- Public License  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
 --                                                                          --
--- As a special exception,  if other files  instantiate  generics from this --
--- unit, or you link  this unit with other files  to produce an executable, --
--- this  unit  does not  by itself cause  the resulting  executable  to  be --
--- covered  by the  GNU  General  Public  License.  This exception does not --
--- however invalidate  any other reasons why  the executable file  might be --
--- covered by the  GNU Public License.                                      --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception,   --
+-- version 3.1, as published by the Free Software Foundation.               --
+--                                                                          --
+-- You should have received a copy of the GNU General Public License and    --
+-- a copy of the GCC Runtime Library Exception along with this program;     --
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
+-- <http://www.gnu.org/licenses/>.                                          --
 --                                                                          --
 -- GNAT was originally developed  by the GNAT team at  New York University. --
 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
@@ -59,7 +57,6 @@ package body System.Wwd_WChar is
    function Wide_Wide_Width_Wide_Wide_Char
      (Lo, Hi : Wide_Wide_Character) return Natural
    is
-      W  : Natural := 0;
       LV : constant Unsigned_32 := Wide_Wide_Character'Pos (Lo);
       HV : constant Unsigned_32 := Wide_Wide_Character'Pos (Hi);
 
@@ -68,36 +65,22 @@ package body System.Wwd_WChar is
 
       if LV > HV then
          return 0;
-      end if;
+
+      --  Return max value (12) for wide character (Hex_hhhhhhhh)
+
+      elsif HV > 255 then
+         return 12;
 
       --  If any characters in normal character range, then use normal
       --  Wide_Wide_Width attribute on this range to find out a starting point.
       --  Otherwise start with zero.
 
-      if LV <= 255 then
-         W :=
+      else
+         return
            System.WWd_Char.Wide_Wide_Width_Character
              (Lo => Character'Val (LV),
               Hi => Character'Val (Unsigned_32'Min (255, HV)));
-      else
-         W := 0;
-      end if;
-
-      --  Increase to at least 4 if FFFE or FFFF present. These correspond
-      --  to the special language defined names FFFE/FFFF for these values.
-
-      if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
-         W := Natural'Max (W, 4);
       end if;
-
-      --  Increase to at least 3 if any wide characters, corresponding to
-      --  the normal ' character ' sequence. We know that the character fits.
-
-      if HV > 255 then
-         W := Natural'Max (W, 3);
-      end if;
-
-      return W;
    end Wide_Wide_Width_Wide_Wide_Char;
 
    -------------------------------
@@ -107,7 +90,6 @@ package body System.Wwd_WChar is
    function Wide_Width_Wide_Character
      (Lo, Hi : Wide_Character) return Natural
    is
-      W  : Natural := 0;
       LV : constant Unsigned_32 := Wide_Character'Pos (Lo);
       HV : constant Unsigned_32 := Wide_Character'Pos (Hi);
 
@@ -116,62 +98,33 @@ package body System.Wwd_WChar is
 
       if LV > HV then
          return 0;
-      end if;
+
+      --  Return max value (12) for wide character (Hex_hhhhhhhh)
+
+      elsif HV > 255 then
+         return 12;
 
       --  If any characters in normal character range, then use normal
       --  Wide_Wide_Width attribute on this range to find out a starting point.
       --  Otherwise start with zero.
 
-      if LV <= 255 then
-         W :=
+      else
+         return
            System.WWd_Char.Wide_Width_Character
              (Lo => Character'Val (LV),
               Hi => Character'Val (Unsigned_32'Min (255, HV)));
-      else
-         W := 0;
-      end if;
-
-      --  Increase to at least 4 if FFFE or FFFF present. These correspond
-      --  to the special language defined names FFFE/FFFF for these values.
-
-      if 16#FFFF# in LV .. HV or else 16#FFFE# in LV .. HV then
-         W := Natural'Max (W, 4);
       end if;
-
-      --  Increase to at least 3 if any wide characters, corresponding to
-      --  the normal 'character' sequence. We know that the character fits.
-
-      if HV > 255 then
-         W := Natural'Max (W, 3);
-      end if;
-
-      return W;
    end Wide_Width_Wide_Character;
 
    ------------------------------------
    -- Wide_Width_Wide_Wide_Character --
    ------------------------------------
 
-   --  This is a nasty case, because we get into the business of representing
-   --  out of range wide wide characters as wide strings. Let's let image do
-   --  the work here. Too bad if this takes lots of time. It's silly anyway!
-
    function Wide_Width_Wide_Wide_Character
      (Lo, Hi : Wide_Wide_Character) return Natural
    is
-      W : Natural;
-
    begin
-      W := 0;
-      for J in Lo .. Hi loop
-         declare
-            S : constant Wide_String := Wide_Wide_Character'Wide_Image (J);
-         begin
-            W := Natural'Max (W, S'Length);
-         end;
-      end loop;
-
-      return W;
+      return Wide_Wide_Width_Wide_Wide_Char (Lo, Hi);
    end Wide_Width_Wide_Wide_Character;
 
 end System.Wwd_WChar;