My Project  debian-1:4.1.1-p2+ds-4build2
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | Friends
InternalInteger Class Reference

factory's class for integers More...

#include <int_int.h>

Public Member Functions

void * operator new (size_t)
 
void operator delete (void *addr, size_t)
 
 InternalInteger ()
 
 InternalInteger (const InternalCF &)
 
 InternalInteger (const int i)
 
 InternalInteger (const long i)
 
 InternalInteger (const char *str, const int base=10)
 
 InternalInteger (const mpz_ptr mpi)
 
 ~InternalInteger ()
 
InternalCFdeepCopyObject () const
 
const char * classname () const
 
void print (OSTREAM &, char *)
 
InternalCFgenZero ()
 
InternalCFgenOne ()
 
bool is_imm () const
 
int levelcoeff () const
 
InternalCFneg ()
 InternalCF * InternalInteger::neg () More...
 
int comparesame (InternalCF *)
 
InternalCFaddsame (InternalCF *)
 
InternalCFsubsame (InternalCF *)
 
InternalCFmulsame (InternalCF *)
 
InternalCFdividesame (InternalCF *)
 
InternalCFmodulosame (InternalCF *)
 
InternalCFdivsame (InternalCF *)
 
InternalCFmodsame (InternalCF *)
 
void divremsame (InternalCF *, InternalCF *&, InternalCF *&)
 
bool divremsamet (InternalCF *, InternalCF *&, InternalCF *&)
 
int comparecoeff (InternalCF *)
 
InternalCFaddcoeff (InternalCF *)
 
InternalCFsubcoeff (InternalCF *, bool)
 
InternalCFmulcoeff (InternalCF *)
 
InternalCFdividecoeff (InternalCF *, bool)
 
InternalCFmodulocoeff (InternalCF *, bool)
 
InternalCFdivcoeff (InternalCF *, bool)
 
InternalCFmodcoeff (InternalCF *, bool)
 
void divremcoeff (InternalCF *, InternalCF *&, InternalCF *&, bool)
 
bool divremcoefft (InternalCF *, InternalCF *&, InternalCF *&, bool)
 
InternalCFbgcdsame (const InternalCF *const) const
 
InternalCFbgcdcoeff (const InternalCF *const)
 
InternalCFbextgcdsame (InternalCF *, CanonicalForm &, CanonicalForm &)
 
InternalCFbextgcdcoeff (InternalCF *, CanonicalForm &, CanonicalForm &)
 
long intval () const
 
int intmod (int p) const
 
int sign () const
 int InternalInteger::sign () const More...
 
InternalCFsqrt ()
 InternalCF * InternalInteger::sqrt () More...
 
int ilog2 ()
 int InternalInteger::ilog2 () More...
 
- Public Member Functions inherited from InternalCF
 InternalCF ()
 
 InternalCF (const InternalCF &)
 
virtual ~InternalCF ()
 
int deleteObject ()
 
InternalCFcopyObject ()
 
virtual int level () const
 
virtual int type () const
 
virtual Variable variable () const
 
virtual bool inBaseDomain () const
 
virtual bool inExtension () const
 
virtual bool inCoeffDomain () const
 
virtual bool inPolyDomain () const
 
virtual bool inQuotDomain () const
 
virtual bool isZero () const
 
virtual bool isOne () const
 bool InternalCF::isOne, isZero () const More...
 
virtual bool isUnivariate () const
 
virtual InternalCFnum ()
 InternalCF * InternalCF::num (), den () More...
 
virtual InternalCFden ()
 
virtual InternalCFinvert ()
 
virtual InternalCFtryInvert (const CanonicalForm &, bool &)
 
virtual InternalCFtryMulsame (InternalCF *, const CanonicalForm &)
 
virtual InternalCFtryDivsame (InternalCF *, const CanonicalForm &, bool &)
 
virtual bool tryDivremsamet (InternalCF *, InternalCF *&, InternalCF *&, const CanonicalForm &, bool &)
 
virtual InternalCFtryDividecoeff (InternalCF *, bool, const CanonicalForm &, bool &)
 
virtual InternalCFtryDivcoeff (InternalCF *, bool, const CanonicalForm &, bool &)
 
virtual bool tryDivremcoefft (InternalCF *, InternalCF *&, InternalCF *&, bool, const CanonicalForm &, bool &)
 
virtual CanonicalForm lc ()
 CanonicalForm InternalCF::lc (), Lc (), LC () More...
 
virtual CanonicalForm Lc ()
 
virtual CanonicalForm LC ()
 
virtual CanonicalForm coeff (int i)
 CanonicalForm InternalCF::coeff ( int i ) More...
 
virtual int degree ()
 int InternalCF::degree () More...
 
virtual int taildegree ()
 
virtual CanonicalForm tailcoeff ()
 CanonicalForm InternalCF::tailcoeff (), int InternalCF::taildegree () More...
 
- Public Member Functions inherited from omallocClass
void * operator new (size_t size) throw (std::bad_alloc)
 
void operator delete (void *block) throw ()
 
void * operator new[] (size_t size) throw (std::bad_alloc)
 
void operator delete[] (void *block) throw ()
 
void * operator new (size_t size, const std::nothrow_t &) throw ()
 
void * operator new[] (size_t size, const std::nothrow_t &) throw ()
 

Private Member Functions

InternalCFnormalizeMyself ()
 normalizeMyself(), uiNormalizeMyself() - normalize CO. More...
 
InternalCFuiNormalizeMyself ()
 uiNormalizeMyself()’ is the same as ‘normalizeMyself()’ except that CO is expected to be non-negative. More...
 

Static Private Member Functions

static InternalCFnormalizeMPI (mpz_ptr)
 normalizeMPI(), uiNormalizeMPI() - normalize a mpi. More...
 
static InternalCFuiNormalizeMPI (mpz_ptr)
 uiNormalizeMPI()’ is the same as ‘normalizeMPI()’ except that ‘aMpi’ is expected to be non-begative. More...
 
static mpz_ptr MPI (const InternalCF *const c)
 MPI() - return underlying mpz_t of ‘c’. More...
 

Private Attributes

mpz_t thempi
 

Static Private Attributes

static const omBin InternalInteger_bin = omGetSpecBin(sizeof(InternalInteger))
 

Friends

class InternalRational
 
