xref: /dragonfly/contrib/gmp/mpz/array_init.c (revision 86d7f5d3)
1*86d7f5d3SJohn Marino /* mpz_array_init (array, array_size, size_per_elem) --
2*86d7f5d3SJohn Marino 
3*86d7f5d3SJohn Marino Copyright 1991, 1993, 1994, 1995, 2000, 2001, 2002 Free Software Foundation,
4*86d7f5d3SJohn Marino Inc.
5*86d7f5d3SJohn Marino 
6*86d7f5d3SJohn Marino This file is part of the GNU MP Library.
7*86d7f5d3SJohn Marino 
8*86d7f5d3SJohn Marino The GNU MP Library is free software; you can redistribute it and/or modify
9*86d7f5d3SJohn Marino it under the terms of the GNU Lesser General Public License as published by
10*86d7f5d3SJohn Marino the Free Software Foundation; either version 3 of the License, or (at your
11*86d7f5d3SJohn Marino option) any later version.
12*86d7f5d3SJohn Marino 
13*86d7f5d3SJohn Marino The GNU MP Library is distributed in the hope that it will be useful, but
14*86d7f5d3SJohn Marino WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15*86d7f5d3SJohn Marino or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
16*86d7f5d3SJohn Marino License for more details.
17*86d7f5d3SJohn Marino 
18*86d7f5d3SJohn Marino You should have received a copy of the GNU Lesser General Public License
19*86d7f5d3SJohn Marino along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
20*86d7f5d3SJohn Marino 
21*86d7f5d3SJohn Marino #include "gmp.h"
22*86d7f5d3SJohn Marino #include "gmp-impl.h"
23*86d7f5d3SJohn Marino 
24*86d7f5d3SJohn Marino void
mpz_array_init(mpz_ptr arr,mp_size_t arr_size,mp_size_t nbits)25*86d7f5d3SJohn Marino mpz_array_init (mpz_ptr arr, mp_size_t arr_size, mp_size_t nbits)
26*86d7f5d3SJohn Marino {
27*86d7f5d3SJohn Marino   register mp_ptr p;
28*86d7f5d3SJohn Marino   register mp_size_t i;
29*86d7f5d3SJohn Marino   mp_size_t nlimbs;
30*86d7f5d3SJohn Marino 
31*86d7f5d3SJohn Marino   nlimbs = (nbits + GMP_NUMB_BITS - 1) / GMP_NUMB_BITS;
32*86d7f5d3SJohn Marino   p = (mp_ptr) (*__gmp_allocate_func) (arr_size * nlimbs * BYTES_PER_MP_LIMB);
33*86d7f5d3SJohn Marino 
34*86d7f5d3SJohn Marino   for (i = 0; i < arr_size; i++)
35*86d7f5d3SJohn Marino     {
36*86d7f5d3SJohn Marino       arr[i]._mp_alloc = nlimbs + 1; /* Yes, lie a little... */
37*86d7f5d3SJohn Marino       arr[i]._mp_size = 0;
38*86d7f5d3SJohn Marino       arr[i]._mp_d = p + i * nlimbs;
39*86d7f5d3SJohn Marino     }
40*86d7f5d3SJohn Marino }
41