From 0d5fff0f162aafeefe0843a8bd5b035cc2f4033e Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Wed, 14 Jan 2015 04:51:00 -0800 Subject: [PATCH] improved support for export/import of 64 bits --- C/gmp_support.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/C/gmp_support.c b/C/gmp_support.c index c6810fb1a..158d6ceee 100644 --- a/C/gmp_support.c +++ b/C/gmp_support.c @@ -1027,22 +1027,34 @@ Yap_gmp_exp_big_big(Term t1, Term t2) Term -Yap_gmp_big_from_64bits(YAP_LONG_LONG i) +Yap_gmp_big_from_64bits(int64_t i) { - char s[64]; + char s[65]; MP_INT new; #ifdef _WIN32 snprintf(s,64,"%I64d", (long long int)i); #elif HAVE_SNPRINTF - snprintf(s, 64, "%lld", (long long int)i); + snprintf(s, 64, "%lld", (int64_t)i); #else - sprintf(s, "%lld", (long long int)i); + sprintf(s, "%lld", (int64_t)i); #endif mpz_init_set_str (&new, s, 10); return MkBigAndClose(&new); } +int64_t +Yap_gmp_big_to_64bits(Term t) +{ + MP_INT *b = Yap_BigIntOfTerm(t); + int64_t rc; + mpz_export( &rc, NULL, 0, sizeof(int64_t), 0, 0, b); + if ( mpz_sgn(b) < 0 ) { + rc = -rc; + } + return rc; +} + Term Yap_gmq_rdiv_int_int(Int i1, Int i2) { @@ -1752,6 +1764,7 @@ Yap_term_to_existing_rat(Term t, MP_RAT *b) return FALSE; } + #endif