void gmp_numerator (const CanonicalForm &f, mpz_ptr result)
 
void gmp_denominator (const CanonicalForm &f, mpz_ptr result)
 
void getmpi (InternalCF *value, mpz_t mpi)
 

Additional Inherited Members

- Protected Member Functions inherited from InternalCF
int getRefCount ()
 
void incRefCount ()
 
int decRefCount ()
 

Detailed Description

factory's class for integers

an integer is represented as an mpz_t thempi

See also
InternalRational

Definition at line 40 of file int_int.h.

Constructor & Destructor Documentation

◆ InternalInteger() [1/6]

InternalInteger::InternalInteger ( )
inline

Definition at line 70 of file int_int.h.

70 { mpz_init( thempi ); }

◆ InternalInteger() [2/6]

InternalInteger::InternalInteger ( const InternalCF )
inline

Definition at line 71 of file int_int.h.

72  {
73  ASSERT( 0, "ups there is something wrong in your code" );
74  }

◆ InternalInteger() [3/6]

InternalInteger::InternalInteger ( const int  i)
inline

Definition at line 75 of file int_int.h.

75 { mpz_init_set_si( thempi, (long)i );}

◆ InternalInteger() [4/6]

InternalInteger::InternalInteger ( const long  i)
inline

Definition at line 76 of file int_int.h.

76 { mpz_init_set_si( thempi, i );}

◆ InternalInteger() [5/6]

InternalInteger::InternalInteger ( const char *  str,
const int  base = 10 
)
inline

Definition at line 77 of file int_int.h.

78  { mpz_init_set_str( thempi, str, base ); }

◆ InternalInteger() [6/6]

InternalInteger::InternalInteger ( const mpz_ptr  mpi)
inline

Definition at line 79 of file int_int.h.

79 {thempi[0]=*mpi;}

◆ ~InternalInteger()

InternalInteger::~InternalInteger ( )
inline

Definition at line 80 of file int_int.h.

80 { mpz_clear( thempi ); }

Member Function Documentation

◆ addcoeff()

InternalCF * InternalInteger::addcoeff ( InternalCF c)
virtual

Reimplemented from InternalCF.

Definition at line 205 of file int_int.cc.

206 {
207  ASSERT( ::is_imm( c ) == INTMARK, "incompatible base coefficients" );
208  long cc = imm2int( c );
209  if ( getRefCount() > 1 )
210  {
211  decRefCount();
212  mpz_t dummy;
213  mpz_init( dummy );
214  if ( cc < 0 )
215  mpz_sub_ui( dummy, thempi, -cc );
216  else
217  mpz_add_ui( dummy, thempi, cc );
218  if ( mpz_is_imm( dummy ) )
219  {
220  InternalCF * res = int2imm( mpz_get_si( dummy ) );
221  mpz_clear( dummy );
222  return res;
223  }
224  else
225  return new InternalInteger( dummy );
226  }
227  else
228  {
229  if ( cc < 0 )
230  mpz_sub_ui( thempi, thempi, -cc );
231  else
232  mpz_add_ui( thempi, thempi, cc );
233  if ( mpz_is_imm( thempi ) )
234  {
235  InternalCF * res = int2imm( mpz_get_si( thempi ) );
236  delete this;
237  return res;
238  }
239  else
240  return this;
241  }
242 }

◆ addsame()

InternalCF * InternalInteger::addsame ( InternalCF c)
virtual

Reimplemented from InternalCF.

Definition at line 85 of file int_int.cc.

86 {
87  if ( getRefCount() > 1 )
88  {
89  decRefCount();
90  mpz_t dummy;
91  mpz_init( dummy );
92  mpz_add( dummy, thempi, MPI( c ) );
93  if ( mpz_is_imm( dummy ) )
94  {
95  InternalCF * res = int2imm( mpz_get_si( dummy ) );
96  mpz_clear( dummy );
97  return res;
98  }
99  else
100  return new InternalInteger( dummy );
101  }
102  else
103  {
104  mpz_add( thempi, thempi, MPI( c ) );
105  if ( mpz_is_imm( thempi ) )
106  {
107  InternalCF * res = int2imm( mpz_get_si( thempi ) );
108  delete this;
109  return res;
110  }
111  else
112  return this;
113  }
114 }

◆ bextgcdcoeff()

InternalCF * InternalInteger::bextgcdcoeff ( InternalCF c,
CanonicalForm a,
CanonicalForm b 
)
virtual
See also
CanonicalForm::bextgcd(), InternalInteger::bextgcdsame()

Reimplemented from InternalCF.

Definition at line 464 of file int_int.cc.

465 {
466  ASSERT( ::is_imm( c ) == INTMARK, "incompatible base coefficients" );
467 
468  // simply return 1 if we are calculating over the rationals
470  {
471  a = 1/CanonicalForm( copyObject() ); b = 0;
472  return int2imm( 1 );
473  }
474 
475  long cInt = imm2int( c );
476 
477  // trivial cases
478  if ( cInt == 1 || cInt == -1 )
479  {
480  a = 0; b = cInt;
481  return int2imm( 1 );
482  }
483  else if ( cInt == 0 )
484  {
485  a = 1; b = 0;
486  return copyObject();
487  }
488 
489  // calculate q and r such that CO = q*cInt + r
490  InternalCF * q = 0, * r = 0;
491  divremcoeff( c, q, r, false );
492 
493  // we do not repeat all the code to calculate the gcd of two
494  // immediates. Note that r is an immediate since c != 0, so
495  // we do not have to destroy it. q is destroyed by the
496  // CanonicalForm destructor, hence we do not need to worry
497  // about it, either.
498  CanonicalForm aPrime, bPrime;
499  CanonicalForm result = bextgcd( c, r, aPrime, bPrime );
500  a = bPrime;
501  b = aPrime - CanonicalForm( q ) * bPrime;
502 
503  return result.getval();
504 }

◆ bextgcdsame()

InternalCF * InternalInteger::bextgcdsame ( InternalCF c,
CanonicalForm a,
CanonicalForm b 
)
virtual
See also
CanonicalForm::bextgcd(), InternalInteger::bextgcdcoeff()

Reimplemented from InternalCF.

Definition at line 409 of file int_int.cc.

