int_cf.h
Go to the documentation of this file.
1 /* emacs edit mode for this file is -*- C++ -*- */
2 
3 /**
4  * @file int_cf.h
5  *
6  * Factory's internal CanonicalForm's
7 **/
8 #ifndef INCL_INT_CF_H
9 #define INCL_INT_CF_H
10 
11 // #include "config.h"
12 
13 #ifndef NOSTREAMIO
14 #ifdef HAVE_IOSTREAM
15 #include <iostream>
16 #define OSTREAM std::ostream
17 #elif defined(HAVE_IOSTREAM_H)
18 #include <iostream.h>
19 #define OSTREAM ostream
20 #endif
21 #endif /* NOSTREAMIO */
22 
23 #include "cf_assert.h"
24 
25 #include "cf_defs.h"
26 #include "variable.h"
27 
28 class CanonicalForm;
29 
30 /**
31  * virtual class for internal CanonicalForm's
32  *
33  * InternalCF will become an InternalPoly, InternalInteger, InternalRational
34 **/
35 class InternalCF {
36 private:
37  int refCount;
38 protected:
39  int getRefCount() { return refCount; };
40  void incRefCount() { refCount++; };
41  int decRefCount() { return --refCount; };
42 public:
43  InternalCF() { refCount = 1; };
45  {
46  ASSERT( 0, "ups there is something wrong in your code");
47  };
48  virtual ~InternalCF() {};
49  int deleteObject() { return decRefCount() == 0; }
50  InternalCF* copyObject() { incRefCount(); return this; }
52  virtual const char * classname() const PVIRT_CHARCC("classname");
53  virtual InternalCF* genZero() PVIRT_INTCF("genZero");
54  virtual InternalCF* genOne() PVIRT_INTCF("genOne");
55  virtual int level() const { return LEVELBASE; }
56  virtual int levelcoeff() const { return UndefinedDomain; }
57  virtual int type() const { return UndefinedDomain; }
58  virtual Variable variable() const { return Variable(); }
59 #ifndef NOSTREAMIO
60  virtual void print( OSTREAM&, char* ) PVIRT_VOID("print");
61 #endif /* NOSTREAMIO */
62  virtual bool inBaseDomain() const { return true; }
63  virtual bool inExtension() const { return false; }
64  virtual bool inCoeffDomain() const { return true; }
65  virtual bool inPolyDomain() const { return false; }
66  virtual bool inQuotDomain() const { return false; }
67  virtual bool isZero() const;
68  virtual bool isOne() const;
69  virtual bool isUnivariate() const { return false; }
70  virtual long intval() const;
71  virtual int intmod( int ) const { return 0; }
72  virtual int sign() const PVIRT_INT("sign");
73 
74  virtual InternalCF* num();
75  virtual InternalCF* den();
76 
77  virtual InternalCF* neg() PVIRT_INTCF("neg");
78  virtual InternalCF* invert(); // semantically const, changes refCount
79  virtual InternalCF* tryInvert( const CanonicalForm&, bool& );
80  virtual int comparesame ( InternalCF * ) PVIRT_INT("comparesame");
81  virtual int comparecoeff ( InternalCF * ) PVIRT_INT("comparecoeff");
82 
86  virtual InternalCF* tryMulsame( InternalCF*, const CanonicalForm& );
87  virtual InternalCF* dividesame( InternalCF* ) PVIRT_INTCF("dividesame");
88  virtual InternalCF* modulosame( InternalCF* ) PVIRT_INTCF("modulosame");
89  virtual InternalCF* divsame( InternalCF* ) PVIRT_INTCF("divsame");
90  virtual InternalCF* tryDivsame ( InternalCF* , const CanonicalForm&, bool& );
91  virtual InternalCF* modsame( InternalCF* ) PVIRT_INTCF("modsame");
92  virtual void divremsame( InternalCF*, InternalCF*&, InternalCF*& ) PVIRT_VOID("divremsame");
93  virtual bool divremsamet( InternalCF*, InternalCF*&, InternalCF*& ) PVIRT_BOOL("divremsamet");
94  virtual bool tryDivremsamet ( InternalCF*, InternalCF*&, InternalCF*&, const CanonicalForm&, bool& );
95 
96  virtual InternalCF* addcoeff( InternalCF* ) PVIRT_INTCF("addcoeff");
97  virtual InternalCF* subcoeff( InternalCF*, bool ) PVIRT_INTCF("subcoeff");
98  virtual InternalCF* mulcoeff( InternalCF* ) PVIRT_INTCF("mulcoeff");
99  virtual InternalCF* dividecoeff( InternalCF*, bool ) PVIRT_INTCF("dividecoeff");
100  virtual InternalCF* tryDividecoeff ( InternalCF*, bool, const CanonicalForm&, bool& );
101  virtual InternalCF* modulocoeff( InternalCF*, bool ) PVIRT_INTCF("dividecoeff");
102  virtual InternalCF* divcoeff( InternalCF*, bool ) PVIRT_INTCF("divcoeff");
103  virtual InternalCF* tryDivcoeff ( InternalCF*, bool, const CanonicalForm&, bool& );
104  virtual InternalCF* modcoeff( InternalCF*, bool ) PVIRT_INTCF("modcoeff");
105  virtual void divremcoeff( InternalCF*, InternalCF*&, InternalCF*&, bool ) PVIRT_VOID("divremcoeff");
106  virtual bool divremcoefft( InternalCF*, InternalCF*&, InternalCF*&, bool ) PVIRT_BOOL("divremcoefft");
107  virtual bool tryDivremcoefft( InternalCF*, InternalCF*&, InternalCF*&, bool, const CanonicalForm&, bool& );
108 
109  virtual InternalCF * bgcdsame ( const InternalCF * const ) const;
110  virtual InternalCF * bgcdcoeff ( const InternalCF * const ); // semantically const, changes refcount
111 
112  virtual InternalCF * bextgcdsame ( InternalCF *, CanonicalForm &, CanonicalForm & ); // semantically const, changes refcount
113  virtual InternalCF * bextgcdcoeff ( InternalCF *, CanonicalForm &, CanonicalForm & ); // semantically const, changes refcount
114 
115  virtual InternalCF* sqrt();
116  virtual int ilog2();
117  virtual CanonicalForm lc();
118  virtual CanonicalForm Lc();
119  virtual CanonicalForm LC();
120  virtual CanonicalForm coeff( int i );
121  virtual int degree();
122  virtual int taildegree();
123  virtual CanonicalForm tailcoeff();
124 };
125 
126 #endif /* ! INCL_INT_CF_H */
int deleteObject()
Definition: int_cf.h:49
int decRefCount()
Definition: int_cf.h:41
#define LEVELBASE
Definition: cf_defs.h:16
virtual void divremcoeff(InternalCF *, InternalCF *&, InternalCF *&, bool) PVIRT_VOID("divremcoeff")
virtual int degree()
int InternalCF::degree ()
Definition: int_cf.cc:55
#define PVIRT_VOID(msg)
Definition: cf_assert.h:117
factory's class for variables
Definition: variable.h:32
virtual InternalCF * tryInvert(const CanonicalForm &, bool &)
Definition: int_cf.cc:186
virtual long intval() const
Definition: int_cf.cc:165
int refCount
Definition: int_cf.h:37
virtual CanonicalForm LC()
Definition: int_cf.cc:46
virtual Variable variable() const
Definition: int_cf.h:58
virtual bool isUnivariate() const
Definition: int_cf.h:69
InternalCF * copyObject()
Definition: int_cf.h:50
factory's main class
Definition: canonicalform.h:72
virtual InternalCF * bextgcdsame(InternalCF *, CanonicalForm &, CanonicalForm &)
InternalCF * InternalCF::bextgcdsame ( InternalCF *, CanonicalForm & a, CanonicalForm & b ) ...
Definition: int_cf.cc:149
assertions for Factory
virtual bool inQuotDomain() const
Definition: int_cf.h:66
virtual InternalCF * divsame(InternalCF *) PVIRT_INTCF("divsame")
#define UndefinedDomain
Definition: cf_defs.h:21
virtual ~InternalCF()
Definition: int_cf.h:48
virtual InternalCF * addsame(InternalCF *) PVIRT_INTCF("addsame")
virtual int comparesame(InternalCF *) PVIRT_INT("comparesame")
virtual InternalCF * tryDivsame(InternalCF *, const CanonicalForm &, bool &)
Definition: int_cf.cc:207
virtual class for internal CanonicalForm's
Definition: int_cf.h:35
virtual int comparecoeff(InternalCF *) PVIRT_INT("comparecoeff")
virtual InternalCF * subsame(InternalCF *) PVIRT_INTCF("subsame")
virtual int taildegree()
Definition: int_cf.cc:73
virtual bool isZero() const
Definition: int_cf.cc:24
virtual InternalCF * modulosame(InternalCF *) PVIRT_INTCF("modulosame")
virtual InternalCF * bgcdsame(const InternalCF *const ) const
InternalCF * InternalCF::bgcdsame, bgcdcoeff ( const InternalCF * const )
Definition: int_cf.cc:132
virtual InternalCF * genOne() PVIRT_INTCF("genOne")
virtual bool isOne() const
bool InternalCF::isOne, isZero () const
Definition: int_cf.cc:18
virtual int levelcoeff() const
Definition: int_cf.h:56
virtual InternalCF * subcoeff(InternalCF *, bool) PVIRT_INTCF("subcoeff")
virtual bool tryDivremcoefft(InternalCF *, InternalCF *&, InternalCF *&, bool, const CanonicalForm &, bool &)
Definition: int_cf.cc:200
virtual InternalCF * divcoeff(InternalCF *, bool) PVIRT_INTCF("divcoeff")
virtual InternalCF * sqrt()
InternalCF * InternalCF::sqrt ()
Definition: int_cf.cc:100
virtual void print(OSTREAM &, char *) PVIRT_VOID("print")
virtual bool inPolyDomain() const
Definition: int_cf.h:65
InternalCF()
Definition: int_cf.h:43
#define PVIRT_INT(msg)
Definition: cf_assert.h:123
virtual CanonicalForm coeff(int i)
CanonicalForm InternalCF::coeff ( int i )
Definition: int_cf.cc:120
virtual CanonicalForm Lc()
Definition: int_cf.cc:40
virtual bool inBaseDomain() const
Definition: int_cf.h:62
virtual InternalCF * dividesame(InternalCF *) PVIRT_INTCF("dividesame")
int i
Definition: cfEzgcd.cc:123
virtual int level() const
Definition: int_cf.h:55
virtual CanonicalForm tailcoeff()
CanonicalForm InternalCF::tailcoeff (), int InternalCF::taildegree ()
Definition: int_cf.cc:67
virtual InternalCF * dividecoeff(InternalCF *, bool) PVIRT_INTCF("dividecoeff")
virtual bool inExtension() const
Definition: int_cf.h:63
factory switches.
#define OSTREAM
Definition: int_cf.h:16
virtual InternalCF * tryDivcoeff(InternalCF *, bool, const CanonicalForm &, bool &)
Definition: int_cf.cc:214
virtual InternalCF * tryMulsame(InternalCF *, const CanonicalForm &)
Definition: int_cf.cc:179
virtual int sign() const PVIRT_INT("sign")
virtual bool divremcoefft(InternalCF *, InternalCF *&, InternalCF *&, bool) PVIRT_BOOL("divremcoefft")
virtual InternalCF * modsame(InternalCF *) PVIRT_INTCF("modsame")
virtual InternalCF * den()
Definition: int_cf.cc:91
virtual InternalCF * deepCopyObject() const PVIRT_INTCF("deepCopyObject")
operations on variables
virtual InternalCF * num()
InternalCF * InternalCF::num (), den ()
Definition: int_cf.cc:85
virtual InternalCF * bextgcdcoeff(InternalCF *, CanonicalForm &, CanonicalForm &)
Definition: int_cf.cc:157
virtual int type() const
Definition: int_cf.h:57
virtual const char * classname() const PVIRT_CHARCC("classname")
virtual InternalCF * invert()
Definition: int_cf.cc:172
#define PVIRT_BOOL(msg)
Definition: cf_assert.h:121
virtual bool inCoeffDomain() const
Definition: int_cf.h:64
#define PVIRT_CHARCC(msg)
Definition: cf_assert.h:125
#define PVIRT_INTCF(msg)
Definition: cf_assert.h:119
void incRefCount()
Definition: int_cf.h:40
virtual InternalCF * addcoeff(InternalCF *) PVIRT_INTCF("addcoeff")
virtual int ilog2()
int InternalCF::ilog2 ()
Definition: int_cf.cc:110
virtual bool divremsamet(InternalCF *, InternalCF *&, InternalCF *&) PVIRT_BOOL("divremsamet")
#define const
Definition: fegetopt.c:41
virtual InternalCF * mulcoeff(InternalCF *) PVIRT_INTCF("mulcoeff")
virtual InternalCF * modulocoeff(InternalCF *, bool) PVIRT_INTCF("dividecoeff")
#define ASSERT(expression, message)
Definition: cf_assert.h:99
virtual CanonicalForm lc()
CanonicalForm InternalCF::lc (), Lc (), LC ()
Definition: int_cf.cc:34
virtual InternalCF * tryDividecoeff(InternalCF *, bool, const CanonicalForm &, bool &)
Definition: int_cf.cc:221
virtual InternalCF * modcoeff(InternalCF *, bool) PVIRT_INTCF("modcoeff")
virtual InternalCF * mulsame(InternalCF *) PVIRT_INTCF("mulsame")
virtual void divremsame(InternalCF *, InternalCF *&, InternalCF *&) PVIRT_VOID("divremsame")
virtual InternalCF * neg() PVIRT_INTCF("neg")
virtual bool tryDivremsamet(InternalCF *, InternalCF *&, InternalCF *&, const CanonicalForm &, bool &)
Definition: int_cf.cc:193
virtual InternalCF * bgcdcoeff(const InternalCF *const )
Definition: int_cf.cc:139
virtual InternalCF * genZero() PVIRT_INTCF("genZero")
virtual int intmod(int) const
Definition: int_cf.h:71
InternalCF(const InternalCF &)
Definition: int_cf.h:44
int getRefCount()
Definition: int_cf.h:39