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>