4 #include <barvinok/set.h>
7 #include <NTL/vec_ZZ.h>
8 #include <barvinok/polylib.h>
9 #include "conversion.h"
18 dpoly(const dpoly
& o
) {
19 coeff
= Vector_Alloc(o
.coeff
->Size
);
20 Vector_Copy(o
.coeff
->p
, coeff
->p
, o
.coeff
->Size
);
23 coeff
= Vector_Alloc(d
+1);
25 dpoly(int d
, const Value degree
, int offset
= 0);
29 void operator += (const dpoly
& t
);
30 void operator *= (const Value f
);
31 void operator *= (const dpoly
& f
);
32 void div(const dpoly
& d
, mpq_t count
, int sign
);
33 void div(const dpoly
& d
, mpq_t
*count
, const mpq_t
& factor
);
34 Vector
*div(const dpoly
&d
);
37 /* Each element in powers corresponds to a factor of the form (1 - z^b)
38 * and indicates the exponent of this factor in the denominator.
39 * The constants b are stored elsewhere (den_r in reducer::reducer).
42 std::vector
<int> powers
;
46 struct dpoly_r_term_lex_smaller
{
47 bool operator()(const dpoly_r_term
* t1
, const dpoly_r_term
* t2
) const {
48 return t1
->powers
< t2
->powers
;
52 typedef std::set
<dpoly_r_term
*, dpoly_r_term_lex_smaller
> dpoly_r_term_list
;
54 /* len: number of elements in c
55 * each element in c is the coefficient of a power of t
56 * in the MacLaurin expansion
64 void add_term(int i
, const std::vector
<int>& powers
, const ZZ
& coeff
);
65 dpoly_r(int len
, int dim
);
66 dpoly_r(dpoly
& num
, int dim
);
67 dpoly_r(dpoly
& num
, dpoly
& den
, int pos
, int dim
);
68 dpoly_r(const dpoly_r
* num
, dpoly
& den
, int pos
, int dim
);
70 dpoly_r
*div(const dpoly
& d
) const;