helly           Fri Oct 29 16:12:58 2004 EDT

  Added files:                 
    /php-src/ext/spl/internal   outeriterator.inc 

  Removed files:               
    /php-src/ext/spl/examples   outeriterator.inc 

  Modified files:              
    /php-src/ext/spl    php_spl.c spl_iterators.c spl_iterators.h 
    /php-src/ext/spl/internal   cachingiterator.inc filteriterator.inc 
                                limititerator.inc 
                                recursiveiteratoriterator.inc 
  Log:
  - Implement OuterIterator in C
  
  
http://cvs.php.net/diff.php/php-src/ext/spl/php_spl.c?r1=1.29&r2=1.30&ty=u
Index: php-src/ext/spl/php_spl.c
diff -u php-src/ext/spl/php_spl.c:1.29 php-src/ext/spl/php_spl.c:1.30
--- php-src/ext/spl/php_spl.c:1.29      Thu Oct  7 19:08:16 2004
+++ php-src/ext/spl/php_spl.c   Fri Oct 29 16:12:54 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_spl.c,v 1.29 2004/10/07 23:08:16 helly Exp $ */
+/* $Id: php_spl.c,v 1.30 2004/10/29 20:12:54 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
        #include "config.h"
@@ -168,6 +168,7 @@
        SPL_ADD_CLASS(DirectoryIterator, z_list, sub, allow, ce_flags); \
        SPL_ADD_CLASS(FilterIterator, z_list, sub, allow, ce_flags); \
        SPL_ADD_CLASS(LimitIterator, z_list, sub, allow, ce_flags); \
+       SPL_ADD_CLASS(OuterIterator, z_list, sub, allow, ce_flags); \
        SPL_ADD_CLASS(ParentIterator, z_list, sub, allow, ce_flags); \
        SPL_ADD_CLASS(RecursiveDirectoryIterator, z_list, sub, allow, ce_flags); \
        SPL_ADD_CLASS(RecursiveIterator, z_list, sub, allow, ce_flags); \
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.40&r2=1.41&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.40 php-src/ext/spl/spl_iterators.c:1.41
--- php-src/ext/spl/spl_iterators.c:1.40        Thu Oct  7 19:08:16 2004
+++ php-src/ext/spl/spl_iterators.c     Fri Oct 29 16:12:54 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.40 2004/10/07 23:08:16 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.41 2004/10/29 20:12:54 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -44,6 +44,7 @@
 zend_class_entry *spl_ce_LimitIterator;
 zend_class_entry *spl_ce_CachingIterator;
 zend_class_entry *spl_ce_CachingRecursiveIterator;
+zend_class_entry *spl_ce_OuterIterator;
 
 function_entry spl_funcs_RecursiveIterator[] = {
        SPL_ABSTRACT_ME(RecursiveIterator, hasChildren,  NULL)
@@ -59,6 +60,7 @@
 SPL_METHOD(RecursiveIteratorIterator, next);
 SPL_METHOD(RecursiveIteratorIterator, getDepth);
 SPL_METHOD(RecursiveIteratorIterator, getSubIterator);
+SPL_METHOD(RecursiveIteratorIterator, getInnerIterator);
 
 static
 ZEND_BEGIN_ARG_INFO(arginfo_recursive_it___construct, 0) 
@@ -80,6 +82,7 @@
        SPL_ME(RecursiveIteratorIterator, next,          NULL, ZEND_ACC_PUBLIC)
        SPL_ME(RecursiveIteratorIterator, getDepth,      NULL, ZEND_ACC_PUBLIC)
        SPL_ME(RecursiveIteratorIterator, 
getSubIterator,arginfo_recursive_it_getSubIterator, ZEND_ACC_PUBLIC)
+       SPL_ME(RecursiveIteratorIterator, getInnerIterator,NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
 };
 
@@ -414,8 +417,8 @@
        RETURN_LONG(object->level);
 } /* }}} */
 
