LAL: Linear Arrangement Library 24.10.00
A library focused on algorithms on linear arrangements of graphs.
Loading...
Searching...
No Matches
lal::numeric::integer Class Reference

Arbitrary precision integer. More...

#include <integer.hpp>

Public Member Functions

 integer () noexcept
 Empty constructor.
 
 integer (mpz_t &&raw) noexcept
 Constructor with mpz_t.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
 integer (const T i) noexcept
 Constructor with unsigned integer value.
 
 integer (const std::string &s) noexcept
 Constructor with string.
 
 integer (integer &&i) noexcept
 Move constructor.
 
 integer (const integer &i) noexcept
 Copy constructor.
 
 ~integer () noexcept
 Destructor.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
void set_number (const T i) noexcept
 Overwrites the value of this integer with i.
 
void set_integer (const integer &i) noexcept
 Overwrites the value of this integer with i.
 
void set_str (const std::string &s) noexcept
 Overwrites the value of this integer with s.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integeroperator= (const T i) noexcept
 Assignment operator.
 
integeroperator= (const integer &i) noexcept
 Copy assignment operator.
 
integeroperator= (integer &&i) noexcept
 Move assignment operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator== (const T i) const noexcept
 Equality operator.
 
bool operator== (const integer &i) const noexcept
 Equality operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator!= (const T i) const noexcept
 Non-equality operator.
 
bool operator!= (const integer &i) const noexcept
 Non-equality operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator< (const T i) const noexcept
 Less than operator.
 
bool operator< (const integer &i) const noexcept
 Less than operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator<= (const T i) const noexcept
 Less than or equal to operator.
 
bool operator<= (const integer &i) const noexcept
 Less than or equal to operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator> (const T i) const noexcept
 Greater than operator.
 
bool operator> (const integer &i) const noexcept
 Greater than operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator>= (const T i) const noexcept
 Greater than or equal to operator.
 
bool operator>= (const integer &i) const noexcept
 Greater than or equal to operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator+ (const T i) const noexcept
 Addition operator.
 
integer operator+ (const integer &i) const noexcept
 Addition operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integeroperator+= (const T i) noexcept
 Addition operator.
 
integeroperator+= (const integer &i) noexcept
 Addition operator.
 
integer operator- () const noexcept
 Minus unary operator. Returns a new object of type 'integer'.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator- (const T i) const noexcept
 Substraction operator.
 
integer operator- (const integer &i) const noexcept
 Substraction operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integeroperator-= (const T i) noexcept
 Substraction operator.
 
integeroperator-= (const integer &i) noexcept
 Substraction operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator* (const T i) const noexcept
 Product operator.
 
integer operator* (const integer &i) const noexcept
 Product operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integeroperator*= (const T i) noexcept
 Product operator.
 
integeroperator*= (const integer &i) noexcept
 Product operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator/ (const T i) const noexcept
 Division operator.
 
integer operator/ (const integer &i) const noexcept
 Product operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integeroperator/= (const T i) noexcept
 Division operator.
 
integeroperator/= (const integer &i) noexcept
 Division operator.
 
integer power (const uint64_t i) const noexcept
 Exponentiation operator.
 
integer power (const integer &i) const noexcept
 Exponentiation operator.
 
integerpowt (const uint64_t i) noexcept
 Exponentiation operator.
 
integerpowt (const integer &i) noexcept
 Exponentiation operator.
 
uint64_t operator% (const uint64_t i) const noexcept
 Modulus operator.
 
integer operator% (const integer &i) const noexcept
 Modulus operator.
 
constexpr bool is_initialized () const noexcept
 Returns whether this object is initialized or not.
 
int64_t get_sign () const noexcept
 Returns the sign of this integer.
 
std::size_t bytes () const noexcept
 Returns the amount of bytes this integer occupies.
 
const mpz_t & get_raw_value () const noexcept
 Returns the underlying gmp data structure.
 
