From 7c16cfd85be5960a7b22df019fede58938e4314a Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Mon, 14 Jul 2008 08:08:39 +0000 Subject: [PATCH] minor speedup - convert offset to long only when needed --- ext/spl/spl_fixedarray.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/ext/spl/spl_fixedarray.c b/ext/spl/spl_fixedarray.c index 3bf7017ce4..3fff501ef1 100644 --- a/ext/spl/spl_fixedarray.c +++ b/ext/spl/spl_fixedarray.c @@ -317,7 +317,11 @@ static inline zval **spl_fixedarray_object_read_dimension_helper(spl_fixedarray_ return NULL; } - index = spl_offset_convert_to_long(offset TSRMLS_CC); + if (Z_TYPE_P(offset) != IS_LONG) { + index = spl_offset_convert_to_long(offset TSRMLS_CC); + } else { + index = Z_LVAL_P(offset); + } if (index < 0 || intern->array == NULL || index >= intern->array->size) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); @@ -369,7 +373,11 @@ static inline void spl_fixedarray_object_write_dimension_helper(spl_fixedarray_o return; } - index = spl_offset_convert_to_long(offset TSRMLS_CC); + if (Z_TYPE_P(offset) != IS_LONG) { + index = spl_offset_convert_to_long(offset TSRMLS_CC); + } else { + index = Z_LVAL_P(offset); + } if (index < 0 || intern->array == NULL || index >= intern->array->size) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); @@ -407,7 +415,11 @@ static inline void spl_fixedarray_object_unset_dimension_helper(spl_fixedarray_o { long index; - index = spl_offset_convert_to_long(offset TSRMLS_CC); + if (Z_TYPE_P(offset) != IS_LONG) { + index = spl_offset_convert_to_long(offset TSRMLS_CC); + } else { + index = Z_LVAL_P(offset); + } if (index < 0 || intern->array == NULL || index >= intern->array->size) { zend_throw_exception(spl_ce_RuntimeException, "Index invalid or out of range", 0 TSRMLS_CC); @@ -444,7 +456,11 @@ static inline int spl_fixedarray_object_has_dimension_helper(spl_fixedarray_obje long index; int retval; - index = spl_offset_convert_to_long(offset TSRMLS_CC); + if (Z_TYPE_P(offset) != IS_LONG) { + index = spl_offset_convert_to_long(offset TSRMLS_CC); + } else { + index = Z_LVAL_P(offset); + } if (index < 0 || intern->array == NULL || index >= intern->array->size) { retval = 0; @@ -675,6 +691,7 @@ SPL_METHOD(SplFixedArray, fromArray) intern = (spl_fixedarray_object *)zend_object_store_get_object(return_value TSRMLS_CC); intern->array = array; } +/* }}} */ /* {{{ proto int SplFixedArray::getSize(void) */ -- 2.40.0