helly Mon Oct 31 15:06:29 2005 EDT Modified files: /php-src/ext/simplexml simplexml.c /php-src/ext/simplexml/tests 000.phpt Log: - Implement count interface
http://cvs.php.net/diff.php/php-src/ext/simplexml/simplexml.c?r1=1.172&r2=1.173&ty=u Index: php-src/ext/simplexml/simplexml.c diff -u php-src/ext/simplexml/simplexml.c:1.172 php-src/ext/simplexml/simplexml.c:1.173 --- php-src/ext/simplexml/simplexml.c:1.172 Mon Oct 31 14:51:40 2005 +++ php-src/ext/simplexml/simplexml.c Mon Oct 31 15:06:23 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: simplexml.c,v 1.172 2005/10/31 19:51:40 rrichards Exp $ */ +/* $Id: simplexml.c,v 1.173 2005/10/31 20:06:23 helly Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -53,6 +53,8 @@ static php_sxe_object* php_sxe_object_new(zend_class_entry *ce TSRMLS_DC); static zend_object_value php_sxe_register_object(php_sxe_object * TSRMLS_DC); +static xmlNodePtr php_sxe_reset_iterator(php_sxe_object *sxe, int use_data TSRMLS_DC); +static xmlNodePtr php_sxe_iterator_fetch(php_sxe_object *sxe, xmlNodePtr node, int use_data TSRMLS_DC); /* {{{ _node_as_zval() */ @@ -103,7 +105,7 @@ xmlNodePtr retnode = NULL; if (sxe && sxe->iter.type != SXE_ITER_NONE) { - php_sxe_reset_iterator(sxe TSRMLS_CC); + php_sxe_reset_iterator(sxe, 1 TSRMLS_CC); if (sxe->iter.data) { intern = (php_sxe_object *)zend_object_store_get_object(sxe->iter.data TSRMLS_CC); GET_NODE(intern, retnode) @@ -1332,6 +1334,26 @@ } /* }}} */ +static int sxe_count_elements(zval *object, long *count TSRMLS_DC) /* {{{ */ +{ + php_sxe_object *sxe; + xmlNodePtr node; + + *count = 0; + sxe = php_sxe_fetch_object(object TSRMLS_CC); + node = php_sxe_reset_iterator(sxe, 0 TSRMLS_CC); + + while (node) + { + (*count)++; + node = php_sxe_iterator_fetch(sxe, node->next, 0 TSRMLS_CC); + } + + + return SUCCESS; +} +/* }}} */ + static zval *sxe_get_value(zval *z TSRMLS_DC) { zval *retval; @@ -1369,7 +1391,7 @@ NULL, /* zend_get_std_object_handlers()->get_class_name,*/ sxe_objects_compare, sxe_object_cast, - NULL + sxe_count_elements }; static zend_object_handlers sxe_ze1_object_handlers = { @@ -1393,7 +1415,7 @@ NULL, /* zend_get_std_object_handlers()->get_class_name,*/ sxe_objects_compare, sxe_object_cast, - NULL + sxe_count_elements }; static zend_object_value sxe_object_ze1_clone(zval *zobject TSRMLS_DC) @@ -1664,7 +1686,7 @@ php_sxe_iterator_rewind, }; -static void php_sxe_iterator_fetch(php_sxe_object *sxe, xmlNodePtr node TSRMLS_DC) +static xmlNodePtr php_sxe_iterator_fetch(php_sxe_object *sxe, xmlNodePtr node, int use_data TSRMLS_DC) { char *prefix = sxe->iter.nsprefix; int test_elem = sxe->iter.type == SXE_ITER_ELEMENT && sxe->iter.name; @@ -1685,13 +1707,15 @@ node = node->next; } - if (node) { + if (node && use_data) { ALLOC_INIT_ZVAL(sxe->iter.data); _node_as_zval(sxe, node, sxe->iter.data, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC); } + + return node; } -ZEND_API void php_sxe_reset_iterator(php_sxe_object *sxe TSRMLS_DC) +static xmlNodePtr php_sxe_reset_iterator(php_sxe_object *sxe, int use_data TSRMLS_DC) { xmlNodePtr node; @@ -1712,8 +1736,9 @@ case SXE_ITER_ATTRLIST: node = (xmlNodePtr) node->properties; } - php_sxe_iterator_fetch(sxe, node TSRMLS_CC); + return php_sxe_iterator_fetch(sxe, node, use_data TSRMLS_CC); } + return NULL; } zend_object_iterator *php_sxe_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) @@ -1798,7 +1823,7 @@ } if (node) { - php_sxe_iterator_fetch(sxe, node->next TSRMLS_CC); + php_sxe_iterator_fetch(sxe, node->next, 1 TSRMLS_CC); } } @@ -1815,10 +1840,9 @@ php_sxe_iterator *iterator = (php_sxe_iterator *)iter; sxe = iterator->sxe; - php_sxe_reset_iterator(sxe TSRMLS_CC); + php_sxe_reset_iterator(sxe, 1 TSRMLS_CC); } - void *simplexml_export_node(zval *object TSRMLS_DC) { php_sxe_object *sxe; @@ -1979,7 +2003,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "Simplexml support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.172 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.173 $"); php_info_print_table_row(2, "Schema support", #ifdef LIBXML_SCHEMAS_ENABLED "enabled"); http://cvs.php.net/diff.php/php-src/ext/simplexml/tests/000.phpt?r1=1.3&r2=1.4&ty=u Index: php-src/ext/simplexml/tests/000.phpt diff -u php-src/ext/simplexml/tests/000.phpt:1.3 php-src/ext/simplexml/tests/000.phpt:1.4 --- php-src/ext/simplexml/tests/000.phpt:1.3 Sun Oct 30 15:37:22 2005 +++ php-src/ext/simplexml/tests/000.phpt Mon Oct 31 15:06:28 2005 @@ -13,6 +13,7 @@ echo "===$what\n"; eval("var_dump(isset(\$$what));"); eval("var_dump((bool)\$$what);"); + eval("var_dump(count(\$$what));"); eval("var_dump(\$$what);"); } @@ -40,6 +41,7 @@ ===sxe bool(true) bool(true) +int(3) object(SimpleXMLElement)#%d (3) { ["@attributes"]=> array(1) { @@ -74,6 +76,7 @@ ===sxe->elem1 bool(true) bool(true) +int(2) object(SimpleXMLElement)#%d (3) { ["@attributes"]=> array(2) { @@ -108,6 +111,7 @@ ===sxe->elem1[0] bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (3) { ["@attributes"]=> array(2) { @@ -142,6 +146,7 @@ ===sxe->elem1[0]->elem2 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (2) { ["@attributes"]=> array(2) { @@ -163,11 +168,13 @@ ===sxe->elem1[0]->elem2->bla bool(false) bool(false) +int(0) object(SimpleXMLElement)#%d (0) { } ===sxe->elem1[0]["attr1"] bool(true) bool(true) +int(0) object(SimpleXMLElement)#%d (1) { [0]=> string(5) "first" @@ -175,11 +182,13 @@ ===sxe->elem1[0]->attr1 bool(false) bool(false) +int(0) object(SimpleXMLElement)#%d (0) { } ===sxe->elem1[1] bool(true) bool(true) +int(0) object(SimpleXMLElement)#%d (1) { ["@attributes"]=> array(2) { @@ -192,10 +201,12 @@ ===sxe->elem1[2] bool(false) bool(false) +int(0) NULL ===sxe->elem11 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (1) { ["elem111"]=> object(SimpleXMLElement)#%d (1) { @@ -207,6 +218,7 @@ ===sxe->elem11->elem111 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (1) { ["elem1111"]=> object(SimpleXMLElement)#%d (0) { @@ -215,30 +227,36 @@ ===sxe->elem11->elem111->elem1111 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (0) { } ===sxe->elem22 bool(false) bool(false) +int(0) object(SimpleXMLElement)#%d (0) { } ===sxe->elem22->elem222 bool(false) bool(false) +int(0) NULL ===sxe->elem22->attr22 bool(false) bool(false) +int(0) NULL ===sxe->elem22["attr22"] bool(false) bool(false) +int(0) NULL ===DONE=== --UEXPECTF-- ===sxe bool(true) bool(true) +int(3) object(SimpleXMLElement)#%d (3) { [u"@attributes"]=> array(1) { @@ -273,6 +291,7 @@ ===sxe->elem1 bool(true) bool(true) +int(2) object(SimpleXMLElement)#%d (3) { [u"@attributes"]=> array(2) { @@ -307,6 +326,7 @@ ===sxe->elem1[0] bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (3) { [u"@attributes"]=> array(2) { @@ -341,6 +361,7 @@ ===sxe->elem1[0]->elem2 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (2) { [u"@attributes"]=> array(2) { @@ -362,16 +383,19 @@ ===sxe->elem1[0]->elem2->bla bool(false) bool(false) +int(0) object(SimpleXMLElement)#%d (0) { } ===sxe->elem1[0]->attr1 bool(false) bool(false) +int(0) object(SimpleXMLElement)#%d (0) { } ===sxe->elem1[1] bool(true) bool(true) +int(0) object(SimpleXMLElement)#%d (1) { [u"@attributes"]=> array(2) { @@ -384,10 +408,12 @@ ===sxe->elem1[2] bool(false) bool(false) +int(0) NULL ===sxe->elem11 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (1) { [u"elem111"]=> object(SimpleXMLElement)#%d (1) { @@ -399,6 +425,7 @@ ===sxe->elem11->elem111 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (1) { [u"elem1111"]=> object(SimpleXMLElement)#%d (0) { @@ -407,23 +434,28 @@ ===sxe->elem11->elem111->elem1111 bool(true) bool(true) +int(1) object(SimpleXMLElement)#%d (0) { } ===sxe->elem22 bool(false) bool(false) +int(0) object(SimpleXMLElement)#%d (0) { } ===sxe->elem22->elem222 bool(false) bool(false) +int(0) NULL ===sxe->elem22->attr22 bool(false) bool(false) +int(0) NULL ===sxe->elem22["attr22"] bool(false) bool(false) +int(0) NULL ===DONE===
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php