Fix 2 log messages when player joined to game (#9477)
[oweals/minetest.git] / lib / gmp / mini-gmp.h
1 /* mini-gmp, a minimalistic implementation of a GNU GMP subset.
2
3 Copyright 2011-2015, 2017, 2019 Free Software Foundation, Inc.
4
5 This file is part of the GNU MP Library.
6
7 The GNU MP Library is free software; you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11
12 The GNU MP Library is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
15 License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
19
20 /* About mini-gmp: This is a minimal implementation of a subset of the
21    GMP interface. It is intended for inclusion into applications which
22    have modest bignums needs, as a fallback when the real GMP library
23    is not installed.
24
25    This file defines the public interface. */
26
27 #ifndef __MINI_GMP_H__
28 #define __MINI_GMP_H__
29
30 /* For size_t */
31 #include <stddef.h>
32
33 #if defined (__cplusplus)
34 extern "C" {
35 #endif
36
37 void mp_set_memory_functions (void *(*) (size_t),
38                               void *(*) (void *, size_t, size_t),
39                               void (*) (void *, size_t));
40
41 void mp_get_memory_functions (void *(**) (size_t),
42                               void *(**) (void *, size_t, size_t),
43                               void (**) (void *, size_t));
44
45 #ifndef MINI_GMP_LIMB_TYPE
46 #define MINI_GMP_LIMB_TYPE long
47 #endif
48
49 typedef unsigned MINI_GMP_LIMB_TYPE mp_limb_t;
50 typedef long mp_size_t;
51 typedef unsigned long mp_bitcnt_t;
52
53 typedef mp_limb_t *mp_ptr;
54 typedef const mp_limb_t *mp_srcptr;
55
56 typedef struct
57 {
58   int _mp_alloc;                /* Number of *limbs* allocated and pointed
59                                    to by the _mp_d field.  */
60   int _mp_size;                 /* abs(_mp_size) is the number of limbs the
61                                    last field points to.  If _mp_size is
62                                    negative this is a negative number.  */
63   mp_limb_t *_mp_d;             /* Pointer to the limbs.  */
64 } __mpz_struct;
65
66 typedef __mpz_struct mpz_t[1];
67
68 typedef __mpz_struct *mpz_ptr;
69 typedef const __mpz_struct *mpz_srcptr;
70
71 extern const int mp_bits_per_limb;
72
73 void mpn_copyi (mp_ptr, mp_srcptr, mp_size_t);
74 void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
75 void mpn_zero (mp_ptr, mp_size_t);
76
77 int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t);
78 int mpn_zero_p (mp_srcptr, mp_size_t);
79
80 mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
81 mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
82 mp_limb_t mpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
83
84 mp_limb_t mpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
85 mp_limb_t mpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
86 mp_limb_t mpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
87
88 mp_limb_t mpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
89 mp_limb_t mpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
90 mp_limb_t mpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
91
92 mp_limb_t mpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
93 void mpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
94 void mpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
95 int mpn_perfect_square_p (mp_srcptr, mp_size_t);
96 mp_size_t mpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t);
97
98 mp_limb_t mpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
99 mp_limb_t mpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
100
101 mp_bitcnt_t mpn_scan0 (mp_srcptr, mp_bitcnt_t);
102 mp_bitcnt_t mpn_scan1 (mp_srcptr, mp_bitcnt_t);
103
104 void mpn_com (mp_ptr, mp_srcptr, mp_size_t);
105 mp_limb_t mpn_neg (mp_ptr, mp_srcptr, mp_size_t);
106
107 mp_bitcnt_t mpn_popcount (mp_srcptr, mp_size_t);
108
109 mp_limb_t mpn_invert_3by2 (mp_limb_t, mp_limb_t);
110 #define mpn_invert_limb(x) mpn_invert_3by2 ((x), 0)
111
112 size_t mpn_get_str (unsigned char *, int, mp_ptr, mp_size_t);
113 mp_size_t mpn_set_str (mp_ptr, const unsigned char *, size_t, int);
114
115 void mpz_init (mpz_t);
116 void mpz_init2 (mpz_t, mp_bitcnt_t);
117 void mpz_clear (mpz_t);
118
119 #define mpz_odd_p(z)   (((z)->_mp_size != 0) & (int) (z)->_mp_d[0])
120 #define mpz_even_p(z)  (! mpz_odd_p (z))
121
122 int mpz_sgn (const mpz_t);
123 int mpz_cmp_si (const mpz_t, long);
124 int mpz_cmp_ui (const mpz_t, unsigned long);
125 int mpz_cmp (const mpz_t, const mpz_t);
126 int mpz_cmpabs_ui (const mpz_t, unsigned long);
127 int mpz_cmpabs (const mpz_t, const mpz_t);
128 int mpz_cmp_d (const mpz_t, double);
129 int mpz_cmpabs_d (const mpz_t, double);
130
131 void mpz_abs (mpz_t, const mpz_t);
132 void mpz_neg (mpz_t, const mpz_t);
133 void mpz_swap (mpz_t, mpz_t);
134
135 void mpz_add_ui (mpz_t, const mpz_t, unsigned long);
136 void mpz_add (mpz_t, const mpz_t, const mpz_t);
137 void mpz_sub_ui (mpz_t, const mpz_t, unsigned long);
138 void mpz_ui_sub (mpz_t, unsigned long, const mpz_t);
139 void mpz_sub (mpz_t, const mpz_t, const mpz_t);
140
141 void mpz_mul_si (mpz_t, const mpz_t, long int);
142 void mpz_mul_ui (mpz_t, const mpz_t, unsigned long int);
143 void mpz_mul (mpz_t, const mpz_t, const mpz_t);
144 void mpz_mul_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
145 void mpz_addmul_ui (mpz_t, const mpz_t, unsigned long int);
146 void mpz_addmul (mpz_t, const mpz_t, const mpz_t);
147 void mpz_submul_ui (mpz_t, const mpz_t, unsigned long int);
148 void mpz_submul (mpz_t, const mpz_t, const mpz_t);
149
150 void mpz_cdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t);
151 void mpz_fdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t);
152 void mpz_tdiv_qr (mpz_t, mpz_t, const mpz_t, const mpz_t);
153 void mpz_cdiv_q (mpz_t, const mpz_t, const mpz_t);
154 void mpz_fdiv_q (mpz_t, const mpz_t, const mpz_t);
155 void mpz_tdiv_q (mpz_t, const mpz_t, const mpz_t);
156 void mpz_cdiv_r (mpz_t, const mpz_t, const mpz_t);
157 void mpz_fdiv_r (mpz_t, const mpz_t, const mpz_t);
158 void mpz_tdiv_r (mpz_t, const mpz_t, const mpz_t);
159
160 void mpz_cdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
161 void mpz_fdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
162 void mpz_tdiv_q_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
163 void mpz_cdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
164 void mpz_fdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
165 void mpz_tdiv_r_2exp (mpz_t, const mpz_t, mp_bitcnt_t);
166
167 void mpz_mod (mpz_t, const mpz_t, const mpz_t);
168
169 void mpz_divexact (mpz_t, const mpz_t, const mpz_t);
170
171 int mpz_divisible_p (const mpz_t, const mpz_t);
172 int mpz_congruent_p (const mpz_t, const mpz_t, const mpz_t);
173
174 unsigned long mpz_cdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long);
175 unsigned long mpz_fdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long);
176 unsigned long mpz_tdiv_qr_ui (mpz_t, mpz_t, const mpz_t, unsigned long);
177 unsigned long mpz_cdiv_q_ui (mpz_t, const mpz_t, unsigned long);
178 unsigned long mpz_fdiv_q_ui (mpz_t, const mpz_t, unsigned long);
179 unsigned long mpz_tdiv_q_ui (mpz_t, const mpz_t, unsigned long);
180 unsigned long mpz_cdiv_r_ui (mpz_t, const mpz_t, unsigned long);
181 unsigned long mpz_fdiv_r_ui (mpz_t, const mpz_t, unsigned long);
182 unsigned long mpz_tdiv_r_ui (mpz_t, const mpz_t, unsigned long);
183 unsigned long mpz_cdiv_ui (const mpz_t, unsigned long);
184 unsigned long mpz_fdiv_ui (const mpz_t, unsigned long);
185 unsigned long mpz_tdiv_ui (const mpz_t, unsigned long);
186
187 unsigned long mpz_mod_ui (mpz_t, const mpz_t, unsigned long);
188
189 void mpz_divexact_ui (mpz_t, const mpz_t, unsigned long);
190
191 int mpz_divisible_ui_p (const mpz_t, unsigned long);
192
193 unsigned long mpz_gcd_ui (mpz_t, const mpz_t, unsigned long);
194 void mpz_gcd (mpz_t, const mpz_t, const mpz_t);
195 void mpz_gcdext (mpz_t, mpz_t, mpz_t, const mpz_t, const mpz_t);
196 void mpz_lcm_ui (mpz_t, const mpz_t, unsigned long);
197 void mpz_lcm (mpz_t, const mpz_t, const mpz_t);
198 int mpz_invert (mpz_t, const mpz_t, const mpz_t);
199
200 void mpz_sqrtrem (mpz_t, mpz_t, const mpz_t);
201 void mpz_sqrt (mpz_t, const mpz_t);
202 int mpz_perfect_square_p (const mpz_t);
203
204 void mpz_pow_ui (mpz_t, const mpz_t, unsigned long);
205 void mpz_ui_pow_ui (mpz_t, unsigned long, unsigned long);
206 void mpz_powm (mpz_t, const mpz_t, const mpz_t, const mpz_t);
207 void mpz_powm_ui (mpz_t, const mpz_t, unsigned long, const mpz_t);
208
209 void mpz_rootrem (mpz_t, mpz_t, const mpz_t, unsigned long);
210 int mpz_root (mpz_t, const mpz_t, unsigned long);
211
212 void mpz_fac_ui (mpz_t, unsigned long);
213 void mpz_2fac_ui (mpz_t, unsigned long);
214 void mpz_mfac_uiui (mpz_t, unsigned long, unsigned long);
215 void mpz_bin_uiui (mpz_t, unsigned long, unsigned long);
216
217 int mpz_probab_prime_p (const mpz_t, int);
218
219 int mpz_tstbit (const mpz_t, mp_bitcnt_t);
220 void mpz_setbit (mpz_t, mp_bitcnt_t);
221 void mpz_clrbit (mpz_t, mp_bitcnt_t);
222 void mpz_combit (mpz_t, mp_bitcnt_t);
223
224 void mpz_com (mpz_t, const mpz_t);
225 void mpz_and (mpz_t, const mpz_t, const mpz_t);
226 void mpz_ior (mpz_t, const mpz_t, const mpz_t);
227 void mpz_xor (mpz_t, const mpz_t, const mpz_t);
228
229 mp_bitcnt_t mpz_popcount (const mpz_t);
230 mp_bitcnt_t mpz_hamdist (const mpz_t, const mpz_t);
231 mp_bitcnt_t mpz_scan0 (const mpz_t, mp_bitcnt_t);
232 mp_bitcnt_t mpz_scan1 (const mpz_t, mp_bitcnt_t);
233
234 int mpz_fits_slong_p (const mpz_t);
235 int mpz_fits_ulong_p (const mpz_t);
236 long int mpz_get_si (const mpz_t);
237 unsigned long int mpz_get_ui (const mpz_t);
238 double mpz_get_d (const mpz_t);
239 size_t mpz_size (const mpz_t);
240 mp_limb_t mpz_getlimbn (const mpz_t, mp_size_t);
241
242 void mpz_realloc2 (mpz_t, mp_bitcnt_t);
243 mp_srcptr mpz_limbs_read (mpz_srcptr);
244 mp_ptr mpz_limbs_modify (mpz_t, mp_size_t);
245 mp_ptr mpz_limbs_write (mpz_t, mp_size_t);
246 void mpz_limbs_finish (mpz_t, mp_size_t);
247 mpz_srcptr mpz_roinit_n (mpz_t, mp_srcptr, mp_size_t);
248
249 #define MPZ_ROINIT_N(xp, xs) {{0, (xs),(xp) }}
250
251 void mpz_set_si (mpz_t, signed long int);
252 void mpz_set_ui (mpz_t, unsigned long int);
253 void mpz_set (mpz_t, const mpz_t);
254 void mpz_set_d (mpz_t, double);
255
256 void mpz_init_set_si (mpz_t, signed long int);
257 void mpz_init_set_ui (mpz_t, unsigned long int);
258 void mpz_init_set (mpz_t, const mpz_t);
259 void mpz_init_set_d (mpz_t, double);
260
261 size_t mpz_sizeinbase (const mpz_t, int);
262 char *mpz_get_str (char *, int, const mpz_t);
263 int mpz_set_str (mpz_t, const char *, int);
264 int mpz_init_set_str (mpz_t, const char *, int);
265
266 /* This long list taken from gmp.h. */
267 /* For reference, "defined(EOF)" cannot be used here.  In g++ 2.95.4,
268    <iostream> defines EOF but not FILE.  */
269 #if defined (FILE)                                              \
270   || defined (H_STDIO)                                          \
271   || defined (_H_STDIO)               /* AIX */                 \
272   || defined (_STDIO_H)               /* glibc, Sun, SCO */     \
273   || defined (_STDIO_H_)              /* BSD, OSF */            \
274   || defined (__STDIO_H)              /* Borland */             \
275   || defined (__STDIO_H__)            /* IRIX */                \
276   || defined (_STDIO_INCLUDED)        /* HPUX */                \
277   || defined (__dj_include_stdio_h_)  /* DJGPP */               \
278   || defined (_FILE_DEFINED)          /* Microsoft */           \
279   || defined (__STDIO__)              /* Apple MPW MrC */       \
280   || defined (_MSL_STDIO_H)           /* Metrowerks */          \
281   || defined (_STDIO_H_INCLUDED)      /* QNX4 */                \
282   || defined (_ISO_STDIO_ISO_H)       /* Sun C++ */             \
283   || defined (__STDIO_LOADED)         /* VMS */
284 size_t mpz_out_str (FILE *, int, const mpz_t);
285 #endif
286
287 void mpz_import (mpz_t, size_t, int, size_t, int, size_t, const void *);
288 void *mpz_export (void *, size_t *, int, size_t, int, size_t, const mpz_t);
289
290 #if defined (__cplusplus)
291 }
292 #endif
293 #endif /* __MINI_GMP_H__ */