]> granicus.if.org Git - php/commitdiff
merge gmp_testbit()
authorStanislav Malyshev <stas@php.net>
Thu, 1 Nov 2007 17:51:34 +0000 (17:51 +0000)
committerStanislav Malyshev <stas@php.net>
Thu, 1 Nov 2007 17:51:34 +0000 (17:51 +0000)
ext/gmp/gmp.c

index 44995e5e5a43de0564798020f8f11d2d70272657..222bf0fdd36dee61a133d797476394665bcf51a3 100644 (file)
@@ -237,6 +237,12 @@ ZEND_BEGIN_ARG_INFO(arginfo_gmp_clrbit, 0)
        ZEND_ARG_INFO(0, index)
 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)
@@ -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)