summaryrefslogtreecommitdiff
path: root/mpq
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2001-04-02 22:49:08 +0200
committerKevin Ryde <user42@zip.com.au>2001-04-02 22:49:08 +0200
commit36a0a1f659b3168eacf9c1aa84c667ac1de23881 (patch)
tree57fafe1d5f11f240dede60c352bdfa8168dc6a52 /mpq
parent21cd9a08d1d1db8d2f35692316ca600af9691c16 (diff)
downloadgmp-36a0a1f659b3168eacf9c1aa84c667ac1de23881.tar.gz
* mpq/equal.c: Rewrite using inline compare loops.
Diffstat (limited to 'mpq')
-rw-r--r--mpq/equal.c35
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;
}