[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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,
Marcus Urban <address@hidden> <=
- Prev by Date:
[Dotgnu-libs-commits] CVS: GMP-Sharp log,1.1.1.1,NONE
- Next by Date:
[Dotgnu-libs-commits] CVS: GMP-Sharp addsub.cs,1.1.1.1,1.2 hamdist.cs,1.1.1.1,1.2 powm.cs,1.1.1.1,1.2
- Previous by thread:
[Dotgnu-libs-commits] CVS: GMP-Sharp log,1.1.1.1,NONE
- Next by thread:
[Dotgnu-libs-commits] CVS: GMP-Sharp addsub.cs,1.1.1.1,1.2 hamdist.cs,1.1.1.1,1.2 powm.cs,1.1.1.1,1.2
- Index(es):