PPL  1.2
Parma_Polyhedra_Library::Checked_Number< T, Policy > Class Template Reference

A wrapper for numeric types implementing a given policy. More...

#include <Checked_Number_defs.hh>

Public Member Functions

bool OK () const
 Checks if all the invariants are satisfied. More...
 
Result classify (bool nan=true, bool inf=true, bool sign=true) const
 Classifies *this. More...
 
template<typename From >
Checked_Number< T, Policy > & operator= (const From &y)
 
Constructors
 Checked_Number ()
 Default constructor. More...
 
 Checked_Number (const Checked_Number &y)
 Copy constructor. More...
 
template<typename From , typename From_Policy >
 Checked_Number (const Checked_Number< From, From_Policy > &y, Rounding_Dir dir)
 Direct initialization from a Checked_Number and rounding mode. More...
 
 Checked_Number (char y, Rounding_Dir dir)
 Direct initialization from a plain char and rounding mode. More...
 
 Checked_Number (signed char y, Rounding_Dir dir)
 Direct initialization from a signed char and rounding mode. More...
 
 Checked_Number (signed short y, Rounding_Dir dir)
 Direct initialization from a signed short and rounding mode. More...
 
 Checked_Number (signed int y, Rounding_Dir dir)
 Direct initialization from a signed int and rounding mode. More...
 
 Checked_Number (signed long y, Rounding_Dir dir)
 Direct initialization from a signed long and rounding mode. More...
 
 Checked_Number (signed long long y, Rounding_Dir dir)
 Direct initialization from a signed long long and rounding mode. More...
 
 Checked_Number (unsigned char y, Rounding_Dir dir)
 Direct initialization from an unsigned char and rounding mode. More...
 
 Checked_Number (unsigned short y, Rounding_Dir dir)
 Direct initialization from an unsigned short and rounding mode. More...
 
 Checked_Number (unsigned int y, Rounding_Dir dir)
 Direct initialization from an unsigned int and rounding mode. More...
 
 Checked_Number (unsigned long y, Rounding_Dir dir)
 Direct initialization from an unsigned long and rounding mode. More...
 
 Checked_Number (unsigned long long y, Rounding_Dir dir)
 Direct initialization from an unsigned long long and rounding mode. More...
 
 Checked_Number (const mpq_class &y, Rounding_Dir dir)
 Direct initialization from a rational and rounding mode. More...
 
 Checked_Number (const mpz_class &y, Rounding_Dir dir)
 Direct initialization from an unbounded integer and rounding mode. More...
 
 Checked_Number (const char *y, Rounding_Dir dir)
 Direct initialization from a C string and rounding mode. More...
 
template<typename From >
 Checked_Number (const From &, Rounding_Dir dir, typename Enable_If< Is_Special< From >::value, bool >::type ignored=false)
 Direct initialization from special and rounding mode. More...
 
template<typename From , typename From_Policy >
 Checked_Number (const Checked_Number< From, From_Policy > &y)
 Direct initialization from a Checked_Number, default rounding mode. More...
 
 Checked_Number (char y)
 Direct initialization from a plain char, default rounding mode. More...
 
 Checked_Number (signed char y)
 Direct initialization from a signed char, default rounding mode. More...
 
 Checked_Number (signed short y)
 Direct initialization from a signed short, default rounding mode. More...
 
 Checked_Number (signed int y)
 Direct initialization from a signed int, default rounding mode. More...
 
 Checked_Number (signed long y)
 Direct initialization from a signed long, default rounding mode. More...
 
 Checked_Number (signed long long y)
 Direct initialization from a signed long long, default rounding mode. More...
 
 Checked_Number (unsigned char y)
 Direct initialization from an unsigned char, default rounding mode. More...
 
 Checked_Number (unsigned short y)
 Direct initialization from an unsigned short, default rounding mode. More...
 
 Checked_Number (unsigned int y)
 Direct initialization from an unsigned int, default rounding mode. More...
 
 Checked_Number (unsigned long y)
 Direct initialization from an unsigned long, default rounding mode. More...
 
 Checked_Number (unsigned long long y)
 Direct initialization from an unsigned long long, default rounding mode. More...
 
 Checked_Number (float y)
 Direct initialization from a float, default rounding mode. More...
 
 Checked_Number (double y)
 Direct initialization from a double, default rounding mode. More...
 
 Checked_Number (long double y)
 Direct initialization from a long double, default rounding mode. More...
 
 Checked_Number (const mpq_class &y)
 Direct initialization from a rational, default rounding mode. More...
 
 Checked_Number (const mpz_class &y)
 Direct initialization from an unbounded integer, default rounding mode. More...
 
 Checked_Number (const char *y)
 Direct initialization from a C string, default rounding mode. More...
 
template<typename From >
 Checked_Number (const From &, typename Enable_If< Is_Special< From >::value, bool >::type ignored=false)
 Direct initialization from special, default rounding mode. More...
 
Accessors and Conversions
 operator T () const
 Conversion operator: returns a copy of the underlying numeric value. More...
 
T & raw_value ()
 Returns a reference to the underlying numeric value. More...
 
const T & raw_value () const
 Returns a const reference to the underlying numeric value. More...
 
Assignment Operators
Checked_Numberoperator= (const Checked_Number &y)
 Assignment operator. More...
 
template<typename From >
Checked_Numberoperator= (const From &y)
 Assignment operator. More...
 
template<typename From_Policy >
Checked_Numberoperator+= (const Checked_Number< T, From_Policy > &y)
 Add and assign operator. More...
 
Checked_Numberoperator+= (const T &y)
 Add and assign operator. More...
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, Checked_Number< T, Policy > & >::type operator+= (const From &y)
 Add and assign operator. More...
 
template<typename From_Policy >
Checked_Numberoperator-= (const Checked_Number< T, From_Policy > &y)
 Subtract and assign operator. More...
 
Checked_Numberoperator-= (const T &y)
 Subtract and assign operator. More...
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, Checked_Number< T, Policy > & >::type operator-= (const From &y)
 Subtract and assign operator. More...
 
template<typename From_Policy >
Checked_Numberoperator*= (const Checked_Number< T, From_Policy > &y)
 Multiply and assign operator. More...
 
