pollita         Tue Dec 10 14:04:29 2002 EDT

  Modified files:              
    /php4/ext/bcmath    bcmath.c php_bcmath.h 
  Log:
  Added support for libbcmath's bc_raisemod function as bc_powmod()
  
  
Index: php4/ext/bcmath/bcmath.c
diff -u php4/ext/bcmath/bcmath.c:1.43 php4/ext/bcmath/bcmath.c:1.44
--- php4/ext/bcmath/bcmath.c:1.43       Thu Dec  5 16:51:45 2002
+++ php4/ext/bcmath/bcmath.c    Tue Dec 10 14:04:27 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: bcmath.c,v 1.43 2002/12/05 21:51:45 helly Exp $ */
+/* $Id: bcmath.c,v 1.44 2002/12/10 19:04:27 pollita Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -42,6 +42,7 @@
        PHP_FE(bcsqrt,                                                                 
 NULL)
        PHP_FE(bcscale,                                                                
 NULL)
        PHP_FE(bccomp,                                                                 
 NULL)
+       PHP_FE(bc_powmod,                                                              
+ NULL)
        {NULL, NULL, NULL}
 };
 
@@ -324,6 +325,38 @@
        }
        bc_free_num(&first);
        bc_free_num(&second);
+       bc_free_num(&result);
+       return;
+}
+/* }}} */
+
+/* {{{ proto string bc_powmod(string x, string y, string mod [, int scale])
+   Returns the value of an arbitrary precision number raised to the power of another 
+reduced by a modulous */
+PHP_FUNCTION(bc_powmod)
+{
+       char *left, *right, *modulous;
+       int left_len, right_len, modulous_len;
+       bc_num first, second, mod, result;
+       int scale=bc_precision;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_C, "sss|l", &left, &left_len, 
+&right, &right_len, &modulous, &modulous_len, &scale) == FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+
+       bc_init_num(&first TSRMLS_CC);
+       bc_init_num(&second TSRMLS_CC);
+       bc_init_num(&mod TSRMLS_CC);
+       bc_init_num(&result TSRMLS_CC);
+       bc_str2num(&first, left, scale TSRMLS_CC);
+       bc_str2num(&second, right, scale TSRMLS_CC);
+       bc_str2num(&mod, modulous, scale TSRMLS_CC);
+       bc_raisemod(first, second, mod, &result, scale TSRMLS_CC);
+       Z_STRVAL_P(return_value) = bc_num2str(result);
+       Z_STRLEN_P(return_value) = strlen(Z_STRVAL_P(return_value));
+       Z_TYPE_P(return_value) = IS_STRING;
+       bc_free_num(&first);
+       bc_free_num(&second);
+       bc_free_num(&mod);
        bc_free_num(&result);
        return;
 }
Index: php4/ext/bcmath/php_bcmath.h
diff -u php4/ext/bcmath/php_bcmath.h:1.12 php4/ext/bcmath/php_bcmath.h:1.13
--- php4/ext/bcmath/php_bcmath.h:1.12   Fri Nov 22 04:25:28 2002
+++ php4/ext/bcmath/php_bcmath.h        Tue Dec 10 14:04:27 2002
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_bcmath.h,v 1.12 2002/11/22 09:25:28 sander Exp $ */
+/* $Id: php_bcmath.h,v 1.13 2002/12/10 19:04:27 pollita Exp $ */
 
 #ifndef PHP_BCMATH_H
 #define PHP_BCMATH_H
@@ -60,6 +60,7 @@
 PHP_FUNCTION(bcsqrt);
 PHP_FUNCTION(bccomp);
 PHP_FUNCTION(bcscale);
+PHP_FUNCTION(bc_powmod);
 
 #else
 



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to