OSDN Git Service

Minor reformatting.
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-ztdeio.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT RUN-TIME COMPONENTS                         --
4 --                                                                          --
5 --      A D A . W I D E _ W I D E _ 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 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception,   --
20 -- version 3.1, as published by the Free Software Foundation.               --
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.Wide_Wide_Text_IO.Decimal_Aux;
33
34 with System.WCh_Con; use System.WCh_Con;
35 with System.WCh_WtS; use System.WCh_WtS;
36
37 package body Ada.Wide_Wide_Text_IO.Decimal_IO is
38
39    subtype TFT is Ada.Wide_Wide_Text_IO.File_Type;
40    --  File type required for calls to routines in Aux
41
42    package Aux renames Ada.Wide_Wide_Text_IO.Decimal_Aux;
43
44    Scale : constant Integer := Num'Scale;
45
46    ---------
47    -- Get --
48    ---------
49
50    procedure Get
51      (File  : File_Type;
52       Item  : out Num;
53       Width : Field := 0)
54    is
55    begin
56       if Num'Size > Integer'Size then
57          Item := Num (Aux.Get_LLD (TFT (File), Width, Scale));
58          --  Item := Num'Fixed_Value (Aux.Get_LLD (TFT (File), Width, Scale));
59          --  above is what we should write, but gets assert error ???
60
61       else
62          Item := Num (Aux.Get_Dec (TFT (File), Width, Scale));
63          --  Item := Num'Fixed_Value (Aux.Get_Dec (TFT (File), Width, Scale));
64          --  above is what we should write, but gets assert error ???
65       end if;
66
67    exception
68       when Constraint_Error => raise Data_Error;
69    end Get;
70
71    procedure Get
72      (Item  : out Num;
73       Width : Field := 0)
74    is
75    begin
76       Get (Current_Input, Item, Width);
77    end Get;
78
79    procedure Get
80      (From : Wide_Wide_String;
81       Item : out Num;
82       Last : out Positive)
83    is
84       S : constant String := Wide_Wide_String_To_String (From, WCEM_Upper);
85       --  String on which we do the actual conversion. Note that the method
86       --  used for wide character encoding is irrelevant, since if there is
87       --  a character outside the Standard.Character range then the call to
88       --  Aux.Gets will raise Data_Error in any case.
89
90    begin
91       if Num'Size > Integer'Size then
92          --  Item := Num'Fixed_Value
93          --  should write above, but gets assert error ???
94          Item := Num
95                    (Aux.Gets_LLD (S, Last'Unrestricted_Access, Scale));
96       else
97          --  Item := Num'Fixed_Value
98          --  should write above, but gets assert error ???
99          Item := Num
100                    (Aux.Gets_Dec (S, Last'Unrestricted_Access, Scale));
101       end if;
102
103    exception
104       when Constraint_Error => raise Data_Error;
105    end Get;
106
107    ---------
108    -- Put --
109    ---------
110
111    procedure Put
112      (File : File_Type;
113       Item : Num;
114       Fore : Field := Default_Fore;
115       Aft  : Field := Default_Aft;
116       Exp  : Field := Default_Exp)
117    is
118    begin
119       if Num'Size > Integer'Size then
120          Aux.Put_LLD
121 --           (TFT (File), Long_Long_Integer'Integer_Value (Item),
122 --  ???
123            (TFT (File), Long_Long_Integer (Item),
124             Fore, Aft, Exp, Scale);
125       else
126          Aux.Put_Dec
127 --           (TFT (File), Integer'Integer_Value (Item), Fore, Aft, Exp, Scale);
128 --  ???
129            (TFT (File), Integer (Item), Fore, Aft, Exp, Scale);
130
131       end if;
132    end Put;
133
134    procedure Put
135      (Item : Num;
136       Fore : Field := Default_Fore;
137       Aft  : Field := Default_Aft;
138       Exp  : Field := Default_Exp)
139    is
140    begin
141       Put (Current_Output, Item, Fore, Aft, Exp);
142    end Put;
143
144    procedure Put
145      (To   : out Wide_Wide_String;
146       Item : Num;
147       Aft  : Field := Default_Aft;
148       Exp  : Field := Default_Exp)
149    is
150       S : String (To'First .. To'Last);
151
152    begin
153       if Num'Size > Integer'Size then
154 --       Aux.Puts_LLD
155 --         (S, Long_Long_Integer'Integer_Value (Item), Aft, Exp, Scale);
156 --  ???
157          Aux.Puts_LLD
158            (S, Long_Long_Integer (Item), Aft, Exp, Scale);
159       else
160 --       Aux.Puts_Dec (S, Integer'Integer_Value (Item), Aft, Exp, Scale);
161 --  ???
162          Aux.Puts_Dec (S, Integer (Item), Aft, Exp, Scale);
163       end if;
164
165       for J in S'Range loop
166          To (J) := Wide_Wide_Character'Val (Character'Pos (S (J)));
167       end loop;
168    end Put;
169
170 end Ada.Wide_Wide_Text_IO.Decimal_IO;