28inline linexpr1::linexpr1(ap_linexpr1_t& p) : l(p)
32inline linexpr1::linexpr1(
const environment& e,
const linexpr0& x)
34 l = ap_linexpr1_of_linexpr0(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()),
35 ap_linexpr0_copy(
const_cast<ap_linexpr0_t*
>(x.get_ap_linexpr0_t())));
38inline linexpr1::linexpr1(
const environment& e, ap_linexpr_discr_t lin_discr,
size_t size)
40 l = ap_linexpr1_make(
const_cast<ap_environment_t*
>(e.get_ap_environment_t()),
44inline linexpr1::linexpr1(
const linexpr1& x)
46 l = ap_linexpr1_copy(
const_cast<ap_linexpr1_t*
>(&x.l));
49inline linexpr1::linexpr1(
const linexpr1& x,
const environment& e)
52 ap_linexpr1_extend_environment(&l,
53 const_cast<ap_linexpr1_t*
>(&x.l),
54 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
55 if (r)
throw std::invalid_argument(
"apron::linexpr1::linexpr1(const linexpr1&, environment&) not a super-environment");
63inline linexpr1::~linexpr1()
65 ap_linexpr1_clear(&l);
72inline linexpr1& linexpr1::operator=(
const linexpr1& x)
74 ap_linexpr1_t ll = ap_linexpr1_copy(
const_cast<ap_linexpr1_t*
>(&x.l));
75 ap_linexpr1_clear(&l);
84inline void linexpr1::extend_environment(
const environment& e)
87 ap_linexpr1_extend_environment_with(&l,
88 const_cast<ap_environment_t*
>(e.get_ap_environment_t()));
89 if (r)
throw std::invalid_argument(
"apron::linexpr1::extend_environment(const environment&) not a super-environment");
97inline environment linexpr1::get_environment()
const
99 return ap_environment_copy(ap_linexpr1_envref(
const_cast<ap_linexpr1_t*
>(&l)));
102inline const linexpr0& linexpr1::get_linexpr0()
const
104 return reinterpret_cast<linexpr0&
>(*ap_linexpr1_linexpr0ref(
const_cast<ap_linexpr1_t*
>(&l)));
107inline linexpr0& linexpr1::get_linexpr0()
109 return reinterpret_cast<linexpr0&
>(*ap_linexpr1_linexpr0ref(&l));
112inline size_t linexpr1::size()
const
114 return ap_linexpr0_size(ap_linexpr1_linexpr0ref(
const_cast<ap_linexpr1_t*
>(&l)));
117inline ap_linexpr_discr_t linexpr1::get_discr()
const
119 return ap_linexpr1_linexpr0ref(
const_cast<ap_linexpr1_t*
>(&l))->discr;
122inline coeff& linexpr1::get_cst()
124 return reinterpret_cast<coeff&
>(*ap_linexpr1_cstref(&l));
127inline const coeff& linexpr1::get_cst()
const
129 return reinterpret_cast<coeff&
>(*ap_linexpr1_cstref(
const_cast<ap_linexpr1_t*
>(&l)));
132inline coeff& linexpr1::operator[](
const var& var)
134 ap_coeff_t* x = ap_linexpr1_coeffref(&l,
135 const_cast<ap_var_t
>(var.get_ap_var_t()));
136 if (!x)
throw std::invalid_argument(
"apron::linexpr1::operator[](const var&) variable not in environment");
137 return reinterpret_cast<coeff&
>(*x);
140inline const coeff& linexpr1::operator[](
const var& var)
const
142 ap_coeff_t* x = ap_linexpr1_coeffref(
const_cast<ap_linexpr1_t*
>(&l),
143 const_cast<ap_var_t
>(var.get_ap_var_t()));
144 if (!x)
throw std::invalid_argument(
"apron::linexpr1::operator[](const var&) variable not in environment");
145 return reinterpret_cast<coeff&
>(*x);
152inline std::ostream&
operator<<(std::ostream& os,
const linexpr1& s)
155 for (linexpr1::const_iterator i=s.begin();i.valid();++i) {
160 if (first) os <<
"0";
164inline void linexpr1::print(FILE* stream)
const
166 ap_linexpr1_fprint(stream,
const_cast<ap_linexpr1_t*
>(&l));
173inline bool linexpr1::is_integer()
const
175 return ap_linexpr1_is_integer(
const_cast<ap_linexpr1_t*
>(&l));
178inline bool linexpr1::is_real()
const
180 return ap_linexpr1_is_real(
const_cast<ap_linexpr1_t*
>(&l));
183inline ap_linexpr_type_t linexpr1::get_type()
const
185 return ap_linexpr1_type(
const_cast<ap_linexpr1_t*
>(&l));
188inline bool linexpr1::is_linear()
const
190 return ap_linexpr1_is_linear(
const_cast<ap_linexpr1_t*
>(&l));
193inline bool linexpr1::is_quasilinear()
const
195 return ap_linexpr1_is_quasilinear(
const_cast<ap_linexpr1_t*
>(&l));
202inline void linexpr1::const_iterator::skip_AP_DIM_MAX()
204 if (l->linexpr0->discr == AP_LINEXPR_DENSE)
return;
205 while (pos < l->linexpr0->size && l->linexpr0->p.linterm[pos].dim == AP_DIM_MAX) pos++;
208inline linexpr1::const_iterator::const_iterator(ap_linexpr1_t* e)
214inline linexpr1::const_iterator::const_iterator(
const linexpr1& e)
216 l =
const_cast<ap_linexpr1_t*
>(e.get_ap_linexpr1_t());
221inline linexpr1::const_iterator::const_iterator(
const const_iterator& i)
226inline linexpr1::iterator::iterator(ap_linexpr1_t* e)
227 : linexpr1::const_iterator(e)
230inline linexpr1::iterator::iterator(linexpr1& e)
231 : linexpr1::const_iterator(e.get_ap_linexpr1_t())
234inline linexpr1::iterator::iterator(
const iterator& i)
235 : linexpr1::const_iterator(i.l)
238inline linexpr1::const_iterator& linexpr1::const_iterator::operator=(
const const_iterator& i)
245inline linexpr1::iterator& linexpr1::iterator::operator=(
const iterator& i)
252inline ap_dim_t linexpr1::const_iterator::get_dim()
const
254 if (pos >= l->linexpr0->size)
throw std::out_of_range(
"apron::linexpr1::const_iterator::get_dim()");
255 if (l->linexpr0->discr == AP_LINEXPR_DENSE)
return pos;
256 else return l->linexpr0->p.linterm[pos].dim;
259inline const var& linexpr1::const_iterator::get_var()
const
262 if (pos >= l->linexpr0->size)
throw std::out_of_range(
"apron::linexpr1::const_iterator::get_var()");
263 if (l->linexpr0->discr == AP_LINEXPR_DENSE) d = pos;
264 else d = l->linexpr0->p.linterm[pos].dim;
265 return *
reinterpret_cast<var*
>(&l->env->var_of_dim[d]);
268inline const coeff& linexpr1::const_iterator::get_coeff()
const
270 if (pos >= l->linexpr0->size)
throw std::out_of_range(
"apron::linexpr1::const_iterator::get_coeff()");
271 if (l->linexpr0->discr == AP_LINEXPR_DENSE)
return reinterpret_cast<coeff&
>(l->linexpr0->p.coeff[pos]);
272 else return reinterpret_cast<coeff&
>(l->linexpr0->p.linterm[pos].coeff);
275inline coeff& linexpr1::iterator::get_coeff()
const
277 if (pos >= l->linexpr0->size)
throw std::out_of_range(
"apron::linexpr1::iterator::get_coeff()");
278 if (l->linexpr0->discr == AP_LINEXPR_DENSE)
return reinterpret_cast<coeff&
>(l->linexpr0->p.coeff[pos]);
279 else return reinterpret_cast<coeff&
>(l->linexpr0->p.linterm[pos].coeff);
282inline void linexpr1::const_iterator::next()
288inline void linexpr1::const_iterator::operator++()
293inline bool linexpr1::const_iterator::valid()
const
295 return pos < l->linexpr0->size;
298inline linexpr1::const_iterator linexpr1::begin()
const
300 return const_iterator(*
this);
303inline linexpr1::iterator linexpr1::begin()
305 return iterator(*
this);
312inline void linexpr1::minimize()
314 ap_linexpr1_minimize(&l);
321inline const ap_linexpr1_t* linexpr1::get_ap_linexpr1_t()
const
326inline ap_linexpr1_t* linexpr1::get_ap_linexpr1_t()
static bool print_coeff_sign(std::ostream &os, const coeff &c, bool &first, bool cst)
Definition apxx_linexpr0_inline.hh:206
std::ostream & operator<<(std::ostream &os, const linexpr1 &s)
Definition apxx_linexpr1_inline.hh:152