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 Random.cs,NONE,1.1


From: Marcus Urban <address@hidden>
Subject: [Dotgnu-libs-commits] CVS: GMP-Sharp Random.cs,NONE,1.1
Date: Sun, 15 Dec 2002 02:55:49 -0500

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

Added Files:
        Random.cs 
Log Message:
Initial checkout (moved class from gmp-z.cs)


--- NEW FILE ---
using System;
using System.Runtime.InteropServices;
using GMP;

using mpz_t = System.IntPtr;
using Culong = System.UInt32;
using Clong = System.Int32;

namespace GMP
{

public class Random
{
        // Random number functions in Integer, Rational, and Float
        // will need access to the rawObject
        internal IntPtr rawObject;
        
                
                
                
        public Random()
        {
                rawObject = create_gmp_randstate_struct();
                __gmp_randinit_default( rawObject );
        }
        
        
        
        public Random( Integer a, Culong c, Culong m2exp )
        {
                rawObject = create_gmp_randstate_struct();
                __gmp_randinit_lc_2exp( rawObject, a.rawObject, c, m2exp );
        }
        
        
        public Random( Culong size )
        {
                rawObject = create_gmp_randstate_struct();
                __gmp_randinit_lc_2exp_size( rawObject, size );
        }
        
        
        ~Random()
        {
                __gmp_randclear( rawObject );
                free( rawObject );
        }
        
        
        public void Seed( Integer value )
        {
                __gmp_randseed( rawObject, value.rawObject );
        }
        
        
        public void Seed ( Culong value )
        {
                __gmp_randseed_ui( rawObject, value );
        }
        
        
        public Integer IntegerUBits( Culong n )
        {
                Integer number = new Integer();
                __gmpz_urandomb( number.rawObject, this.rawObject, n );
                return number;
        }
        
        
        public Integer IntegerURange( Integer n )
        {
                Integer number = new Integer();
                __gmpz_urandomm( number.rawObject, this.rawObject, n.rawObject 
);
                return number;
        }

        
        public Integer IntegerRBits( Culong n )
        {
                Integer number = new Integer();
                __gmpz_rrandomb( number.rawObject, this.rawObject, n );
                return number;
        }

        
        public Float FloatUBits( Culong nbits )
        {
                Float number = new Float();
                __gmpf_urandomb( number.rawObject, rawObject, nbits );
                return number;
        }
        
        // P/Invoke functions
        
        // Create the C structure for random number state
        [DllImport("libgmp_support", CharSet=CharSet.Ansi)]
        private static extern IntPtr create_gmp_randstate_struct();
        
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmp_randclear( IntPtr state );
        
        [DllImport("libc", CharSet=CharSet.Ansi)]
        private static extern void free( IntPtr rawObject );
        
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmp_randinit_default( IntPtr state );
                
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmp_randinit_lc_2exp( IntPtr state,
                mpz_t a, Culong c, Culong m2exp );

        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmp_randinit_lc_2exp_size(
                IntPtr state, Culong size );
                
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmp_randseed( IntPtr state,
                mpz_t seed );   
                
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmp_randseed_ui( IntPtr state,
                Culong seed );  

        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmpz_urandomb
                ( IntPtr result, IntPtr state, Culong n );
        
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmpz_urandomm
                ( IntPtr result, IntPtr state, IntPtr n );
        
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmpz_rrandomb
                ( IntPtr result, IntPtr state, Culong n );
        
        [DllImport("libgmp", CharSet=CharSet.Ansi)]
        private static extern void __gmpf_urandomb
                ( IntPtr result, IntPtr state, Culong n );      
                        
} // Class Random

} // namespace GMP




reply via email to

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