root/ext/bcmath/libbcmath/src/bcmath.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* bcmath.h: bcmath library header.     */
   2 /*
   3     Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
   4     Copyright (C) 2000 Philip A. Nelson
   5 
   6     This library is free software; you can redistribute it and/or
   7     modify it under the terms of the GNU Lesser General Public
   8     License as published by the Free Software Foundation; either
   9     version 2 of the License, or (at your option) any later version.
  10 
  11     This library is distributed in the hope that it will be useful,
  12     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14     Lesser General Public License for more details.  (COPYING.LIB)
  15 
  16     You should have received a copy of the GNU Lesser General Public
  17     License along with this library; if not, write to:
  18 
  19       The Free Software Foundation, Inc.
  20       59 Temple Place, Suite 330
  21       Boston, MA 02111-1307 USA.
  22 
  23     You may contact the author by:
  24        e-mail:  philnelson@acm.org
  25       us-mail:  Philip A. Nelson
  26                 Computer Science Department, 9062
  27                 Western Washington University
  28                 Bellingham, WA 98226-9062
  29 
  30 *************************************************************************/
  31 
  32 #ifndef _BCMATH_H_
  33 #define _BCMATH_H_
  34 
  35 typedef enum {PLUS, MINUS} sign;
  36 
  37 typedef struct bc_struct *bc_num;
  38 
  39 typedef struct bc_struct
  40     {
  41       sign  n_sign;
  42       int   n_len;      /* The number of digits before the decimal point. */
  43       int   n_scale;    /* The number of digits after the decimal point. */
  44       int   n_refs;     /* The number of pointers to this number. */
  45       bc_num n_next;    /* Linked list for available list. */
  46       char *n_ptr;      /* The pointer to the actual storage.
  47                            If NULL, n_value points to the inside of
  48                            another number (bc_multiply...) and should
  49                            not be "freed." */
  50       char *n_value;    /* The number. Not zero char terminated.
  51                            May not point to the same place as n_ptr as
  52                            in the case of leading zeros generated. */
  53     } bc_struct;
  54 
  55 #ifdef HAVE_CONFIG_H
  56 #include "config.h"
  57 #endif
  58 
  59 #include "php.h"
  60 #include "../../php_bcmath.h"
  61 
  62 /* The base used in storing the numbers in n_value above.
  63    Currently this MUST be 10. */
  64 
  65 #define BASE 10
  66 
  67 /*  Some useful macros and constants. */
  68 
  69 #define CH_VAL(c)     (c - '0')
  70 #define BCD_CHAR(d)   (d + '0')
  71 
  72 #ifdef MIN
  73 #undef MIN
  74 #undef MAX
  75 #endif
  76 #define MAX(a, b)      ((a)>(b)?(a):(b))
  77 #define MIN(a, b)      ((a)>(b)?(b):(a))
  78 #define ODD(a)        ((a)&1)
  79 
  80 #ifndef TRUE
  81 #define TRUE 1
  82 #define FALSE 0
  83 #endif
  84 
  85 #ifndef LONG_MAX
  86 #define LONG_MAX 0x7ffffff
  87 #endif
  88 
  89 
  90 /* Function Prototypes */
  91 
  92 /* Define the _PROTOTYPE macro if it is needed. */
  93 
  94 #ifndef _PROTOTYPE
  95 #ifdef __STDC__
  96 #define _PROTOTYPE(func, args) func args
  97 #else
  98 #define _PROTOTYPE(func, args) func()
  99 #endif
 100 #endif
 101 
 102 _PROTOTYPE(void bc_init_numbers, (void));
 103 
 104 _PROTOTYPE(bc_num _bc_new_num_ex, (int length, int scale, int persistent));
 105 
 106 _PROTOTYPE(void _bc_free_num_ex, (bc_num *num, int persistent));
 107 
 108 _PROTOTYPE(bc_num bc_copy_num, (bc_num num));
 109 
 110 _PROTOTYPE(void bc_init_num, (bc_num *num));
 111 
 112 _PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale));
 113 
 114 _PROTOTYPE(zend_string *bc_num2str, (bc_num num));
 115 
 116 _PROTOTYPE(void bc_int2num, (bc_num *num, int val));
 117 
 118 _PROTOTYPE(long bc_num2long, (bc_num num));
 119 
 120 _PROTOTYPE(int bc_compare, (bc_num n1, bc_num n2));
 121 
 122 _PROTOTYPE(char bc_is_zero, (bc_num num));
 123 
 124 _PROTOTYPE(char bc_is_near_zero, (bc_num num, int scale));
 125 
 126 _PROTOTYPE(char bc_is_neg, (bc_num num));
 127 
 128 _PROTOTYPE(void bc_add, (bc_num n1, bc_num n2, bc_num *result, int scale_min));
 129 
 130 _PROTOTYPE(void bc_sub, (bc_num n1, bc_num n2, bc_num *result, int scale_min));
 131 
 132 _PROTOTYPE(void bc_multiply, (bc_num n1, bc_num n2, bc_num *prod, int scale));
 133 
 134 _PROTOTYPE(int bc_divide, (bc_num n1, bc_num n2, bc_num *quot, int scale));
 135 
 136 _PROTOTYPE(int bc_modulo, (bc_num num1, bc_num num2, bc_num *result,
 137                            int scale));
 138 
 139 _PROTOTYPE(int bc_divmod, (bc_num num1, bc_num num2, bc_num *quot,
 140                            bc_num *rem, int scale));
 141 
 142 _PROTOTYPE(int bc_raisemod, (bc_num base, bc_num expo, bc_num mod,
 143                              bc_num *result, int scale));
 144 
 145 _PROTOTYPE(void bc_raise, (bc_num num1, bc_num num2, bc_num *result,
 146                            int scale));
 147 
 148 _PROTOTYPE(int bc_sqrt, (bc_num *num, int scale));
 149 
 150 _PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int),
 151                              int leading_zero));
 152 
 153 /* Prototypes needed for external utility routines. */
 154 
 155 _PROTOTYPE(void bc_rt_warn, (char *mesg ,...));
 156 _PROTOTYPE(void bc_rt_error, (char *mesg ,...));
 157 _PROTOTYPE(void bc_out_of_memory, (void));
 158 
 159 #define bc_new_num(length, scale)       _bc_new_num_ex((length), (scale), 0)
 160 #define bc_free_num(num)                        _bc_free_num_ex((num), 0)
 161 
 162 #endif

/* [<][>][^][v][top][bottom][index][help] */