helly Sun Oct 31 15:59:39 2004 EDT
Added files:
/php-src/ext/spl/internal emptyiterator.inc
/php-src/ext/spl/tests iterator_009.phpt
Removed files:
/php-src/ext/spl/examples emptyiterator.inc
Modified files:
/php-src/ext/spl php_spl.c spl_functions.c spl_iterators.c
spl_iterators.h
Log:
- Implement EmptyIterator in C
http://cvs.php.net/diff.php/php-src/ext/spl/php_spl.c?r1=1.32&r2=1.33&ty=u
Index: php-src/ext/spl/php_spl.c
diff -u php-src/ext/spl/php_spl.c:1.32 php-src/ext/spl/php_spl.c:1.33
--- php-src/ext/spl/php_spl.c:1.32 Sun Oct 31 14:49:15 2004
+++ php-src/ext/spl/php_spl.c Sun Oct 31 15:59:37 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_spl.c,v 1.32 2004/10/31 19:49:15 helly Exp $ */
+/* $Id: php_spl.c,v 1.33 2004/10/31 20:59:37 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -166,6 +166,7 @@
SPL_ADD_CLASS(CachingIterator, z_list, sub, allow, ce_flags); \
SPL_ADD_CLASS(CachingRecursiveIterator, z_list, sub, allow, ce_flags); \
SPL_ADD_CLASS(DirectoryIterator, z_list, sub, allow, ce_flags); \
+ SPL_ADD_CLASS(EmptyIterator, z_list, sub, allow, ce_flags); \
SPL_ADD_CLASS(FilterIterator, z_list, sub, allow, ce_flags); \
SPL_ADD_CLASS(InfiniteIterator, z_list, sub, allow, ce_flags); \
SPL_ADD_CLASS(IteratorIterator, z_list, sub, allow, ce_flags); \
http://cvs.php.net/diff.php/php-src/ext/spl/spl_functions.c?r1=1.25&r2=1.26&ty=u
Index: php-src/ext/spl/spl_functions.c
diff -u php-src/ext/spl/spl_functions.c:1.25 php-src/ext/spl/spl_functions.c:1.26
--- php-src/ext/spl/spl_functions.c:1.25 Tue Mar 9 11:38:37 2004
+++ php-src/ext/spl/spl_functions.c Sun Oct 31 15:59:37 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_functions.c,v 1.25 2004/03/09 16:38:37 helly Exp $ */
+/* $Id: spl_functions.c,v 1.26 2004/10/31 20:59:37 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -59,7 +59,9 @@
*ppce = zend_register_internal_class(&ce TSRMLS_CC);
/* entries changed by initialize */
- (*ppce)->create_object = obj_ctor;
+ if (obj_ctor) {
+ (*ppce)->create_object = obj_ctor;
+ }
}
/* }}} */
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.47&r2=1.48&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.47 php-src/ext/spl/spl_iterators.c:1.48
--- php-src/ext/spl/spl_iterators.c:1.47 Sun Oct 31 14:49:15 2004
+++ php-src/ext/spl/spl_iterators.c Sun Oct 31 15:59:37 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.c,v 1.47 2004/10/31 19:49:15 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.48 2004/10/31 20:59:37 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -48,6 +48,7 @@
zend_class_entry *spl_ce_IteratorIterator;
zend_class_entry *spl_ce_NoRewindIterator;
zend_class_entry *spl_ce_InfiniteIterator;
+zend_class_entry *spl_ce_EmptyIterator;
function_entry spl_funcs_RecursiveIterator[] = {
SPL_ABSTRACT_ME(RecursiveIterator, hasChildren, NULL)
@@ -1465,7 +1466,6 @@
spl_dual_it_fetch(intern, 0 TSRMLS_CC);
}
}
-
} /* }}} */
static zend_function_entry spl_funcs_InfiniteIterator[] = {
@@ -1473,6 +1473,47 @@
SPL_ME(InfiniteIterator, next, NULL, ZEND_ACC_PUBLIC)
};
+/* {{{ proto EmptyIterator::rewind()
+ Does nothing */
+SPL_METHOD(EmptyIterator, rewind)
+{
+} /* }}} */
+
+/* {{{ proto EmptyIterator::valid()
+ Return false */
+SPL_METHOD(EmptyIterator, valid)
+{
+ RETURN_FALSE;
+} /* }}} */
+
+/* {{{ proto EmptyIterator::key()
+ Throws exception */
+SPL_METHOD(EmptyIterator, key)
+{
+ zend_throw_exception(NULL, "Accessing the key of an EmptyIterator", 0
TSRMLS_CC);
+} /* }}} */
+
+/* {{{ proto EmptyIterator::current()
+ Throws exception */
+SPL_METHOD(EmptyIterator, current)
+{
+ zend_throw_exception(NULL, "Accessing the value of an EmptyIterator", 0
TSRMLS_CC);
+} /* }}} */
+
+/* {{{ proto EmptyIterator::next()
+ Does nothing */
+SPL_METHOD(EmptyIterator, next)
+{
+} /* }}} */
+
+static zend_function_entry spl_funcs_EmptyIterator[] = {
+ SPL_ME(EmptyIterator, rewind, NULL, ZEND_ACC_PUBLIC)
+ SPL_ME(EmptyIterator, valid, NULL, ZEND_ACC_PUBLIC)
+ SPL_ME(EmptyIterator, key, NULL, ZEND_ACC_PUBLIC)
+ SPL_ME(EmptyIterator, current, NULL, ZEND_ACC_PUBLIC)
+ SPL_ME(EmptyIterator, next, NULL, ZEND_ACC_PUBLIC)
+};
+
/* {{{ array iterator_to_array(IteratorAggregate it)
Copy the iterator into an array */
PHP_FUNCTION(iterator_to_array)
@@ -1607,6 +1648,9 @@
REGISTER_SPL_IMPLEMENTS(NoRewindIterator, OuterIterator);
REGISTER_SPL_SUB_CLASS_EX(InfiniteIterator, IteratorIterator, spl_dual_it_new,
spl_funcs_InfiniteIterator);
+
+ REGISTER_SPL_STD_CLASS_EX(EmptyIterator, NULL, spl_funcs_EmptyIterator);
+ REGISTER_SPL_ITERATOR(EmptyIterator);
return SUCCESS;
}
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.h?r1=1.13&r2=1.14&ty=u
Index: php-src/ext/spl/spl_iterators.h
diff -u php-src/ext/spl/spl_iterators.h:1.13 php-src/ext/spl/spl_iterators.h:1.14
--- php-src/ext/spl/spl_iterators.h:1.13 Sun Oct 31 14:49:15 2004
+++ php-src/ext/spl/spl_iterators.h Sun Oct 31 15:59:37 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.h,v 1.13 2004/10/31 19:49:15 helly Exp $ */
+/* $Id: spl_iterators.h,v 1.14 2004/10/31 20:59:37 helly Exp $ */
#ifndef SPL_ITERATORS_H
#define SPL_ITERATORS_H
@@ -36,6 +36,7 @@
extern zend_class_entry *spl_ce_IteratorIterator;
extern zend_class_entry *spl_ce_NoRewindIterator;
extern zend_class_entry *spl_ce_InfiniteIterator;
+extern zend_class_entry *spl_ce_EmptyIterator;
PHP_MINIT_FUNCTION(spl_iterators);
http://cvs.php.net/co.php/php-src/ext/spl/internal/emptyiterator.inc?r=1.1&p=1
Index: php-src/ext/spl/internal/emptyiterator.inc
+++ php-src/ext/spl/internal/emptyiterator.inc
<?php
/** @file emptyiterator.inc
* @ingroup SPL
* @brief class EmptyIterator
* @author Marcus Boerger
* @date 2003 - 2004
*
* SPL - Standard PHP Library
*/
/** @ingroup SPL
* @brief An empty Iterator
* @author Marcus Boerger
* @version 1.0
*
*/
class EmptyIterator implements Iterator
{
/** No operation.
* @return void
*/
function rewind()
{
// nothing to do
}
/** @return \c false
*/
function valid()
{
return false;
}
/** This function must not be called. It throws an exception upon access.
* @throw Exception
* @return void
*/
function current()
{
throw new Exception('Accessing the value of an EmptyIterator');
}
/** This function must not be called. It throws an exception upon access.
* @throw Exception
* @return void
*/
function key()
{
throw new Exception('Accessing the key of an EmptyIterator');
}
/** No operation.
* @return void
*/
function next()
{
// nothing to do
}
}
?>
http://cvs.php.net/co.php/php-src/ext/spl/tests/iterator_009.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/iterator_009.phpt
+++ php-src/ext/spl/tests/iterator_009.phpt
--TEST--
SPL: EmptyIterator
--SKIPIF--
<?php if (!extension_loaded("spl")) print "skip"; ?>
--FILE--
<?php
class EmptyIteratorEx extends EmptyIterator
{
function rewind()
{
echo __METHOD__ . "\n";
parent::rewind();
}
function valid()
{
echo __METHOD__ . "\n";
return parent::valid();
}
function current()
{
echo __METHOD__ . "\n";
return parent::current();
}
function key()
{
echo __METHOD__ . "\n";
return parent::key();
}
function next()
{
echo __METHOD__ . "\n";
parent::next();
}
}
foreach (new EmptyIteratorEx() as $v) {
var_dump($v);
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
EmptyIteratorEx::rewind
EmptyIteratorEx::valid
===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php