410 {
411  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain, "incompatible base coefficients" );
412 
413  // simply return 1 if we are calculating over the rationals
415  {
416  a = 1/CanonicalForm( copyObject() ); b = 0;
417  return int2imm( 1 );
418  }
419 
420  // calculate extended gcd
421  mpz_t result, aMPI, bMPI;
422  mpz_init( result );
423  mpz_init( aMPI );
424  mpz_init( bMPI );
425  mpz_gcdext( result, aMPI, bMPI, thempi, MPI( c ) );
426 
427  // check and modify signs
428  if ( mpz_sgn( result ) < 0 )
429  {
430  mpz_neg( result, result );
431  mpz_neg( aMPI, aMPI );
432  mpz_neg( bMPI, bMPI );
433  }
434 
435  // postconditioning of result
436  if ( mpz_is_imm( aMPI ) )
437  {
438  a = CanonicalForm( int2imm( mpz_get_si( aMPI ) ) );
439  mpz_clear( aMPI );
440  }
441  else
442  a = CanonicalForm( new InternalInteger( aMPI ) );
443  if ( mpz_is_imm( bMPI ) )
444  {
445  b = CanonicalForm( int2imm( mpz_get_si( bMPI ) ) );
446  mpz_clear( bMPI );
447  }
448  else
449  b = CanonicalForm( new InternalInteger( bMPI ) );
450  if ( mpz_is_imm( result ) )
451  {
452  InternalCF * res = int2imm( mpz_get_si( result ) );
453  mpz_clear( result );
454  return res;
455  }
456  else
457  return new InternalInteger( result );
458 }

◆ bgcdcoeff()

InternalCF * InternalInteger::bgcdcoeff ( const InternalCF * const  c)
virtual
See also
CanonicalForm::bgcd(), InternalInteger::bgcdsame()

Reimplemented from InternalCF.

Definition at line 377 of file int_int.cc.

378 {
379  ASSERT( ::is_imm( c ) == INTMARK, "incompatible base coefficients" );
380 
381  // simply return 1 if we are calculating over the rationals
383  return int2imm( 1 );
384 
385  long cInt = imm2int( c );
386 
387  // trivial cases
388  if ( cInt == 1 || cInt == -1 )
389  return int2imm( 1 );
390  else if ( cInt == 0 )
391  return copyObject();
392 
393  // calculate gcd. We need a positive operand since
394  // `mpz_gcd_ui()' operates an unsigned int's only.
395  if ( cInt < 0 ) cInt = -cInt;
396  mpz_t dummy;
397  mpz_init( dummy );
398  // we do not need dummy since we know that cInt != 0
399  cInt = mpz_gcd_ui( dummy, thempi, cInt );
400  mpz_clear( dummy );
401  if ( cInt < 0 ) cInt = -cInt;
402  return int2imm( cInt );
403 }

◆ bgcdsame()

InternalCF * InternalInteger::bgcdsame ( const InternalCF * const  c) const
virtual
See also
CanonicalForm::bgcd(), InternalInteger::bgcdcoeff()

Reimplemented from InternalCF.

Definition at line 348 of file int_int.cc.

349 {
350  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain, "incompatible base coefficients" );
351 
352  // simply return 1 if we are calculating over the rationals
354  return int2imm( 1 );
355 
356  // calculate gcd
357  mpz_t result;
358  mpz_init( result );
359  mpz_gcd( result, thempi, MPI( c ) );
360  mpz_abs( result, result );
361 
362  // check for immediate result
363  if ( mpz_is_imm( result ) )
364  {
365  InternalCF * res = int2imm( mpz_get_si( result ) );
366  mpz_clear( result );
367  return res;
368  }
369  else
370  return new InternalInteger( result );
371 }

◆ classname()

const char* InternalInteger::classname ( ) const
inlinevirtual

Reimplemented from InternalCF.

Definition at line 82 of file int_int.h.

82 { return "InternalInteger"; }

◆ comparecoeff()

int InternalInteger::comparecoeff ( InternalCF c)
virtual
See also
CanonicalForm::operator <(), CanonicalForm::operator ==(), InternalInteger::comparesame()

Reimplemented from InternalCF.

Definition at line 198 of file int_int.cc.

199 {
200  ASSERT( ::is_imm( c ) == INTMARK, "incompatible base coefficients" );
201  return mpz_cmp_si( thempi, imm2int( c ) );
202 }

◆ comparesame()

int InternalInteger::comparesame ( InternalCF c)
virtual
See also
CanonicalForm::operator <(), CanonicalForm::operator ==(), InternalInteger::comparecoeff()

Reimplemented from InternalCF.

Definition at line 188 of file int_int.cc.

189 {
190  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain, "incompatible base coefficients" );
191  return mpz_cmp( thempi, MPI( c ) );
192 }

◆ deepCopyObject()

InternalCF * InternalInteger::deepCopyObject ( ) const
virtual

Reimplemented from InternalCF.

Definition at line 18 of file int_int.cc.

19 {
20  mpz_t dummy;
21  mpz_init_set( dummy, thempi );
22  return new InternalInteger( dummy );
23 }

◆ divcoeff()

InternalCF * InternalInteger::divcoeff ( InternalCF c,
bool  invert 
)
virtual
See also
CanonicalForm::div(), InternalInteger::divsame()

Reimplemented from InternalCF.

Definition at line 151 of file int_intdiv.cc.

152 {
153  ASSERT( ::is_imm( c ) == INTMARK,
154  "type error: immediate integer expected" );
155  ASSERT( invert || imm2int( c ) != 0,
156  "math error: divide by zero" );
157  ASSERT( ! invert || imm2int( c ) == 0,
158  "math error: c does not divide CO" );
159 
160  if ( invert ) {
161  if ( deleteObject() ) delete this;
162  // this may happen iff `c' == 0
163  return int2imm( 0 );
164  } else if ( getRefCount() > 1 ) {
165  deleteObject();
166  mpz_t mpiC;
167  mpz_t mpiResult;
168  mpz_init_set_si( mpiC, imm2int( c ) );
169  mpz_init( mpiResult );
170  mpz_divexact( mpiResult, thempi, mpiC );
171  mpz_clear( mpiC );
172  return normalizeMPI( mpiResult );
173  } else {
174  mpz_t mpiC;
175  mpz_init_set_si( mpiC, imm2int( c ) );
176  mpz_divexact( thempi, thempi, mpiC );
177  mpz_clear( mpiC );
178  return normalizeMyself();
179  }
180 }