Checked_Numberoperator*= (const T &y)
 Multiply and assign operator. More...
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, Checked_Number< T, Policy > & >::type operator*= (const From &y)
 Multiply and assign operator. More...
 
template<typename From_Policy >
Checked_Numberoperator/= (const Checked_Number< T, From_Policy > &y)
 Divide and assign operator. More...
 
Checked_Numberoperator/= (const T &y)
 Divide and assign operator. More...
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, Checked_Number< T, Policy > & >::type operator/= (const From &y)
 Divide and assign operator. More...
 
template<typename From_Policy >
Checked_Numberoperator%= (const Checked_Number< T, From_Policy > &y)
 Compute remainder and assign operator. More...
 
Checked_Numberoperator%= (const T &y)
 Compute remainder and assign operator. More...
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, Checked_Number< T, Policy > & >::type operator%= (const From &y)
 Compute remainder and assign operator. More...
 
Increment and Decrement Operators
Checked_Numberoperator++ ()
 Pre-increment operator. More...
 
Checked_Number operator++ (int)
 Post-increment operator. More...
 
Checked_Numberoperator-- ()
 Pre-decrement operator. More...
 
Checked_Number operator-- (int)
 Post-decrement operator. More...
 

Private Attributes

v
 The underlying numeric value. More...
 

Related Functions

(Note that these are not member functions.)

template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_not_a_number (const T &x)
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_minus_infinity (const T &x)
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_plus_infinity (const T &x)
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, int >::type infinity_sign (const T &x)
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_integer (const T &x)
 
template<typename To , typename From >
Enable_If< Is_Native_Or_Checked< To >::value &&Is_Special< From >::value, Result >::type construct (To &to, const From &x, Rounding_Dir dir)
 
template<typename To , typename From >
Enable_If< Is_Native_Or_Checked< To >::value &&Is_Special< From >::value, Result >::type assign_r (To &to, const From &x, Rounding_Dir dir)
 
template<typename To >
Enable_If< Is_Native_Or_Checked< To >::value, Result >::type assign_r (To &to, const char *x, Rounding_Dir dir)
 
template<typename To , typename To_Policy >
Enable_If< Is_Native_Or_Checked< To >::value, Result >::type assign_r (To &to, char *x, Rounding_Dir dir)
 
template<typename T , typename Policy >
void swap (Checked_Number< T, Policy > &x, Checked_Number< T, Policy > &y)
 Swaps x with y. More...
 
template<typename T , typename Policy >
const T & raw_value (const Checked_Number< T, Policy > &x)
 
template<typename T , typename Policy >
T & raw_value (Checked_Number< T, Policy > &x)
 
template<typename T , typename Policy >
memory_size_type total_memory_in_bytes (const Checked_Number< T, Policy > &x)
 
template<typename T , typename Policy >
memory_size_type external_memory_in_bytes (const Checked_Number< T, Policy > &x)
 
template<typename To >
Enable_If< Is_Native_Or_Checked< To >::value, Result >::type assign_r (To &to, const char *x, Rounding_Dir dir)
 
template<typename T , typename Policy >
Checked_Number< T, Policy > operator+ (const Checked_Number< T, Policy > &x)
 
template<typename T , typename Policy >
Checked_Number< T, Policy > operator- (const Checked_Number< T, Policy > &x)
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, int >::type sgn (const From &x)
 
template<typename From1 , typename From2 >
Enable_If< Is_Native_Or_Checked< From1 >::value &&Is_Native_Or_Checked< From2 >::value, int >::type cmp (const From1 &x, const From2 &y)
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type output (std::ostream &os, const T &x, const Numeric_Format &format, Rounding_Dir dir)
 
template<typename T , typename Policy >
std::ostream & operator<< (std::ostream &os, const Checked_Number< T, Policy > &x)
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type input (T &x, std::istream &is, Rounding_Dir dir)
 
template<typename T , typename Policy >
std::istream & operator>> (std::istream &is, Checked_Number< T, Policy > &x)
 
template<typename T , typename Policy >
void swap (Checked_Number< T, Policy > &x, Checked_Number< T, Policy > &y)
 
Memory Size Inspection Functions
template<typename T , typename Policy >
memory_size_type total_memory_in_bytes (const Checked_Number< T, Policy > &x)
 Returns the total size in bytes of the memory occupied by x. More...
 
template<typename T , typename Policy >
memory_size_type external_memory_in_bytes (const Checked_Number< T, Policy > &x)
 Returns the size in bytes of the memory managed by x. More...
 
Arithmetic Operators
template<typename T , typename Policy >
Checked_Number< T, Policy > operator+ (const Checked_Number< T, Policy > &x)
 Unary plus operator. More...
 
template<typename T , typename Policy >
Checked_Number< T, Policy > operator- (const Checked_Number< T, Policy > &x)
 Unary minus operator. More...
 
template<typename T , typename Policy >
void floor_assign (Checked_Number< T, Policy > &x)
 Assigns to x largest integral value not greater than x. More...
 
template<typename T , typename Policy >
void floor_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y)
 Assigns to x largest integral value not greater than y. More...
 
template<typename T , typename Policy >
void ceil_assign (Checked_Number< T, Policy > &x)
 Assigns to x smallest integral value not less than x. More...
 
template<typename T , typename Policy >
void ceil_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y)
 Assigns to x smallest integral value not less than y. More...
 
template<typename T , typename Policy >
void trunc_assign (Checked_Number< T, Policy > &x)
 Round x to the nearest integer not larger in absolute value. More...
 
template<typename T , typename Policy >
void trunc_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y)
 Assigns to x the value of y rounded to the nearest integer not larger in absolute value. More...
 
template<typename T , typename Policy >
void neg_assign (Checked_Number< T, Policy > &x)
 Assigns to x its negation. More...
 
template<typename T , typename Policy >
void neg_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y)
 Assigns to x the negation of y. More...
 
template<typename T , typename Policy >
void abs_assign (Checked_Number< T, Policy > &x)
 Assigns to x its absolute value. More...
 
template<typename T , typename Policy >
void abs_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y)
 Assigns to x the absolute value of y. More...
 
template<typename T , typename Policy >
void add_mul_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, const Checked_Number< T, Policy > &z)
 Assigns to x the value x + y * z. More...
 
