dotgnu-libs-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-libs-commits] CVS: GMP-Sharp formatter.cs,1.1.1.1,1.2 gmp-f.cs,


From: Marcus Urban <address@hidden>
Subject: [Dotgnu-libs-commits] CVS: GMP-Sharp formatter.cs,1.1.1.1,1.2 gmp-f.cs,1.1.1.1,1.2 gmp-q.cs,1.1.1.1,1.2 gmp-z.cs,1.1.1.1,1.2
Date: Sat, 14 Dec 2002 04:07:22 -0500

Update of /cvsroot/dotgnu-libs/GMP-Sharp
In directory subversions:/tmp/cvs-serv2744

Modified Files:
        formatter.cs gmp-f.cs gmp-q.cs gmp-z.cs 
Log Message:
Added conversions to/from all GMP types;
fixed incorrect constructors for Rational (p, q)


Index: formatter.cs
===================================================================
RCS file: /cvsroot/dotgnu-libs/GMP-Sharp/formatter.cs,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -r1.1.1.1 -r1.2
*** formatter.cs        14 Dec 2002 04:09:40 -0000      1.1.1.1
--- formatter.cs        14 Dec 2002 09:07:20 -0000      1.2
***************
*** 288,298 ****
  
  
! public class Testing
! {
!       public static void Main()
!       {
!               Float x = 4.5;
!               
!               Console.WriteLine( "{0:G4}", x );
!       }
! }
--- 288,298 ----
  
  
! // public class Testing
! // {
! //    public static void Main()
! //    {
! //            Float x = 4.5;
! //            
! //            Console.WriteLine( "{0:G4}", x );
! //    }
! // }

Index: gmp-f.cs
===================================================================
RCS file: /cvsroot/dotgnu-libs/GMP-Sharp/gmp-f.cs,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -r1.1.1.1 -r1.2
*** gmp-f.cs    14 Dec 2002 04:09:44 -0000      1.1.1.1
--- gmp-f.cs    14 Dec 2002 09:07:20 -0000      1.2
***************
*** 39,42 ****
--- 39,44 ----
  using SizeType = System.Int32;
  using mpf_t = System.IntPtr;
+ using mpz_t = System.IntPtr;
+ using mpq_t = System.IntPtr;
  using mp_exp_t = System.Int32;
  using size_t = System.Int32;
***************
*** 53,256 ****
        const int InitialDefaultPrecision = 64;
        
