py: Make long ints hashable.
Addresses issue #765.
diff --git a/py/mpz.c b/py/mpz.c
index 3b96c57..24c83d9 100644
--- a/py/mpz.c
+++ b/py/mpz.c
@@ -1213,6 +1213,22 @@
}
#endif
+// must return actual int value if it fits in mp_int_t
+mp_int_t mpz_hash(const mpz_t *z) {
+ mp_int_t val = 0;
+ mpz_dig_t *d = z->dig + z->len;
+
+ while (--d >= z->dig) {
+ val = (val << DIG_SIZE) | *d;
+ }
+
+ if (z->neg != 0) {
+ val = -val;
+ }
+
+ return val;
+}
+
// TODO check that this correctly handles overflow in all cases
mp_int_t mpz_as_int(const mpz_t *i) {
mp_int_t val = 0;