template<typename T , typename Policy >
void sub_mul_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, const Checked_Number< T, Policy > &z)
 Assigns to x the value x - y * z. More...
 
template<typename T , typename Policy >
void gcd_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, const Checked_Number< T, Policy > &z)
 Assigns to x the greatest common divisor of y and z. More...
 
template<typename T , typename Policy >
void gcdext_assign (Checked_Number< T, Policy > &x, Checked_Number< T, Policy > &s, Checked_Number< T, Policy > &t, const Checked_Number< T, Policy > &y, const Checked_Number< T, Policy > &z)
 Assigns to x the greatest common divisor of y and z, setting s and t such that s*y + t*z = x = gcd(y, z). More...
 
template<typename T , typename Policy >
void lcm_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, const Checked_Number< T, Policy > &z)
 Assigns to x the least common multiple of y and z. More...
 
template<typename T , typename Policy >
void mul_2exp_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, unsigned int exp)
 Assigns to x the value $ y \cdot 2^\mathtt{exp} $. More...
 
template<typename T , typename Policy >
void div_2exp_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, unsigned int exp)
 Assigns to x the value $ y / 2^\mathtt{exp} $. More...
 
template<typename T , typename Policy >
void exact_div_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y, const Checked_Number< T, Policy > &z)
 If z divides y, assigns to x the quotient of the integer division of y and z. More...
 
template<typename T , typename Policy >
void sqrt_assign (Checked_Number< T, Policy > &x, const Checked_Number< T, Policy > &y)
 Assigns to x the integer square root of y. More...
 
Relational Operators and Comparison Functions
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator== (const T1 &x, const T2 &y)
 Equality operator. More...
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type equal (const T1 &x, const T2 &y)
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator!= (const T1 &x, const T2 &y)
 Disequality operator. More...
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type not_equal (const T1 &x, const T2 &y)
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator>= (const T1 &x, const T2 &y)
 Greater than or equal to operator. More...
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type greater_or_equal (const T1 &x, const T2 &y)
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator> (const T1 &x, const T2 &y)
 Greater than operator. More...
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type greater_than (const T1 &x, const T2 &y)
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator<= (const T1 &x, const T2 &y)
 Less than or equal to operator. More...
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type less_or_equal (const T1 &x, const T2 &y)
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator< (const T1 &x, const T2 &y)
 Less than operator. More...
 
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type less_than (const T1 &x, const T2 &y)
 
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, int >::type sgn (const From &x)
 Returns $-1$, $0$ or $1$ depending on whether the value of x is negative, zero or positive, respectively. More...
 
template<typename From1 , typename From2 >
Enable_If< Is_Native_Or_Checked< From1 >::value &&Is_Native_Or_Checked< From2 >::value, int >::type cmp (const From1 &x, const From2 &y)
 Returns a negative, zero or positive value depending on whether x is lower than, equal to or greater than y, respectively. More...
 
Input-Output Operators
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type output (std::ostream &os, const T &x, const Numeric_Format &format, Rounding_Dir dir)
 
template<typename T , typename Policy >
std::ostream & operator<< (std::ostream &os, const Checked_Number< T, Policy > &x)
 Output operator. More...
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, void >::type ascii_dump (std::ostream &s, const T &t)
 Ascii dump for native or checked. More...
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type input (T &x, std::istream &is, Rounding_Dir dir)
 Input function. More...
 
template<typename T , typename Policy >
std::istream & operator>> (std::istream &is, Checked_Number< T, Policy > &x)
 Input operator. More...
 
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type ascii_load (std::ostream &s, T &t)
 Ascii load for native or checked. More...
 

Detailed Description

template<typename T, typename Policy>
class Parma_Polyhedra_Library::Checked_Number< T, Policy >

A wrapper for numeric types implementing a given policy.

The wrapper and related functions implement an interface which is common to all kinds of coefficient types, therefore allowing for a uniform coding style. This class also implements the policy encoded by the second template parameter. The default policy is to perform the detection of overflow errors.

Definition at line 170 of file Checked_Number_defs.hh.

Constructor & Destructor Documentation

template<typename T , typename Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( )
inline

Default constructor.

Definition at line 73 of file Checked_Number_inlines.hh.

74  : v(0) {
75 }
template<typename T , typename Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const Checked_Number< T, Policy > &  y)
inline

Copy constructor.

Definition at line 79 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value().

79  {
80  // TODO: avoid default construction of value member.
81  Checked::copy<Policy, Policy>(v, y.raw_value());
82 }
template<typename T , typename Policy >
template<typename From , typename From_Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const Checked_Number< From, From_Policy > &  y,
Rounding_Dir  dir 
)
inline

Direct initialization from a Checked_Number and rounding mode.

Definition at line 88 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value(), and Parma_Polyhedra_Library::rounding_dir().

89  {
90  // TODO: avoid default construction of value member.
91  Policy::handle_result(check_result(Checked::assign_ext<Policy, From_Policy>
92  (v,
93  y.raw_value(),
94  rounding_dir(dir)),
95  dir)
96  );
97 }
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( char  y,
Rounding_Dir  dir 
)

Direct initialization from a plain char and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed char  y,
Rounding_Dir  dir 
)

Direct initialization from a signed char and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed short  y,
Rounding_Dir  dir 
)

Direct initialization from a signed short and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed int  y,
Rounding_Dir  dir 
)

Direct initialization from a signed int and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed long  y,
Rounding_Dir  dir 
)

Direct initialization from a signed long and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed long long  y,
Rounding_Dir  dir 
)

Direct initialization from a signed long long and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned char  y,
Rounding_Dir  dir 
)

Direct initialization from an unsigned char and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned short  y,
Rounding_Dir  dir 
)

Direct initialization from an unsigned short and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned int  y,
Rounding_Dir  dir 
)

Direct initialization from an unsigned int and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned long  y,
Rounding_Dir  dir 
)

Direct initialization from an unsigned long and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned long long  y,
Rounding_Dir  dir 
)

Direct initialization from an unsigned long long and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const mpq_class &  y,
Rounding_Dir  dir 
)

Direct initialization from a rational and rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const mpz_class &  y,
Rounding_Dir  dir 
)

