Annotation of embedaddon/php/ext/bcmath/libbcmath/src/bcmath.h, revision 1.1
1.1 ! misho 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, (TSRMLS_D));
! 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 TSRMLS_DC));
! 111:
! 112: _PROTOTYPE(void bc_str2num, (bc_num *num, char *str, int scale TSRMLS_DC));
! 113:
! 114: _PROTOTYPE(char *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 TSRMLS_DC));
! 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 TSRMLS_DC));
! 133:
! 134: _PROTOTYPE(int bc_divide, (bc_num n1, bc_num n2, bc_num *quot, int scale TSRMLS_DC));
! 135:
! 136: _PROTOTYPE(int bc_modulo, (bc_num num1, bc_num num2, bc_num *result,
! 137: int scale TSRMLS_DC));
! 138:
! 139: _PROTOTYPE(int bc_divmod, (bc_num num1, bc_num num2, bc_num *quot,
! 140: bc_num *rem, int scale TSRMLS_DC));
! 141:
! 142: _PROTOTYPE(int bc_raisemod, (bc_num base, bc_num expo, bc_num mod,
! 143: bc_num *result, int scale TSRMLS_DC));
! 144:
! 145: _PROTOTYPE(void bc_raise, (bc_num num1, bc_num num2, bc_num *result,
! 146: int scale TSRMLS_DC));
! 147:
! 148: _PROTOTYPE(int bc_sqrt, (bc_num *num, int scale TSRMLS_DC));
! 149:
! 150: _PROTOTYPE(void bc_out_num, (bc_num num, int o_base, void (* out_char)(int),
! 151: int leading_zero TSRMLS_DC));
! 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
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>