From: Marcus Boerger Date: Sun, 18 Sep 2005 16:51:24 +0000 (+0000) Subject: - Rename 'CachingRecursiveIterator' to 'RecursiveCachingIterator' so that X-Git-Tag: RELEASE_0_9_0~191 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=02038b4ac49ad7a524dbc82018634a4eaca7492f;p=php - Rename 'CachingRecursiveIterator' to 'RecursiveCachingIterator' so that all of those follow the naming scheme 'Recursive<*>Iterator' --- diff --git a/ext/spl/examples/directorygraphiterator.inc b/ext/spl/examples/directorygraphiterator.inc index 2c417a50b0..0ba96085b3 100644 --- a/ext/spl/examples/directorygraphiterator.inc +++ b/ext/spl/examples/directorygraphiterator.inc @@ -18,7 +18,7 @@ class DirectoryGraphIterator extends DirectoryTreeIterator { function __construct($path) { - RecursiveIteratorIterator::__construct(new CachingRecursiveIterator(new ParentIterator(new RecursiveDirectoryIterator($path)), CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD), 1); + RecursiveIteratorIterator::__construct(new RecursiveCachingIterator(new ParentIterator(new RecursiveDirectoryIterator($path)), CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD), 1); } } diff --git a/ext/spl/examples/directorytreeiterator.inc b/ext/spl/examples/directorytreeiterator.inc index ccf8b0f282..1966ce48d8 100644 --- a/ext/spl/examples/directorytreeiterator.inc +++ b/ext/spl/examples/directorytreeiterator.inc @@ -21,7 +21,7 @@ class DirectoryTreeIterator extends RecursiveIteratorIterator */ function __construct($path) { - parent::__construct(new CachingRecursiveIterator(new RecursiveDirectoryIterator($path), CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD), 1); + parent::__construct(new RecursiveCachingIterator(new RecursiveDirectoryIterator($path), CachingIterator::CALL_TOSTRING|CachingIterator::CATCH_GET_CHILD), 1); } /** @return the current element prefixed with ASCII graphics diff --git a/ext/spl/internal/cachingrecursiveiterator.inc b/ext/spl/internal/recursivecachingiterator.inc similarity index 75% rename from ext/spl/internal/cachingrecursiveiterator.inc rename to ext/spl/internal/recursivecachingiterator.inc index 5f60d76d5b..9b6ab7ab53 100755 --- a/ext/spl/internal/cachingrecursiveiterator.inc +++ b/ext/spl/internal/recursivecachingiterator.inc @@ -1,8 +1,8 @@ hasChildren = $this->it->hasChildren()) { - try { - //$this->getChildren = new CachingRecursiveIterator($this->it->getChildren(), $this->flags); - // workaround memleaks... + if ($this->hasChildren = $this->it->hasChildren()) + { + try + { $child = $this->it->getChildren(); - $this->getChildren = new CachingRecursiveIterator($child, $this->flags); + if (!$this->ref) + { + $this->ref = new ReflectionClass($this); + } + $this->getChildren = $ref->newInstance($child, $this->flags); } - catch(Exception $e) { - if (!$this->flags & self::CATCH_GET_CHILD) { + catch(Exception $e) + { + if (!$this->flags & self::CATCH_GET_CHILD) + { throw $e; } $this->hasChildren = false; $this->getChildren = NULL; } - } else { + } else + { $this->getChildren = NULL; } parent::next(); } + + private $ref; /** @return whether the current element has children * @note The check whether the Iterator for the children can be created was diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 4bb47ef790..18460e201a 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -154,7 +154,6 @@ PHP_FUNCTION(class_implements) SPL_ADD_CLASS(BadFunctionCallException, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(BadMethodCallException, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(CachingIterator, z_list, sub, allow, ce_flags); \ - SPL_ADD_CLASS(CachingRecursiveIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(Countable, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(DirectoryIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(DomainException, z_list, sub, allow, ce_flags); \ @@ -173,9 +172,10 @@ PHP_FUNCTION(class_implements) SPL_ADD_CLASS(OverflowException, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(ParentIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RangeException, z_list, sub, allow, ce_flags); \ + SPL_ADD_CLASS(RecursiveArrayIterator, z_list, sub, allow, ce_flags); \ + SPL_ADD_CLASS(RecursiveCachingIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RecursiveDirectoryIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RecursiveFilterIterator, z_list, sub, allow, ce_flags); \ - SPL_ADD_CLASS(RecursiveArrayIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RecursiveIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RecursiveIteratorIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RuntimeException, z_list, sub, allow, ce_flags); \ diff --git a/ext/spl/spl.php b/ext/spl/spl.php index ae6d14bdd2..646842da83 100755 --- a/ext/spl/spl.php +++ b/ext/spl/spl.php @@ -40,7 +40,7 @@ * - interface SeekableIterator implements Iterator * - class LimitIterator implements OuterIterator * - class CachingIterator implements OuterIterator - * - class CachingRecursiveIterator extends CachingIterator implements RecursiveIterator + * - class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator * - class IteratorIterator implements OuterIterator * - class NoRewindIterator implements OuterIterator * - class EmptyIterator implements Iterator diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 52c1dcbd49..ef016961e1 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -46,7 +46,7 @@ PHPAPI zend_class_entry *spl_ce_ParentIterator; PHPAPI zend_class_entry *spl_ce_SeekableIterator; PHPAPI zend_class_entry *spl_ce_LimitIterator; PHPAPI zend_class_entry *spl_ce_CachingIterator; -PHPAPI zend_class_entry *spl_ce_CachingRecursiveIterator; +PHPAPI zend_class_entry *spl_ce_RecursiveCachingIterator; PHPAPI zend_class_entry *spl_ce_OuterIterator; PHPAPI zend_class_entry *spl_ce_IteratorIterator; PHPAPI zend_class_entry *spl_ce_NoRewindIterator; @@ -794,7 +794,7 @@ static INLINE spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAME break; } case DIT_CachingIterator: - case DIT_CachingRecursiveIterator: { + case DIT_RecursiveCachingIterator: { long flags = CIT_CALL_TOSTRING; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|l", &zobject, ce_inner, &flags) == FAILURE) { php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC); @@ -906,7 +906,7 @@ static INLINE void spl_dual_it_free(spl_dual_it_object *intern TSRMLS_DC) efree(intern->current.str_key); intern->current.str_key = NULL; } - if (intern->dit_type == DIT_CachingIterator || intern->dit_type == DIT_CachingRecursiveIterator) { + if (intern->dit_type == DIT_CachingIterator || intern->dit_type == DIT_RecursiveCachingIterator) { if (intern->u.caching.zstr) { zval_ptr_dtor(&intern->u.caching.zstr); intern->u.caching.zstr = NULL; @@ -1193,7 +1193,7 @@ static INLINE void spl_dual_it_free_storage(void *_object TSRMLS_DC) zval_ptr_dtor(&object->u.append.zarrayit); } - if (object->dit_type == DIT_CachingIterator || object->dit_type == DIT_CachingRecursiveIterator) { + if (object->dit_type == DIT_CachingIterator || object->dit_type == DIT_RecursiveCachingIterator) { if (object->u.caching.zcache) { zval_ptr_dtor(&object->u.caching.zcache); object->u.caching.zcache = NULL; @@ -1449,7 +1449,7 @@ static INLINE void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC) } } /* Recursion ? */ - if (intern->dit_type == DIT_CachingRecursiveIterator) { + if (intern->dit_type == DIT_RecursiveCachingIterator) { zval *retval, *zchildren, zflags; zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval); if (zend_is_true(retval)) { @@ -1462,7 +1462,7 @@ static INLINE void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC) } else { INIT_PZVAL(&zflags); ZVAL_LONG(&zflags, intern->u.caching.flags & CIT_PUBLIC); - spl_instantiate_arg_ex2(U_CLASS_ENTRY(spl_ce_CachingRecursiveIterator), &intern->u.caching.zchildren, 1, zchildren, &zflags TSRMLS_CC); + spl_instantiate_arg_ex2(U_CLASS_ENTRY(spl_ce_RecursiveCachingIterator), &intern->u.caching.zchildren, 1, zchildren, &zflags TSRMLS_CC); zval_ptr_dtor(&zchildren); } } @@ -1774,16 +1774,16 @@ static zend_function_entry spl_funcs_CachingIterator[] = { {NULL, NULL, NULL} }; -/* {{{ proto CachingRecursiveIterator::__construct(RecursiveIterator it [, flags = CIT_CALL_TOSTRING]) +/* {{{ proto RecursiveCachingIterator::__construct(RecursiveIterator it [, flags = CIT_CALL_TOSTRING]) Create an iterator from a RecursiveIterator */ -SPL_METHOD(CachingRecursiveIterator, __construct) +SPL_METHOD(RecursiveCachingIterator, __construct) { - spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, U_CLASS_ENTRY(spl_ce_RecursiveIterator), DIT_CachingRecursiveIterator); + spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, U_CLASS_ENTRY(spl_ce_RecursiveIterator), DIT_RecursiveCachingIterator); } /* }}} */ -/* {{{ proto bolean CachingRecursiveIterator::hasChildren() +/* {{{ proto bolean RecursiveCachingIterator::hasChildren() Check whether the current element of the inner iterator has children */ -SPL_METHOD(CachingRecursiveIterator, hasChildren) +SPL_METHOD(RecursiveCachingIterator, hasChildren) { spl_dual_it_object *intern; @@ -1792,9 +1792,9 @@ SPL_METHOD(CachingRecursiveIterator, hasChildren) RETURN_BOOL(intern->u.caching.zchildren); } /* }}} */ -/* {{{ proto CachingRecursiveIterator CachingRecursiveIterator::getChildren() - Return the inner iterator's children as a CachingRecursiveIterator */ -SPL_METHOD(CachingRecursiveIterator, getChildren) +/* {{{ proto RecursiveCachingIterator RecursiveCachingIterator::getChildren() + Return the inner iterator's children as a RecursiveCachingIterator */ +SPL_METHOD(RecursiveCachingIterator, getChildren) { spl_dual_it_object *intern; @@ -1813,10 +1813,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_rec_it___construct, 0, ZEND_RETURN_VALUE, ZEND_ARG_INFO(0, flags) ZEND_END_ARG_INFO(); -static zend_function_entry spl_funcs_CachingRecursiveIterator[] = { - SPL_ME(CachingRecursiveIterator, __construct, arginfo_caching_rec_it___construct, ZEND_ACC_PUBLIC) - SPL_ME(CachingRecursiveIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) - SPL_ME(CachingRecursiveIterator, getChildren, NULL, ZEND_ACC_PUBLIC) +static zend_function_entry spl_funcs_RecursiveCachingIterator[] = { + SPL_ME(RecursiveCachingIterator, __construct, arginfo_caching_rec_it___construct, ZEND_ACC_PUBLIC) + SPL_ME(RecursiveCachingIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) + SPL_ME(RecursiveCachingIterator, getChildren, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; @@ -2259,8 +2259,8 @@ PHP_MINIT_FUNCTION(spl_iterators) REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CATCH_GET_CHILD", CIT_CATCH_GET_CHILD); REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "FULL_CACHE", CIT_FULL_CACHE); - REGISTER_SPL_SUB_CLASS_EX(CachingRecursiveIterator, CachingIterator, spl_dual_it_new, spl_funcs_CachingRecursiveIterator); - REGISTER_SPL_IMPLEMENTS(CachingRecursiveIterator, RecursiveIterator); + REGISTER_SPL_SUB_CLASS_EX(RecursiveCachingIterator, CachingIterator, spl_dual_it_new, spl_funcs_RecursiveCachingIterator); + REGISTER_SPL_IMPLEMENTS(RecursiveCachingIterator, RecursiveIterator); REGISTER_SPL_STD_CLASS_EX(IteratorIterator, spl_dual_it_new, spl_funcs_IteratorIterator); REGISTER_SPL_ITERATOR(IteratorIterator); diff --git a/ext/spl/spl_iterators.h b/ext/spl/spl_iterators.h index 582db5e946..7025cfbc58 100755 --- a/ext/spl/spl_iterators.h +++ b/ext/spl/spl_iterators.h @@ -38,7 +38,7 @@ extern PHPAPI zend_class_entry *spl_ce_ParentIterator; extern PHPAPI zend_class_entry *spl_ce_SeekableIterator; extern PHPAPI zend_class_entry *spl_ce_LimitIterator; extern PHPAPI zend_class_entry *spl_ce_CachingIterator; -extern PHPAPI zend_class_entry *spl_ce_CachingRecursiveIterator; +extern PHPAPI zend_class_entry *spl_ce_RecursiveCachingIterator; extern PHPAPI zend_class_entry *spl_ce_OuterIterator; extern PHPAPI zend_class_entry *spl_ce_IteratorIterator; extern PHPAPI zend_class_entry *spl_ce_NoRewindIterator; @@ -55,7 +55,7 @@ typedef enum { DIT_Default = 0, DIT_LimitIterator, DIT_CachingIterator, - DIT_CachingRecursiveIterator, + DIT_RecursiveCachingIterator, DIT_IteratorIterator, DIT_NoRewindIterator, DIT_InfiniteIterator, diff --git a/ext/spl/tests/iterator_026.phpt b/ext/spl/tests/iterator_026.phpt index 100c2a49f7..8df96f0d2c 100755 --- a/ext/spl/tests/iterator_026.phpt +++ b/ext/spl/tests/iterator_026.phpt @@ -6,7 +6,7 @@ SPL: CachingIterator::hasNext() $ar = array(1, 2, array(31, 32, array(331)), 4); $it = new RecursiveArrayIterator($ar); -$it = new CachingRecursiveIterator($it); +$it = new RecursiveCachingIterator($it); $it = new RecursiveIteratorIterator($it); foreach($it as $k=>$v)