Direct initialization from an unbounded integer and rounding mode.

template<typename T , typename Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const char *  y,
Rounding_Dir  dir 
)
inline

Direct initialization from a C string and rounding mode.

Definition at line 161 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), and Parma_Polyhedra_Library::rounding_dir().

161  {
162  std::istringstream s(y);
163  Policy::handle_result(check_result(Checked::input<Policy>(v,
164  s,
165  rounding_dir(dir)),
166  dir));
167 }
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T , typename Policy >
template<typename From >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const From &  ,
Rounding_Dir  dir,
typename Enable_If< Is_Special< From >::value, bool >::type  ignored = false 
)
inline

Direct initialization from special and rounding mode.

Definition at line 184 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), and Parma_Polyhedra_Library::rounding_dir().

186  {
187  Policy::handle_result(check_result(Checked::assign_special<Policy>(v,
188  From::vclass,
189  rounding_dir(dir)),
190  dir));
191 }
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T , typename Policy >
template<typename From , typename From_Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const Checked_Number< From, From_Policy > &  y)
inlineexplicit

Direct initialization from a Checked_Number, default rounding mode.

Definition at line 103 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value(), and Parma_Polyhedra_Library::rounding_dir().

103  {
104  // TODO: avoid default construction of value member.
105  Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
106  Policy::handle_result(check_result(Checked::assign_ext<Policy, From_Policy>
107  (v,
108  y.raw_value(),
109  rounding_dir(dir)),
110  dir));
111 }
Rounding_Dir
Rounding directions for arithmetic computations.
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( char  y)

Direct initialization from a plain char, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed char  y)

Direct initialization from a signed char, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed short  y)

Direct initialization from a signed short, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed int  y)

Direct initialization from a signed int, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed long  y)

Direct initialization from a signed long, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( signed long long  y)

Direct initialization from a signed long long, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned char  y)

Direct initialization from an unsigned char, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned short  y)

Direct initialization from an unsigned short, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned int  y)

Direct initialization from an unsigned int, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned long  y)

Direct initialization from an unsigned long, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( unsigned long long  y)

Direct initialization from an unsigned long long, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( float  y)

Direct initialization from a float, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( double  y)

Direct initialization from a double, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( long double  y)

Direct initialization from a long double, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const mpq_class &  y)

Direct initialization from a rational, default rounding mode.

template<typename T, typename Policy>
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const mpz_class &  y)

Direct initialization from an unbounded integer, default rounding mode.

template<typename T , typename Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const char *  y)
inline

Direct initialization from a C string, default rounding mode.

Definition at line 171 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), and Parma_Polyhedra_Library::rounding_dir().

171  {
172  std::istringstream s(y);
173  Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
174  Policy::handle_result(check_result(Checked::input<Policy>(v,
175  s,
176  rounding_dir(dir)),
177  dir));
178 }
Rounding_Dir
Rounding directions for arithmetic computations.
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T , typename Policy >
template<typename From >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::Checked_Number ( const From &  ,
typename Enable_If< Is_Special< From >::value, bool >::type  ignored = false 
)
inline

Direct initialization from special, default rounding mode.

Definition at line 196 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), and Parma_Polyhedra_Library::rounding_dir().

196  {
197  Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
198  Policy::handle_result(check_result(Checked::assign_special<Policy>(v,
199  From::vclass,
200  rounding_dir(dir)),
201  dir));
202 }
Rounding_Dir
Rounding directions for arithmetic computations.
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)

Member Function Documentation

template<typename T , typename Policy >
Result Parma_Polyhedra_Library::Checked_Number< T, Policy >::classify ( bool  nan = true,
bool  inf = true,
bool  sign = true 
) const
inline

Classifies *this.

Returns the appropriate Result characterizing:

  • whether *this is NaN, if nan is true;
  • whether *this is a (positive or negative) infinity, if inf is true;
  • the sign of *this, if sign is true.

Definition at line 301 of file Checked_Number_inlines.hh.

301  {
302  return Checked::classify<Policy>(v, nan, inf, sign);
303 }
template<typename T , typename Policy >
bool Parma_Polyhedra_Library::Checked_Number< T, Policy >::OK ( ) const
inline

Checks if all the invariants are satisfied.

Definition at line 295 of file Checked_Number_inlines.hh.

295  {
296  return true;
297 }
template<typename T , typename Policy >
Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator T ( ) const
inline

Conversion operator: returns a copy of the underlying numeric value.

Definition at line 261 of file Checked_Number_inlines.hh.

261  {
262  if (Policy::convertible) {
263  return v;
264  }
265 }
template<typename T, typename Policy>
template<typename From_Policy >
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator%= ( const Checked_Number< T, From_Policy > &  y)

Compute remainder and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator%= ( const T &  y)

Compute remainder and assign operator.

template<typename T, typename Policy>
template<typename From >
Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator%= ( const From &  y)

Compute remainder and assign operator.

template<typename T, typename Policy>
template<typename From_Policy >
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator*= ( const Checked_Number< T, From_Policy > &  y)

Multiply and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator*= ( const T &  y)

Multiply and assign operator.

template<typename T, typename Policy>
template<typename From >
Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>&>::type Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator*= ( const From &  y)

Multiply and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator++ ( )

Pre-increment operator.

template<typename T, typename Policy>
Checked_Number Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator++ ( int  )

Post-increment operator.

template<typename T, typename Policy>
template<typename From_Policy >
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator+= ( const Checked_Number< T, From_Policy > &  y)

Add and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator+= ( const T &  y)

Add and assign operator.

template<typename T, typename Policy>
template<typename From >
Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>&>::type Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator+= ( const From &  y)

Add and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator-- ( )

Pre-decrement operator.

template<typename T, typename Policy>
Checked_Number Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator-- ( int  )

Post-decrement operator.

template<typename T, typename Policy>
template<typename From_Policy >
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator-= ( const Checked_Number< T, From_Policy > &  y)

Subtract and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator-= ( const T &  y)

Subtract and assign operator.

template<typename T, typename Policy>
template<typename From >
Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>&>::type Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator-= ( const From &  y)

Subtract and assign operator.

