diff options
author | Kevin Ryde <user42@zip.com.au> | 2001-04-02 22:49:08 +0200 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2001-04-02 22:49:08 +0200 |
commit | 36a0a1f659b3168eacf9c1aa84c667ac1de23881 (patch) | |
tree | 57fafe1d5f11f240dede60c352bdfa8168dc6a52 /mpq | |
parent | 21cd9a08d1d1db8d2f35692316ca600af9691c16 (diff) | |
download | gmp-36a0a1f659b3168eacf9c1aa84c667ac1de23881.tar.gz |
* mpq/equal.c: Rewrite using inline compare loops.
Diffstat (limited to 'mpq')
-rw-r--r-- | mpq/equal.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/mpq/equal.c b/mpq/equal.c index f89abcbd2..d058e61b5 100644 --- a/mpq/equal.c +++ b/mpq/equal.c @@ -26,12 +26,31 @@ MA 02111-1307, USA. */ int mpq_equal (mpq_srcptr op1, mpq_srcptr op2) { - mp_size_t num1_size = op1->_mp_num._mp_size; - mp_size_t den1_size = op1->_mp_den._mp_size; - mp_size_t num2_size = op2->_mp_num._mp_size; - mp_size_t den2_size = op2->_mp_den._mp_size; - - return (num1_size == num2_size && den1_size == den2_size - && mpn_cmp (op1->_mp_num._mp_d, op2->_mp_num._mp_d, ABS (num1_size)) == 0 - && mpn_cmp (op1->_mp_den._mp_d, op2->_mp_den._mp_d, den1_size) == 0); + int num1_size, num2_size, den1_size, den2_size, i; + mp_srcptr num1_ptr, num2_ptr, den1_ptr, den2_ptr; + + num1_size = op1->_mp_num._mp_size; + num2_size = op2->_mp_num._mp_size; + if (num1_size != num2_size) + return 0; + + num1_ptr = op1->_mp_num._mp_d; + num2_ptr = op2->_mp_num._mp_d; + num1_size = ABS (num1_size); + for (i = 0; i < num1_size; i++) + if (num1_ptr[i] != num2_ptr[i]) + return 0; + + den1_size = op1->_mp_den._mp_size; + den2_size = op2->_mp_den._mp_size; + if (den1_size != den2_size) + return 0; + + den1_ptr = op1->_mp_den._mp_d; + den2_ptr = op2->_mp_den._mp_d; + for (i = 0; i < den1_size; i++) + if (den1_ptr[i] != den2_ptr[i]) + return 0; + + return 1; } |