helly Thu Oct 7 19:08:19 2004 EDT
Added files:
/php-src/ext/spl/tests spl_001.phpt
Modified files:
/php-src/ext/spl php_spl.c spl_iterators.c spl_iterators.h
Log:
- Added iterator_to_array() and iterator_count()
http://cvs.php.net/diff.php/php-src/ext/spl/php_spl.c?r1=1.28&r2=1.29&ty=u
Index: php-src/ext/spl/php_spl.c
diff -u php-src/ext/spl/php_spl.c:1.28 php-src/ext/spl/php_spl.c:1.29
--- php-src/ext/spl/php_spl.c:1.28 Thu Apr 29 19:02:11 2004
+++ php-src/ext/spl/php_spl.c Thu Oct 7 19:08:16 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_spl.c,v 1.28 2004/04/29 23:02:11 helly Exp $ */
+/* $Id: php_spl.c,v 1.29 2004/10/07 23:08:16 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -45,6 +45,10 @@
PHP_FE(spl_classes, NULL)
PHP_FE(class_parents, NULL)
PHP_FE(class_implements, NULL)
+#ifdef SPL_ITERATORS_H
+ PHP_FE(iterator_to_array, NULL)
+ PHP_FE(iterator_count, NULL)
+#endif /* SPL_ITERATORS_H */
{NULL, NULL, NULL}
};
/* }}} */
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.39&r2=1.40&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.39 php-src/ext/spl/spl_iterators.c:1.40
--- php-src/ext/spl/spl_iterators.c:1.39 Wed Jul 28 18:53:10 2004
+++ php-src/ext/spl/spl_iterators.c Thu Oct 7 19:08:16 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.c,v 1.39 2004/07/28 22:53:10 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.40 2004/10/07 23:08:16 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -1322,6 +1322,70 @@
{NULL, NULL, NULL}
};
+/* {{{ array iterator_to_array(IteratorAggregate $it)
+ Copy the iterator into an array */
+PHP_FUNCTION(iterator_to_array)
+{
+ zval *obj, **data;
+ zend_object_iterator *iter;
+ char *str_key;
+ uint str_key_len;
+ ulong int_key;
+ int key_type;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj,
zend_ce_aggregate) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ array_init(return_value);
+
+ iter = Z_OBJCE_P(obj)->get_iterator(Z_OBJCE_P(obj), obj TSRMLS_CC);
+
+ iter->funcs->rewind(iter TSRMLS_CC);
+ while (iter->funcs->valid(iter TSRMLS_CC) == SUCCESS) {
+ key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len,
&int_key TSRMLS_CC);
+ iter->funcs->get_current_data(iter, &data TSRMLS_CC);
+ (*data)->refcount++;
+ switch(key_type) {
+ case HASH_KEY_IS_STRING:
+ add_assoc_zval_ex(return_value, str_key, str_key_len,
*data);
+ efree(str_key);
+ break;
+ case HASH_KEY_IS_LONG:
+ add_index_zval(return_value, int_key, *data);
+ break;
+ }
+ iter->funcs->move_forward(iter TSRMLS_CC);
+ }
+ iter->funcs->dtor(iter TSRMLS_CC);
+}
+/* }}} */
+
+/* {{{ int iterator_count(IteratorAggregate $it)
+ Count the elements in an iterator */
+PHP_FUNCTION(iterator_count)
+{
+ zval *obj;
+ zend_object_iterator *iter;
+ long count = 0;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &obj,
zend_ce_aggregate) == FAILURE) {
+ RETURN_FALSE;
+ }
+
+ iter = Z_OBJCE_P(obj)->get_iterator(Z_OBJCE_P(obj), obj TSRMLS_CC);
+
+ iter->funcs->rewind(iter TSRMLS_CC);
+ while (iter->funcs->valid(iter TSRMLS_CC) == SUCCESS) {
+ count++;
+ iter->funcs->move_forward(iter TSRMLS_CC);
+ }
+ iter->funcs->dtor(iter TSRMLS_CC);
+
+ RETURN_LONG(count);
+}
+/* }}} */
+
/* {{{ PHP_MINIT_FUNCTION(spl_iterators)
*/
PHP_MINIT_FUNCTION(spl_iterators)
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.h?r1=1.9&r2=1.10&ty=u
Index: php-src/ext/spl/spl_iterators.h
diff -u php-src/ext/spl/spl_iterators.h:1.9 php-src/ext/spl/spl_iterators.h:1.10
--- php-src/ext/spl/spl_iterators.h:1.9 Mon Mar 8 13:05:41 2004
+++ php-src/ext/spl/spl_iterators.h Thu Oct 7 19:08:16 2004
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.h,v 1.9 2004/03/08 18:05:41 helly Exp $ */
+/* $Id: spl_iterators.h,v 1.10 2004/10/07 23:08:16 helly Exp $ */
#ifndef SPL_ITERATORS_H
#define SPL_ITERATORS_H
@@ -35,6 +35,9 @@
PHP_MINIT_FUNCTION(spl_iterators);
+PHP_FUNCTION(iterator_to_array);
+PHP_FUNCTION(iterator_count);
+
typedef enum {
DIT_Default = 0,
DIT_LimitIterator,
http://cvs.php.net/co.php/php-src/ext/spl/tests/spl_001.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/spl_001.phpt
+++ php-src/ext/spl/tests/spl_001.phpt
--TEST--
SPL: iterator_to_array() and iterator_count()
--FILE--
<?php
$it = new ArrayObject(array("x"=>1, 1=>2, 3=>3, 4, "1"=>5));
$ar = iterator_to_array($it);
var_dump(iterator_count($it));
print_r($ar);
foreach($ar as $v)
{
var_dump($v);
}
?>
===DONE===
--EXPECT--
int(4)
Array
(
[x] => 1
[1] => 5
[3] => 3
[4] => 4
)
int(1)
int(5)
int(3)
int(4)
===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php