File : oci-thick-number_functions.adb


with System,OCI.Thread;
package body OCI.Thick.Number_Functions is

   -------------------
   -- To_Long_Float --
   -------------------

   function To_Long_Float (numb : OCINumber) return Long_Float is
     use type uword;
     Result : aliased Long_Float;
     rc : sword := OCINumberToReal(Thread.Error,
                numb,
                Result'Size/System.Storage_Unit,
                Result'Access); 
   begin
      Check_Error(rc);
      return Result;
   end To_Long_Float;

   ---------------
   -- To_Number --
   ---------------

   function To_Number (From : Long_Float) return OCINumber is
     use type uword;
     Numb : aliased Long_Float := From;
     Result : aliased OCINumber;
     rc : sword := OCINumberFromReal(Thread.Error,
                numb'Access,
                Numb'Size/System.Storage_Unit,
                Result'Access); 
   begin
      Check_Error(rc);
      return Result;
   end To_Number;

   function To_String(From : OCINumber; Format : String) return String
         is
      use type Ub4;   
      Buff : aliased Text := (0..63 => c.nul);
      Len : aliased Ub4 := Buff'Length;
      Rc : Sword := OCINumberToText (
         Err => Thread.Error,
         Date => From,
         Fmt => C.To_C(Format),
         Fmt_Length => Format'Length,
         Nls_Name => 0,
         Nls_Length => 0,
         Buf_Size => Len'access,
         Buf => CStr.To_Chars_Ptr(Buff'Unchecked_Access));
   begin
      Check_Error(Rc);
      return C.To_Ada(Buff(0..C.Size_T(Len-1)),False);
   end To_String;

end OCI.Thick.Number_Functions;