summaryrefslogtreecommitdiff
path: root/ext/gmp
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2007-11-01 17:51:34 +0000
committerStanislav Malyshev <stas@php.net>2007-11-01 17:51:34 +0000
commitf6a01c836233ab83a5a2d12c0d423f701deb200d (patch)
tree5ca17a4ae5b3ef20df6a1421aa3f8fee8ac386d1 /ext/gmp
parent34b45a30e5bd96c7bbdcc5360911f50ce3b34cdb (diff)
downloadphp-git-f6a01c836233ab83a5a2d12c0d423f701deb200d.tar.gz
merge gmp_testbit()
Diffstat (limited to 'ext/gmp')
-rw-r--r--ext/gmp/gmp.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c
index 44995e5e5a..222bf0fdd3 100644
--- a/ext/gmp/gmp.c
+++ b/ext/gmp/gmp.c
@@ -238,6 +238,12 @@ ZEND_BEGIN_ARG_INFO(arginfo_gmp_clrbit, 0)
ZEND_END_ARG_INFO()
static
+ZEND_BEGIN_ARG_INFO(arginfo_gmp_testbit, 0)
+ ZEND_ARG_INFO(0, a)
+ ZEND_ARG_INFO(0, index)
+ZEND_END_ARG_INFO()
+
+static
ZEND_BEGIN_ARG_INFO(arginfo_gmp_popcount, 0)
ZEND_ARG_INFO(0, a)
ZEND_END_ARG_INFO()
@@ -308,8 +314,9 @@ const zend_function_entry gmp_functions[] = {
ZEND_FE(gmp_xor, arginfo_gmp_xor)
ZEND_FE(gmp_setbit, arginfo_gmp_setbit)
ZEND_FE(gmp_clrbit, arginfo_gmp_clrbit)
- ZEND_FE(gmp_scan0, arginfo_gmp_scan0)
- ZEND_FE(gmp_scan1, arginfo_gmp_scan1)
+ ZEND_FE(gmp_scan0, arginfo_gmp_scan0)
+ ZEND_FE(gmp_scan1, arginfo_gmp_scan1)
+ ZEND_FE(gmp_testbit,arginfo_gmp_testbit)
ZEND_FE(gmp_popcount, arginfo_gmp_popcount)
ZEND_FE(gmp_hamdist, arginfo_gmp_hamdist)
ZEND_FE(gmp_nextprime, arginfo_gmp_nextprime)
@@ -1511,6 +1518,32 @@ ZEND_FUNCTION(gmp_clrbit)
}
/* }}} */
+/* {{{ proto bool gmp_testbit(resource a, int index)
+ Tests if bit is set in a */
+ZEND_FUNCTION(gmp_testbit)
+{
+ zval **a_arg;
+ int index;
+ mpz_t *gmpnum_a;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl", &a_arg, &index) == FAILURE){
+ return;
+ }
+
+ ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, le_gmp);
+
+ if (index < 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Index must be greater than or equal to zero");
+ RETURN_FALSE;
+ }
+
+ if (mpz_tstbit(*gmpnum_a, index)) {
+ RETURN_TRUE;
+ }
+ RETURN_FALSE;
+}
+/* }}} */
+
/* {{{ proto int gmp_popcount(resource a)
Calculates the population count of a */
ZEND_FUNCTION(gmp_popcount)