◆ dividecoeff()

InternalCF * InternalInteger::dividecoeff ( InternalCF c,
bool  invert 
)
virtual
See also
CanonicalForm::operator /(), InternalInteger::dividesame()

Reimplemented from InternalCF.

Definition at line 69 of file int_intdiv.cc.

70 {
71  ASSERT( ::is_imm( c ) == INTMARK,
72  "type error: immediate integer expected" );
73  ASSERT( invert || imm2int( c ) != 0,
74  "math error: divide by zero" );
75 
76  long intC = imm2int( c );
77 
79  mpz_t n, d;
80  if ( invert ) {
81  mpz_init_set_si( n, intC );
82  mpz_init_set( d, thempi );
83  } else {
84  mpz_init_set( n, thempi );
85  mpz_init_set_si( d, intC );
86  }
87  if ( deleteObject() ) delete this;
89  return result->normalize_myself();
90  }
91 
92  if ( invert ) {
93  int mpiSign = mpz_sgn( thempi );
94  if ( deleteObject() ) delete this;
95  if ( intC >= 0 )
96  return int2imm( 0 );
97  else
98  return int2imm( -mpiSign );
99  } else if ( getRefCount() > 1 ) {
100  decRefCount();
101  mpz_t mpiResult;
102  mpz_init( mpiResult );
103  if ( intC > 0 )
104  mpz_fdiv_q_ui( mpiResult, thempi, intC );
105  else {
106  mpz_fdiv_q_ui( mpiResult, thempi, -intC );
107  mpz_neg( mpiResult, mpiResult );
108  }
109  return normalizeMPI( mpiResult );
110  } else {
111  if ( intC > 0 )
112  mpz_fdiv_q_ui( thempi, thempi, intC );
113  else {
114  mpz_fdiv_q_ui( thempi, thempi, -intC );
115  mpz_neg( thempi, thempi );
116  }
117  return normalizeMyself();
118  }
119 }

◆ dividesame()

InternalCF * InternalInteger::dividesame ( InternalCF c)
virtual
See also
CanonicalForm::operator /(), InternalInteger::dividecoeff()

Reimplemented from InternalCF.

Definition at line 28 of file int_intdiv.cc.

29 {
30  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain,
31  "type error: InternalInteger expected" );
32 
33  if ( c == this ) {
34  if ( deleteObject() ) delete this;
35  return int2imm( 1 );
36  }
37 
39  mpz_t n, d;
40  mpz_init_set( n, thempi );
41  mpz_init_set( d, MPI( c ) );
42  if ( deleteObject() ) delete this;
44  return result->normalize_myself();
45  }
46 
47  if ( getRefCount() > 1 ) {
48  decRefCount();
49  mpz_t mpiResult;
50  mpz_init( mpiResult );
51  if ( mpz_sgn( MPI( c ) ) > 0 )
52  mpz_fdiv_q( mpiResult, thempi, MPI( c ) );
53  else
54  mpz_cdiv_q( mpiResult, thempi, MPI( c ) );
55  return normalizeMPI( mpiResult );
56  } else {
57  if ( mpz_sgn( MPI( c ) ) > 0 )
58  mpz_fdiv_q( thempi, thempi, MPI( c ) );
59  else
60  mpz_cdiv_q( thempi, thempi, MPI( c ) );
61  return normalizeMyself();
62  }
63 }

◆ divremcoeff()

void InternalInteger::divremcoeff ( InternalCF c,
InternalCF *&  quot,
InternalCF *&  rem,
bool  invert 
)
virtual
See also
CanonicalForm::divrem(), InternalInteger::divremsame()

Reimplemented from InternalCF.

Definition at line 308 of file int_intdiv.cc.

309 {
310  ASSERT( ::is_imm( c ) == INTMARK,
311  "type error: immediate integer expected" );
312  ASSERT( invert || imm2int( c ) != 0,
313  "math error: divide by zero" );
314 
315  long intC = imm2int( c );
316 
317  if ( cf_glob_switches.isOn( SW_RATIONAL ) ) {
318  mpz_t n, d;
319  if ( invert ) {
320  mpz_init_set_si( n, intC );
321  mpz_init_set( d, thempi );
322  } else {
323  mpz_init_set( n, thempi );
324  mpz_init_set_si( d, intC );
325  }
326  InternalRational * result = new InternalRational( n, d );
327  quot = result->normalize_myself();
328  rem = int2imm( 0 );
329  return;
330  }
331 
332  if ( invert ) {
333  if ( intC >= 0 ) {
334  rem = c;
335  quot = int2imm( 0 );
336  } else {
337  mpz_t mpiResult;
338  mpz_init_set( mpiResult, thempi );
339  mpz_abs( mpiResult, mpiResult );
340  mpz_sub_ui( mpiResult, mpiResult, -intC );
341  rem = uiNormalizeMPI( mpiResult );
342  quot = int2imm( -mpz_sgn( thempi ) );
343  }
344  } else {
345  mpz_t q;
346  mpz_t dummy;
347  mpz_init( q ); mpz_init( dummy );
348  if ( intC > 0 ) {
349  rem = int2imm( mpz_fdiv_qr_ui( q, dummy, thempi, intC ) );
350  quot = normalizeMPI( q );
351  } else {
352  rem = int2imm( mpz_fdiv_qr_ui( q, dummy, thempi, -intC ) );
353  mpz_neg( q, q );
354  quot = normalizeMPI( q );
355  }
356  mpz_clear( dummy );
357  }
358 }

◆ divremcoefft()

bool InternalInteger::divremcoefft ( InternalCF c,
InternalCF *&  quot,
InternalCF *&  rem,
bool  invert 
)
virtual
See also
CanonicalForm::divremt(), InternalInteger::divremsamet()

Reimplemented from InternalCF.

Definition at line 374 of file int_intdiv.cc.

375 {
376  divremcoeff( c, quot, rem, invert );
377  return true;
378 }

◆ divremsame()

void InternalInteger::divremsame ( InternalCF c,
InternalCF *&  quot,
InternalCF *&  rem 
)
virtual
See also
CanonicalForm::divrem(), InternalInteger::divremcoeff()