int64_t to_int () const noexcept
 Converts this integer to a signed 64-bit integer.
 
uint64_t to_uint () const noexcept
 Converts this integer to an unsigned 64-bit integer.
 
double to_double () const noexcept
 Converts this integer to a double-precision floating-point value.
 
std::string to_string () const noexcept
 Converts this integer to a string.
 
void as_string (std::string &s) const noexcept
 Converts this integer to a string.
 
void swap (integer &i) noexcept
 Swaps the value of this integer with integer i's value.
 

Private Attributes

mpz_t m_val
 Structure from GMP storing the integer's value.
 
bool m_initialized = true
 Is this integer initialized?
 

Friends

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator== (const T i, const integer &ii) noexcept
 Equality operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator!= (const T i, const integer &ii) noexcept
 Non-equality operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator< (const T i, const integer &ii) noexcept
 Less operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator<= (const T i, const integer &ii) noexcept
 Less than or equal to operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator> (const T i, const integer &ii) noexcept
 Greater than operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator>= (const T i, const integer &ii) noexcept
 Greater than or equal to operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator+ (const T i, const integer &ii) noexcept
 Addition operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator- (const T i, const integer &ii) noexcept
 Substraction operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator* (const T i, const integer &ii) noexcept
 Product operator.
 
template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
int64_t operator/ (const T i, const integer &ii) noexcept
 Division operator.
 
void swap (integer &i, integer &j) noexcept
 Swaps two integers.
 

Detailed Description

Arbitrary precision integer.

This class wraps the mpz_t data structure from GMP with operators for an easy usage.

Constructor & Destructor Documentation

◆ integer() [1/5]

lal::numeric::integer::integer ( mpz_t && raw)
inlinenoexcept

Constructor with mpz_t.

Postcondition
Object raw will have to be initialized by the callee.

◆ integer() [2/5]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
lal::numeric::integer::integer ( const T i)
inlinenoexcept

Constructor with unsigned integer value.

Parameters
iAn integer (basic type) number.

◆ integer() [3/5]

lal::numeric::integer::integer ( const std::string & s)
inlinenoexcept

Constructor with string.

Parameters
sA string.

◆ integer() [4/5]

lal::numeric::integer::integer ( integer && i)
inlinenoexcept

Move constructor.

Parameters
iA lal::numeric::integer.
Postcondition
Object i is not initialized.

◆ integer() [5/5]

lal::numeric::integer::integer ( const integer & i)
inlinenoexcept

Copy constructor.

Parameters
iA lal::numeric::integer.

Member Function Documentation

◆ as_string()

void lal::numeric::integer::as_string ( std::string & s) const
inlinenoexcept

Converts this integer to a string.

Parameters
sA reference to a string.

◆ operator!=() [1/2]

bool lal::numeric::integer::operator!= ( const integer & i) const
inlinenodiscardnoexcept

Non-equality operator.

Parameters
iA lal::numeric::integer.

◆ operator!=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool lal::numeric::integer::operator!= ( const T i) const
inlinenodiscardnoexcept

Non-equality operator.

Parameters
iAn integer (basic type) number.

◆ operator%() [1/2]

integer lal::numeric::integer::operator% ( const integer & i) const
inlinenodiscardnoexcept

Modulus operator.

Parameters
iA lal::numeric::integer

◆ operator%() [2/2]

uint64_t lal::numeric::integer::operator% ( const uint64_t i) const
inlinenodiscardnoexcept

Modulus operator.

Parameters
iUnsigned integer (basic type) number.

◆ operator*() [1/2]

integer lal::numeric::integer::operator* ( const integer & i) const
inlinenodiscardnoexcept

Product operator.

Parameters
iA lal::numeric::integer.

◆ operator*() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer lal::numeric::integer::operator* ( const T i) const
inlinenodiscardnoexcept

Product operator.

Parameters
iAn integer (basic type) number.

◆ operator*=() [1/2]

integer & lal::numeric::integer::operator*= ( const integer & i)
inlinenoexcept

