2 #include <barvinok/barvinok.h>
3 #include <barvinok/util.h>
5 #include "omega/convert.h"
11 #define MAXRAYS POL_NO_DUAL
13 evalue
*count_relation(Relation
& r
)
17 Polyhedron
*D
= relation2Domain(r
, vv
, params
);
18 int dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
22 for (Polyhedron
*P
= D
; P
; P
= P
->next
, ++d
) {
24 int exist
= P
->Dimension
- params
.size() - dim
;
25 EP
= barvinok_enumerate_e(P
, exist
, params
.size(), MAXRAYS
);
32 evalue
*rank_relation(Relation
& r
)
36 Polyhedron
*D
= relation2Domain(r
, vv
, params
);
37 int dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
41 assert(D
->next
== NULL
);
42 Polyhedron
*C
= Universe_Polyhedron(params
.size());
43 EP
= barvinok_lexsmaller_ev(D
, D
, dim
, C
, MAXRAYS
);
50 evalue
*count_lexsmaller(Relation
& r
, Relation
& domain
)
56 Polyhedron
*P
= relation2Domain(r
, P_vv
, P_params
);
57 int P_dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
58 Polyhedron
*D
= relation2Domain(domain
, D_vv
, D_params
);
59 int D_dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
60 assert(P_dim
== D_dim
);
64 assert(P
->next
== NULL
);
65 assert(D
->next
== NULL
);
66 Polyhedron
*C
= Universe_Polyhedron(D_params
.size());
67 EP
= barvinok_lexsmaller_ev(P
, D
, D_dim
, C
, MAXRAYS
);