@@ -1665,14 +1665,15 @@ ZEND_FUNCTION(gmp_cmp)
1665
1665
Gets the sign of the number */
1666
1666
ZEND_FUNCTION (gmp_sign )
1667
1667
{
1668
+ /* Can't use gmp_unary_opl here, because mpz_sgn is a macro */
1668
1669
zval * a_arg ;
1669
1670
mpz_ptr gmpnum_a ;
1670
1671
gmp_temp_t temp_a ;
1671
1672
1672
1673
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z" , & a_arg ) == FAILURE ){
1673
1674
return ;
1674
1675
}
1675
-
1676
+
1676
1677
FETCH_GMP_ZVAL (gmpnum_a , a_arg , temp_a );
1677
1678
1678
1679
RETVAL_LONG (mpz_sgn (gmpnum_a ));
@@ -1747,32 +1748,6 @@ ZEND_FUNCTION(gmp_nextprime)
1747
1748
ZEND_FUNCTION (gmp_xor )
1748
1749
{
1749
1750
gmp_binary_op (mpz_xor );
1750
- /* use formula: a^b = (a|b)&~(a&b) */
1751
- /*zval **a_arg, **b_arg;
1752
- mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result, *gmpnum_t;
1753
- gmp_temp_t temp_a, temp_b;
1754
-
1755
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &a_arg, &b_arg) == FAILURE){
1756
- return;
1757
- }
1758
-
1759
- FETCH_GMP_ZVAL(gmpnum_a, a_arg, temp_a);
1760
- FETCH_GMP_ZVAL_DEP(gmpnum_b, b_arg, temp_b, temp_a);
1761
-
1762
- INIT_GMP_NUM(gmpnum_result);
1763
- INIT_GMP_NUM(gmpnum_t);
1764
-
1765
- mpz_and(*gmpnum_t, *gmpnum_a, *gmpnum_b);
1766
- mpz_com(*gmpnum_t, *gmpnum_t);
1767
-
1768
- mpz_ior(*gmpnum_result, *gmpnum_a, *gmpnum_b);
1769
- mpz_and(*gmpnum_result, *gmpnum_result, *gmpnum_t);
1770
-
1771
- FREE_GMP_NUM(gmpnum_t);
1772
-
1773
- FREE_GMP_TEMP(temp_a);
1774
- FREE_GMP_TEMP(temp_b);
1775
- RETVAL_GMP(gmpnum_result);*/
1776
1751
}
1777
1752
/* }}} */
1778
1753
@@ -1852,39 +1827,15 @@ ZEND_FUNCTION(gmp_testbit)
1852
1827
Calculates the population count of a */
1853
1828
ZEND_FUNCTION (gmp_popcount )
1854
1829
{
1855
- zval * a_arg ;
1856
- mpz_ptr gmpnum_a ;
1857
- gmp_temp_t temp_a ;
1858
-
1859
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "z" , & a_arg ) == FAILURE ){
1860
- return ;
1861
- }
1862
-
1863
- FETCH_GMP_ZVAL (gmpnum_a , a_arg , temp_a );
1864
-
1865
- RETVAL_LONG (mpz_popcount (gmpnum_a ));
1866
- FREE_GMP_TEMP (temp_a );
1830
+ gmp_unary_opl ((gmp_unary_opl_t ) mpz_popcount );
1867
1831
}
1868
1832
/* }}} */
1869
1833
1870
1834
/* {{{ proto int gmp_hamdist(mixed a, mixed b)
1871
1835
Calculates hamming distance between a and b */
1872
1836
ZEND_FUNCTION (gmp_hamdist )
1873
1837
{
1874
- zval * a_arg , * b_arg ;
1875
- mpz_ptr gmpnum_a , gmpnum_b ;
1876
- gmp_temp_t temp_a , temp_b ;
1877
-
1878
- if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "zz" , & a_arg , & b_arg ) == FAILURE ){
1879
- return ;
1880
- }
1881
-
1882
- FETCH_GMP_ZVAL (gmpnum_a , a_arg , temp_a );
1883
- FETCH_GMP_ZVAL_DEP (gmpnum_b , b_arg , temp_b , temp_a );
1884
-
1885
- RETVAL_LONG (mpz_hamdist (gmpnum_a , gmpnum_b ));
1886
- FREE_GMP_TEMP (temp_a );
1887
- FREE_GMP_TEMP (temp_b );
1838
+ gmp_binary_opl ((gmp_binary_opl_t ) mpz_hamdist );
1888
1839
}
1889
1840
/* }}} */
1890
1841
0 commit comments