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