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