@@ -155,6 +155,7 @@ static zend_function_entry redis_functions[] = {
155155 PHP_ME (Redis , slaveof , NULL , ZEND_ACC_PUBLIC )
156156 PHP_ME (Redis , object , NULL , ZEND_ACC_PUBLIC )
157157 PHP_ME (Redis , bitop , NULL , ZEND_ACC_PUBLIC )
158+ PHP_ME (Redis , bitcount , NULL , ZEND_ACC_PUBLIC )
158159
159160 /* 1.1 */
160161 PHP_ME (Redis , mset , NULL , ZEND_ACC_PUBLIC )
@@ -676,6 +677,40 @@ PHP_METHOD(Redis, bitop)
676677}
677678/* }}} */
678679
680+ /* {{{ proto boolean Redis::bitcount(string key, [int start], [int end])
681+ */
682+ PHP_METHOD (Redis , bitcount )
683+ {
684+ zval * object ;
685+ RedisSock * redis_sock ;
686+ char * key = NULL , * cmd ;
687+ int key_len , cmd_len , key_free ;
688+ long start = 0 , end = -1 ;
689+
690+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os|ll" ,
691+ & object , redis_ce ,
692+ & key , & key_len , & start , & end ) == FAILURE ) {
693+ RETURN_FALSE ;
694+ }
695+
696+ if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
697+ RETURN_FALSE ;
698+ }
699+
700+ /* BITCOUNT key start end */
701+ key_free = redis_key_prefix (redis_sock , & key , & key_len TSRMLS_CC );
702+ cmd_len = redis_cmd_format_static (& cmd , "BITCOUNT" , "sdd" , key , key_len , (int )start , (int )end );
703+ if (key_free ) efree (key );
704+
705+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len );
706+ IF_ATOMIC () {
707+ redis_long_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
708+ }
709+ REDIS_PROCESS_RESPONSE (redis_long_response );
710+
711+ }
712+ /* }}} */
713+
679714/* {{{ proto boolean Redis::close()
680715 */
681716PHP_METHOD (Redis , close )
0 commit comments