summaryrefslogtreecommitdiff
path: root/py/mpz.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-03-12 15:36:06 +0000
committerDamien George <damien.p.george@gmail.com>2014-03-12 15:36:06 +0000
commitbb4a43f35ccb128aeb42e483d9937764353de49e (patch)
treeb2aadc9403c7e2ed1cd13fa7885e18c53416feb2 /py/mpz.h
parent8bfec2b53822e2b62c4577b32e0beae398a16297 (diff)
py: Fix some bugs in mpz; add mpz_from_ll and mpz_set_from_ll.
A couple of bugs in mpn_shl, and overflow bug in mpz_set_from_int.
Diffstat (limited to 'py/mpz.h')
-rw-r--r--py/mpz.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/py/mpz.h b/py/mpz.h
index 0ef1ad10d..afd46cfde 100644
--- a/py/mpz.h
+++ b/py/mpz.h
@@ -12,6 +12,7 @@ typedef struct _mpz_t {
#define MPZ_DIG_SIZE (15) // see mpn_div for why this needs to be at most 15
#define MPZ_NUM_DIG_FOR_INT (sizeof(machine_int_t) * 8 / MPZ_DIG_SIZE + 1)
+#define MPZ_NUM_DIG_FOR_LL (sizeof(long long) * 8 / MPZ_DIG_SIZE + 1)
// convenience macro to declare an mpz with a digit array from the stack, initialised by an integer
#define MPZ_CONST_INT(z, val) mpz_t z; mpz_dig_t z ## _digits[MPZ_NUM_DIG_FOR_INT]; mpz_init_fixed_from_int(&z, z_digits, MPZ_NUM_DIG_FOR_INT, val);
@@ -23,6 +24,7 @@ void mpz_deinit(mpz_t *z);
mpz_t *mpz_zero();
mpz_t *mpz_from_int(machine_int_t i);
+mpz_t *mpz_from_ll(long long i);
mpz_t *mpz_from_str(const char *str, uint len, bool neg, uint base);
void mpz_free(mpz_t *z);
@@ -30,6 +32,7 @@ mpz_t *mpz_clone(const mpz_t *src);
void mpz_set(mpz_t *dest, const mpz_t *src);
void mpz_set_from_int(mpz_t *z, machine_int_t src);
+void mpz_set_from_ll(mpz_t *z, long long i);
uint mpz_set_from_str(mpz_t *z, const char *str, uint len, bool neg, uint base);
bool mpz_is_zero(const mpz_t *z);