evalue.c: reorder_terms: fix typo
[barvinok.git] / tcounter.h
blob1a3648904b4e37f342f3115c3515dc0b21b28162
1 #include "reducer.h"
3 struct tcounter : public np_base {
4 Vector *lambda;
5 Matrix *den;
6 ZZ sign;
7 Matrix *num;
8 mpq_t count;
9 mpq_t tcount;
10 dpoly todd;
11 Vector *todd_denom;
12 Value denom;
14 Value tmp, tmp2;
16 tcounter(unsigned dim, unsigned long max_index) : np_base(dim), todd(dim) {
17 mpq_init(count);
18 mpq_init(tcount);
19 setup_todd(dim);
20 value_init(denom);
21 value_init(tmp);
22 num = Matrix_Alloc(max_index, 1);
23 den = Matrix_Alloc(dim, 1);
24 lambda = Vector_Alloc(dim);
27 void setup_todd(unsigned dim);
29 void adapt_todd(dpoly& t, const Value c);
30 void add_powers(dpoly& n, const Value c);
32 ~tcounter() {
33 Matrix_Free(num);
34 Matrix_Free(den);
35 Vector_Free(lambda);
36 mpq_clear(count);
37 mpq_clear(tcount);
38 Vector_Free(todd_denom);
39 value_clear(denom);
40 value_clear(tmp);
43 virtual void init(Polyhedron *P) {
44 vec_ZZ l;
45 randomvector(P, l, dim);
46 zz2values(l, lambda->p);
49 virtual void handle(const mat_ZZ& rays, Value *vertex, const QQ& c,
50 unsigned long det, int *closed, barvinok_options *options);
51 virtual void get_count(Value *result) {
52 assert(value_one_p(&count[0]._mp_den));
53 value_assign(*result, &count[0]._mp_num);