------------------------------------------------------------------------------ -- -- -- G N U _ M U L T I P L E _ P R E C I S I O N . R . E X T R A S -- -- -- -- B o d y -- -- -- -- $Revision: 1.1 $ -- -- -- -- Copyright (C) 1999 Michael Roe -- -- -- -- This 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- -- -- 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. -- -- -- -- 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. -- -- -- ------------------------------------------------------------------------------ with Interfaces.C; use type Interfaces.C.int; use type Interfaces.C.size_t; package body GNU_Multiple_Precision.R.Extras is function ">" (X, Y : Big_Float) return Boolean is begin return Compare (X, Y) > 0; end ">"; function "<" (X, Y : Big_Float) return Boolean is begin return Compare (X, Y) < 0; end "<"; function "<=" (X, Y : Big_Float) return Boolean is begin return Compare (X, Y) <= 0; end "<="; function ">=" (X, Y : Big_Float) return Boolean is begin return Compare (X, Y) >= 0; end ">="; function ">" (X : Big_Float; Y : Integer) return Boolean is begin return Compare (X, Interfaces.C.int (Y)) > 0; end ">"; function "<" (X : Big_Float; Y : Integer) return Boolean is begin return Compare (X, Interfaces.C.int (Y)) < 0; end "<"; function "<=" (X : Big_Float; Y : Integer) return Boolean is begin return Compare (X, Interfaces.C.int (Y)) <= 0; end "<="; function ">=" (X : Big_Float; Y : Integer) return Boolean is begin return Compare (X, Interfaces.C.int (Y)) >= 0; end ">="; function ">" (X : Integer; Y : Big_Float) return Boolean is begin return Compare (Y, Interfaces.C.int (X)) < 0; end ">"; function "<" (X : Integer; Y : Big_Float) return Boolean is begin return Compare (Y, Interfaces.C.int (X)) > 0; end "<"; function "<=" (X : Integer; Y : Big_Float) return Boolean is begin return Compare (Y, Interfaces.C.int (X)) >= 0; end "<="; function ">=" (X : Integer; Y : Big_Float) return Boolean is begin return Compare (Y, Interfaces.C.int (X)) <= 0; end ">="; procedure Set_String (Rop : in out Big_Float; Str : in String; Base : in Positive := 10) is begin Set_C_String (Rop, Interfaces.C.To_C (Str), Interfaces.C.int (Base)); end Set_String; function To_String (Op : Big_Float; Base : Positive := 10) return String is Ptr : System.Address; Buff : Interfaces.C.char_array (0 .. 10); -- At the moment, only allow 10 digits of precision on output Exponent : Interfaces.C.int; begin Get_C_String (Ptr, Buff'Address, Exponent, Interfaces.C.int (Base), Buff'Length - 2, Op); declare Exponent_String : String := Interfaces.C.int'Image (Exponent - 1); begin if Op < 0 then return Interfaces.C.To_Ada (Buff (0 .. 1), False) & "." & Interfaces.C.To_Ada (Buff (2 .. Buff'Last)) & "E" & Exponent_String (Exponent_String'First + 1 .. Exponent_String'Last); else return Interfaces.C.To_Ada (Buff (0 .. 0), False) & "." & Interfaces.C.To_Ada (Buff (1 .. Buff'Last)) & "E" & Exponent_String (Exponent_String'First + 1 .. Exponent_String'Last); end if; end; end To_String; end GNU_Multiple_Precision.R.Extras;