Hey: On Wed, Jul 27, 2016 at 10:42 PM, Benjamin Coutu <ben.co...@zeyos.com> wrote:
> Hello Xinchen, > > Analogue to the array_slice implementation, the array_reverse function > could also be optimized for packed hash tables when preserve_keys is false > (most common). > The following patch should do just that: > > if (!preserve_keys && (Z_ARRVAL_P(input)->u.flags & HASH_FLAG_PACKED)) { > zend_hash_real_init(Z_ARRVAL_P(return_value), 1); > > ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(return_value)) { > ZEND_HASH_REVERSE_FOREACH_VAL(Z_ARRVAL_P(input), entry) { > ZEND_HASH_FILL_ADD(entry); > zval_add_ref(entry); > } ZEND_HASH_FOREACH_END(); > } ZEND_HASH_FILL_END(); > } > > Please let me know your thoughts. > I think it's a good idea, one suggestion is you should check HASH_FLAG_PACKED first, as !perserve_keys is most common. and maybe you should use Z_TRY_ADDREF instead of zval_add_ref, check REFCOUNTED in place, to save one function call if it's not TYPE_REFCOUNTED. btw, do you want to make a PR yourself, or let me to commit your idea? thanks > > Thanks, > > Ben > > -- > > Bejamin Coutu > ben.co...@zeyos.com > > ZeyOS, Inc. > http://www.zeyos.com > > -- Xinchen Hui @Laruence http://www.laruence.com/