template<typename T, typename Policy>
template<typename From_Policy >
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator/= ( const Checked_Number< T, From_Policy > &  y)

Divide and assign operator.

template<typename T, typename Policy>
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator/= ( const T &  y)

Divide and assign operator.

template<typename T, typename Policy>
template<typename From >
Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>&>::type Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator/= ( const From &  y)

Divide and assign operator.

template<typename T , typename Policy >
Checked_Number< T, Policy > & Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator= ( const Checked_Number< T, Policy > &  y)
inline

Assignment operator.

Definition at line 492 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value().

492  {
493  Checked::copy<Policy, Policy>(v, y.raw_value());
494  return *this;
495 }
template<typename T, typename Policy>
template<typename From >
Checked_Number& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator= ( const From &  y)

Assignment operator.

template<typename T, typename Policy>
template<typename From >
Checked_Number<T, Policy>& Parma_Polyhedra_Library::Checked_Number< T, Policy >::operator= ( const From &  y)
inline

Definition at line 499 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::assign_r().

499  {
500  Policy::handle_result(assign_r(*this, y, Policy::ROUND_DEFAULT_OPERATOR));
501  return *this;
502 }
Enable_If< Is_Native_Or_Checked< To >::value &&Is_Special< From >::value, Result >::type assign_r(To &to, const From &x, Rounding_Dir dir)
template<typename T , typename Policy >
T & Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value ( )
inline
template<typename T , typename Policy >
const T & Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value ( ) const
inline

Returns a const reference to the underlying numeric value.

Definition at line 275 of file Checked_Number_inlines.hh.

275  {
276  return v;
277 }

Friends And Related Function Documentation

template<typename T , typename Policy >
void abs_assign ( Checked_Number< T, Policy > &  x)
related

Assigns to x its absolute value.

template<typename T , typename Policy >
void abs_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y 
)
related

Assigns to x the absolute value of y.

template<typename T , typename Policy >
void add_mul_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
const Checked_Number< T, Policy > &  z 
)
related

Assigns to x the value x + y * z.

template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, void >::type ascii_dump ( std::ostream &  s,
const T &  t 
)
related

Ascii dump for native or checked.

Definition at line 35 of file Checked_Number_templates.hh.

Referenced by Parma_Polyhedra_Library::Grid::Status::OK().

35  {
36  if (std::numeric_limits<T>::is_exact) {
37  // An exact data type: pretty printer is accurate.
38  s << t;
39  }
40  else {
41  // An inexact data type (probably floating point):
42  // first dump its hexadecimal representation ...
43  const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
44  std::ios::basefield);
45  const unsigned char* p = reinterpret_cast<const unsigned char*>(&t);
46  for (unsigned i = 0; i < sizeof(T); ++i) {
47  s << std::setw(2) << std::setfill('0') << static_cast<unsigned>(p[i]);
48  }
49  s.flags(old_flags);
50  // ... and then pretty print it for readability.
51  s << " (" << t << ")";
52  }
53 }
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type ascii_load ( std::ostream &  s,
T &  t 
)
related

Ascii load for native or checked.

template<typename To >
Enable_If< Is_Native_Or_Checked< To >::value, Result >::type assign_r ( To &  to,
const char *  x,
Rounding_Dir  dir 
)
related

Definition at line 341 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), and Parma_Polyhedra_Library::rounding_dir().

341  {
342  std::istringstream s(x);
343  return check_result(Checked::input<typename Native_Checked_To_Wrapper<To>
345  s,
346  rounding_dir(dir)),
347  dir);
348 }
const mpz_class & raw_value(const GMP_Integer &x)
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename To , typename From >
Enable_If< Is_Native_Or_Checked< To >::value &&Is_Special< From >::value, Result >::type assign_r ( To &  to,
const From &  x,
Rounding_Dir  dir 
)
related

Definition at line 207 of file Checked_Number_inlines.hh.

207  {
208  return check_result(Checked::assign_special<typename Native_Checked_To_Wrapper<To>
210  From::vclass,
211  rounding_dir(dir)),
212  dir);
213 }
const mpz_class & raw_value(const GMP_Integer &x)
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename To >
Enable_If< Is_Native_Or_Checked< To >::value, Result >::type assign_r ( To &  to,
const char *  x,
Rounding_Dir  dir 
)
related
template<typename To , typename To_Policy >
Enable_If< Is_Native_Or_Checked< To >::value, Result >::type assign_r ( To &  to,
char *  x,
Rounding_Dir  dir 
)
related
template<typename T , typename Policy >
void ceil_assign ( Checked_Number< T, Policy > &  x)
related

Assigns to x smallest integral value not less than x.

template<typename T , typename Policy >
void ceil_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y 
)
related

Assigns to x smallest integral value not less than y.

template<typename From1 , typename From2 >
Enable_If< Is_Native_Or_Checked< From1 >::value &&Is_Native_Or_Checked< From2 >::value, int >::type cmp ( const From1 &  x,
const From2 &  y 
)
related

Definition at line 743 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::raw_value(), Parma_Polyhedra_Library::VR_EQ, Parma_Polyhedra_Library::VR_GT, and Parma_Polyhedra_Library::VR_LT.

743  {
745  = Checked::cmp_ext<typename Native_Checked_From_Wrapper<From1>::Policy,
746  typename Native_Checked_From_Wrapper<From2>::Policy>
749  switch (r) {
750  case VR_LT:
751  return -1;
752  case VR_EQ:
753  return 0;
754  case VR_GT:
755  return 1;
756  default:
757  throw(0);
758  }
759 }
Equal. This need to be accompanied by a value.
Definition: Result_defs.hh:51
const mpz_class & raw_value(const GMP_Integer &x)
Less than. This need to be accompanied by a value.
Definition: Result_defs.hh:54
Greater than. This need to be accompanied by a value.
Definition: Result_defs.hh:57
template<typename From1 , typename From2 >
Enable_If< Is_Native_Or_Checked< From1 >::value &&Is_Native_Or_Checked< From2 >::value, int >::type cmp ( const From1 &  x,
const From2 &  y 
)
related

Returns a negative, zero or positive value depending on whether x is lower than, equal to or greater than y, respectively.