Product operator.

Parameters
iA lal::numeric::integer.

◆ operator*=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer & lal::numeric::integer::operator*= ( const T i)
inlinenoexcept

Product operator.

Parameters
iA signed/unsigned integer (basic type) number.

◆ operator+() [1/2]

integer lal::numeric::integer::operator+ ( const integer & i) const
inlinenodiscardnoexcept

Addition operator.

Parameters
iA lal::numeric::integer.

◆ operator+() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer lal::numeric::integer::operator+ ( const T i) const
inlinenodiscardnoexcept

Addition operator.

Parameters
iAn integer (basic type) number.

◆ operator+=() [1/2]

integer & lal::numeric::integer::operator+= ( const integer & i)
inlinenoexcept

Addition operator.

Parameters
iA lal::numeric::integer.

◆ operator+=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer & lal::numeric::integer::operator+= ( const T i)
inlinenoexcept

Addition operator.

Parameters
iAn integer (basic type) number.

◆ operator-() [1/2]

integer lal::numeric::integer::operator- ( const integer & i) const
inlinenodiscardnoexcept

Substraction operator.

Parameters
iA lal::numeric::integer.

◆ operator-() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer lal::numeric::integer::operator- ( const T i) const
inlinenodiscardnoexcept

Substraction operator.

Parameters
iAn integer (basic type) number.

◆ operator-=() [1/2]

integer & lal::numeric::integer::operator-= ( const integer & i)
inlinenoexcept

Substraction operator.

Parameters
iA lal::numeric::integer.

◆ operator-=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer & lal::numeric::integer::operator-= ( const T i)
inlinenoexcept

Substraction operator.

Parameters
iAn integer (basic type) number.

◆ operator/() [1/2]

integer lal::numeric::integer::operator/ ( const integer & i) const
inlinenodiscardnoexcept

Product operator.

Parameters
iA lal::numeric::integer.

◆ operator/() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer lal::numeric::integer::operator/ ( const T i) const
inlinenodiscardnoexcept

Division operator.

Parameters
iAn integer (basic type) number.

◆ operator/=() [1/2]

integer & lal::numeric::integer::operator/= ( const integer & i)
inlinenoexcept

Division operator.

Parameters
iA lal::numeric::integer.

◆ operator/=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer & lal::numeric::integer::operator/= ( const T i)
inlinenoexcept

Division operator.

Parameters
iAn integer (basic type) number.

◆ operator<() [1/2]

bool lal::numeric::integer::operator< ( const integer & i) const
inlinenodiscardnoexcept

Less than operator.

Parameters
iA lal::numeric::integer.

◆ operator<() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool lal::numeric::integer::operator< ( const T i) const
inlinenodiscardnoexcept

Less than operator.

Parameters
iAn integer (basic type) number.

◆ operator<=() [1/2]

bool lal::numeric::integer::operator<= ( const integer & i) const
inlinenodiscardnoexcept

Less than or equal to operator.

Parameters
iA lal::numeric::integer.

◆ operator<=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool lal::numeric::integer::operator<= ( const T i) const
inlinenodiscardnoexcept

Less than or equal to operator.

Parameters
iAn integer (basic type) number.

◆ operator=() [1/3]

integer & lal::numeric::integer::operator= ( const integer & i)
inlinenoexcept

Copy assignment operator.

Parameters
iA lal::numeric::integer.

◆ operator=() [2/3]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer & lal::numeric::integer::operator= ( const T i)
inlinenoexcept

Assignment operator.

Parameters
iAn integer (basic type) number.

◆ operator=() [3/3]

integer & lal::numeric::integer::operator= ( integer && i)
inlinenoexcept

Move assignment operator.

Parameters
iA lal::numeric::integer.
Postcondition
Object i is not initialized.

◆ operator==() [1/2]

bool lal::numeric::integer::operator== ( const integer & i) const
inlinenodiscardnoexcept

Equality operator.

Parameters
iA lal::numeric::integer.

