File : a-tideio.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --               A D A . T E X T _ I O . D E C I M A L _ I O                --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 with Ada.Text_IO.Decimal_Aux;
  33 
  34 package body Ada.Text_IO.Decimal_IO is
  35 
  36    package Aux renames Ada.Text_IO.Decimal_Aux;
  37 
  38    Scale : constant Integer := Num'Scale;
  39 
  40    ---------
  41    -- Get --
  42    ---------
  43 
  44    procedure Get
  45      (File  : File_Type;
  46       Item  : out Num;
  47       Width : Field := 0)
  48    is
  49       pragma Unsuppress (Range_Check);
  50 
  51    begin
  52       if Num'Size > Integer'Size then
  53          Item := Num'Fixed_Value (Aux.Get_LLD (File, Width, Scale));
  54       else
  55          Item := Num'Fixed_Value (Aux.Get_Dec (File, Width, Scale));
  56       end if;
  57 
  58    exception
  59       when Constraint_Error => raise Data_Error;
  60    end Get;
  61 
  62    procedure Get
  63      (Item  : out Num;
  64       Width : Field := 0)
  65    is
  66    begin
  67       Get (Current_In, Item, Width);
  68    end Get;
  69 
  70    procedure Get
  71      (From : String;
  72       Item : out Num;
  73       Last : out Positive)
  74    is
  75       pragma Unsuppress (Range_Check);
  76 
  77    begin
  78       if Num'Size > Integer'Size then
  79          Item := Num'Fixed_Value
  80                    (Aux.Gets_LLD (From, Last'Unrestricted_Access, Scale));
  81       else
  82          Item := Num'Fixed_Value
  83                    (Aux.Gets_Dec (From, Last'Unrestricted_Access, Scale));
  84       end if;
  85 
  86    exception
  87       when Constraint_Error => raise Data_Error;
  88    end Get;
  89 
  90    ---------
  91    -- Put --
  92    ---------
  93 
  94    procedure Put
  95      (File : File_Type;
  96       Item : Num;
  97       Fore : Field := Default_Fore;
  98       Aft  : Field := Default_Aft;
  99       Exp  : Field := Default_Exp)
 100    is
 101    begin
 102       if Num'Size > Integer'Size then
 103          Aux.Put_LLD
 104            (File, Long_Long_Integer'Integer_Value (Item),
 105             Fore, Aft, Exp, Scale);
 106       else
 107          Aux.Put_Dec
 108            (File, Integer'Integer_Value (Item), Fore, Aft, Exp, Scale);
 109       end if;
 110    end Put;
 111 
 112    procedure Put
 113      (Item : Num;
 114       Fore : Field := Default_Fore;
 115       Aft  : Field := Default_Aft;
 116       Exp  : Field := Default_Exp)
 117    is
 118    begin
 119       Put (Current_Out, Item, Fore, Aft, Exp);
 120    end Put;
 121 
 122    procedure Put
 123      (To   : out String;
 124       Item : Num;
 125       Aft  : Field := Default_Aft;
 126       Exp  : Field := Default_Exp)
 127    is
 128    begin
 129       if Num'Size > Integer'Size then
 130          Aux.Puts_LLD
 131            (To, Long_Long_Integer'Integer_Value (Item), Aft, Exp, Scale);
 132       else
 133          Aux.Puts_Dec (To, Integer'Integer_Value (Item), Aft, Exp, Scale);
 134       end if;
 135    end Put;
 136 
 137 end Ada.Text_IO.Decimal_IO;