diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-12-21 16:11:48 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-12-22 16:31:51 +0300 |
commit | 71922bf1dd30af17cf2939b1c5e9b33f7fe2a5c4 (patch) | |
tree | 26da87fb6386720da3521f3c179a20459983c448 /redis_array.c | |
parent | bb32e6f3a0e93b1de9235de2db496fb1bfc400d0 (diff) |
Add RedisArray::_continuum method
Diffstat (limited to 'redis_array.c')
-rw-r--r-- | redis_array.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/redis_array.c b/redis_array.c index df661a9f..e4c62b48 100644 --- a/redis_array.c +++ b/redis_array.c @@ -104,6 +104,7 @@ ZEND_END_ARG_INFO() zend_function_entry redis_array_functions[] = { PHP_ME(RedisArray, __call, arginfo_call, ZEND_ACC_PUBLIC) PHP_ME(RedisArray, __construct, arginfo_ctor, ZEND_ACC_PUBLIC) + PHP_ME(RedisArray, _continuum, arginfo_void, ZEND_ACC_PUBLIC) PHP_ME(RedisArray, _distributor, arginfo_void, ZEND_ACC_PUBLIC) PHP_ME(RedisArray, _function, arginfo_void, ZEND_ACC_PUBLIC) PHP_ME(RedisArray, _hosts, arginfo_void, ZEND_ACC_PUBLIC) @@ -639,6 +640,38 @@ PHP_METHOD(RedisArray, _rehash) } } +PHP_METHOD(RedisArray, _continuum) +{ + int i; + zval *object; + RedisArray *ra; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", + &object, redis_array_ce) == FAILURE) { + RETURN_FALSE; + } + + if ((ra = redis_array_get(object TSRMLS_CC)) == NULL) { + RETURN_FALSE; + } + + array_init(return_value); + if (ra->continuum) { + for (i = 0; i < ra->continuum->nb_points; ++i) { + zval zv, *z_tmp = &zv; +#if (PHP_MAJOR_VERSION < 7) + MAKE_STD_ZVAL(z_tmp); +#endif + + array_init(z_tmp); + add_assoc_long(z_tmp, "index", ra->continuum->points[i].index); + add_assoc_long(z_tmp, "value", ra->continuum->points[i].value); + add_next_index_zval(return_value, z_tmp); + } + } +} + + static void multihost_distribute_call(RedisArray *ra, zval *return_value, zval *z_fun, int argc, zval *argv TSRMLS_DC) { |