template<typename To , typename From >
Enable_If< Is_Native_Or_Checked< To >::value &&Is_Special< From >::value, Result >::type construct ( To &  to,
const From &  x,
Rounding_Dir  dir 
)
related

Definition at line 217 of file Checked_Number_inlines.hh.

217  {
218  return check_result(Checked::construct_special<typename Native_Checked_To_Wrapper<To>
220  From::vclass,
221  rounding_dir(dir)),
222  dir);
223 }
const mpz_class & raw_value(const GMP_Integer &x)
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T , typename Policy >
void div_2exp_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
unsigned int  exp 
)
related

Assigns to x the value $ y / 2^\mathtt{exp} $.

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type equal ( const T1 &  x,
const T2 &  y 
)
related
template<typename T , typename Policy >
void exact_div_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
const Checked_Number< T, Policy > &  z 
)
related

If z divides y, assigns to x the quotient of the integer division of y and z.

The behavior is undefined if z does not divide y.

Definition at line 713 of file Checked_Number_inlines.hh.

715  {
716  Policy::handle_result(div_assign_r(x, y, z, ROUND_NOT_NEEDED));
717 }
template<typename T , typename Policy >
memory_size_type external_memory_in_bytes ( const Checked_Number< T, Policy > &  x)
related

Definition at line 333 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::external_memory_in_bytes(), and Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value().

333  {
334  return external_memory_in_bytes(x.raw_value());
335 }
memory_size_type external_memory_in_bytes(const Checked_Number< T, Policy > &x)
Returns the size in bytes of the memory managed by x.
template<typename T , typename Policy >
memory_size_type external_memory_in_bytes ( const Checked_Number< T, Policy > &  x)
related

Returns the size in bytes of the memory managed by x.

template<typename T , typename Policy >
void floor_assign ( Checked_Number< T, Policy > &  x)
related

Assigns to x largest integral value not greater than x.

template<typename T , typename Policy >
void floor_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y 
)
related

Assigns to x largest integral value not greater than y.

template<typename T , typename Policy >
void gcd_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
const Checked_Number< T, Policy > &  z 
)
related

Assigns to x the greatest common divisor of y and z.

template<typename T , typename Policy >
void gcdext_assign ( Checked_Number< T, Policy > &  x,
Checked_Number< T, Policy > &  s,
Checked_Number< T, Policy > &  t,
const Checked_Number< T, Policy > &  y,
const Checked_Number< T, Policy > &  z 
)
related

Assigns to x the greatest common divisor of y and z, setting s and t such that s*y + t*z = x = gcd(y, z).

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type greater_or_equal ( const T1 &  x,
const T2 &  y 
)
related
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type greater_than ( const T1 &  x,
const T2 &  y 
)
related
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, int >::type infinity_sign ( const T &  x)
related

Definition at line 241 of file Checked_Number_inlines.hh.

241  {
242  return is_minus_infinity(x) ? -1 : (is_plus_infinity(x) ? 1 : 0);
243 }
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_plus_infinity(const T &x)
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_minus_infinity(const T &x)
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type input ( T &  x,
std::istream &  is,
Rounding_Dir  dir 
)
related

Definition at line 785 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), Parma_Polyhedra_Library::Checked::input_ext(), and Parma_Polyhedra_Library::rounding_dir().

785  {
786  return check_result(Checked::input_ext<typename Native_Checked_To_Wrapper<T>::Policy>
788  is,
789  rounding_dir(dir)),
790  dir);
791 }
const mpz_class & raw_value(const GMP_Integer &x)
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
Result input_ext(Type &x, std::istream &is, Rounding_Dir dir)
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type input ( T &  x,
std::istream &  is,
Rounding_Dir  dir 
)
related

Input function.

Parameters
isInput stream to read from;
xNumber (possibly extended) to assign to in case of successful reading;
dirRounding mode to be applied.
Returns
Result of the input operation. Success, success with imprecision, overflow, parsing error: all possibilities are taken into account, checked for, and properly reported.

This function attempts reading a (possibly extended) number from the given stream is, possibly rounding as specified by dir, assigning the result to x upon success, and returning the appropriate Result.

The input syntax allows the specification of:

  • plain base-10 integer numbers as 34976098, -77 and +13;
  • base-10 integer numbers in scientific notation as 15e2 and 15*^2 (both meaning $15 \cdot 10^2 = 1500$), 9200e-2 and -18*^+11111111111111111;
  • base-10 rational numbers in fraction notation as 15/3 and 15/-3;
  • base-10 rational numbers in fraction/scientific notation as 15/30e-1 (meaning $5$) and 15*^-3/29e2 (meaning $3/580000$);
  • base-10 rational numbers in floating point notation as 71.3 (meaning $713/10$) and -0.123456 (meaning $-1929/15625$);
  • base-10 rational numbers in floating point scientific notation as 2.2e-1 (meaning $11/50$) and -2.20001*^+3 (meaning $-220001/100$);
  • integers and rationals (in fractional, floating point and scientific notations) specified by using Mathematica-style bases, in the range from 2 to 36, as 2^^11 (meaning $3$), 36^^z (meaning $35$), 36^^xyz (meaning $44027$), 2^^11.1 (meaning $7/2$), 10^^2e3 (meaning $2000$), 8^^2e3 (meaning $1024$), 8^^2.1e3 (meaning $1088$), 8^^20402543.120347e7 (meaning $9073863231288$), 8^^2.1 (meaning $17/8$); note that the base and the exponent are always written as plain base-10 integer numbers; also, when an ambiguity may arise, the character e is interpreted as a digit, so that 16^^1e2 (meaning $482$) is different from 16^^1*^2 (meaning $256$);
  • the C-style hexadecimal prefix 0x is interpreted as the Mathematica-style prefix 16^^;
  • the C-style binary exponent indicator p can only be used when base 16 has been specified; if used, the exponent will be applied to base 2 (instead of base 16, as is the case when the indicator e is used);
  • special values like inf and +inf (meaning $+\infty$), -inf (meaning $-\infty$), and nan (meaning "not a number").

The rationale behind the accepted syntax can be summarized as follows:

  • if the syntax is accepted by Mathematica, then this function accepts it with the same semantics;
  • if the syntax is acceptable as standard C++ integer or floating point literal (except for octal notation and type suffixes, which are not supported), then this function accepts it with the same semantics;
  • natural extensions of the above are accepted with the natural extensions of the semantics;
  • special values are accepted.

