ocaml/otherlibs/num/bignum/h/BigZ.h

98 lines
2.1 KiB
C
Raw Normal View History

/* Copyright Digital Equipment Corporation & INRIA 1988, 1989 */
/* Last modified_on Fri Oct 5 16:45:46 GMT+1:00 1990 by herve */
/* modified_on Thu Mar 22 21:29:09 GMT+1:00 1990 by shand */
/* BigZ.h: Types and structures for clients of BigZ */
/* BigZ sign */
#define BZ_PLUS 1
#define BZ_ZERO 0
#define BZ_MINUS -1
#define BzSign BigNumCmp
/* BigZ compare result */
#define BZ_LT BN_LT
#define BZ_EQ BN_EQ
#define BZ_GT BN_GT
#define BzCmp BigNumCmp
/* BigZ number */
#ifndef BIGNUM
#include "BigNum.h"
#endif
struct BigZHeader
{
BigNumLength Size;
BzSign Sign;
};
struct BigZStruct
{
struct BigZHeader Header;
BigNumDigit Digits [16];
};
typedef struct BigZStruct * BigZ;
/* */
/*********** macros of bz.c **********/
#define BzGetSize(z) ((BigNumLength)(z)->Header.Size)
#define BzGetSign(z) ((z)->Header.Sign)
#define BzSetSize(z,s) (z)->Header.Size = s
#define BzSetSign(z,s) (z)->Header.Sign = s
#define BzGetOppositeSign(z) (-(z)->Header.Sign)
/*********** functions of bz.c **********/
extern void BzInit __((void));
extern void BzClose __((void));
extern BigZ BzCreate __((BigNumLength));
extern void BzFree __((BigZ));
extern void BzFreeString __((char *));
extern BigNumLength BzNumDigits __((BigZ));
extern BigZ BzCopy __((BigZ));
extern BigZ BzNegate __((BigZ));
extern BigZ BzAbs __((BigZ));
extern BigNumCmp BzCompare __((BigZ, BigZ));
extern BigZ BzAdd __((BigZ, BigZ));
extern BigZ BzSubtract __((BigZ, BigZ));
extern BigZ BzMultiply __((BigZ, BigZ));
extern BigZ BzDivide __((BigZ, BigZ, BigZ *));
extern BigZ BzDiv __((BigZ, BigZ));
extern BigZ BzMod __((BigZ, BigZ));
extern BigZ BzFromString __((char *, BigNumDigit));
extern char * BzToString __((BigZ, BigNumDigit));
extern BigZ BzFromInteger __((int));
extern int BzToInteger __((BigZ));
extern BigZ BzFromBigNum __((BigNum, BigNumLength));
extern BigNum BzToBigNum __((BigZ, BigNumLength *));
/*********** functions of bzf.c **********/
extern BigZ BzFactorial __((BigZ));