diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-02-23 21:17:47 +0100 |
---|---|---|
committer | Marc Glisse <marc.glisse@inria.fr> | 2012-02-23 21:17:47 +0100 |
commit | 2b06ef413348321424141880c23fea600940e25b (patch) | |
tree | d2f66feff6187bda4f7440776914199d7eb0d5b1 /mpz/com.c | |
parent | 8e1827335d45a049e434a2b095558f14dd4bf36f (diff) | |
download | gmp-2b06ef413348321424141880c23fea600940e25b.tar.gz |
Use the macros ALLOC etc to access the fields of mpz_t in mpz/*.
Test mpz_abs when it requires a reallocation.
Diffstat (limited to 'mpz/com.c')
-rw-r--r-- | mpz/com.c | 22 |
1 files changed, 10 insertions, 12 deletions
@@ -24,7 +24,7 @@ along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ void mpz_com (mpz_ptr dst, mpz_srcptr src) { - mp_size_t size = src->_mp_size; + mp_size_t size = SIZ (src); mp_srcptr src_ptr; mp_ptr dst_ptr; @@ -34,17 +34,16 @@ mpz_com (mpz_ptr dst, mpz_srcptr src) But this can be simplified using the identity -x = ~x + 1. So we're going to compute (~~x) + 1 = x + 1! */ - if (dst->_mp_alloc < size + 1) - _mpz_realloc (dst, size + 1); + MPZ_REALLOC (dst, size + 1); - src_ptr = src->_mp_d; - dst_ptr = dst->_mp_d; + src_ptr = PTR (src); + dst_ptr = PTR (dst); if (UNLIKELY (size == 0)) { /* special case, as mpn_add_1 wants size!=0 */ dst_ptr[0] = 1; - dst->_mp_size = -1; + SIZ (dst) = -1; return; } @@ -60,7 +59,7 @@ mpz_com (mpz_ptr dst, mpz_srcptr src) } /* Store a negative size, to indicate ones-extension. */ - dst->_mp_size = -size; + SIZ (dst) = -size; } else { @@ -69,16 +68,15 @@ mpz_com (mpz_ptr dst, mpz_srcptr src) So we're going to compute ~~(x - 1) = x - 1! */ size = -size; - if (dst->_mp_alloc < size) - _mpz_realloc (dst, size); + MPZ_REALLOC (dst, size); - src_ptr = src->_mp_d; - dst_ptr = dst->_mp_d; + src_ptr = PTR (src); + dst_ptr = PTR (dst); mpn_sub_1 (dst_ptr, src_ptr, size, (mp_limb_t) 1); size -= dst_ptr[size - 1] == 0; /* Store a positive size, to indicate zero-extension. */ - dst->_mp_size = size; + SIZ (dst) = size; } } |