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