source: git/factory/int_cf.h @ c1b52b

spielwiese
Last change on this file since c1b52b was 474f55c, checked in by Hans Schoenemann <hannes@…>, 6 years ago
xalloc: removed omallocClass: no need to wrap new/delete/..
  • Property mode set to 100644
File size: 5.5 KB
Line 
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#ifdef HAVE_OMALLOC
29#ifndef XMEMORY_H
30#include "omalloc/omallocClass.h"
31#endif
32#endif
33
34class CanonicalForm;
35
36/**
37 * virtual class for internal CanonicalForm's
38 *
39 * InternalCF will become an InternalPoly, InternalInteger, InternalRational
40**/
41class InternalCF
42#ifdef HAVE_OMALLOC
43#ifndef XMEMORY_H
44       : public omallocClass
45#endif
46#endif
47{
48private:
49    int refCount;
50protected:
51    int getRefCount() { return refCount; };
52    void incRefCount() { refCount++; };
53    int decRefCount() { return --refCount; };
54public:
55    InternalCF() { refCount = 1; };
56    InternalCF( const InternalCF& )
57    {
58        ASSERT( 0, "ups there is something wrong in your code");
59    };
60    virtual ~InternalCF() {};
61    int deleteObject() { return decRefCount() == 0; }
62    InternalCF* copyObject() { incRefCount(); return this; }
63    virtual InternalCF* deepCopyObject() const PVIRT_INTCF("deepCopyObject");
64    virtual const char * classname() const PVIRT_CHARCC("classname");
65    virtual InternalCF* genZero() PVIRT_INTCF("genZero");
66    virtual InternalCF* genOne() PVIRT_INTCF("genOne");
67    virtual int level() const { return LEVELBASE; }
68    virtual int levelcoeff() const { return UndefinedDomain; }
69    virtual int type() const { return UndefinedDomain; }
70    virtual Variable variable() const { return Variable(); }
71#ifndef NOSTREAMIO
72    virtual void print( OSTREAM&, char* ) PVIRT_VOID("print");
73#endif /* NOSTREAMIO */
74    virtual bool inBaseDomain() const { return true; }
75    virtual bool inExtension() const { return false; }
76    virtual bool inCoeffDomain() const { return true; }
77    virtual bool inPolyDomain() const { return false; }
78    virtual bool inQuotDomain() const { return false; }
79    virtual bool isZero() const;
80    virtual bool isOne() const;
81    virtual bool isUnivariate() const { return false; }
82    virtual long intval() const;
83    virtual int intmod( int ) const { return 0; }
84    virtual int sign() const PVIRT_INT("sign");
85
86    virtual InternalCF* num();
87    virtual InternalCF* den();
88
89    virtual InternalCF* neg() PVIRT_INTCF("neg");
90    virtual InternalCF* invert(); // semantically const, changes refCount
91    virtual InternalCF* tryInvert( const CanonicalForm&, bool& );
92    virtual int comparesame ( InternalCF * ) PVIRT_INT("comparesame");
93    virtual int comparecoeff ( InternalCF * ) PVIRT_INT("comparecoeff");
94
95    virtual InternalCF* addsame( InternalCF* ) PVIRT_INTCF("addsame");
96    virtual InternalCF* subsame( InternalCF* ) PVIRT_INTCF("subsame");
97    virtual InternalCF* mulsame( InternalCF* ) PVIRT_INTCF("mulsame");
98    virtual InternalCF* tryMulsame( InternalCF*, const CanonicalForm& );
99    virtual InternalCF* dividesame( InternalCF* ) PVIRT_INTCF("dividesame");
100    virtual InternalCF* modulosame( InternalCF* ) PVIRT_INTCF("modulosame");
101    virtual InternalCF* divsame( InternalCF* ) PVIRT_INTCF("divsame");
102    virtual InternalCF* tryDivsame ( InternalCF* , const CanonicalForm&, bool& );
103    virtual InternalCF* modsame( InternalCF* ) PVIRT_INTCF("modsame");
104    virtual void divremsame( InternalCF*, InternalCF*&, InternalCF*& ) PVIRT_VOID("divremsame");
105    virtual bool divremsamet( InternalCF*, InternalCF*&, InternalCF*& ) PVIRT_BOOL("divremsamet");
106    virtual bool tryDivremsamet ( InternalCF*, InternalCF*&, InternalCF*&, const CanonicalForm&, bool& );
107
108    virtual InternalCF* addcoeff( InternalCF* ) PVIRT_INTCF("addcoeff");
109    virtual InternalCF* subcoeff( InternalCF*, bool ) PVIRT_INTCF("subcoeff");
110    virtual InternalCF* mulcoeff( InternalCF* ) PVIRT_INTCF("mulcoeff");
111    virtual InternalCF* dividecoeff( InternalCF*, bool ) PVIRT_INTCF("dividecoeff");
112    virtual InternalCF* tryDividecoeff ( InternalCF*, bool, const CanonicalForm&, bool& );
113    virtual InternalCF* modulocoeff( InternalCF*, bool ) PVIRT_INTCF("dividecoeff");
114    virtual InternalCF* divcoeff( InternalCF*, bool ) PVIRT_INTCF("divcoeff");
115    virtual InternalCF* tryDivcoeff ( InternalCF*, bool, const CanonicalForm&, bool& );
116    virtual InternalCF* modcoeff( InternalCF*, bool ) PVIRT_INTCF("modcoeff");
117    virtual void divremcoeff( InternalCF*, InternalCF*&, InternalCF*&, bool ) PVIRT_VOID("divremcoeff");
118    virtual bool divremcoefft( InternalCF*, InternalCF*&, InternalCF*&, bool ) PVIRT_BOOL("divremcoefft");
119    virtual bool tryDivremcoefft( InternalCF*, InternalCF*&, InternalCF*&, bool, const CanonicalForm&, bool& );
120
121    virtual InternalCF * bgcdsame ( const InternalCF * const ) const;
122    virtual InternalCF * bgcdcoeff ( const InternalCF * const ); // semantically const, changes refcount
123
124    virtual InternalCF * bextgcdsame ( InternalCF *, CanonicalForm &, CanonicalForm & ); // semantically const, changes refcount
125    virtual InternalCF * bextgcdcoeff ( InternalCF *, CanonicalForm &, CanonicalForm & ); // semantically const, changes refcount
126
127    virtual InternalCF* sqrt();
128    virtual int ilog2();
129    virtual CanonicalForm lc();
130    virtual CanonicalForm Lc();
131    virtual CanonicalForm LC();
132    virtual CanonicalForm coeff( int i );
133    virtual int degree();
134    virtual int taildegree();
135    virtual CanonicalForm tailcoeff();
136};
137
138#endif /* ! INCL_INT_CF_H */
Note: See TracBrowser for help on using the repository browser.