22inline void* use_malloc::operator
new(
size_t sz)
25 if (!x)
throw std::bad_alloc();
29inline void* use_malloc::operator
new[](
size_t sz)
32 if (!x)
throw std::bad_alloc();
36inline void use_malloc::operator
delete(
void* p)
41inline void use_malloc::operator
delete[](
void* p)
56inline scalar::scalar()
58 ap_scalar_init(&c, AP_SCALAR_DOUBLE);
61inline scalar::scalar(
int x)
63 ap_scalar_init(&c, AP_SCALAR_MPQ);
64 ap_scalar_set_int(&c, x);
67inline scalar::scalar(
long x)
69 ap_scalar_init(&c, AP_SCALAR_MPQ);
70 ap_scalar_set_int(&c, x);
73inline scalar::scalar(
double x)
75 ap_scalar_init(&c, AP_SCALAR_DOUBLE);
76 ap_scalar_set_double(&c, x);
79inline scalar::scalar(
const frac& x)
81 ap_scalar_init(&c, AP_SCALAR_MPQ);
82 ap_scalar_set_frac(&c, x.num, x.den);
85inline scalar::scalar(infty x)
87 ap_scalar_init(&c, AP_SCALAR_DOUBLE);
88 ap_scalar_set_infty(&c, x.sgn);
91inline scalar::scalar(
const mpq_class& x)
93 ap_scalar_init(&c, AP_SCALAR_MPQ);
94 ap_scalar_set_mpq(&c,
const_cast<mpq_class&
>(x).get_mpq_t());
97inline scalar::scalar(mpfr_t x)
99 ap_scalar_init(&c, AP_SCALAR_MPFR);
100 ap_scalar_set_mpfr(&c,x);
103inline scalar::scalar(
const scalar& x)
105 ap_scalar_init(&c, x.c.discr);
106 ap_scalar_set(&c,
const_cast<ap_scalar_t*
>(&x.c));
113inline scalar::~scalar()
124inline scalar& scalar::operator= (
int x)
126 ap_scalar_set_int(&c, x);
130inline scalar& scalar::operator= (
long x)
132 ap_scalar_set_int(&c, x);
136inline scalar& scalar::operator= (
double x)
138 ap_scalar_set_double(&c, x);
142inline scalar& scalar::operator= (
const frac& x)
144 ap_scalar_set_frac(&c, x.num, x.den);
148inline scalar& scalar::operator= (infty x)
150 ap_scalar_set_infty(&c, x.sgn);
154inline scalar& scalar::operator= (
const mpq_class& x)
156 ap_scalar_set_mpq(&c,
const_cast<mpq_class&
>(x).get_mpq_t());
160inline scalar& scalar::operator= (mpfr_t x)
162 ap_scalar_set_mpfr(&c, x);
166inline scalar& scalar::operator= (
const scalar& x)
168 ap_scalar_set(&c,
const_cast<ap_scalar_t*
>(&x.c));
175inline void swap(scalar& a, scalar &b)
177 ap_scalar_swap(&a.c, &b.c);
184inline ap_scalar_discr_t scalar::get_discr()
const
189inline double& scalar::get_double()
191 if (c.discr!=AP_SCALAR_DOUBLE)
throw(bad_discriminant(
"apron::scalar::get_double()"));
195inline const double& scalar::get_double()
const
197 if (c.discr!=AP_SCALAR_DOUBLE)
throw(bad_discriminant(
"apron::scalar::get_double()"));
201inline mpq_class& scalar::get_mpq()
203 if (c.discr!=AP_SCALAR_MPQ)
throw(bad_discriminant(
"apron::scalar::get_mpq()"));
204 return reinterpret_cast<mpq_class&
>(*c.val.mpq);
207inline const mpq_class& scalar::get_mpq()
const
209 if (c.discr!=AP_SCALAR_MPQ)
throw(bad_discriminant(
"apron::scalar::get_mpq()"));
210 return reinterpret_cast<mpq_class&
>(*c.val.mpq);
217inline mpq_class scalar::to_mpq(mp_rnd_t round, order& conv)
const
220 int o = ap_mpq_set_scalar(r.get_mpq_t(),
const_cast<ap_scalar_t*
>(&c), round);
221 conv = (o>0) ? GREATER : (o<0) ? LESS : EQUAL;
225inline double scalar::to_double(mp_rnd_t round, order& conv)
const
228 int o = ap_double_set_scalar(&r,
const_cast<ap_scalar_t*
>(&c), round);
229 conv = (o>0) ? GREATER : (o<0) ? LESS : EQUAL;
233inline void scalar::to_mpfr(mpfr_t r, mp_rnd_t round, order& conv)
const
235 int o = ap_mpfr_set_scalar(r,
const_cast<ap_scalar_t*
>(&c), round);
236 conv = (o>0) ? GREATER : (o<0) ? LESS : EQUAL;
239inline scalar::operator mpq_class()
const
242 return to_mpq(GMP_RNDN, c);
245inline scalar::operator double()
const
248 return to_double(GMP_RNDN, c);
255inline std::ostream&
operator<< (std::ostream& os,
const scalar& s)
257 int i = ap_scalar_infty(
const_cast<ap_scalar_t*
>(&s.c));
258 if (i>0)
return os <<
"+oo";
259 if (i<0)
return os <<
"-oo";
261 case AP_SCALAR_DOUBLE:
return os << s.c.val.dbl;
262 case AP_SCALAR_MPQ:
return os << s.c.val.mpq;
265 double d = mpfr_get_d(s.c.val.mpfr,GMP_RNDU);
266 if (!mpfr_cmp_d(s.c.val.mpfr,d))
return os << d;
268 char* tmp = mpfr_get_str(NULL,&e,10,os.precision(),s.c.val.mpfr,GMP_RNDU);
269 if (tmp[0]==
'-' || tmp[0]==
'+') {
270 os << tmp[0] <<
"." << tmp+1;
271 if (e>0) os <<
"e+" << e;
272 if (e<0) os <<
"e" << e;
276 if (e>0) os <<
"e+" << e;
277 if (e<0) os <<
"e" << e;
286inline void scalar::print(FILE* stream)
const
288 ap_scalar_fprint(stream,
const_cast<ap_scalar_t*
>(&c));
295inline scalar::order scalar::is_infty()
const
297 return (order) ap_scalar_infty(
const_cast<ap_scalar_t*
>(&c));
300inline scalar::order scalar::sgn ()
const
302 return (order) ap_scalar_sgn(
const_cast<ap_scalar_t*
>(&c));
306inline scalar::order
cmp(
const scalar& a,
const scalar& b)
308 return (scalar::order) ap_scalar_cmp(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c));
313 return ap_scalar_cmp(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c))>=0;
318 return ap_scalar_cmp(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c))<=0;
323 return ap_scalar_cmp(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c))>0;
328 return ap_scalar_cmp(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c))<0;
333 return ap_scalar_equal(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c));
338 return !ap_scalar_equal(
const_cast<ap_scalar_t*
>(&a.c),
const_cast<ap_scalar_t*
>(&b.c));
342inline scalar::order
cmp(
const scalar& a,
int b)
344 return (scalar::order) ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&a.c), b);
349 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&a.c), b)>=0;
354 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&a.c), b)<=0;
359 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&a.c), b)>0;
364 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&a.c), b)<0;
369 return ap_scalar_equal_int(
const_cast<ap_scalar_t*
>(&a.c), b);
374 return !ap_scalar_equal_int(
const_cast<ap_scalar_t*
>(&a.c), b);
377inline scalar::order
cmp(
int a,
const scalar& b)
379 return (scalar::order) ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&b.c), a);
384 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&b.c), a)<=0;
389 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&b.c), a)>=0;
394 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&b.c), a)<0;
399 return ap_scalar_cmp_int(
const_cast<ap_scalar_t*
>(&b.c), a)>0;
404 return ap_scalar_equal_int(
const_cast<ap_scalar_t*
>(&b.c), a);
409 return !ap_scalar_equal_int(
const_cast<ap_scalar_t*
>(&b.c), a);
416inline void scalar::neg()
418 ap_scalar_neg(&c, &c);
421inline scalar scalar::operator- ()
const
428inline void scalar::inv()
430 ap_scalar_inv(&c, &c);
433inline scalar scalar::operator~ ()
const
440inline long scalar::hash()
const
442 return ap_scalar_hash(
const_cast<ap_scalar_t*
>(&c));
449inline const ap_scalar_t* scalar::get_ap_scalar_t()
const
454inline ap_scalar_t* scalar::get_ap_scalar_t()
std::ostream & operator<<(std::ostream &os, const scalar &s)
Definition apxx_scalar_inline.hh:255
bool operator<=(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:316
bool operator==(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:331
scalar::order cmp(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:306
bool operator>=(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:311
bool operator>(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:321
void swap(scalar &a, scalar &b)
Definition apxx_scalar_inline.hh:175
bool operator<(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:326
bool operator!=(const scalar &a, const scalar &b)
Definition apxx_scalar_inline.hh:336