1/* mpz_init_set_ui(dest,val) -- Make a new multiple precision in DEST and
2   assign VAL to the new number.
3
4Copyright 1991, 1993, 1994, 1995, 2000, 2001, 2002, 2004 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
25void
26mpz_init_set_ui (mpz_ptr dest, unsigned long int val)
27{
28  mp_size_t size;
29
30  dest->_mp_alloc = 1;
31  dest->_mp_d = (mp_ptr) (*__gmp_allocate_func) (BYTES_PER_MP_LIMB);
32
33  dest->_mp_d[0] = val & GMP_NUMB_MASK;
34  size = val != 0;
35
36#if BITS_PER_ULONG > GMP_NUMB_BITS  /* avoid warnings about shift amount */
37  if (val > GMP_NUMB_MAX)
38    {
39      MPZ_REALLOC (dest, 2);
40      dest->_mp_d[1] = val >> GMP_NUMB_BITS;
41      size = 2;
42    }
43#endif
44
45  dest->_mp_size = size;
46}
47