www.pudn.com > calc.rar > i3.c
/* i3.c */ #include#include #include #include "integer.h" #include "fun.h" #ifdef DEBUG long int nettbytes = 0; #endif /* For comments on the memory banking algorithm, please see the appropriate routines later in this file. Peter Adams, 1/4/1993 */ void *realloc1(void *ptr, size_t nbytes, long mbytes) /* * Reallocates nbytes of memory using realloc(). * mbytes = nett increase in memory. Exits if call to realloc fails. */ { register char *s; if ((s = realloc(ptr, nbytes)) == NULL) { fprintf(stderr, "out of memory!\n\ realloc request for %u bytes failed.\n", (USI)nbytes); exit (1); } #ifdef DEBUG nettbytes += mbytes; #endif return(s); /* returns only if s points to a valid block of memory.*/ } void *malloc1(size_t nbytes) /* * mmalloc -- allocates nbytes of memory using malloc(). * Exits if call to malloc fails. */ { register char *s; if ((s = malloc(nbytes)) == NULL) { fprintf(stderr, "out of memory!\n\ malloc request for %lu bytes failed.\n", (USL) nbytes); exit (1); } #ifdef DEBUG nettbytes += nbytes; #endif return(s); /*returns only if s points to a valid block of memory.*/ } void *calloc1(size_t m, size_t n) /* allocates m * n of contiguous memory using calloc(). * Exits if call to calloc fails. */ { register char *s; if ((s = calloc(m, n)) == NULL) { fprintf(stderr, "out of memory!\n\ calloc request for %ld bytes failed.\n",(long)(m * n)); exit (1); } #ifdef DEBUG nettbytes += m * n; #endif return(s); /*returns only if s points to a valid block of memory.*/ } void sfree(void *ptr, size_t nbytes, char *errorfile, int errorline) /* * frees memory using free, keeping track of nettbytes. */ { free(ptr); #ifdef DEBUG nettbytes -= nbytes; #endif return; } unsigned int EQONEI(MPI *Mptr) /* * returns 1 if *Mptr == 1, 0 otherwise. */ { if (Mptr->S == 1 && Mptr->D == 0 && Mptr->V[0] == 1) return (1); else return (0); } unsigned int EQZEROI(MPI *Mptr) /* * returns 1 if *Mptr == 0, 0 otherwise. */ { if (Mptr->S == 0) return (1); else return (0); } unsigned int EQMINUSONEI(MPI *Mptr) /* * returns 1 if *Mptr == -1, 0 otherwise. */ { if (Mptr->S == -1 && Mptr->D == 0 && Mptr->V[0] == 1) return (1); else return (0); } unsigned int EQONER(MPR *Mptr) /* * returns 1 if *Mptr == 1, 0 otherwise. */ { if (EQUALI(Mptr->N, Mptr->D)) return (1); else return (0); } unsigned int EQMINUSONER(MPR *Mptr) /* * returns 1 if *Mptr == -1, 0 otherwise. */ { if (EQMINUSONEI(Mptr->N) * EQONEI(Mptr->D)) return (1); else return (0); } unsigned int EQZEROR(MPR *Mptr) /* * returns 1 if *Mptr == 0, 0 otherwise. */ { if (Mptr->N->S == 0) return (1); else return (0); } unsigned int EQMINUSONECR(MPCR *Mptr) /* * returns 1 if *Mptr == -1, 0 otherwise. */ { if (EQMINUSONER(Mptr->R) && Mptr->I->N->S == 0) return (1); else return (0); } unsigned int EQONECR(MPCR *Mptr) /* * returns 1 if *Mptr == 1, 0 otherwise. */ { if (EQONER(Mptr->R) && Mptr->I->N->S == 0) return (1); else return (0); } unsigned int EQZEROCR(MPCR *Mptr) /* * returns 1 if *Mptr == 0, 0 otherwise. */ { if (Mptr->R->N->S == 0 && Mptr->I->N->S == 0) return (1); else return (0); } unsigned int EQMINUSONECI(MPCI *Mptr) /* * returns 1 if *Mptr == -1, 0 otherwise. */ { if (EQMINUSONEI(Mptr->R) && Mptr->I->S == 0) return (1); else return (0); } unsigned int EQONECI(MPCI *Mptr) /* * returns 1 if *Mptr == 1, 0 otherwise. */ { if (EQONEI(Mptr->R) && Mptr->I->S == 0) return (1); else return (0); } unsigned int EQZEROCI(MPCI *Mptr) /* * returns 1 if *Mptr == 0, 0 otherwise. */ { if (Mptr->R->S == 0 && Mptr->I->S == 0) return (1); else return (0); }