1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT RUN-TIME COMPONENTS                         --
4--                                                                          --
5--               A D A . T E X T _ I O . C O M P L E X _ I O                --
6--                                                                          --
7--                                 B o d y                                  --
8--                                                                          --
9--          Copyright (C) 1992-2018, 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
32with Ada.Text_IO;
33
34with Ada.Text_IO.Complex_Aux;
35
36package body Ada.Text_IO.Complex_IO is
37
38   use Complex_Types;
39
40   package Aux renames Ada.Text_IO.Complex_Aux;
41
42   subtype LLF is Long_Long_Float;
43   --  Type used for calls to routines in Aux
44
45   ---------
46   -- Get --
47   ---------
48
49   procedure Get
50     (File  : File_Type;
51      Item  : out Complex_Types.Complex;
52      Width : Field := 0)
53   is
54      Real_Item : Real'Base;
55      Imag_Item : Real'Base;
56
57   begin
58      Aux.Get (File, LLF (Real_Item), LLF (Imag_Item), Width);
59      Item := (Real_Item, Imag_Item);
60
61   exception
62      when Constraint_Error => raise Data_Error;
63   end Get;
64
65   ---------
66   -- Get --
67   ---------
68
69   procedure Get
70     (Item  : out Complex_Types.Complex;
71      Width : Field := 0)
72   is
73   begin
74      Get (Current_In, Item, Width);
75   end Get;
76
77   ---------
78   -- Get --
79   ---------
80
81   procedure Get
82     (From : String;
83      Item : out Complex_Types.Complex;
84      Last : out Positive)
85   is
86      Real_Item : Real'Base;
87      Imag_Item : Real'Base;
88
89   begin
90      Aux.Gets (From, LLF (Real_Item), LLF (Imag_Item), Last);
91      Item := (Real_Item, Imag_Item);
92
93   exception
94      when Data_Error => raise Constraint_Error;
95   end Get;
96
97   ---------
98   -- Put --
99   ---------
100
101   procedure Put
102     (File : File_Type;
103      Item : Complex_Types.Complex;
104      Fore : Field := Default_Fore;
105      Aft  : Field := Default_Aft;
106      Exp  : Field := Default_Exp)
107   is
108   begin
109      Aux.Put (File, LLF (Re (Item)), LLF (Im (Item)), Fore, Aft, Exp);
110   end Put;
111
112   ---------
113   -- Put --
114   ---------
115
116   procedure Put
117     (Item : Complex_Types.Complex;
118      Fore : Field := Default_Fore;
119      Aft  : Field := Default_Aft;
120      Exp  : Field := Default_Exp)
121   is
122   begin
123      Put (Current_Out, Item, Fore, Aft, Exp);
124   end Put;
125
126   ---------
127   -- Put --
128   ---------
129
130   procedure Put
131     (To   : out String;
132      Item : Complex_Types.Complex;
133      Aft  : Field := Default_Aft;
134      Exp  : Field := Default_Exp)
135   is
136   begin
137      Aux.Puts (To, LLF (Re (Item)), LLF (Im (Item)), Aft, Exp);
138   end Put;
139
140end Ada.Text_IO.Complex_IO;
141