21 #ifndef BM_BM_SIM_BIGNUM_H_
22 #define BM_BM_SIM_BIGNUM_H_
27 #include <boost/multiprecision/gmp.hpp>
33 using boost::multiprecision::gmp_int;
34 using boost::multiprecision::number;
36 using Bignum = number<gmp_int>;
38 inline size_t export_bytes(
char *dst,
size_t size,
const Bignum &src) {
40 mpz_export(dst, &count, 1, size, 1, 0, src.backend().data());
44 inline size_t export_size_in_bytes(
const Bignum &src) {
45 return (mpz_sizeinbase(src.backend().data(), 2) + 7) / 8;
48 inline void import_bytes(Bignum *dst,
const char *src,
size_t size) {
49 mpz_import(dst->backend().data(), 1, 1, size, 1, 0, src);
52 inline int test_bit(
const Bignum &v,
size_t index) {
53 return mpz_tstbit(v.backend().data(), index);
56 inline void clear_bit(Bignum *v,
size_t index) {
57 return mpz_clrbit(v->backend().data(), index);
64 #endif // BM_BM_SIM_BIGNUM_H_