xref: /aosp_15_r20/external/bc/include/bcl.h (revision 5a6e848804d15c18a0125914844ee4eb0bda4fcf)
1*5a6e8488SAndroid Build Coastguard Worker /*
2*5a6e8488SAndroid Build Coastguard Worker  * *****************************************************************************
3*5a6e8488SAndroid Build Coastguard Worker  *
4*5a6e8488SAndroid Build Coastguard Worker  * SPDX-License-Identifier: BSD-2-Clause
5*5a6e8488SAndroid Build Coastguard Worker  *
6*5a6e8488SAndroid Build Coastguard Worker  * Copyright (c) 2018-2024 Gavin D. Howard and contributors.
7*5a6e8488SAndroid Build Coastguard Worker  *
8*5a6e8488SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
9*5a6e8488SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions are met:
10*5a6e8488SAndroid Build Coastguard Worker  *
11*5a6e8488SAndroid Build Coastguard Worker  * * Redistributions of source code must retain the above copyright notice, this
12*5a6e8488SAndroid Build Coastguard Worker  *   list of conditions and the following disclaimer.
13*5a6e8488SAndroid Build Coastguard Worker  *
14*5a6e8488SAndroid Build Coastguard Worker  * * Redistributions in binary form must reproduce the above copyright notice,
15*5a6e8488SAndroid Build Coastguard Worker  *   this list of conditions and the following disclaimer in the documentation
16*5a6e8488SAndroid Build Coastguard Worker  *   and/or other materials provided with the distribution.
17*5a6e8488SAndroid Build Coastguard Worker  *
18*5a6e8488SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*5a6e8488SAndroid Build Coastguard Worker  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*5a6e8488SAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*5a6e8488SAndroid Build Coastguard Worker  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*5a6e8488SAndroid Build Coastguard Worker  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*5a6e8488SAndroid Build Coastguard Worker  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*5a6e8488SAndroid Build Coastguard Worker  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*5a6e8488SAndroid Build Coastguard Worker  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*5a6e8488SAndroid Build Coastguard Worker  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*5a6e8488SAndroid Build Coastguard Worker  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*5a6e8488SAndroid Build Coastguard Worker  * POSSIBILITY OF SUCH DAMAGE.
29*5a6e8488SAndroid Build Coastguard Worker  *
30*5a6e8488SAndroid Build Coastguard Worker  * *****************************************************************************
31*5a6e8488SAndroid Build Coastguard Worker  *
32*5a6e8488SAndroid Build Coastguard Worker  * The public header for the bc library.
33*5a6e8488SAndroid Build Coastguard Worker  *
34*5a6e8488SAndroid Build Coastguard Worker  */
35*5a6e8488SAndroid Build Coastguard Worker 
36*5a6e8488SAndroid Build Coastguard Worker #ifndef BC_BCL_H
37*5a6e8488SAndroid Build Coastguard Worker #define BC_BCL_H
38*5a6e8488SAndroid Build Coastguard Worker 
39*5a6e8488SAndroid Build Coastguard Worker #include <stdbool.h>
40*5a6e8488SAndroid Build Coastguard Worker #include <stdlib.h>
41*5a6e8488SAndroid Build Coastguard Worker #include <limits.h>
42*5a6e8488SAndroid Build Coastguard Worker #include <stdint.h>
43*5a6e8488SAndroid Build Coastguard Worker 
44*5a6e8488SAndroid Build Coastguard Worker #ifndef NDEBUG
45*5a6e8488SAndroid Build Coastguard Worker #define BC_DEBUG (1)
46*5a6e8488SAndroid Build Coastguard Worker #else // NDEBUG
47*5a6e8488SAndroid Build Coastguard Worker #define BC_DEBUG (0)
48*5a6e8488SAndroid Build Coastguard Worker #endif // NDEBUG
49*5a6e8488SAndroid Build Coastguard Worker 
50*5a6e8488SAndroid Build Coastguard Worker #ifdef _WIN32
51*5a6e8488SAndroid Build Coastguard Worker #include <Windows.h>
52*5a6e8488SAndroid Build Coastguard Worker #include <BaseTsd.h>
53*5a6e8488SAndroid Build Coastguard Worker #include <stdio.h>
54*5a6e8488SAndroid Build Coastguard Worker #include <io.h>
55*5a6e8488SAndroid Build Coastguard Worker #endif // _WIN32
56*5a6e8488SAndroid Build Coastguard Worker 
57*5a6e8488SAndroid Build Coastguard Worker #ifdef _WIN32
58*5a6e8488SAndroid Build Coastguard Worker #define ssize_t SSIZE_T
59*5a6e8488SAndroid Build Coastguard Worker #endif // _WIN32
60*5a6e8488SAndroid Build Coastguard Worker 
61*5a6e8488SAndroid Build Coastguard Worker #define BCL_SEED_ULONGS (4)
62*5a6e8488SAndroid Build Coastguard Worker #define BCL_SEED_SIZE (sizeof(long) * BCL_SEED_ULONGS)
63*5a6e8488SAndroid Build Coastguard Worker 
64*5a6e8488SAndroid Build Coastguard Worker // For some reason, LONG_BIT is not defined in some versions of gcc.
65*5a6e8488SAndroid Build Coastguard Worker // I define it here to the minimum accepted value in the POSIX standard.
66*5a6e8488SAndroid Build Coastguard Worker #ifndef LONG_BIT
67*5a6e8488SAndroid Build Coastguard Worker #define LONG_BIT (32)
68*5a6e8488SAndroid Build Coastguard Worker #endif // LONG_BIT
69*5a6e8488SAndroid Build Coastguard Worker 
70*5a6e8488SAndroid Build Coastguard Worker #ifndef BC_LONG_BIT
71*5a6e8488SAndroid Build Coastguard Worker #define BC_LONG_BIT LONG_BIT
72*5a6e8488SAndroid Build Coastguard Worker #endif // BC_LONG_BIT
73*5a6e8488SAndroid Build Coastguard Worker 
74*5a6e8488SAndroid Build Coastguard Worker #if BC_LONG_BIT > LONG_BIT
75*5a6e8488SAndroid Build Coastguard Worker #error BC_LONG_BIT cannot be greater than LONG_BIT
76*5a6e8488SAndroid Build Coastguard Worker #endif // BC_LONG_BIT > LONG_BIT
77*5a6e8488SAndroid Build Coastguard Worker 
78*5a6e8488SAndroid Build Coastguard Worker // For more information about the items here, see the either the
79*5a6e8488SAndroid Build Coastguard Worker // manuals/bcl.3.md or manuals/bcl.3 manuals.
80*5a6e8488SAndroid Build Coastguard Worker 
81*5a6e8488SAndroid Build Coastguard Worker // BclBigDig is a fixed-size integer type that bcl can convert numbers to.
82*5a6e8488SAndroid Build Coastguard Worker //
83*5a6e8488SAndroid Build Coastguard Worker // BclRandInt is the type of fixed-size integer natively returned by the
84*5a6e8488SAndroid Build Coastguard Worker // pseudo-random number generator.
85*5a6e8488SAndroid Build Coastguard Worker #if BC_LONG_BIT >= 64
86*5a6e8488SAndroid Build Coastguard Worker 
87*5a6e8488SAndroid Build Coastguard Worker typedef uint64_t BclBigDig;
88*5a6e8488SAndroid Build Coastguard Worker typedef uint64_t BclRandInt;
89*5a6e8488SAndroid Build Coastguard Worker 
90*5a6e8488SAndroid Build Coastguard Worker #elif BC_LONG_BIT >= 32
91*5a6e8488SAndroid Build Coastguard Worker 
92*5a6e8488SAndroid Build Coastguard Worker typedef uint32_t BclBigDig;
93*5a6e8488SAndroid Build Coastguard Worker typedef uint32_t BclRandInt;
94*5a6e8488SAndroid Build Coastguard Worker 
95*5a6e8488SAndroid Build Coastguard Worker #else
96*5a6e8488SAndroid Build Coastguard Worker 
97*5a6e8488SAndroid Build Coastguard Worker #error BC_LONG_BIT must be at least 32
98*5a6e8488SAndroid Build Coastguard Worker 
99*5a6e8488SAndroid Build Coastguard Worker #endif // BC_LONG_BIT >= 64
100*5a6e8488SAndroid Build Coastguard Worker 
101*5a6e8488SAndroid Build Coastguard Worker #ifndef BC_ENABLE_LIBRARY
102*5a6e8488SAndroid Build Coastguard Worker #define BC_ENABLE_LIBRARY (1)
103*5a6e8488SAndroid Build Coastguard Worker #endif // BC_ENABLE_LIBRARY
104*5a6e8488SAndroid Build Coastguard Worker 
105*5a6e8488SAndroid Build Coastguard Worker #if BC_ENABLE_LIBRARY
106*5a6e8488SAndroid Build Coastguard Worker 
107*5a6e8488SAndroid Build Coastguard Worker typedef enum BclError
108*5a6e8488SAndroid Build Coastguard Worker {
109*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_NONE,
110*5a6e8488SAndroid Build Coastguard Worker 
111*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_INVALID_NUM,
112*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_INVALID_CONTEXT,
113*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_SIGNAL,
114*5a6e8488SAndroid Build Coastguard Worker 
115*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_MATH_NEGATIVE,
116*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_MATH_NON_INTEGER,
117*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_MATH_OVERFLOW,
118*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_MATH_DIVIDE_BY_ZERO,
119*5a6e8488SAndroid Build Coastguard Worker 
120*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_PARSE_INVALID_STR,
121*5a6e8488SAndroid Build Coastguard Worker 
122*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_FATAL_ALLOC_ERR,
123*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_FATAL_UNKNOWN_ERR,
124*5a6e8488SAndroid Build Coastguard Worker 
125*5a6e8488SAndroid Build Coastguard Worker 	BCL_ERROR_NELEMS,
126*5a6e8488SAndroid Build Coastguard Worker 
127*5a6e8488SAndroid Build Coastguard Worker } BclError;
128*5a6e8488SAndroid Build Coastguard Worker 
129*5a6e8488SAndroid Build Coastguard Worker typedef struct BclNumber
130*5a6e8488SAndroid Build Coastguard Worker {
131*5a6e8488SAndroid Build Coastguard Worker 	size_t i;
132*5a6e8488SAndroid Build Coastguard Worker 
133*5a6e8488SAndroid Build Coastguard Worker } BclNumber;
134*5a6e8488SAndroid Build Coastguard Worker 
135*5a6e8488SAndroid Build Coastguard Worker struct BclCtxt;
136*5a6e8488SAndroid Build Coastguard Worker 
137*5a6e8488SAndroid Build Coastguard Worker typedef struct BclCtxt* BclContext;
138*5a6e8488SAndroid Build Coastguard Worker 
139*5a6e8488SAndroid Build Coastguard Worker BclError
140*5a6e8488SAndroid Build Coastguard Worker bcl_start(void);
141*5a6e8488SAndroid Build Coastguard Worker 
142*5a6e8488SAndroid Build Coastguard Worker void
143*5a6e8488SAndroid Build Coastguard Worker bcl_end(void);
144*5a6e8488SAndroid Build Coastguard Worker 
145*5a6e8488SAndroid Build Coastguard Worker BclError
146*5a6e8488SAndroid Build Coastguard Worker bcl_init(void);
147*5a6e8488SAndroid Build Coastguard Worker 
148*5a6e8488SAndroid Build Coastguard Worker void
149*5a6e8488SAndroid Build Coastguard Worker bcl_free(void);
150*5a6e8488SAndroid Build Coastguard Worker 
151*5a6e8488SAndroid Build Coastguard Worker bool
152*5a6e8488SAndroid Build Coastguard Worker bcl_abortOnFatalError(void);
153*5a6e8488SAndroid Build Coastguard Worker 
154*5a6e8488SAndroid Build Coastguard Worker void
155*5a6e8488SAndroid Build Coastguard Worker bcl_setAbortOnFatalError(bool abrt);
156*5a6e8488SAndroid Build Coastguard Worker 
157*5a6e8488SAndroid Build Coastguard Worker bool
158*5a6e8488SAndroid Build Coastguard Worker bcl_leadingZeroes(void);
159*5a6e8488SAndroid Build Coastguard Worker 
160*5a6e8488SAndroid Build Coastguard Worker void
161*5a6e8488SAndroid Build Coastguard Worker bcl_setLeadingZeroes(bool leadingZeroes);
162*5a6e8488SAndroid Build Coastguard Worker 
163*5a6e8488SAndroid Build Coastguard Worker bool
164*5a6e8488SAndroid Build Coastguard Worker bcl_digitClamp(void);
165*5a6e8488SAndroid Build Coastguard Worker 
166*5a6e8488SAndroid Build Coastguard Worker void
167*5a6e8488SAndroid Build Coastguard Worker bcl_setDigitClamp(bool digitClamp);
168*5a6e8488SAndroid Build Coastguard Worker 
169*5a6e8488SAndroid Build Coastguard Worker void
170*5a6e8488SAndroid Build Coastguard Worker bcl_gc(void);
171*5a6e8488SAndroid Build Coastguard Worker 
172*5a6e8488SAndroid Build Coastguard Worker BclError
173*5a6e8488SAndroid Build Coastguard Worker bcl_pushContext(BclContext ctxt);
174*5a6e8488SAndroid Build Coastguard Worker 
175*5a6e8488SAndroid Build Coastguard Worker void
176*5a6e8488SAndroid Build Coastguard Worker bcl_popContext(void);
177*5a6e8488SAndroid Build Coastguard Worker 
178*5a6e8488SAndroid Build Coastguard Worker BclContext
179*5a6e8488SAndroid Build Coastguard Worker bcl_context(void);
180*5a6e8488SAndroid Build Coastguard Worker 
181*5a6e8488SAndroid Build Coastguard Worker BclContext
182*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_create(void);
183*5a6e8488SAndroid Build Coastguard Worker 
184*5a6e8488SAndroid Build Coastguard Worker void
185*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_free(BclContext ctxt);
186*5a6e8488SAndroid Build Coastguard Worker 
187*5a6e8488SAndroid Build Coastguard Worker void
188*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_freeNums(BclContext ctxt);
189*5a6e8488SAndroid Build Coastguard Worker 
190*5a6e8488SAndroid Build Coastguard Worker size_t
191*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_scale(BclContext ctxt);
192*5a6e8488SAndroid Build Coastguard Worker 
193*5a6e8488SAndroid Build Coastguard Worker void
194*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_setScale(BclContext ctxt, size_t scale);
195*5a6e8488SAndroid Build Coastguard Worker 
196*5a6e8488SAndroid Build Coastguard Worker size_t
197*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_ibase(BclContext ctxt);
198*5a6e8488SAndroid Build Coastguard Worker 
199*5a6e8488SAndroid Build Coastguard Worker void
200*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_setIbase(BclContext ctxt, size_t ibase);
201*5a6e8488SAndroid Build Coastguard Worker 
202*5a6e8488SAndroid Build Coastguard Worker size_t
203*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_obase(BclContext ctxt);
204*5a6e8488SAndroid Build Coastguard Worker 
205*5a6e8488SAndroid Build Coastguard Worker void
206*5a6e8488SAndroid Build Coastguard Worker bcl_ctxt_setObase(BclContext ctxt, size_t obase);
207*5a6e8488SAndroid Build Coastguard Worker 
208*5a6e8488SAndroid Build Coastguard Worker BclError
209*5a6e8488SAndroid Build Coastguard Worker bcl_err(BclNumber n);
210*5a6e8488SAndroid Build Coastguard Worker 
211*5a6e8488SAndroid Build Coastguard Worker BclNumber
212*5a6e8488SAndroid Build Coastguard Worker bcl_num_create(void);
213*5a6e8488SAndroid Build Coastguard Worker 
214*5a6e8488SAndroid Build Coastguard Worker void
215*5a6e8488SAndroid Build Coastguard Worker bcl_num_free(BclNumber n);
216*5a6e8488SAndroid Build Coastguard Worker 
217*5a6e8488SAndroid Build Coastguard Worker bool
218*5a6e8488SAndroid Build Coastguard Worker bcl_num_neg(BclNumber n);
219*5a6e8488SAndroid Build Coastguard Worker 
220*5a6e8488SAndroid Build Coastguard Worker void
221*5a6e8488SAndroid Build Coastguard Worker bcl_num_setNeg(BclNumber n, bool neg);
222*5a6e8488SAndroid Build Coastguard Worker 
223*5a6e8488SAndroid Build Coastguard Worker size_t
224*5a6e8488SAndroid Build Coastguard Worker bcl_num_scale(BclNumber n);
225*5a6e8488SAndroid Build Coastguard Worker 
226*5a6e8488SAndroid Build Coastguard Worker BclError
227*5a6e8488SAndroid Build Coastguard Worker bcl_num_setScale(BclNumber n, size_t scale);
228*5a6e8488SAndroid Build Coastguard Worker 
229*5a6e8488SAndroid Build Coastguard Worker size_t
230*5a6e8488SAndroid Build Coastguard Worker bcl_num_len(BclNumber n);
231*5a6e8488SAndroid Build Coastguard Worker 
232*5a6e8488SAndroid Build Coastguard Worker BclError
233*5a6e8488SAndroid Build Coastguard Worker bcl_copy(BclNumber d, BclNumber s);
234*5a6e8488SAndroid Build Coastguard Worker 
235*5a6e8488SAndroid Build Coastguard Worker BclNumber
236*5a6e8488SAndroid Build Coastguard Worker bcl_dup(BclNumber s);
237*5a6e8488SAndroid Build Coastguard Worker 
238*5a6e8488SAndroid Build Coastguard Worker BclError
239*5a6e8488SAndroid Build Coastguard Worker bcl_bigdig(BclNumber n, BclBigDig* result);
240*5a6e8488SAndroid Build Coastguard Worker 
241*5a6e8488SAndroid Build Coastguard Worker BclError
242*5a6e8488SAndroid Build Coastguard Worker bcl_bigdig_keep(BclNumber n, BclBigDig* result);
243*5a6e8488SAndroid Build Coastguard Worker 
244*5a6e8488SAndroid Build Coastguard Worker BclNumber
245*5a6e8488SAndroid Build Coastguard Worker bcl_bigdig2num(BclBigDig val);
246*5a6e8488SAndroid Build Coastguard Worker 
247*5a6e8488SAndroid Build Coastguard Worker BclNumber
248*5a6e8488SAndroid Build Coastguard Worker bcl_add(BclNumber a, BclNumber b);
249*5a6e8488SAndroid Build Coastguard Worker 
250*5a6e8488SAndroid Build Coastguard Worker BclNumber
251*5a6e8488SAndroid Build Coastguard Worker bcl_add_keep(BclNumber a, BclNumber b);
252*5a6e8488SAndroid Build Coastguard Worker 
253*5a6e8488SAndroid Build Coastguard Worker BclNumber
254*5a6e8488SAndroid Build Coastguard Worker bcl_sub(BclNumber a, BclNumber b);
255*5a6e8488SAndroid Build Coastguard Worker 
256*5a6e8488SAndroid Build Coastguard Worker BclNumber
257*5a6e8488SAndroid Build Coastguard Worker bcl_sub_keep(BclNumber a, BclNumber b);
258*5a6e8488SAndroid Build Coastguard Worker 
259*5a6e8488SAndroid Build Coastguard Worker BclNumber
260*5a6e8488SAndroid Build Coastguard Worker bcl_mul(BclNumber a, BclNumber b);
261*5a6e8488SAndroid Build Coastguard Worker 
262*5a6e8488SAndroid Build Coastguard Worker BclNumber
263*5a6e8488SAndroid Build Coastguard Worker bcl_mul_keep(BclNumber a, BclNumber b);
264*5a6e8488SAndroid Build Coastguard Worker 
265*5a6e8488SAndroid Build Coastguard Worker BclNumber
266*5a6e8488SAndroid Build Coastguard Worker bcl_div(BclNumber a, BclNumber b);
267*5a6e8488SAndroid Build Coastguard Worker 
268*5a6e8488SAndroid Build Coastguard Worker BclNumber
269*5a6e8488SAndroid Build Coastguard Worker bcl_div_keep(BclNumber a, BclNumber b);
270*5a6e8488SAndroid Build Coastguard Worker 
271*5a6e8488SAndroid Build Coastguard Worker BclNumber
272*5a6e8488SAndroid Build Coastguard Worker bcl_mod(BclNumber a, BclNumber b);
273*5a6e8488SAndroid Build Coastguard Worker 
274*5a6e8488SAndroid Build Coastguard Worker BclNumber
275*5a6e8488SAndroid Build Coastguard Worker bcl_mod_keep(BclNumber a, BclNumber b);
276*5a6e8488SAndroid Build Coastguard Worker 
277*5a6e8488SAndroid Build Coastguard Worker BclNumber
278*5a6e8488SAndroid Build Coastguard Worker bcl_pow(BclNumber a, BclNumber b);
279*5a6e8488SAndroid Build Coastguard Worker 
280*5a6e8488SAndroid Build Coastguard Worker BclNumber
281*5a6e8488SAndroid Build Coastguard Worker bcl_pow_keep(BclNumber a, BclNumber b);
282*5a6e8488SAndroid Build Coastguard Worker 
283*5a6e8488SAndroid Build Coastguard Worker BclNumber
284*5a6e8488SAndroid Build Coastguard Worker bcl_lshift(BclNumber a, BclNumber b);
285*5a6e8488SAndroid Build Coastguard Worker 
286*5a6e8488SAndroid Build Coastguard Worker BclNumber
287*5a6e8488SAndroid Build Coastguard Worker bcl_lshift_keep(BclNumber a, BclNumber b);
288*5a6e8488SAndroid Build Coastguard Worker 
289*5a6e8488SAndroid Build Coastguard Worker BclNumber
290*5a6e8488SAndroid Build Coastguard Worker bcl_rshift(BclNumber a, BclNumber b);
291*5a6e8488SAndroid Build Coastguard Worker 
292*5a6e8488SAndroid Build Coastguard Worker BclNumber
293*5a6e8488SAndroid Build Coastguard Worker bcl_rshift_keep(BclNumber a, BclNumber b);
294*5a6e8488SAndroid Build Coastguard Worker 
295*5a6e8488SAndroid Build Coastguard Worker BclNumber
296*5a6e8488SAndroid Build Coastguard Worker bcl_sqrt(BclNumber a);
297*5a6e8488SAndroid Build Coastguard Worker 
298*5a6e8488SAndroid Build Coastguard Worker BclNumber
299*5a6e8488SAndroid Build Coastguard Worker bcl_sqrt_keep(BclNumber a);
300*5a6e8488SAndroid Build Coastguard Worker 
301*5a6e8488SAndroid Build Coastguard Worker BclError
302*5a6e8488SAndroid Build Coastguard Worker bcl_divmod(BclNumber a, BclNumber b, BclNumber* c, BclNumber* d);
303*5a6e8488SAndroid Build Coastguard Worker 
304*5a6e8488SAndroid Build Coastguard Worker BclError
305*5a6e8488SAndroid Build Coastguard Worker bcl_divmod_keep(BclNumber a, BclNumber b, BclNumber* c, BclNumber* d);
306*5a6e8488SAndroid Build Coastguard Worker 
307*5a6e8488SAndroid Build Coastguard Worker BclNumber
308*5a6e8488SAndroid Build Coastguard Worker bcl_modexp(BclNumber a, BclNumber b, BclNumber c);
309*5a6e8488SAndroid Build Coastguard Worker 
310*5a6e8488SAndroid Build Coastguard Worker BclNumber
311*5a6e8488SAndroid Build Coastguard Worker bcl_modexp_keep(BclNumber a, BclNumber b, BclNumber c);
312*5a6e8488SAndroid Build Coastguard Worker 
313*5a6e8488SAndroid Build Coastguard Worker ssize_t
314*5a6e8488SAndroid Build Coastguard Worker bcl_cmp(BclNumber a, BclNumber b);
315*5a6e8488SAndroid Build Coastguard Worker 
316*5a6e8488SAndroid Build Coastguard Worker void
317*5a6e8488SAndroid Build Coastguard Worker bcl_zero(BclNumber n);
318*5a6e8488SAndroid Build Coastguard Worker 
319*5a6e8488SAndroid Build Coastguard Worker void
320*5a6e8488SAndroid Build Coastguard Worker bcl_one(BclNumber n);
321*5a6e8488SAndroid Build Coastguard Worker 
322*5a6e8488SAndroid Build Coastguard Worker BclNumber
323*5a6e8488SAndroid Build Coastguard Worker bcl_parse(const char* restrict val);
324*5a6e8488SAndroid Build Coastguard Worker 
325*5a6e8488SAndroid Build Coastguard Worker char*
326*5a6e8488SAndroid Build Coastguard Worker bcl_string(BclNumber n);
327*5a6e8488SAndroid Build Coastguard Worker 
328*5a6e8488SAndroid Build Coastguard Worker char*
329*5a6e8488SAndroid Build Coastguard Worker bcl_string_keep(BclNumber n);
330*5a6e8488SAndroid Build Coastguard Worker 
331*5a6e8488SAndroid Build Coastguard Worker BclNumber
332*5a6e8488SAndroid Build Coastguard Worker bcl_irand(BclNumber a);
333*5a6e8488SAndroid Build Coastguard Worker 
334*5a6e8488SAndroid Build Coastguard Worker BclNumber
335*5a6e8488SAndroid Build Coastguard Worker bcl_irand_keep(BclNumber a);
336*5a6e8488SAndroid Build Coastguard Worker 
337*5a6e8488SAndroid Build Coastguard Worker BclNumber
338*5a6e8488SAndroid Build Coastguard Worker bcl_frand(size_t places);
339*5a6e8488SAndroid Build Coastguard Worker 
340*5a6e8488SAndroid Build Coastguard Worker BclNumber
341*5a6e8488SAndroid Build Coastguard Worker bcl_ifrand(BclNumber a, size_t places);
342*5a6e8488SAndroid Build Coastguard Worker 
343*5a6e8488SAndroid Build Coastguard Worker BclNumber
344*5a6e8488SAndroid Build Coastguard Worker bcl_ifrand_keep(BclNumber a, size_t places);
345*5a6e8488SAndroid Build Coastguard Worker 
346*5a6e8488SAndroid Build Coastguard Worker BclError
347*5a6e8488SAndroid Build Coastguard Worker bcl_rand_seedWithNum(BclNumber n);
348*5a6e8488SAndroid Build Coastguard Worker 
349*5a6e8488SAndroid Build Coastguard Worker BclError
350*5a6e8488SAndroid Build Coastguard Worker bcl_rand_seedWithNum_keep(BclNumber n);
351*5a6e8488SAndroid Build Coastguard Worker 
352*5a6e8488SAndroid Build Coastguard Worker BclError
353*5a6e8488SAndroid Build Coastguard Worker bcl_rand_seed(unsigned char seed[BCL_SEED_SIZE]);
354*5a6e8488SAndroid Build Coastguard Worker 
355*5a6e8488SAndroid Build Coastguard Worker void
356*5a6e8488SAndroid Build Coastguard Worker bcl_rand_reseed(void);
357*5a6e8488SAndroid Build Coastguard Worker 
358*5a6e8488SAndroid Build Coastguard Worker BclNumber
359*5a6e8488SAndroid Build Coastguard Worker bcl_rand_seed2num(void);
360*5a6e8488SAndroid Build Coastguard Worker 
361*5a6e8488SAndroid Build Coastguard Worker BclRandInt
362*5a6e8488SAndroid Build Coastguard Worker bcl_rand_int(void);
363*5a6e8488SAndroid Build Coastguard Worker 
364*5a6e8488SAndroid Build Coastguard Worker BclRandInt
365*5a6e8488SAndroid Build Coastguard Worker bcl_rand_bounded(BclRandInt bound);
366*5a6e8488SAndroid Build Coastguard Worker 
367*5a6e8488SAndroid Build Coastguard Worker #endif // BC_ENABLE_LIBRARY
368*5a6e8488SAndroid Build Coastguard Worker 
369*5a6e8488SAndroid Build Coastguard Worker #endif // BC_BCL_H
370