4 #include <polylib/polylibgmp.h>
6 #include <barvinok/evalue.h>
12 EDomain_floor(const evalue
*f
) {
22 EDomain_floor
*ref() {
26 static void unref(EDomain_floor
* floor
) {
27 if (!--floor
->refcount
)
35 std::vector
<EDomain_floor
*> floors
;
37 EDomain(Polyhedron
*D
) {
38 this->D
= Polyhedron_Copy(D
);
41 EDomain(Polyhedron
*D
, std::vector
<EDomain_floor
*>floors
) {
42 this->D
= Polyhedron_Copy(D
);
46 EDomain(EDomain
*ED
) {
47 this->D
= Polyhedron_Copy(ED
->D
);
48 add_floors(ED
->floors
);
51 EDomain(Polyhedron
*D
, EDomain
*ED
, std::vector
<EDomain_floor
*>floors
) {
52 this->D
= Polyhedron_Copy(D
);
53 add_floors(ED
->floors
);
57 void add_floors(std::vector
<EDomain_floor
*>floors
) {
58 for (int i
= 0; i
< floors
.size(); ++i
)
59 this->floors
.push_back(floors
[i
]->ref());
61 int find_floor(evalue
*needle
) const {
62 for (int i
= 0; i
< floors
.size(); ++i
)
63 if (eequal(needle
, floors
[i
]->e
))
67 void print(FILE *out
, char **p
);
69 for (int i
= 0; i
< floors
.size(); ++i
)
70 EDomain_floor::unref(floors
[i
]);
76 Matrix
*add_ge_constraint(evalue
*constraint
,
77 std::vector
<EDomain_floor
*>& new_floors
) const;
80 int evalue2constraint(EDomain
*D
, evalue
*E
, Value
*cons
, int len
);