-/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getSubIterator()
-   The current active sub iterator */
+/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getSubIterator([int level])
+   The current active sub iterator or the iterator at specified level */
 SPL_METHOD(RecursiveIteratorIterator, getSubIterator)
 {
        spl_recursive_it_object   *object = 
(spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
@@ -430,6 +433,16 @@
        RETURN_ZVAL(object->iterators[level].zobject, 1, 0);
 } /* }}} */
 
+/* {{{ proto RecursiveIterator RecursiveIteratorIterator::getInnerIterator()
+   The current active sub iterator */
+SPL_METHOD(RecursiveIteratorIterator, getInnerIterator)
+{
+       spl_recursive_it_object   *object = 
(spl_recursive_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       long  level = object->level;
+       
+       RETURN_ZVAL(object->iterators[level].zobject, 1, 0);
+} /* }}} */
+
 /* {{{ spl_RecursiveIteratorIterator_dtor */
 static void spl_RecursiveIteratorIterator_free_storage(void *_object TSRMLS_DC)
 {
@@ -1386,6 +1399,11 @@
 }
 /* }}} */
 
+static zend_function_entry spl_funcs_OuterIterator[] = {
+       SPL_ABSTRACT_ME(OuterIterator, getInnerIterator,   NULL)
+       {NULL, NULL, NULL}
+};
+
 /* {{{ PHP_MINIT_FUNCTION(spl_iterators)
  */
 PHP_MINIT_FUNCTION(spl_iterators)
@@ -1432,7 +1450,15 @@
 
        REGISTER_SPL_SUB_CLASS_EX(CachingRecursiveIterator, CachingIterator, 
spl_dual_it_new, spl_funcs_CachingRecursiveIterator);
        REGISTER_SPL_IMPLEMENTS(CachingRecursiveIterator, RecursiveIterator);
-  
+       
+       REGISTER_SPL_INTERFACE(OuterIterator);
+       REGISTER_SPL_ITERATOR(OuterIterator);
+
+       REGISTER_SPL_IMPLEMENTS(RecursiveIteratorIterator, OuterIterator);
+       REGISTER_SPL_IMPLEMENTS(CachingIterator, OuterIterator);
+       REGISTER_SPL_IMPLEMENTS(FilterIterator, OuterIterator);
+       REGISTER_SPL_IMPLEMENTS(LimitIterator, OuterIterator);
+
        return SUCCESS;
 }
 /* }}} */
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.h?r1=1.10&r2=1.11&ty=u
Index: php-src/ext/spl/spl_iterators.h
diff -u php-src/ext/spl/spl_iterators.h:1.10 php-src/ext/spl/spl_iterators.h:1.11
--- php-src/ext/spl/spl_iterators.h:1.10        Thu Oct  7 19:08:16 2004
+++ php-src/ext/spl/spl_iterators.h     Fri Oct 29 16:12:55 2004
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.h,v 1.10 2004/10/07 23:08:16 helly Exp $ */
+/* $Id: spl_iterators.h,v 1.11 2004/10/29 20:12:55 helly Exp $ */
 
 #ifndef SPL_ITERATORS_H
 #define SPL_ITERATORS_H
@@ -32,6 +32,7 @@
 extern zend_class_entry *spl_ce_LimitIterator;
 extern zend_class_entry *spl_ce_CachingIterator;
 extern zend_class_entry *spl_ce_CachingRecursiveIterator;
+extern zend_class_entry *spl_ce_OuterIterator;
 
 PHP_MINIT_FUNCTION(spl_iterators);
 
http://cvs.php.net/diff.php/php-src/ext/spl/internal/cachingiterator.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/internal/cachingiterator.inc
diff -u php-src/ext/spl/internal/cachingiterator.inc:1.1 
php-src/ext/spl/internal/cachingiterator.inc:1.2
--- php-src/ext/spl/internal/cachingiterator.inc:1.1    Sat May  8 08:24:15 2004
+++ php-src/ext/spl/internal/cachingiterator.inc        Fri Oct 29 16:12:56 2004
@@ -3,7 +3,7 @@
 define('CIT_CALL_TOSTRING', 1);
 define('CIT_CATCH_GET_CHILD', 2);
 
-class CachingIterator
+class CachingIterator implements OuterIterator
 {
        protected $it;
        protected $current;
@@ -76,6 +76,11 @@
                }
                return $this->strValue;
        }
