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