◆ operator==() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool lal::numeric::integer::operator== ( const T i) const
inlinenodiscardnoexcept

Equality operator.

Parameters
iAn integer (basic type) number.

◆ operator>() [1/2]

bool lal::numeric::integer::operator> ( const integer & i) const
inlinenodiscardnoexcept

Greater than operator.

Parameters
iA lal::numeric::integer.

◆ operator>() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool lal::numeric::integer::operator> ( const T i) const
inlinenodiscardnoexcept

Greater than operator.

Parameters
iAn integer (basic type) number.

◆ operator>=() [1/2]

bool lal::numeric::integer::operator>= ( const integer & i) const
inlinenodiscardnoexcept

Greater than or equal to operator.

Parameters
iA lal::numeric::integer.

◆ operator>=() [2/2]

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool lal::numeric::integer::operator>= ( const T i) const
inlinenodiscardnoexcept

Greater than or equal to operator.

Parameters
iAn integer (basic type) number.

◆ power() [1/2]

integer lal::numeric::integer::power ( const integer & i) const
inlinenodiscardnoexcept

Exponentiation operator.

Parameters
iA lal::numeric::integer.

◆ power() [2/2]

integer lal::numeric::integer::power ( const uint64_t i) const
inlinenodiscardnoexcept

Exponentiation operator.

Parameters
iAn unsigned integer (basic type).

◆ powt() [1/2]

integer & lal::numeric::integer::powt ( const integer & i)
noexcept

Exponentiation operator.

Modifies the current object.

Parameters
iA lal::numeric::integer.

◆ powt() [2/2]

integer & lal::numeric::integer::powt ( const uint64_t i)
inlinenoexcept

Exponentiation operator.

Modifies the current object.

Parameters
iUnsigned integer (basic type) number.

◆ set_integer()

void lal::numeric::integer::set_integer ( const integer & i)
inlinenoexcept

Overwrites the value of this integer with i.

Parameters
iA lal::numeric::integer.

◆ set_number()

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
void lal::numeric::integer::set_number ( const T i)
inlinenoexcept

Overwrites the value of this integer with i.

Parameters
iAn integer (basic type) number.

◆ set_str()

void lal::numeric::integer::set_str ( const std::string & s)
inlinenoexcept

Overwrites the value of this integer with s.

Parameters
sA string.

◆ swap()

void lal::numeric::integer::swap ( integer & i)
inlinenoexcept

Swaps the value of this integer with integer i's value.

  • If none of the integers is initialized, it does nothing.
  • If only one of the integers is initialized, moves the contents of the initialized integer to the other. At the end, one of the two integers is left uninitiliased.
  • If both integers are initialized, swaps the values they contain.
Parameters
iA lal::numeric::integer

Friends And Related Symbol Documentation

◆ operator!=

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator!= ( const T i,
const integer & ii )
friend

Non-equality operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator*

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator* ( const T i,
const integer & ii )
friend

Product operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator+

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator+ ( const T i,
const integer & ii )
friend

Addition operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator-

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
integer operator- ( const T i,
const integer & ii )
friend

Substraction operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator/

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
int64_t operator/ ( const T i,
const integer & ii )
friend

Division operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator<

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator< ( const T i,
const integer & ii )
friend

Less operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator<=

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator<= ( const T i,
const integer & ii )
friend

Less than or equal to operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator==

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator== ( const T i,
const integer & ii )
friend

Equality operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator>

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator> ( const T i,
const integer & ii )
friend

Greater than operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ operator>=

template<typename T , std::enable_if_t< std::is_integral_v< T >, bool > = true>
bool operator>= ( const T i,
const integer & ii )
friend

Greater than or equal to operator.

Parameters
iAn integer (basic type) number.
iiA lal::numeric::integer.

◆ swap

void swap ( integer & i,
integer & j )
friend

Swaps two integers.

Parameters
iInput lal::numeric::integer.
jInput lal::numeric::integer.

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