2 #include <barvinok/barvinok.h>
3 #include <barvinok/util.h>
5 #include "omega/convert.h"
11 evalue
*count_relation(Relation
& r
)
15 struct barvinok_options
*options
= barvinok_options_new_with_defaults();
16 Polyhedron
*D
= relation2Domain(r
, vv
, params
, options
->MaxRays
);
17 int dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
21 for (Polyhedron
*P
= D
; P
; P
= P
->next
, ++d
) {
23 int exist
= P
->Dimension
- params
.size() - dim
;
24 EP
= barvinok_enumerate_e(P
, exist
, params
.size(), options
->MaxRays
);
28 barvinok_options_free(options
);
32 evalue
*rank_relation(Relation
& r
)
36 struct barvinok_options
*options
= barvinok_options_new_with_defaults();
37 Polyhedron
*D
= relation2Domain(r
, vv
, params
, options
->MaxRays
);
38 int dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
42 assert(D
->next
== NULL
);
43 Polyhedron
*C
= Universe_Polyhedron(params
.size());
44 EP
= barvinok_lexsmaller_ev(D
, D
, dim
, C
, options
->MaxRays
);
48 barvinok_options_free(options
);
52 evalue
*count_lexsmaller(Relation
& r
, Relation
& domain
)
58 struct barvinok_options
*options
= barvinok_options_new_with_defaults();
59 Polyhedron
*P
= relation2Domain(r
, P_vv
, P_params
, options
->MaxRays
);
60 int P_dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
61 Polyhedron
*D
= relation2Domain(domain
, D_vv
, D_params
, options
->MaxRays
);
62 int D_dim
= r
.is_set() ? r
.n_set() : r
.n_inp() + r
.n_out();
63 assert(P_dim
== D_dim
);
67 assert(P
->next
== NULL
);
68 assert(D
->next
== NULL
);
69 Polyhedron
*C
= Universe_Polyhedron(D_params
.size());
70 EP
= barvinok_lexsmaller_ev(P
, D
, D_dim
, C
, options
->MaxRays
);
75 barvinok_options_free(options
);