Reimplemented from InternalCF.

Definition at line 271 of file int_intdiv.cc.

272 {
273  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain,
274  "type error: InternalInteger expected" );
275 
276  if ( c == this ) {
277  quot = int2imm( 1 );
278  rem = int2imm( 0 );
279  return;
280  }
281 
282  if ( cf_glob_switches.isOn( SW_RATIONAL ) ) {
283  mpz_t n, d;
284  mpz_init_set( n, thempi );
285  mpz_init_set( d, MPI( c ) );
286  InternalRational * result = new InternalRational( n, d );
287  quot = result->normalize_myself();
288  rem = int2imm( 0 );
289  return;
290  }
291 
292  mpz_t q;
293  mpz_t r;
294  mpz_init( q ); mpz_init( r );
295  if ( mpz_sgn( MPI( c ) ) > 0 )
296  mpz_fdiv_qr( q, r, thempi, MPI( c ) );
297  else
298  mpz_cdiv_qr( q, r, thempi, MPI( c ) );
299 
300  quot = normalizeMPI( q );
301  rem = uiNormalizeMPI( r );
302 }

◆ divremsamet()

bool InternalInteger::divremsamet ( InternalCF c,
InternalCF *&  quot,
InternalCF *&  rem 
)
virtual
See also
CanonicalForm::divremt(), InternalInteger::divremcoefft()

Reimplemented from InternalCF.

Definition at line 364 of file int_intdiv.cc.

365 {
366  divremsame( c, quot, rem );
367  return true;
368 }

◆ divsame()

InternalCF * InternalInteger::divsame ( InternalCF c)
virtual
See also
CanonicalForm::div(), InternalInteger::divcoeff()

Reimplemented from InternalCF.

Definition at line 125 of file int_intdiv.cc.

126 {
127  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain,
128  "type error: InternalInteger expected" );
129 
130  if ( c == this ) {
131  if ( deleteObject() ) delete this;
132  return int2imm( 1 );
133  }
134 
135  if ( getRefCount() > 1 ) {
136  deleteObject();
137  mpz_t mpiResult;
138  mpz_init( mpiResult );
139  mpz_divexact( mpiResult, thempi, MPI( c ) );
140  return normalizeMPI( mpiResult );
141  } else {
142  mpz_divexact( thempi, thempi, MPI( c ) );
143  return normalizeMyself();
144  }
145 }

◆ genOne()

InternalCF * InternalInteger::genOne ( )
virtual

Reimplemented from InternalCF.

Definition at line 54 of file int_int.cc.

55 {
56  if ( isOne() )
57  return copyObject();
58  else
59  return new InternalInteger( 1 );
60 }

◆ genZero()

InternalCF * InternalInteger::genZero ( )
virtual

Reimplemented from InternalCF.

Definition at line 46 of file int_int.cc.

47 {
48  if ( isZero() )
49  return copyObject();
50  else
51  return new InternalInteger();
52 }

◆ ilog2()

int InternalInteger::ilog2 ( )
virtual

int InternalInteger::ilog2 ()

See also
CanonicalForm::ilog2()

Reimplemented from InternalCF.

Definition at line 549 of file int_int.cc.

550 {
551  ASSERT( mpz_cmp_si( thempi, 0 ) > 0, "log() argument <= 0" );
552  return mpz_sizeinbase( thempi, 2 ) - 1;
553 }

◆ intmod()

int InternalInteger::intmod ( int  p) const
virtual

Reimplemented from InternalCF.

Definition at line 511 of file int_int.cc.

512 {
513  return (int)mpz_fdiv_ui( thempi, (unsigned long)p );
514 }

◆ intval()

long InternalInteger::intval ( ) const
virtual

Reimplemented from InternalCF.

Definition at line 506 of file int_int.cc.

507 {
508  return mpz_get_si( thempi );
509 }

◆ is_imm()

bool InternalInteger::is_imm ( ) const

Definition at line 41 of file int_int.cc.

42 {
43  return mpz_is_imm( thempi );
44 }

◆ levelcoeff()

int InternalInteger::levelcoeff ( ) const
inlinevirtual

Reimplemented from InternalCF.

Definition at line 91 of file int_int.h.

91 { return IntegerDomain; }

◆ modcoeff()

InternalCF * InternalInteger::modcoeff ( InternalCF c,
bool  invert 
)
virtual
See also
see CanonicalForm::mod(), InternalInteger::modsame()

Reimplemented from InternalCF.

Definition at line 262 of file int_intdiv.cc.

263 {
264  return modulocoeff( c, invert );
265 }

◆ modsame()

InternalCF * InternalInteger::modsame ( InternalCF c)
virtual
See also
see CanonicalForm::mod(), InternalInteger::modcoeff()

Reimplemented from InternalCF.

Definition at line 253 of file int_intdiv.cc.

254 {
255  return modulosame( c );
256 }

◆ modulocoeff()

InternalCF * InternalInteger::modulocoeff ( InternalCF c,
bool  invert 
)
virtual
See also
CanonicalForm::operator %(), InternalInteger::modulosame()

Reimplemented from InternalCF.

Definition at line 212 of file int_intdiv.cc.

213 {
214  ASSERT( ::is_imm( c ) == INTMARK,
215  "type error: immediate integer expected" );
216  ASSERT( invert || imm2int( c ) != 0,
217  "math error: divide by zero" );
218 
219  if ( cf_glob_switches.isOn( SW_RATIONAL ) ) {
220  if ( deleteObject() ) delete this;
221  return int2imm( 0 );
222  }
223 
224  long intC = imm2int( c );
225 
226  if ( invert ) {
227  if ( intC >= 0 ) {
228  if ( deleteObject() ) delete this;
229  return c;
230  } else {
231  // no checks for refCount == 1 are done. It is not worth ...
232  mpz_t mpiResult;
233  mpz_init_set( mpiResult, thempi );
234  mpz_abs( mpiResult, mpiResult );
235  mpz_sub_ui( mpiResult, mpiResult, -intC );
236  if ( deleteObject() ) delete this;
237  return uiNormalizeMPI( mpiResult );
238  }
239  } else {
240  mpz_t dummy;
241  mpz_init( dummy );
242  InternalCF * result = int2imm( mpz_mod_ui( dummy, thempi, tabs( intC ) ) );
243  mpz_clear( dummy );
244  if ( deleteObject() ) delete this;
245  return result;
246  }
247 }

