22 ap_var_t* r = (ap_var_t*)malloc(
sizeof(ap_var_t)*n.size());
24 for (
size_t i=0; i<n.size(); i++) r[i] = n[i].get_ap_var_t();
31 *x = (ap_var_t*)malloc(
sizeof(ap_var_t)*n.size());
32 *y = (ap_var_t*)malloc(
sizeof(ap_var_t)*n.size());
34 for (
size_t i=0; i<n.size(); i++) {
35 (*x)[i] = n[i].first.get_ap_var_t();
36 (*y)[i] = n[i].second.get_ap_var_t();
44inline environment::environment()
45 : e(ap_environment_alloc_empty())
49inline environment::environment(
const std::vector<var>& intdim,
const std::vector<var>& realdim)
53 e = ap_environment_alloc(i, intdim.size(), r, realdim.size());
55 if (!e)
throw std::invalid_argument(
"apron::environment::environment(const vector<var>&, const vector<var>&) incompatible variable types");
58inline environment::environment(
const var* intdim,
size_t intdim_size,
const var* realdim,
size_t realdim_size)
60 e = ap_environment_alloc(
const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(intdim)), intdim_size,
61 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(realdim)), realdim_size);
62 if (!e)
throw std::invalid_argument(
"apron::environment::environment(const var*, size_t, const var*, size_t) incompatible variable types");
65inline environment::environment(
const environment& x)
66 : e(ap_environment_copy(x.e))
70inline environment::~environment()
72 ap_environment_free(e);
79inline const environment& environment::operator=(
const environment& x)
81 ap_environment_t* ee = ap_environment_copy(x.e);
82 ap_environment_free(e);
92inline environment environment::add(
const std::vector<var>& intdim,
const std::vector<var>& realdim)
const
96 ap_environment_t* ee = ap_environment_add(e, i, intdim.size(), r, realdim.size());
98 if (!ee)
throw std::invalid_argument(
"apron::environment::add(const vector<var>&, const vector<var>&) incompatible variable types");
102inline environment environment::add(
const var* intdim,
size_t intdim_size,
const var* realdim,
size_t realdim_size)
const
104 ap_environment_t* ee =
105 ap_environment_add(e,
106 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(intdim)), intdim_size,
107 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(realdim)), realdim_size);
108 if (!ee)
throw std::invalid_argument(
"apron::environment::add(const var*, size_t, const var*, size_t) incompatible variable types");
112inline environment environment::add(
const std::vector<var>& intdim,
const std::vector<var>& realdim, dimperm& perm)
const
117 ap_environment_t* ee = ap_environment_add_perm(e, i, intdim.size(), r, realdim.size(), &p);
119 if (!ee)
throw std::invalid_argument(
"apron::environment::add(const vector<var>&, const vector<var>&, dimperm& perm) incompatible variable types");
120 ap_dimperm_clear(perm.get_ap_dimperm_t());
121 *perm.get_ap_dimperm_t() = p;
125inline environment environment::add(
const var* intdim,
size_t intdim_size,
const var* realdim,
size_t realdim_size, dimperm& perm)
const
128 ap_environment_t* ee =
129 ap_environment_add_perm(e,
130 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(intdim)), intdim_size,
131 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(realdim)), realdim_size,
133 if (!ee)
throw std::invalid_argument(
"apron::environment::add(const var*, size_t, const var*, size_t, dimperm&) incompatible variable types");
134 ap_dimperm_clear(perm.get_ap_dimperm_t());
135 *perm.get_ap_dimperm_t() = p;
139inline environment environment::remove(
const std::vector<var>& dims)
const
142 ap_environment_t* ee = ap_environment_remove(e, d, dims.size());
144 if (!ee)
throw std::invalid_argument(
"apron::environment::remove(const vector<var>&) variable not in environment");
148inline environment environment::remove(
const var* dims,
size_t dims_size)
const
150 ap_environment_t* ee =
151 ap_environment_remove(e,
152 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(dims)),
154 if (!ee)
throw std::invalid_argument(
"apron::environment::remove(const var*, size_t) variable not in environment");
158inline environment environment::rename(
const std::vector<std::pair<var,var> >& dims)
const
163 ap_environment_t* ee = ap_environment_rename(e, a, b, dims.size(), &p);
165 if (!ee)
throw std::invalid_argument(
"apron::environment::rename(const vector<std::pair<var,var>>&) variable mismatch");
166 ap_dimperm_clear(&p);
170inline environment environment::rename(
const var* before,
const var* after,
size_t dims_size)
const
173 ap_environment_t* ee =
174 ap_environment_rename(e,
175 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(before)),
176 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(after)),
178 if (!ee)
throw std::invalid_argument(
"apron::environment::rename(const var*, const var*, size_t) variable mismatch");
179 ap_dimperm_clear(&p);
183inline environment environment::rename(
const std::vector<std::pair<var,var> >& dims, dimperm& perm)
const
188 ap_dimperm_clear(perm.get_ap_dimperm_t());
189 ap_environment_t* ee = ap_environment_rename(e, a, b, dims.size(), &p);
191 if (!ee)
throw std::invalid_argument(
"apron::environment::rename(const vector<std::pair<var,var>>&, dimperm&) variable mismatch");
192 ap_dimperm_clear(perm.get_ap_dimperm_t());
193 *perm.get_ap_dimperm_t() = p;
197inline environment environment::rename(
const var* before,
const var* after,
size_t dims_size, dimperm& perm)
const
200 ap_environment_t* ee =
201 ap_environment_rename(e,
202 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(before)),
203 const_cast<ap_var_t*
>(
reinterpret_cast<const ap_var_t*
>(after)),
205 if (!ee)
throw std::invalid_argument(
"apron::environment::rename(const var*, const var*, size_t, dimperm&) variable mismatch");
206 ap_dimperm_clear(perm.get_ap_dimperm_t());
207 *perm.get_ap_dimperm_t() = p;
212inline environment
lce(
const environment& x,
const environment& y)
214 ap_dimchange_t *a = NULL, *b = NULL;
215 ap_environment_t* ee = ap_environment_lce(x.e, y.e, &a, &b);
216 if (a) ap_dimchange_free(a);
217 if (b) ap_dimchange_free(b);
218 if (!ee)
throw std::invalid_argument(
"apron::environment::lce(const environment&, const environment&) incompatible variable types");
222inline environment
lce(
const environment& x,
const environment& y, dimchange& chgx, dimchange& chgy)
224 ap_dimchange_t *a = NULL, *b = NULL;
225 ap_environment_t* ee = ap_environment_lce(x.e, y.e, &a, &b);
226 ap_dimchange_clear(chgx.get_ap_dimchange_t());
227 ap_dimchange_clear(chgy.get_ap_dimchange_t());
228 if (a) { *chgx.get_ap_dimchange_t() = *a; free(a); }
229 else { ap_dimchange_init(chgx.get_ap_dimchange_t(), 0, 0); }
230 if (b) { *chgy.get_ap_dimchange_t() = *b; free(b); }
231 else { ap_dimchange_init(chgy.get_ap_dimchange_t(), 0, 0); }
232 if (!ee)
throw std::invalid_argument(
"apron::environment::lce(const environment&, const environment&, dimchange&, dimchange&) incompatible variable types");
236inline environment
lce(
const std::vector<environment>& x)
238 ap_environment_t** ar = (ap_environment_t**)malloc(
sizeof(ap_environment_t*)*x.size());
239 ap_dimchange_t** r = NULL;
241 for (
size_t i=0; i<x.size(); i++) ar[i] = x[i].e;
242 ap_environment_t* ee = ap_environment_lce_array(ar, x.size(), &r);
245 for (
size_t i=0; i<x.size(); i++)
246 if (r[i]) ap_dimchange_free(r[i]);
249 if (!ee)
throw std::invalid_argument(
"apron::environment::lce(const vector<environment>&) incompatible variable types");
253inline environment
lce(
const environment* env,
size_t env_size)
255 ap_dimchange_t** r = NULL;
256 ap_environment_t* ee =
257 ap_environment_lce_array(
reinterpret_cast<ap_environment_t**
>(
const_cast<environment*
>(env)),
260 for (
size_t i=0; i<env_size; i++)
261 if (r[i]) ap_dimchange_free(r[i]);
264 if (!ee)
throw std::invalid_argument(
"apron::environment::lce(const environment*, size_t) incompatible variable types");
268inline environment
lce(
const std::vector<environment>& x, std::vector<dimchange>& chg)
270 if (x.size()>chg.size())
throw std::invalid_argument(
"apron::environment::lce(const vector<environment>&, vector<dimchange>&) dimchange vector too short");
271 ap_environment_t** ar = (ap_environment_t**)malloc(
sizeof(ap_environment_t*)*x.size());
272 ap_dimchange_t** r = NULL;
274 for (
size_t i=0; i<x.size(); i++) ar[i] = x[i].e;
275 ap_environment_t* ee = ap_environment_lce_array(ar, x.size(), &r);
277 for (
size_t i=0; i<x.size(); i++) {
278 ap_dimchange_clear(chg[i].get_ap_dimchange_t());
280 *chg[i].get_ap_dimchange_t() = *(r[i]);
284 ap_dimchange_init(chg[i].get_ap_dimchange_t(), 0, 0);
288 if (!ee)
throw std::invalid_argument(
"apron::environment::lce(const vector<environment>&, vector<dimchange>&) incompatible variable types");
292inline environment
lce(
const environment* env, dimchange* chg,
size_t env_size)
294 ap_dimchange_t** r = NULL;
295 ap_environment_t* ee =
296 ap_environment_lce_array(
reinterpret_cast<ap_environment_t**
>(
const_cast<environment*
>(env)),
298 for (
size_t i=0; i<env_size; i++) {
299 ap_dimchange_clear(chg[i].get_ap_dimchange_t());
301 *chg[i].get_ap_dimchange_t() = *(r[i]);
305 ap_dimchange_init(chg[i].get_ap_dimchange_t(), 0, 0);
309 if (!ee)
throw std::invalid_argument(
"apron::environment::lce(const environment*, dimchange*, size_t) incompatible variable types");
315 ap_dimchange_t* d = ap_environment_dimchange(x.e,y.e);
316 if (!d)
throw std::invalid_argument(
"apron::environment::get_dimchange(const environment&, const environment &) not a super-type");
318 *c.get_ap_dimchange_t() = *d;
327inline size_t environment::intdim()
const
332inline size_t environment::realdim()
const
337inline bool environment::contains(
const var& x)
const
339 return ap_environment_mem_var(e, x.get_ap_var_t());
342inline ap_dim_t environment::operator[] (
const var& x)
const
344 ap_dim_t d = ap_environment_dim_of_var(e, x.get_ap_var_t());
345 if (d==AP_DIM_MAX)
throw std::invalid_argument(
"apron::environment::operator[](const var&) variable not in environment");
349inline const var& environment::operator[] (ap_dim_t d)
const
351 return *
reinterpret_cast<var*
>(&e->var_of_dim[d]);
354inline ap_dim_t environment::get_dim(
const var& x)
const
356 ap_dim_t d = ap_environment_dim_of_var(e, x.get_ap_var_t());
357 if (d==AP_DIM_MAX)
throw std::invalid_argument(
"apron::environment::get_dim(const var&) variable not in environment");
361inline const var& environment::get_var(ap_dim_t d)
const
363 if (d >= e->intdim+e->realdim)
throw std::out_of_range(
"environment::get_var");
364 return *
reinterpret_cast<var*
>(&e->var_of_dim[d]);
367inline std::vector<var> environment::get_vars()
const
369 std::vector<var> v = std::vector<var>(e->intdim+e->realdim,
"");
370 for (
size_t i=0; i<e->intdim+e->realdim; i++) v[i] = e->var_of_dim[i];
378inline bool operator==(
const environment& x,
const environment& y)
380 return ap_environment_is_eq(x.e, y.e);
383inline bool operator!=(
const environment& x,
const environment& y)
385 return !ap_environment_is_eq(x.e, y.e);
388inline bool operator<=(
const environment& x,
const environment& y)
390 return ap_environment_is_leq(x.e, y.e);
393inline bool operator>=(
const environment& x,
const environment& y)
395 return ap_environment_is_leq(y.e, x.e);
398inline int cmp(
const environment& x,
const environment& y)
400 return ap_environment_compare(x.e, y.e);
406inline std::ostream&
operator<< (std::ostream& os,
const environment& s)
408 for (
size_t i=0; i<s.e->intdim+s.e->realdim; i++) {
409 char* c = ap_var_operations->to_string(s.e->var_of_dim[i]);
410 os << i <<
": " << c << (i<s.e->intdim ?
" (int)" :
" (real)") << std::endl;
416inline void environment::print(FILE* stream)
const
418 ap_environment_fdump(stream, e);
425inline const ap_environment_t* environment::get_ap_environment_t()
const
430inline ap_environment_t*environment:: get_ap_environment_t()
int cmp(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:398
static void apxx_environment_get_names_pair(const std::vector< std::pair< var, var > > &n, ap_var_t **x, ap_var_t **y)
Definition apxx_environment_inline.hh:29
std::ostream & operator<<(std::ostream &os, const environment &s)
Definition apxx_environment_inline.hh:406
bool operator==(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:378
environment lce(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:212
bool operator!=(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:383
bool operator>=(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:393
bool operator<=(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:388
static ap_var_t * apxx_environment_get_names(const std::vector< var > &n)
Definition apxx_environment_inline.hh:20
dimchange get_dimchange(const environment &x, const environment &y)
Definition apxx_environment_inline.hh:313