Valid syntax is more formally and completely specified by the following grammar, with the additional provisos that everything is case insensitive, that the syntactic category BDIGIT is further restricted by the current base and that for all bases above 14, any e is always interpreted as a digit and never as a delimiter for the exponent part (if such a delimiter is desired, it has to be written as *^).

number : NAN INF : 'inf'
| SIGN INF ;
| INF
| num NAN : 'nan'
| num DIV num ;
;
SIGN : '-'
num : u_num | '+'
| SIGN u_num ;
u_num : u_num1 EXP : 'e'
| HEX u_num1 | 'p'
| base BASE u_num1 | '*^'
; ;
POINT : '.'
u_num1 : mantissa ;
| mantissa EXP exponent
; DIV : '/'
;
mantissa: bdigits
| POINT bdigits MINUS : '-'
| bdigits POINT ;
| bdigits POINT bdigits
; PLUS : '+'
;
exponent: SIGN digits
| digits HEX : '0x'
; ;
bdigits : BDIGIT BASE : '^^'
| bdigits BDIGIT ;
;
DIGIT : '0' .. '9'
digits : DIGIT ;
| digits DIGIT
; BDIGIT : '0' .. '9'
| 'a' .. 'z'
;
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_integer ( const T &  x)
related

Definition at line 254 of file Checked_Number_inlines.hh.

254  {
255  return Checked::is_int<typename Native_Checked_From_Wrapper<T>
257 }
const mpz_class & raw_value(const GMP_Integer &x)
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_minus_infinity ( const T &  x)
related

Definition at line 227 of file Checked_Number_inlines.hh.

227  {
228  return Checked::is_minf<typename Native_Checked_From_Wrapper<T>
230 }
const mpz_class & raw_value(const GMP_Integer &x)
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_not_a_number ( const T &  x)
related

Definition at line 247 of file Checked_Number_inlines.hh.

247  {
248  return Checked::is_nan<typename Native_Checked_From_Wrapper<T>
250 }
const mpz_class & raw_value(const GMP_Integer &x)
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, bool >::type is_plus_infinity ( const T &  x)
related

Definition at line 234 of file Checked_Number_inlines.hh.

234  {
235  return Checked::is_pinf<typename Native_Checked_From_Wrapper<T>
237 }
const mpz_class & raw_value(const GMP_Integer &x)
template<typename T , typename Policy >
void lcm_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
const Checked_Number< T, Policy > &  z 
)
related

Assigns to x the least common multiple of y and z.

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type less_or_equal ( const T1 &  x,
const T2 &  y 
)
related
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type less_than ( const T1 &  x,
const T2 &  y 
)
related
template<typename T , typename Policy >
void mul_2exp_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
unsigned int  exp 
)
related

Assigns to x the value $ y \cdot 2^\mathtt{exp} $.

template<typename T , typename Policy >
void neg_assign ( Checked_Number< T, Policy > &  x)
related

Assigns to x its negation.

template<typename T , typename Policy >
void neg_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y 
)
related

Assigns to x the negation of y.

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value, bool >::type not_equal ( const T1 &  x,
const T2 &  y 
)
related
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator!= ( const T1 &  x,
const T2 &  y 
)
related

Disequality operator.

Definition at line 185 of file Interval_inlines.hh.

185  {
186  return !(x == y);
187 }
template<typename T , typename Policy >
Checked_Number< T, Policy > operator+ ( const Checked_Number< T, Policy > &  x)
related

Unary plus operator.

template<typename T , typename Policy >
Checked_Number< T, Policy > operator+ ( const Checked_Number< T, Policy > &  x)
related

Definition at line 620 of file Checked_Number_inlines.hh.

620  {
621  return x;
622 }
template<typename T , typename Policy >
Checked_Number< T, Policy > operator- ( const Checked_Number< T, Policy > &  x)
related

Unary minus operator.

template<typename T , typename Policy >
Checked_Number< T, Policy > operator- ( const Checked_Number< T, Policy > &  x)
related

Definition at line 627 of file Checked_Number_inlines.hh.

627  {
628  Checked_Number<T, Policy> r;
629  Policy::handle_result(neg_assign_r(r, x, Policy::ROUND_DEFAULT_OPERATOR));
630  return r;
631 }
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator< ( const T1 &  x,
const T2 &  y 
)
related

Less than operator.

template<typename T , typename Policy >
std::ostream & operator<< ( std::ostream &  os,
const Checked_Number< T, Policy > &  x 
)
related

Definition at line 777 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::ROUND_IGNORE.

777  {
778  Policy::handle_result(output(os, x, Numeric_Format(), ROUND_IGNORE));
779  return os;
780 }
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type output(std::ostream &os, const T &x, const Numeric_Format &format, Rounding_Dir dir)
template<typename T , typename Policy >
std::ostream & operator<< ( std::ostream &  os,
const Checked_Number< T, Policy > &  x 
)
related

Output operator.

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator<= ( const T1 &  x,
const T2 &  y 
)
related

Less than or equal to operator.

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator== ( const T1 &  x,
const T2 &  y 
)
related

Equality operator.

Definition at line 164 of file Interval_inlines.hh.

164  {
165  PPL_ASSERT(f_OK(x));
166  PPL_ASSERT(f_OK(y));
167  if (check_empty_arg(x)) {
168  return check_empty_arg(y);
169  }
170  else if (check_empty_arg(y)) {
171  return false;
172  }
173  return eq(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y))
174  && eq(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y));
175 }
Enable_If< Is_Singleton< T >::value||Is_Interval< T >::value, bool >::type check_empty_arg(const T &x)
Enable_If< Is_Singleton< T >::value, const T & >::type f_lower(const T &x)
bool eq(Boundary_Type type1, const T1 &x1, const Info1 &info1, Boundary_Type type2, const T2 &x2, const Info2 &info2)
Enable_If< Is_Singleton< T >::value, Scalar_As_Interval_Info_Open >::type f_info(const T &, bool open)
Enable_If< Has_OK< T >::value, bool >::type f_OK(const T &to)
Enable_If< Is_Singleton< T >::value, const T & >::type f_upper(const T &x)
template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator> ( const T1 &  x,
const T2 &  y 
)
related