◆ modulosame()

InternalCF * InternalInteger::modulosame ( InternalCF c)
virtual
See also
CanonicalForm::operator %(), InternalInteger::modulocoeff()

Reimplemented from InternalCF.

Definition at line 186 of file int_intdiv.cc.

187 {
188  ASSERT( ! ::is_imm( c ) && c->levelcoeff() == IntegerDomain,
189  "type error: InternalInteger expected" );
190 
191  if ( (c == this) || cf_glob_switches.isOn( SW_RATIONAL ) ) {
192  if ( deleteObject() ) delete this;
193  return int2imm( 0 );
194  }
195 
196  if ( getRefCount() > 1 ) {
197  decRefCount();
198  mpz_t mpiResult;
199  mpz_init( mpiResult );
200  mpz_mod( mpiResult, thempi, MPI( c ) );
201  return uiNormalizeMPI( mpiResult );
202  } else {
203  mpz_mod( thempi, thempi, MPI( c ) );
204  return uiNormalizeMyself();
205  }
206 }

◆ MPI()

mpz_ptr InternalInteger::MPI ( const InternalCF *const  c)
inlinestaticprivate

MPI() - return underlying mpz_t of ‘c’.

‘c’ is expected to be an ‘InternalInteger *’. `c's underlying mpz_t is returned.

Definition at line 232 of file int_int.h.

233 {
234  return (((InternalInteger*)c)->thempi);
235 }

◆ mulcoeff()

InternalCF * InternalInteger::mulcoeff ( InternalCF c)
virtual

Reimplemented from InternalCF.

Definition at line 299 of file int_int.cc.

300 {
301  ASSERT( ::is_imm( c ) == INTMARK, "incompatible base coefficients" );
302  long cc = imm2int( c );
303  if ( getRefCount() > 1 )
304  {
305  decRefCount();
306  mpz_t dummy;
307  mpz_init( dummy );
308  if ( cc < 0 )
309  {
310  mpz_mul_ui( dummy, thempi, -cc );
311  mpz_neg( dummy, dummy );
312  }
313  else
314  mpz_mul_ui( dummy, thempi, cc );
315  if ( mpz_is_imm( dummy ) )
316  {
317  InternalCF * res = int2imm( mpz_get_si( dummy ) );
318  mpz_clear( dummy );
319  return res;
320  }
321  else
322  return new InternalInteger( dummy );
323  }
324  else
325  {
326  if ( cc < 0 )
327  {
328  mpz_mul_ui( thempi, thempi, -cc );
329  mpz_neg( thempi, thempi );
330  }
331  else
332  mpz_mul_ui( thempi, thempi, cc );
333  if ( mpz_is_imm( thempi ) )
334  {
335  InternalCF * res = int2imm( mpz_get_si( thempi ) );
336  delete this;
337  return res;
338  }
339  else
340  return this;
341  }
342 }

◆ mulsame()

InternalCF * InternalInteger::mulsame ( InternalCF c)
virtual

Reimplemented from InternalCF.

Definition at line 147 of file int_int.cc.

148 {
149  if ( getRefCount() > 1 )
150  {
151  decRefCount();
152  mpz_t dummy;
153  mpz_init( dummy );
154  mpz_mul( dummy, thempi, MPI( c ) );
155  #if 0
156  if ( mpz_is_imm( dummy ) )
157  {
158  // can this happen ???
159  InternalCF * res = int2imm( mpz_get_si( dummy ) );
160  mpz_clear( dummy );
161  return res;
162  }
163  else
164  #endif
165  return new InternalInteger( dummy );
166  }
167  else
168  {
169  mpz_mul( thempi, thempi, MPI( c ) );
170  #if 0
171  if ( mpz_is_imm( &thempi ) )
172  {
173  // can this happen ???
174  InternalCF * res = int2imm( mpz_get_si( &thempi ) );
175  delete this;
176  return res;
177  }
178  else
179  #endif
180  return this;
181  }
182 }

◆ neg()

InternalCF * InternalInteger::neg ( )
virtual

InternalCF * InternalInteger::neg ()

See also
CanonicalForm::operator -()

Reimplemented from InternalCF.

Definition at line 66 of file int_int.cc.

67 {
68  if ( getRefCount() > 1 )
69  {
70  decRefCount();
71  mpz_t dummy;
72  mpz_init_set( dummy, thempi );
73  mpz_neg( dummy, dummy );
74  return new InternalInteger( dummy );
75  }
76  else
77  {
78  mpz_neg( thempi, thempi );
79  return this;
80  }
81 }

◆ normalizeMPI()

InternalCF * InternalInteger::normalizeMPI ( mpz_ptr  aMpi)
inlinestaticprivate

normalizeMPI(), uiNormalizeMPI() - normalize a mpi.

If ‘aMpi’ fits into an immediate integer, clear ‘aMpi’ and return the immediate. Otherwise, return a new ‘InternalInteger’ with ‘aMpi’ as underlying mpi.

Definition at line 196 of file int_int.h.

197 {
198  if ( mpz_is_imm( aMpi ) ) {
199  InternalCF * result = int2imm( mpz_get_si( aMpi ) );
200  mpz_clear( aMpi );
201  return result;
202  } else
203  return new InternalInteger( aMpi );
204 }

◆ normalizeMyself()

InternalCF * InternalInteger::normalizeMyself ( )
inlineprivate

normalizeMyself(), uiNormalizeMyself() - normalize CO.

If CO fits into an immediate integer, delete CO and return the immediate. Otherwise, return a pointer to CO.

Note: We do not mind reference counting at this point! CO is deleted unconditionally!

Definition at line 152 of file int_int.h.

153 {
154  ASSERT( getRefCount() == 1, "internal error: must not delete CO" );
155 
156  if ( mpz_is_imm( thempi ) ) {
157  InternalCF * result = int2imm( mpz_get_si( thempi ) );
158  delete this;
159  return result;
160  } else
161  return this;
162 }

◆ operator delete()

void InternalInteger::operator delete ( void *  addr,
size_t   
)
inline

Definition at line 64 of file int_int.h.

65  {
67  }

◆ operator new()

void* InternalInteger::operator new ( size_t  )
inline

Definition at line 58 of file int_int.h.

59  {
60  void* addr;
61  omTypeAllocBin(void*, addr, InternalInteger_bin);
62  return addr;
63  }

◆ print()

void InternalInteger::print ( OSTREAM os,
char *  c 
)
virtual

Reimplemented from InternalCF.

Definition at line 26 of file int_int.cc.

27 {
28  if ( *c == '*' && mpz_cmp_si( thempi, 1 ) == 0 )
29  os << c+1;
30  else if ( *c == '*' && mpz_cmp_si( thempi, -1 ) == 0 )
31  os << '-' << c+1;
32  else {
33  char * str = new char[mpz_sizeinbase( thempi, 10 ) + 2];
34  str = mpz_get_str( str, 10, thempi );
35  os << str << c;
36  delete [] str;
37  }
38 }

◆ sign()

int InternalInteger::sign ( ) const
virtual

int InternalInteger::sign () const

See also
CanonicalForm::sign()

Reimplemented from InternalCF.

Definition at line 520 of file int_int.cc.

521 {
522  return mpz_sgn( thempi );
523 }

◆ sqrt()

InternalCF * InternalInteger::sqrt ( )
virtual

InternalCF * InternalInteger::sqrt ()

See also
CanonicalForm::sqrt()

Reimplemented from InternalCF.

Definition at line 529 of file int_int.cc.

530 {
531  ASSERT( mpz_cmp_si( thempi, 0 ) >= 0, "sqrt() argument < 0" );
532  mpz_t result;
533  mpz_init( result );
534  mpz_sqrt( result, thempi );
535  if ( mpz_is_imm( result ) )
536  {
537  InternalCF * res = int2imm( mpz_get_si( result ) );
538  mpz_clear( result );
539  return res;
540  }
541  else
542  return new InternalInteger( result );
543 }

◆ subcoeff()

InternalCF * InternalInteger::subcoeff ( InternalCF c,
bool  negate 
)
virtual

Reimplemented from InternalCF.

Definition at line 244 of file int_int.cc.

245 {
246  ASSERT( ::is_imm( c ) == INTMARK, "incompatible base coefficients" );
247  long cc = imm2int( c );
248  if ( getRefCount() > 1 )
249  {
250  decRefCount();
251  mpz_t dummy;
252  if ( negate )
253  {
254  mpz_init_set_si( dummy, cc );
255  mpz_sub( dummy, dummy, thempi );
256  }
257  else
258  {
259  mpz_init( dummy );
260  if ( cc < 0 )
261  mpz_add_ui( dummy, thempi, -cc );
262  else
263  mpz_sub_ui( dummy, thempi, cc );
264  }
265  if ( mpz_is_imm( dummy ) )
266  {
267  InternalCF * res = int2imm( mpz_get_si( dummy ) );
268  mpz_clear( dummy );
269  return res;
270  }
271  else
272  return new InternalInteger( dummy );
273  }
274  else
275  {
276  if ( negate )
277  {
278  mpz_t dummy;
279  mpz_init_set_si( dummy, cc );
280  mpz_sub( thempi, dummy, thempi );
281  mpz_clear( dummy );
282  }
283  else
284  if ( cc < 0 )
285  mpz_add_ui( thempi, thempi, -cc );
286  else
287  mpz_sub_ui( thempi, thempi, cc );
288  if ( mpz_is_imm( thempi ) )
289  {
290  InternalCF * res = int2imm( mpz_get_si( thempi ) );
291  delete this;
292  return res;
293  }
294  else
295  return this;
296  }
297 }

◆ subsame()

InternalCF * InternalInteger::subsame ( InternalCF c)
virtual

Reimplemented from InternalCF.

Definition at line 116 of file int_int.cc.

117 {
118  if ( getRefCount() > 1 )
119  {
120  decRefCount();
121  mpz_t dummy;
122  mpz_init( dummy );
123  mpz_sub( dummy, thempi, MPI( c ) );
124  if ( mpz_is_imm( dummy ) )
125  {
126  InternalCF * res = int2imm( mpz_get_si( dummy ) );
127  mpz_clear( dummy );
128  return res;
129  }
130  else
131  return new InternalInteger( dummy );
132  }
133  else
134  {
135  mpz_sub( thempi, thempi, MPI( c ) );
136  if ( mpz_is_imm( thempi ) )
137  {
138  InternalCF * res = int2imm( mpz_get_si( thempi ) );
139  delete this;
140  return res;
141  }
142  else
143  return this;
144  }
145 }

◆ uiNormalizeMPI()

InternalCF * InternalInteger::uiNormalizeMPI ( mpz_ptr  aMpi)
inlinestaticprivate

uiNormalizeMPI()’ is the same as ‘normalizeMPI()’ except that ‘aMpi’ is expected to be non-begative.

In this case, we may use ‘mpz_get_ui()’ to convert ‘aMpi’ into an immediate which is slightly faster than the signed variant.

Definition at line 213 of file int_int.h.

214 {
215  if ( mpz_is_imm( aMpi ) ) {
216  InternalCF * result = int2imm( mpz_get_ui( aMpi ) );
217  mpz_clear( aMpi );
218  return result;
219  } else
220  return new InternalInteger( aMpi );
221 }

◆ uiNormalizeMyself()

InternalCF * InternalInteger::uiNormalizeMyself ( )
inlineprivate

uiNormalizeMyself()’ is the same as ‘normalizeMyself()’ except that CO is expected to be non-negative.

In this case, we may use ‘mpz_get_ui()’ to convert the underlying mpi into an immediate which is slightly faster than the signed variant.

Note: We do not mind reference counting at this point! CO is deleted unconditionally!

Definition at line 174 of file int_int.h.

175 {
176  ASSERT( getRefCount() == 1, "internal error: must not delete CO" );
177 
178  if ( mpz_is_imm( thempi ) ) {
179  InternalCF * result = int2imm( mpz_get_ui( thempi ) );
180  delete this;
181  return result;
182  } else
183  return this;
184 }

Friends And Related Function Documentation

◆ getmpi

void getmpi ( InternalCF value,
mpz_t  mpi 
)
friend

Definition at line 257 of file cf_factory.cc.

258 {
259  ASSERT( ! is_imm( value ) && (value->levelcoeff() == IntegerDomain ), "illegal operation" );
260  mpz_init_set (mpi, ((InternalInteger*)value)->thempi);
261 }

◆ gmp_denominator

void gmp_denominator ( const CanonicalForm f,
mpz_ptr  result 
)
friend

Definition at line 40 of file singext.cc.

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 }

◆ gmp_numerator

void gmp_numerator ( const CanonicalForm f,
mpz_ptr  result 
)
friend

Definition at line 20 of file singext.cc.

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 }

◆ InternalRational

friend class InternalRational
friend

Definition at line 134 of file int_int.h.

Field Documentation

◆ InternalInteger_bin

const omBin InternalInteger::InternalInteger_bin = omGetSpecBin(sizeof(InternalInteger))
staticprivate

Definition at line 54 of file int_int.h.

◆ thempi

mpz_t InternalInteger::thempi
private

Definition at line 43 of file int_int.h.


The documentation for this class was generated from the following files:
SW_RATIONAL
static const int SW_RATIONAL
set to 1 for computations over Q
Definition: cf_defs.h:28
InternalCF::invert
virtual InternalCF * invert()
Definition: int_cf.cc:172
InternalInteger::is_imm
bool is_imm() const
Definition: int_int.cc:41
f
FILE * f
Definition: checklibs.c:9
InternalInteger::modulocoeff
InternalCF * modulocoeff(InternalCF *, bool)
Definition: int_intdiv.cc:212
result
return result
Definition: facAbsBiFact.cc:76
RationalDomain
#define RationalDomain
Definition: cf_defs.h:24
CxxTest::base
char N base
Definition: ValueTraits.h:144
InternalInteger::normalizeMPI
static InternalCF * normalizeMPI(mpz_ptr)
normalizeMPI(), uiNormalizeMPI() - normalize a mpi.
Definition: int_int.h:196
InternalInteger::thempi
mpz_t thempi
Definition: int_int.h:43
InternalCF::isZero
virtual bool isZero() const
Definition: int_cf.cc:24
InternalInteger::normalizeMyself
InternalCF * normalizeMyself()
normalizeMyself(), uiNormalizeMyself() - normalize CO.
Definition: int_int.h:152
InternalCF
virtual class for internal CanonicalForm's
Definition: int_cf.h:41
InternalInteger::InternalInteger_bin
static const omBin InternalInteger_bin
Definition: int_int.h:54
b
CanonicalForm b
Definition: cfModGcd.cc:4044
InternalCF::isOne
virtual bool isOne() const
bool InternalCF::isOne, isZero () const
Definition: int_cf.cc:18
InternalRational::MPQNUM
static mpz_ptr MPQNUM(const InternalCF *const c)
Definition: int_rat.h:119
CanonicalForm
factory's main class
Definition: canonicalform.h:77
InternalCF::copyObject
InternalCF * copyObject()
Definition: int_cf.h:62
i
int i
Definition: cfEzgcd.cc:125
InternalInteger::InternalRational
friend class InternalRational
Definition: int_int.h:134
InternalCF::levelcoeff
virtual int levelcoeff() const
Definition: int_cf.h:68
res
CanonicalForm res
Definition: facAbsFact.cc:64
ASSERT
#define ASSERT(expression, message)
Definition: cf_assert.h:99
INTMARK
const long INTMARK
Definition: imm.h:37
int2imm
static InternalCF * int2imm(long i)
Definition: imm.h:75
InternalInteger::uiNormalizeMyself
InternalCF * uiNormalizeMyself()
‘uiNormalizeMyself()’ is the same as ‘normalizeMyself()’ except that CO is expected to be non-negativ...
Definition: int_int.h:174
tabs
int tabs
Definition: checklibs.c:11
InternalInteger::InternalInteger
InternalInteger()
Definition: int_int.h:70
omTypeAllocBin
#define omTypeAllocBin(type, addr, bin)
Definition: omAllocDecl.h:203
InternalInteger::uiNormalizeMPI
static InternalCF * uiNormalizeMPI(mpz_ptr)
‘uiNormalizeMPI()’ is the same as ‘normalizeMPI()’ except that ‘aMpi’ is expected to be non-begative.
Definition: int_int.h:213
InternalInteger::divremsame
void divremsame(InternalCF *, InternalCF *&, InternalCF *&)
Definition: int_intdiv.cc:271
InternalRational
factory's class for rationals
Definition: int_rat.h:38
InternalCF::deleteObject
int deleteObject()
Definition: int_cf.h:61
InternalCF::decRefCount
int decRefCount()
Definition: int_cf.h:53
InternalInteger::MPI
static mpz_ptr MPI(const InternalCF *const c)
MPI() - return underlying mpz_t of ‘c’.
Definition: int_int.h:232
imm2int
static long imm2int(const InternalCF *const imm)
Definition: imm.h:70
InternalInteger::divremcoeff
void divremcoeff(InternalCF *, InternalCF *&, InternalCF *&, bool)
Definition: int_intdiv.cc:308
cf_glob_switches
CFSwitches cf_glob_switches
CFSwitches cf_glob_switches;.
Definition: cf_switches.cc:41
p
int p
Definition: cfModGcd.cc:4019
omFreeBin
#define omFreeBin(addr, bin)
Definition: omAllocDecl.h:259
bextgcd
CanonicalForm bextgcd(const CanonicalForm &f, const CanonicalForm &g, CanonicalForm &a, CanonicalForm &b)
CanonicalForm bextgcd ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm & a,...
Definition: canonicalform.cc:1663
IntegerDomain
#define IntegerDomain
Definition: cf_defs.h:25
mpz_is_imm
bool mpz_is_imm(const mpz_t mpi)
Definition: gmpext.h:19
InternalInteger::modulosame
InternalCF * modulosame(InternalCF *)
Definition: int_intdiv.cc:186
InternalRational::MPQDEN
static mpz_ptr MPQDEN(const InternalCF *const c)
Definition: int_rat.h:124
rem
void rem(unsigned long *a, unsigned long *q, unsigned long p, int &dega, int degq)
Definition: minpoly.cc:572
InternalCF::getRefCount
int getRefCount()
Definition: int_cf.h:51
InternalInteger
factory's class for integers
Definition: int_int.h:40
CFSwitches::isOn
bool isOn(int s) const
check if 's' is on
Definition: cf_switches.h:55