1 /* emacs edit mode for this file is -*- C++ -*- */
2 
3 
4 #include "config.h"
5 
6 
7 #include "cf_assert.h"
8 
9 #include "cf_defs.h"
10 #include "singext.h"
11 #include "int_cf.h"
12 #include "int_int.h"
13 #include "int_rat.h"
14 #include "imm.h"
15 #include "cf_factory.h"
16 
17 #include "factory/cf_gmp.h"
18 
19 
gmp_numerator(const CanonicalForm & f,mpz_ptr result)20 void gmp_numerator ( const CanonicalForm & f, mpz_ptr result )
21 {
22     InternalCF * ff = f.getval();
23     ASSERT( ! is_imm( ff ), "illegal type" );
24     if ( ff->levelcoeff() == IntegerDomain )
25     {
26         mpz_init_set( result, (InternalInteger::MPI( ff )) );
27         ff->deleteObject();
28     }
29     else  if ( ff->levelcoeff() == RationalDomain )
30     {
31         mpz_init_set( result, (InternalRational::MPQNUM( ff )) );
32         ff->deleteObject();
33     }
34     else
35     {
36         ASSERT( 0, "illegal type" );
37     }
38 }
39 
gmp_denominator(const CanonicalForm & f,mpz_ptr result)40 void gmp_denominator ( const CanonicalForm & f, mpz_ptr result )
41 {
42     InternalCF * ff = f.getval();
43     ASSERT( ! is_imm( ff ), "illegal type" );
44     if ( ff->levelcoeff() == IntegerDomain )
45     {
46         mpz_init_set_si( result, 1 );
47         ff->deleteObject();
48     }
49     else  if ( ff->levelcoeff() == RationalDomain )
50     {
51         mpz_init_set( result, (InternalRational::MPQDEN( ff )) );
52         ff->deleteObject();
53     }
54     else
55     {
56         ASSERT( 0, "illegal type" );
57     }
58 }
59 
gf_value(const CanonicalForm & f)60 int gf_value (const CanonicalForm & f )
61 {
62     InternalCF * ff = f.getval();
63     return ((intptr_t)ff) >>2;
64 }
65 
make_cf(const mpz_ptr n)66 CanonicalForm make_cf ( const mpz_ptr n )
67 {
68     return CanonicalForm( CFFactory::basic( n ) );
69 }
70 
make_cf(const mpz_ptr n,const mpz_ptr d,bool normalize)71 CanonicalForm make_cf ( const mpz_ptr n, const mpz_ptr d, bool normalize )
72 {
73     return CanonicalForm( CFFactory::rational( n, d, normalize ) );
74 }
75 
make_cf_from_gf(const int z)76 CanonicalForm make_cf_from_gf ( const int z )
77 {
78     return CanonicalForm(int2imm_gf(z));
79 }
80