Greater than operator.

template<typename T1 , typename T2 >
Enable_If< Is_Native_Or_Checked< T1 >::value &&Is_Native_Or_Checked< T2 >::value &&(Is_Checked< T1 >::value||Is_Checked< T2 >::value), bool >::type operator>= ( const T1 &  x,
const T2 &  y 
)
related

Greater than or equal to operator.

template<typename T , typename Policy >
std::istream & operator>> ( std::istream &  is,
Checked_Number< T, Policy > &  x 
)
related

Definition at line 795 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::V_CVT_STR_UNK.

796  {
797  Result r = input(x, is, Policy::ROUND_DEFAULT_INPUT);
798  if (r == V_CVT_STR_UNK) {
799  is.setstate(std::ios::failbit);
800  }
801  else {
802  Policy::handle_result(r);
803  }
804  return is;
805 }
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type input(T &x, std::istream &is, Rounding_Dir dir)
Input function.
Result
Possible outcomes of a checked arithmetic computation.
Definition: Result_defs.hh:76
Converting from unknown string.
Definition: Result_defs.hh:126
template<typename T , typename Policy >
std::istream & operator>> ( std::istream &  is,
Checked_Number< T, Policy > &  x 
)
related

Input operator.

template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type output ( std::ostream &  os,
const T &  x,
const Numeric_Format format,
Rounding_Dir  dir 
)
related

Definition at line 764 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::check_result(), Parma_Polyhedra_Library::Checked::output_ext(), and Parma_Polyhedra_Library::rounding_dir().

765  {
766  return check_result(Checked::output_ext<typename Native_Checked_From_Wrapper<T>::Policy>
767  (os,
769  format,
770  rounding_dir(dir)),
771  dir);
772 }
Result output_ext(std::ostream &os, const Type &x, const Numeric_Format &format, Rounding_Dir dir)
const mpz_class & raw_value(const GMP_Integer &x)
Rounding_Dir rounding_dir(Rounding_Dir dir)
Result check_result(Result r, Rounding_Dir dir)
template<typename T >
Enable_If< Is_Native_Or_Checked< T >::value, Result >::type output ( std::ostream &  os,
const T &  x,
const Numeric_Format format,
Rounding_Dir  dir 
)
related
template<typename T , typename Policy >
const T & raw_value ( const Checked_Number< T, Policy > &  x)
related

Definition at line 282 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value().

282  {
283  return x.raw_value();
284 }
template<typename T , typename Policy >
T & raw_value ( Checked_Number< T, Policy > &  x)
related

Definition at line 289 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value().

289  {
290  return x.raw_value();
291 }
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, int >::type sgn ( const From &  x)
related

Definition at line 722 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::raw_value(), Parma_Polyhedra_Library::VR_EQ, Parma_Polyhedra_Library::VR_GT, and Parma_Polyhedra_Library::VR_LT.

722  {
724  = Checked::sgn_ext<typename Native_Checked_From_Wrapper<From>::Policy>
726  switch (r) {
727  case VR_LT:
728  return -1;
729  case VR_EQ:
730  return 0;
731  case VR_GT:
732  return 1;
733  default:
734  throw(0);
735  }
736 }
Equal. This need to be accompanied by a value.
Definition: Result_defs.hh:51
const mpz_class & raw_value(const GMP_Integer &x)
Less than. This need to be accompanied by a value.
Definition: Result_defs.hh:54
Greater than. This need to be accompanied by a value.
Definition: Result_defs.hh:57
template<typename From >
Enable_If< Is_Native_Or_Checked< From >::value, int >::type sgn ( const From &  x)
related

Returns $-1$, $0$ or $1$ depending on whether the value of x is negative, zero or positive, respectively.

Referenced by Parma_Polyhedra_Library::Octagonal_Shape< T >::extract_octagonal_difference().

template<typename T , typename Policy >
void sqrt_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y 
)
related

Assigns to x the integer square root of y.

template<typename T , typename Policy >
void sub_mul_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y,
const Checked_Number< T, Policy > &  z 
)
related

Assigns to x the value x - y * z.

template<typename T , typename Policy >
void swap ( Checked_Number< T, Policy > &  x,
Checked_Number< T, Policy > &  y 
)
related

Definition at line 828 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value(), and Parma_Polyhedra_Library::swap().

828  {
829  using std::swap;
830  swap(x.raw_value(), y.raw_value());
831 }
void swap(CO_Tree &x, CO_Tree &y)
void swap(Checked_Number< T, Policy > &x, Checked_Number< T, Policy > &y)
Swaps x with y.
template<typename T , typename Policy >
void swap ( Checked_Number< T, Policy > &  x,
Checked_Number< T, Policy > &  y 
)
related

Swaps x with y.

template<typename T , typename Policy >
memory_size_type total_memory_in_bytes ( const Checked_Number< T, Policy > &  x)
related

Definition at line 326 of file Checked_Number_inlines.hh.

References Parma_Polyhedra_Library::Checked_Number< T, Policy >::raw_value(), and Parma_Polyhedra_Library::total_memory_in_bytes().

326  {
327  return total_memory_in_bytes(x.raw_value());
328 }
memory_size_type total_memory_in_bytes(const Checked_Number< T, Policy > &x)
Returns the total size in bytes of the memory occupied by x.
template<typename T , typename Policy >
memory_size_type total_memory_in_bytes ( const Checked_Number< T, Policy > &  x)
related

Returns the total size in bytes of the memory occupied by x.

template<typename T , typename Policy >
void trunc_assign ( Checked_Number< T, Policy > &  x)
related

Round x to the nearest integer not larger in absolute value.

template<typename T , typename Policy >
void trunc_assign ( Checked_Number< T, Policy > &  x,
const Checked_Number< T, Policy > &  y 
)
related

Assigns to x the value of y rounded to the nearest integer not larger in absolute value.

Member Data Documentation

template<typename T, typename Policy>
T Parma_Polyhedra_Library::Checked_Number< T, Policy >::v
private

The underlying numeric value.

Definition at line 437 of file Checked_Number_defs.hh.


The documentation for this class was generated from the following files: