bfcounter.cc: move some more code from barvinok.cc
[barvinok.git] / dpoly.h
blobfb84776455e90fb1a616463c01347fff40c8ff09
1 #ifndef DPOLY_H
2 #define DPOLY_H
4 #include <assert.h>
5 #include <vector>
6 #include <gmp.h>
7 #include <NTL/vec_ZZ.h>
8 extern "C" {
9 #include <polylib/polylibgmp.h>
11 #include "conversion.h"
13 #ifdef NTL_STD_CXX
14 using namespace NTL;
15 #endif
17 class dpoly {
18 public:
19 vec_ZZ coeff;
20 dpoly(int d, ZZ& degree, int offset = 0);
21 void operator *= (dpoly& f);
22 void div(dpoly& d, mpq_t count, ZZ& sign);
25 struct dpoly_r_term {
26 int *powers;
27 ZZ coeff;
30 /* len: number of elements in c
31 * each element in c is the coefficient of a power of t
32 * in the MacLaurin expansion
34 struct dpoly_r {
35 std::vector< dpoly_r_term * > *c;
36 int len;
37 int dim;
38 ZZ denom;
40 void add_term(int i, int * powers, ZZ& coeff);
41 dpoly_r(int len, int dim);
42 dpoly_r(dpoly& num, int dim);
43 dpoly_r(dpoly& num, dpoly& den, int pos, int dim);
44 dpoly_r(dpoly_r* num, dpoly& den, int pos, int dim);
45 ~dpoly_r();
46 dpoly_r *div(dpoly& d);
47 void dump(void);
50 #endif