+       
+       function getInnerIterator()
+       {
+               return $this->it;
+       }
 }
 
 ?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/internal/filteriterator.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/internal/filteriterator.inc
diff -u php-src/ext/spl/internal/filteriterator.inc:1.1 
php-src/ext/spl/internal/filteriterator.inc:1.2
--- php-src/ext/spl/internal/filteriterator.inc:1.1     Sat May  8 08:24:15 2004
+++ php-src/ext/spl/internal/filteriterator.inc Fri Oct 29 16:12:56 2004
@@ -9,7 +9,7 @@
  * you can put an iterator into the constructor and the instance will only 
  * return selected (accepted) elements.
  */
-abstract class FilterIterator implements Iterator
+abstract class FilterIterator implements OuterIterator
 {
        protected $it;
 
@@ -92,6 +92,14 @@
        protected function __clone() {
                // disallow clone 
        }
+
+       /**
+        * @return The inner iterator
+        */     
+       function getInnerIterator()
+       {
+               return $this->it;
+       }
 }
 
 ?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/internal/limititerator.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/internal/limititerator.inc
diff -u php-src/ext/spl/internal/limititerator.inc:1.1 
php-src/ext/spl/internal/limititerator.inc:1.2
--- php-src/ext/spl/internal/limititerator.inc:1.1      Sat May  8 08:24:15 2004
+++ php-src/ext/spl/internal/limititerator.inc  Fri Oct 29 16:12:56 2004
@@ -1,6 +1,6 @@
 <?php
 
-class LimitIterator implements Iterator
+class LimitIterator implements OuterIterator
 {
        protected $it;
        protected $offset;
@@ -67,6 +67,14 @@
        function getPosition() {
                return $this->pos;
        }
+
+       /**
+        * @return The inner iterator
+        */     
+       function getInnerIterator()
+       {
+               return $this->it;
+       }
 }
 
 ?>
\ No newline at end of file
http://cvs.php.net/diff.php/php-src/ext/spl/internal/recursiveiteratoriterator.inc?r1=1.1&r2=1.2&ty=u
Index: php-src/ext/spl/internal/recursiveiteratoriterator.inc
diff -u php-src/ext/spl/internal/recursiveiteratoriterator.inc:1.1 
php-src/ext/spl/internal/recursiveiteratoriterator.inc:1.2
--- php-src/ext/spl/internal/recursiveiteratoriterator.inc:1.1  Sat May  8 08:24:15 
2004
+++ php-src/ext/spl/internal/recursiveiteratoriterator.inc      Fri Oct 29 16:12:57 
2004
@@ -6,7 +6,7 @@
  * @version 1.0
  *
  */
-class RecursiveIteratorIterator implements Iterator
+class RecursiveIteratorIterator implements OuterIterator
 {
        protected $ait = array();
        protected $count = 0;
@@ -92,6 +92,14 @@
                return @$this->ait[$level];
        }
 
+       /**
+        * @return The inner iterator
+        */     
+       function getInnerIterator()
+       {
+               return $this->it;
+       }
+
        function getDepth()
        {
                return $this->level;

http://cvs.php.net/co.php/php-src/ext/spl/internal/outeriterator.inc?r=1.1&p=1
Index: php-src/ext/spl/internal/outeriterator.inc
+++ php-src/ext/spl/internal/outeriterator.inc
<?php

/** \ingroup SPL
 * \brief Interface to access inner iterator of iterator wrappers
 */
interface OuterIterator extends Iterator
{
        /** \return inner iterator
         */
    function getInnerIterator();
}

?>
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to