From 4c71a77f2c39a8158c80b40af1a5cc2358251a00 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 25 Jan 2019 06:33:29 -0800 Subject: Provide faster bignum-in-fixed-integer range tests in MPI. * mpi/mpi.c (mp_in_range, mp_in_intptr_range, mp_in_uintptr_range): New functions. * mpi/mpi.h (mp_in_range, mp_in_intptr_range, mp_in_uintptr_range): Declared. * arith.c (NUM_MAX_MP, INT_PTR_MAX_MP, UINT_PTR_MAX_MP, INT_PTR_MAX_SUCC_MP): Static variables removed. Note that INT_PTR_MAX_MP was not used at all! (normalize): Use mp_in_range instead magnitude comparison to NUM_MAX_MP. (in_int_ptr_range, in_uint_ptr_range): Static functions removed. (c_unum): Use mp_in_uintptr_range instead of in_uint_ptr_range. (arith_init): Remove initializations of removed variables. (arith_free_all): Remove cleanup of removed variables, leaving function empty. * lib.c (c_num): Use mp_in_intptr_range instead of in_int_ptr_range. --- mpi/mpi.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'mpi/mpi.h') diff --git a/mpi/mpi.h b/mpi/mpi.h index 28fadb31..71e08055 100644 --- a/mpi/mpi.h +++ b/mpi/mpi.h @@ -85,6 +85,9 @@ mp_err mp_set_uintptr(mp_int *mp, uint_ptr_t z); mp_err mp_set_intptr(mp_int *mp, int_ptr_t z); mp_err mp_get_uintptr(mp_int *mp, uint_ptr_t *z); mp_err mp_get_intptr(mp_int *mp, int_ptr_t *z); +int mp_in_range(mp_int *mp, uint_ptr_t lim, int unsig); +int mp_in_intptr_range(mp_int *mp); +int mp_in_uintptr_range(mp_int *mp); #ifdef HAVE_DOUBLE_INTPTR_T mp_err mp_set_double_intptr(mp_int *mp, double_intptr_t z); #endif -- cgit v1.2.3