-       // **********************************************
-       // P/Invoke functions
-       // **********************************************
-       
-       
-       [DllImport("libc", CharSet=CharSet.Ansi)]
-       private static extern void free( IntPtr rawObject );
-       
-       // Create the C outside C structure
-       [DllImport("libgmp_support", CharSet=CharSet.Ansi)]
-       private static extern mpf_t create_mpf_t();
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_set_default_prec( Culong prec );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Culong __gmpf_get_default_prec();
-       
-       
-       // Combined initialization and assignment
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_init( mpf_t x );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_init2( mpf_t x, Culong prec );
- 
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_clear( mpf_t x );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Culong __gmpf_get_prec( mpf_t op );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_set_prec( mpf_t op, Culong prec );
-       
-       // TODO: Review whether to add mpf_set_prec_raw, which is
-       // potentially dangerous
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_init_set( mpf_t rop, mpf_t op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_init_set_ui
-               ( mpf_t rop, Culong op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_init_set_si
-               ( mpf_t rop, Clong op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_init_set_d
-               ( mpf_t rop, double op );               
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_init_set_str
-               ( mpf_t rop, string str, int @base );   
-       
-                       
-       // Conversion
- 
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cdouble __gmpf_get_d( mpf_t rop );        
- 
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cdouble __gmpf_get_d_2exp
-               (out Clong exp, mpf_t rop );
-                       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Culong __gmpf_get_ui( mpf_t op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Clong __gmpf_get_si( mpf_t op );
-       
-       
-       // TODO double-check that this works:
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern string __gmpf_get_str
-               ( IntPtr str, out mp_exp_t expptr, int @base,
-               size_t n_digits, mpf_t op );    
-       
-       
-       // Arithmetic operations (not necessarily operaTORS)
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_add
-               ( mpf_t rop, mpf_t op1, mpf_t op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_add_ui
-               ( mpf_t rop, mpf_t op1, Culong op2 );           
-                       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_sub
-               ( mpf_t rop, mpf_t op1, mpf_t op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_sub_ui
-               ( mpf_t rop, mpf_t op1, Culong op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_ui_sub
-               ( mpf_t rop, Culong op1, mpf_t op2 );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_mul
-               ( mpf_t rop, mpf_t op1, mpf_t op2  );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_mul_ui
-               ( mpf_t rop, mpf_t op1, Culong op2 );   
-                               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_div
-               ( mpf_t rop, mpf_t op1, mpf_t op2 );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_ui_div
-               ( mpf_t rop, Culong op1, mpf_t op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_div_ui
-               ( mpf_t rop, mpf_t op1, Culong op2 );   
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_mul_2exp
-               ( mpf_t rop, mpf_t op1, Culong op2 );           
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_div_2exp
-               ( mpf_t rop, mpf_t op1, Culong op2 );
-       
-       
-               
-                       
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_sqrt
-               ( mpf_t rop, mpf_t op );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_sqrt_ui
-               ( mpf_t rop, Culong op );       
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_pow_ui
-               ( mpf_t rop, mpf_t op1, Culong op2 );
-                       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_neg
-               ( mpf_t rop, mpf_t op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_abs
-               ( mpf_t rop, mpf_t op );        
-       
-       
-       // Comparisons
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_cmp
-               ( mpf_t op1, mpf_t op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_cmp_si
-               ( mpf_t op1, Clong op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_cmp_ui
-               ( mpf_t op1, Culong op2 );              
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_cmp_d
-               ( mpf_t op1, Cdouble op2 );     
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_eq
-               ( mpf_t op1, mpf_t op2, Culong op3 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_reldiff
-               ( mpf_t rop, mpf_t op1, mpf_t op2);             
  
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_ceil
-               ( mpf_t rop, mpf_t op );                
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_floor
-               ( mpf_t rop, mpf_t op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpf_trunc
-               ( mpf_t rop, mpf_t op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpf_integer_p
-               ( mpf_t op );
-               
                                
        // ***********************************************
--- 55,59 ----
***************
*** 338,341 ****
--- 141,159 ----
        // TODO Explicit conversions from Q and F
        
+       public static implicit operator Float( Integer n )
+       {
+               Float result = new Float();
+               __gmpf_set_z( result.rawObject, n.rawObject );
+               return result;  
+       }
+       
+       public static explicit operator Float( Rational n )
+       {
+               Float result = new Float();
+               __gmpf_set_q( result.rawObject, n.rawObject );
+               return result;
+       }
+       
+       
        public static explicit operator Culong( Float n )
        {
***************
*** 874,882 ****
        // TODO: Add Fits.... functions
        
        
        
        
! }
  
  
  
--- 692,905 ----
        // TODO: Add Fits.... functions
        
+ 
+               // **********************************************
+       // P/Invoke functions
+       // **********************************************
+       
        
+       [DllImport("libc", CharSet=CharSet.Ansi)]
+       private static extern void free( IntPtr rawObject );
        
+       // Create the C outside C structure
+       [DllImport("libgmp_support", CharSet=CharSet.Ansi)]
+       private static extern mpf_t create_mpf_t();
        
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_set_default_prec( Culong prec );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Culong __gmpf_get_default_prec();
!       
!       
!       // Combined initialization and assignment
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_init( mpf_t x );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_init2( mpf_t x, Culong prec );
! 
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_clear( mpf_t x );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Culong __gmpf_get_prec( mpf_t op );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_set_prec( mpf_t op, Culong prec );
!       
!       // TODO: Review whether to add mpf_set_prec_raw, which is
!       // potentially dangerous
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_init_set( mpf_t rop, mpf_t op );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_init_set_ui
!               ( mpf_t rop, Culong op );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_init_set_si
!               ( mpf_t rop, Clong op );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_init_set_d
!               ( mpf_t rop, double op );               
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpf_init_set_str
!               ( mpf_t rop, string str, int @base );   
!       
!                       
!       // Conversion
! 
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cdouble __gmpf_get_d( mpf_t rop );        
! 
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cdouble __gmpf_get_d_2exp
!               (out Clong exp, mpf_t rop );
!                       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Culong __gmpf_get_ui( mpf_t op );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Clong __gmpf_get_si( mpf_t op );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_set_z( mpf_t rop, mpz_t op );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_set_q( mpf_t rop, mpq_t op );
!       
!       
!       // TODO double-check that this works:
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern string __gmpf_get_str
!               ( IntPtr str, out mp_exp_t expptr, int @base,
!               size_t n_digits, mpf_t op );    
!       
!       
!       // Arithmetic operations (not necessarily operaTORS)
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_add
!               ( mpf_t rop, mpf_t op1, mpf_t op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_add_ui
!               ( mpf_t rop, mpf_t op1, Culong op2 );           
!                       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_sub
!               ( mpf_t rop, mpf_t op1, mpf_t op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_sub_ui
!               ( mpf_t rop, mpf_t op1, Culong op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_ui_sub
!               ( mpf_t rop, Culong op1, mpf_t op2 );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_mul
!               ( mpf_t rop, mpf_t op1, mpf_t op2  );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_mul_ui
!               ( mpf_t rop, mpf_t op1, Culong op2 );   
!                               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_div
!               ( mpf_t rop, mpf_t op1, mpf_t op2 );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_ui_div
!               ( mpf_t rop, Culong op1, mpf_t op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_div_ui
!               ( mpf_t rop, mpf_t op1, Culong op2 );   
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_mul_2exp
!               ( mpf_t rop, mpf_t op1, Culong op2 );           
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_div_2exp
!               ( mpf_t rop, mpf_t op1, Culong op2 );
!       
!       
!               
!                       
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_sqrt
!               ( mpf_t rop, mpf_t op );
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_sqrt_ui
!               ( mpf_t rop, Culong op );       
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_pow_ui
!               ( mpf_t rop, mpf_t op1, Culong op2 );
!                       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_neg
!               ( mpf_t rop, mpf_t op );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_abs
!               ( mpf_t rop, mpf_t op );        
!       
!       
!       // Comparisons
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpf_cmp
!               ( mpf_t op1, mpf_t op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpf_cmp_si
!               ( mpf_t op1, Clong op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpf_cmp_ui
!               ( mpf_t op1, Culong op2 );              
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpf_cmp_d
!               ( mpf_t op1, Cdouble op2 );     
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpf_eq
!               ( mpf_t op1, mpf_t op2, Culong op3 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpf_reldiff
!               ( mpf_t rop, mpf_t op1, mpf_t op2);             
  
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpf_ceil
+               ( mpf_t rop, mpf_t op );                
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpf_floor
+               ( mpf_t rop, mpf_t op );
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpf_trunc
+               ( mpf_t rop, mpf_t op );
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern Cint __gmpf_integer_p
+               ( mpf_t op );
+                       
+       
+       
+ } // class Float
  
  
***************
*** 884,904 ****
  
  
! // public class Testing
! // {
! //    public static void Main( string[] args )
! //    {
! //            Float f = new Float();
! //            Float g = new Float();
! //            
! //            f = 4;
! //            
! //            Console.WriteLine(f);
! //            
! //    
! // //                 Console.WriteLine(f.Precision);
! // //                 Console.WriteLine(g.Precision);
! // //                 Console.WriteLine( ((Float) f*g).Precision );
! //    }
! // }
  
  
--- 907,921 ----
  
  
! 
! public class Testing
! {
!       public static void Main( string[] args )
!       {
!               Rational q = new Rational(12,4);
!               Integer z = (Integer) q;
!               
!               Console.WriteLine("z = {0}", z);
!       }
! }
  
  

Index: gmp-q.cs
===================================================================
RCS file: /cvsroot/dotgnu-libs/GMP-Sharp/gmp-q.cs,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -r1.1.1.1 -r1.2
*** gmp-q.cs    14 Dec 2002 04:09:37 -0000      1.1.1.1
--- gmp-q.cs    14 Dec 2002 09:07:20 -0000      1.2
***************
*** 43,174 ****
        
        
-       // **********************************************
-       // P/Invoke functions
-       // **********************************************
-       
-       
-       [DllImport("libc", CharSet=CharSet.Ansi)]
-       private static extern void free( IntPtr rawObject );
-       
-       // Create the C outside C structure
-       [DllImport("libgmp_support", CharSet=CharSet.Ansi)]
-       private static extern IntPtr create_mpq_t();
- 
-       // Free the inner C structure
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern IntPtr __gmpq_clear( IntPtr rational_number );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern IntPtr __gmpq_canonicalize( IntPtr rop );
-       
-       // Rational numbers (mpq) lack combined init and assign
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_init( IntPtr dest_rational );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set( IntPtr rop, IntPtr op );
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_z( IntPtr rop, IntPtr op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_ui( IntPtr rop, Culong op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_si( IntPtr rop, Clong op );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_d( IntPtr rop, double op );       
        
-                       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_f( IntPtr rop, IntPtr op );       
-                       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern int __gmpq_set_str( IntPtr rop, string str, int 
@base );  
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_num( IntPtr rational, IntPtr 
numerator );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_set_den( IntPtr rational, IntPtr 
denominator );       
-       
-                       
-       // Conversion from rational
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern double __gmpq_get_d(IntPtr op );
- 
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern string __gmpq_get_str
-               ( IntPtr str, int @base, IntPtr rawObject );    
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_get_num
-               ( IntPtr numerator, IntPtr rational );
-               
-               [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_get_den
-               ( IntPtr denominator, IntPtr rational );        
-               
-               
-       // Arithmetic operations (not necessarily operaTORS)
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_add
-               ( IntPtr dest, IntPtr op1, IntPtr op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_sub
-               ( IntPtr dest, IntPtr op1, IntPtr op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_mul
-               ( IntPtr dest, IntPtr op1, IntPtr op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_mul_2exp
-               ( IntPtr dest, IntPtr op1, Culong op2 );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_div
-               ( IntPtr q, IntPtr n, IntPtr d );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_div_2exp
-               ( IntPtr r, IntPtr n, Culong b );               
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_neg
-               ( IntPtr negated_operand, IntPtr operand );
-                       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_abs
-               ( IntPtr rop, IntPtr op );              
-       
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern void __gmpq_inv
-               ( IntPtr inverted_number, IntPtr number );      
-               
  
-       // Comparisons
-       
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpq_cmp
-               ( IntPtr a, IntPtr b );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpq_cmp_si
-               ( IntPtr a, Clong b );
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpq_cmp_ui
-               ( IntPtr a, Culong b );         
-               
-       [DllImport("libgmp", CharSet=CharSet.Ansi)]
-       private static extern Cint __gmpq_equal
-               ( IntPtr a, IntPtr b ); 
-               
                                        
        // ***********************************************
--- 43,47 ----
***************
*** 192,209 ****
        
        
!       public Rational( Culong value )
        {
                rawObject = create_mpq_t();
                __gmpq_init( rawObject );
!               __gmpq_set_ui( rawObject, value);
        }
        
        
!       public Rational( Clong value )
        {
-               Console.WriteLine("Rational( Clong value = {0} )", value );
                rawObject = create_mpq_t();
                __gmpq_init( rawObject );
!               __gmpq_set_si( rawObject, value );
        }
        
--- 65,81 ----
        
        
!       public Rational( Culong op1, Culong op2 )
        {
                rawObject = create_mpq_t();
                __gmpq_init( rawObject );
!               __gmpq_set_ui( rawObject, op1, op2);
        }
        
        
!       public Rational( Clong op1, Clong op2 )
        {
                rawObject = create_mpq_t();
                __gmpq_init( rawObject );
!               __gmpq_set_si( rawObject, op1, op2 );
        }
        
***************
*** 224,229 ****
        }
        
!       // TODO Add constructor from mpf Float
!       
                
        public Rational( Rational n )
--- 96,106 ----
        }
        
! 
!       public Rational( Float value )
!       {
!               rawObject = create_mpq_t();
!               __gmpq_init( rawObject );
!               __gmpq_set_f( rawObject, value.rawObject );
!       }
                
        public Rational( Rational n )
***************
*** 242,256 ****
        
        
! //    ~Rational()
! //    {
! //            __gmpq_clear( rawObject );
! //            free( rawObject );
! //    }
  
        
!       // Conversions
!       // TODO: Need conversions to and from Integer?
!       // TODO: Should numerator and denom be fields?
! 
        public static explicit operator Cdouble( Rational n )
        {
--- 119,143 ----
        
        
!       ~Rational()
!       {
!               __gmpq_clear( rawObject );
!               free( rawObject );
!       }
  
        
!       
!       public static implicit operator Rational( Integer n )
!       {
!               return new Rational( n );
!       }
!       
!       // People might not like these answers... 1.65 comes out
!       // as some horrible fraction (not 33/20...)
!       public static implicit operator Rational( Float n )
!       {
!               return new Rational( n );
!       }
!       
!       
        public static explicit operator Cdouble( Rational n )
        {
***************
*** 460,465 ****
        }
        
        
! }
  
  
--- 347,479 ----
        }
        
+               // **********************************************
+       // P/Invoke functions
+       // **********************************************
+       
+       
+       [DllImport("libc", CharSet=CharSet.Ansi)]
+       private static extern void free( IntPtr rawObject );
+       
+       // Create the C outside C structure
+       [DllImport("libgmp_support", CharSet=CharSet.Ansi)]
+       private static extern IntPtr create_mpq_t();
+ 
+       // Free the inner C structure
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern IntPtr __gmpq_clear( IntPtr rational_number );
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern IntPtr __gmpq_canonicalize( IntPtr rop );
+       
+       // Rational numbers (mpq) lack combined init and assign
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_init( IntPtr dest_rational );
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set( IntPtr rop, IntPtr op );
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_z( IntPtr rop, IntPtr op );
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_ui( IntPtr rop, Culong op1, 
Culong op2 );
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_si( IntPtr rop, Clong op1, Clong 
op2 );
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_d( IntPtr rop, double op );       
        
+                       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_f( IntPtr rop, IntPtr op );       
+                       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern int __gmpq_set_str( IntPtr rop, string str, int 
@base );  
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_num( IntPtr rational, IntPtr 
numerator );
+               
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_set_den( IntPtr rational, IntPtr 
denominator );       
+       
+                       
+       // Conversion from rational
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern double __gmpq_get_d(IntPtr op );
+ 
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern string __gmpq_get_str
+               ( IntPtr str, int @base, IntPtr rawObject );    
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_get_num
+               ( IntPtr numerator, IntPtr rational );
+               
+               [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpq_get_den
+               ( IntPtr denominator, IntPtr rational );        
+               
+               
+       // Arithmetic operations (not necessarily operaTORS)
        
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_add
!               ( IntPtr dest, IntPtr op1, IntPtr op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_sub
!               ( IntPtr dest, IntPtr op1, IntPtr op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_mul
!               ( IntPtr dest, IntPtr op1, IntPtr op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_mul_2exp
!               ( IntPtr dest, IntPtr op1, Culong op2 );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_div
!               ( IntPtr q, IntPtr n, IntPtr d );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_div_2exp
!               ( IntPtr r, IntPtr n, Culong b );               
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_neg
!               ( IntPtr negated_operand, IntPtr operand );
!                       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_abs
!               ( IntPtr rop, IntPtr op );              
!       
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern void __gmpq_inv
!               ( IntPtr inverted_number, IntPtr number );      
!               
! 
!       // Comparisons
!       
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpq_cmp
!               ( IntPtr a, IntPtr b );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpq_cmp_si
!               ( IntPtr a, Clong b );
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpq_cmp_ui
!               ( IntPtr a, Culong b );         
!               
!       [DllImport("libgmp", CharSet=CharSet.Ansi)]
!       private static extern Cint __gmpq_equal
!               ( IntPtr a, IntPtr b ); 
! 
! } // class Rational
  
  

Index: gmp-z.cs
===================================================================
RCS file: /cvsroot/dotgnu-libs/GMP-Sharp/gmp-z.cs,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -C2 -r1.1.1.1 -r1.2
*** gmp-z.cs    14 Dec 2002 04:09:37 -0000      1.1.1.1
--- gmp-z.cs    14 Dec 2002 09:07:20 -0000      1.2
***************
*** 34,37 ****
--- 34,40 ----
  using Cint = System.Int32;
  using SizeType = System.Int32;
+ using mpz_t = System.IntPtr;
+ using mpq_t = System.IntPtr;
+ using mpf_t = System.IntPtr;
  
  namespace GMP
***************
*** 95,101 ****
        }
        
        
!       // Conversions
!       // TODO Explicit conversions from Q and F
        
        public static explicit operator Culong( Integer n )
--- 98,115 ----
        }
        
+ 
+       public static explicit operator Integer( Rational n )
+       {
+               Integer result = new Integer();
+               __gmpz_set_q( result.rawObject, n.rawObject );
+               return result;
+       }
        
!       public static explicit operator Integer( Float n )
!       {
!               Integer result = new Integer();
!               __gmpz_set_f( result.rawObject, n.rawObject );
!               return result;
!       }
        
        public static explicit operator Culong( Integer n )
***************
*** 1038,1041 ****
--- 1052,1065 ----
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern IntPtr __gmpz_clear( IntPtr rawObject );
+       
+       
+       // Assignment functions (most types use combined initialization
+       // and assignment, but it's not available for some source types
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpz_set_q( mpz_t rop, mpq_t op );
+       
+       [DllImport("libgmp", CharSet=CharSet.Ansi)]
+       private static extern void __gmpz_set_f( mpz_t rop, mpf_t op );
+       
        
        // Combined initialization and assignment




reply via email to

[Prev in Thread] Current Thread [Next in Thread]