CBMC
mp_arith.cpp File Reference
#include "mp_arith.h"
#include <algorithm>
#include <cctype>
#include <climits>
#include <vector>
#include "arith_tools.h"
#include "invariant.h"
+ Include dependency graph for mp_arith.cpp:

Go to the source code of this file.

Typedefs

typedef BigInt::ullong_t ullong_t
 
typedef BigInt::llong_t llong_t
 

Functions

mp_integer operator>> (const mp_integer &a, const mp_integer &b)
 
mp_integer operator<< (const mp_integer &a, const mp_integer &b)
 
std::ostream & operator<< (std::ostream &out, const mp_integer &n)
 
const mp_integer string2integer (const std::string &n, unsigned base)
 
const std::string integer2binary (const mp_integer &n, std::size_t width)
 
const std::string integer2string (const mp_integer &n, unsigned base)
 
const mp_integer binary2integer (const std::string &n, bool is_signed)
 convert binary string representation to mp_integer More...
 
mp_integer bitwise (const mp_integer &a, const mp_integer &b, std::function< bool(bool, bool)> f)
 bitwise binary operation over two integers, given as a functor More...
 
mp_integer bitwise_or (const mp_integer &a, const mp_integer &b)
 bitwise 'or' of two nonnegative integers More...
 
mp_integer bitwise_and (const mp_integer &a, const mp_integer &b)
 bitwise 'and' of two nonnegative integers More...
 
mp_integer bitwise_xor (const mp_integer &a, const mp_integer &b)
 bitwise 'xor' of two nonnegative integers More...
 
mp_integer arith_left_shift (const mp_integer &a, const mp_integer &b, std::size_t true_size)
 arithmetic left shift bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long) More...
 
mp_integer arith_right_shift (const mp_integer &a, const mp_integer &b, std::size_t true_size)
 arithmetic right shift (loads sign on MSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long) More...
 
mp_integer logic_left_shift (const mp_integer &a, const mp_integer &b, std::size_t true_size)
 logic left shift bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long) More...
 
mp_integer logic_right_shift (const mp_integer &a, const mp_integer &b, std::size_t true_size)
 logic right shift (loads 0 on MSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long) More...
 
mp_integer rotate_right (const mp_integer &a, const mp_integer &b, std::size_t true_size)
 rotates right (MSB=LSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long) More...
 
mp_integer rotate_left (const mp_integer &a, const mp_integer &b, std::size_t true_size)
 rotate left (LSB=MSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long) More...
 

Typedef Documentation

◆ llong_t

typedef BigInt::llong_t llong_t

Definition at line 20 of file mp_arith.cpp.

◆ ullong_t

typedef BigInt::ullong_t ullong_t

Definition at line 19 of file mp_arith.cpp.

Function Documentation

◆ arith_left_shift()

mp_integer arith_left_shift ( const mp_integer a,
const mp_integer b,
std::size_t  true_size 
)

arithmetic left shift bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long)

Definition at line 253 of file mp_arith.cpp.

◆ arith_right_shift()

mp_integer arith_right_shift ( const mp_integer a,
const mp_integer b,
std::size_t  true_size 
)

arithmetic right shift (loads sign on MSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long)

Definition at line 272 of file mp_arith.cpp.

◆ binary2integer()

const mp_integer binary2integer ( const std::string &  n,
bool  is_signed 
)

convert binary string representation to mp_integer

parameters: string of '0'/'1', most significant bit first
Returns
mp_integer

Definition at line 117 of file mp_arith.cpp.

◆ bitwise()

mp_integer bitwise ( const mp_integer a,
const mp_integer b,
std::function< bool(bool, bool)>  f 
)

bitwise binary operation over two integers, given as a functor

Parameters
athe first integer
bthe second integer
fthe function over two bits

Definition at line 190 of file mp_arith.cpp.

◆ bitwise_and()

mp_integer bitwise_and ( const mp_integer a,
const mp_integer b 
)

bitwise 'and' of two nonnegative integers

Definition at line 227 of file mp_arith.cpp.

◆ bitwise_or()

mp_integer bitwise_or ( const mp_integer a,
const mp_integer b 
)

bitwise 'or' of two nonnegative integers

Definition at line 215 of file mp_arith.cpp.

◆ bitwise_xor()

mp_integer bitwise_xor ( const mp_integer a,
const mp_integer b 
)

bitwise 'xor' of two nonnegative integers

Definition at line 239 of file mp_arith.cpp.

◆ integer2binary()

const std::string integer2binary ( const mp_integer n,
std::size_t  width 
)
Returns
string of '0'/'1', most significant bit first

Definition at line 64 of file mp_arith.cpp.

◆ integer2string()

const std::string integer2string ( const mp_integer n,
unsigned  base 
)

Definition at line 103 of file mp_arith.cpp.

◆ logic_left_shift()

mp_integer logic_left_shift ( const mp_integer a,
const mp_integer b,
std::size_t  true_size 
)

logic left shift bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long)

Definition at line 291 of file mp_arith.cpp.

◆ logic_right_shift()

mp_integer logic_right_shift ( const mp_integer a,
const mp_integer b,
std::size_t  true_size 
)

logic right shift (loads 0 on MSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long)

Definition at line 317 of file mp_arith.cpp.

◆ operator<<() [1/2]

mp_integer operator<< ( const mp_integer a,
const mp_integer b 
)

Definition at line 40 of file mp_arith.cpp.

◆ operator<<() [2/2]

std::ostream& operator<< ( std::ostream &  out,
const mp_integer n 
)

Definition at line 45 of file mp_arith.cpp.

◆ operator>>()

mp_integer operator>> ( const mp_integer a,
const mp_integer b 
)

Definition at line 22 of file mp_arith.cpp.

◆ rotate_left()

mp_integer rotate_left ( const mp_integer a,
const mp_integer b,
std::size_t  true_size 
)

rotate left (LSB=MSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long)

Definition at line 353 of file mp_arith.cpp.

◆ rotate_right()

mp_integer rotate_right ( const mp_integer a,
const mp_integer b,
std::size_t  true_size 
)

rotates right (MSB=LSB) bitwise operations only make sense on native objects, hence the largest object size should be the largest available c++ integer size (currently long long)

Definition at line 333 of file mp_arith.cpp.

◆ string2integer()

const mp_integer string2integer ( const std::string &  n,
unsigned  base 
)
parameters: string of '0'-'9' etc. most significant digit first
base of number representation
Returns
mp_integer

Definition at line 54 of file mp_arith.cpp.