lexmin.cc: extract out some code to evalue_util and edomain
[barvinok.git] / edomain.h
blob1cbf7ee82d682471756c73b20afe5efe33e8ded2
1 #include <vector>
2 #include <gmp.h>
3 extern "C" {
4 #include <polylib/polylibgmp.h>
6 #include <barvinok/evalue.h>
8 struct EDomain {
9 Polyhedron *D;
10 Vector *sample;
11 std::vector<evalue *> floors;
13 EDomain(Polyhedron *D) {
14 this->D = Polyhedron_Copy(D);
15 sample = NULL;
17 EDomain(Polyhedron *D, std::vector<evalue *>floors) {
18 this->D = Polyhedron_Copy(D);
19 add_floors(floors);
20 sample = NULL;
22 EDomain(EDomain *ED) {
23 this->D = Polyhedron_Copy(ED->D);
24 add_floors(ED->floors);
25 sample = NULL;
27 EDomain(Polyhedron *D, EDomain *ED, std::vector<evalue *>floors) {
28 this->D = Polyhedron_Copy(D);
29 add_floors(ED->floors);
30 add_floors(floors);
31 sample = NULL;
33 void add_floors(std::vector<evalue *>floors) {
34 for (int i = 0; i < floors.size(); ++i) {
35 evalue *f = new evalue;
36 value_init(f->d);
37 evalue_copy(f, floors[i]);
38 this->floors.push_back(f);
41 int find_floor(evalue *needle) {
42 for (int i = 0; i < floors.size(); ++i)
43 if (eequal(needle, floors[i]))
44 return i;
45 return -1;
47 void print(FILE *out, char **p);
48 ~EDomain() {
49 for (int i = 0; i < floors.size(); ++i) {
50 free_evalue_refs(floors[i]);
51 delete floors[i];
53 Polyhedron_Free(D);
54 if (sample)
55 Vector_Free(sample);