1/* mpz_cmpabs_ui.c -- Compare a mpz_t a with an mp_limb_t b. Return positive, 2 zero, or negative based on if a > b, a == b, or a < b. 3 4Copyright 1991, 1993, 1994, 1995, 1997, 2000, 2001, 2002 Free Software 5Foundation, Inc. 6 7This file is part of the GNU MP Library. 8 9The GNU MP Library is free software; you can redistribute it and/or modify 10it under the terms of the GNU Lesser General Public License as published by 11the Free Software Foundation; either version 3 of the License, or (at your 12option) any later version. 13 14The GNU MP Library is distributed in the hope that it will be useful, but 15WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 17License for more details. 18 19You should have received a copy of the GNU Lesser General Public License 20along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ 21 22#include "gmp.h" 23#include "gmp-impl.h" 24 25int 26mpz_cmpabs_ui (mpz_srcptr u, unsigned long int v_digit) 27{ 28 mp_ptr up; 29 mp_size_t un; 30 mp_limb_t ul; 31 32 up = PTR(u); 33 un = SIZ(u); 34 35 if (un == 0) 36 return -(v_digit != 0); 37 38 un = ABS (un); 39 40 if (un == 1) 41 { 42 ul = up[0]; 43 if (ul > v_digit) 44 return 1; 45 if (ul < v_digit) 46 return -1; 47 return 0; 48 } 49 50#if GMP_NAIL_BITS != 0 51 if (v_digit > GMP_NUMB_MAX) 52 { 53 if (un == 2) 54 { 55 ul = up[0] + (up[1] << GMP_NUMB_BITS); 56 57 if (ul > v_digit) 58 return 1; 59 if (ul < v_digit) 60 return -1; 61 return 0; 62 } 63 } 64#endif 65 66 return 1; 67} 68