]> granicus.if.org Git - php/commitdiff
- Rename 'CachingRecursiveIterator' to 'RecursiveCachingIterator' so that
authorMarcus Boerger <helly@php.net>
Sun, 18 Sep 2005 16:51:24 +0000 (16:51 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 18 Sep 2005 16:51:24 +0000 (16:51 +0000)
  all of those follow the naming scheme 'Recursive<*>Iterator'

ext/spl/examples/directorygraphiterator.inc
ext/spl/examples/directorytreeiterator.inc
ext/spl/internal/recursivecachingiterator.inc [moved from ext/spl/internal/cachingrecursiveiterator.inc with 75% similarity]
ext/spl/php_spl.c
ext/spl/spl.php
ext/spl/spl_iterators.c
ext/spl/spl_iterators.h
ext/spl/tests/iterator_026.phpt

index 2c417a50b0c239003e02897adca41b3781ba9192..0ba96085b348e1c73798f96af247fb2f82adbd5d 100644 (file)
@@ -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);
        }
 }
 
index ccf8b0f28222e0b7f841e13f64c06de81ffcb3e1..1966ce48d8b8e25bac02ee2c9111f0c983dc76c6 100644 (file)
@@ -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
similarity index 75%
rename from ext/spl/internal/cachingrecursiveiterator.inc
rename to ext/spl/internal/recursivecachingiterator.inc
index 5f60d76d5b754a285b57ffb201fb7dabf2142609..9b6ab7ab53d14d51c52b86ae9ab38a43bf6f5ae2 100755 (executable)
@@ -1,8 +1,8 @@
 <?php
 
-/** @file cachingrecursiveiterator.inc
+/** @file recursivecachingiterator.inc
  * @ingroup SPL
- * @brief class CachingRecursiveIterator
+ * @brief class RecursiveCachingIterator
  * @author  Marcus Boerger
  * @date    2003 - 2005
  *
 /**
  * @brief   Cached recursive iteration over another Iterator
  * @author  Marcus Boerger
- * @version 1.1
- * @since PHP 5.0
+ * @version 1.2
+ * @since PHP 5.1
  *
  * @see CachingIterator
  */
-class CachingRecursiveIterator extends CachingIterator implements RecursiveIterator
+class RecursiveCachingIterator extends CachingIterator implements RecursiveIterator
 {
        private $hasChildren;
        private $getChildren;
@@ -48,25 +48,34 @@ class CachingRecursiveIterator extends CachingIterator implements RecursiveItera
         */
        function next()
        {
-               if ($this->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
index 4bb47ef790bc8a22caac077fdf2a867f4032fa6e..18460e201aa540e936827cbd946d11fe4c227eaf 100755 (executable)
@@ -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); \
index ae6d14bdd2a2a61273380506e223e6dc6f204d46..646842da835b3566aeee36c0e5151d51c6432eb5 100755 (executable)
@@ -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
index 52c1dcbd4976f20c30bfb9cce037b975bc421fbc..ef016961e1d9a6dd96bb92be7aa1a5a0692fd8ae 100755 (executable)
@@ -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);
index 582db5e946b297c3e159d5b5a5f306c7c88276e8..7025cfbc582ff0e03cc20517c8624ff2fdbc7626 100755 (executable)
@@ -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,
index 100c2a49f75e5c50bf8d2e0696acaf1d8be76983..8df96f0d2cb9d3cc536a552b9364b83ba16c7fb1 100755 (executable)
@@ -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)