helly Sat Oct 29 20:35:56 2005 EDT
Modified files:
/php-src/ext/simplexml simplexml.c
Log:
- Simplify & speedup, once more
http://cvs.php.net/diff.php/php-src/ext/simplexml/simplexml.c?r1=1.167&r2=1.168&ty=u
Index: php-src/ext/simplexml/simplexml.c
diff -u php-src/ext/simplexml/simplexml.c:1.167
php-src/ext/simplexml/simplexml.c:1.168
--- php-src/ext/simplexml/simplexml.c:1.167 Sat Oct 29 20:20:35 2005
+++ php-src/ext/simplexml/simplexml.c Sat Oct 29 20:35:55 2005
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: simplexml.c,v 1.167 2005/10/30 00:20:35 helly Exp $ */
+/* $Id: simplexml.c,v 1.168 2005/10/30 00:35:55 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1565,11 +1565,36 @@
php_sxe_iterator_rewind,
};
+static void php_sxe_iterator_fetch(php_sxe_object *sxe, xmlNodePtr node
TSRMLS_DC)
+{
+ char *prefix = sxe->iter.nsprefix;
+ int test_elem = sxe->iter.type == SXE_ITER_ELEMENT;
+ int test_attr = sxe->iter.type == SXE_ITER_ATTRLIST && sxe->iter.name;
+
+ while (node) {
+ SKIP_TEXT(node);
+ if (sxe->iter.type != SXE_ITER_ATTRLIST && node->type ==
XML_ELEMENT_NODE) {
+ if ((!test_elem || !xmlStrcmp(node->name,
sxe->iter.name)) && match_ns(sxe, node, prefix)) {
+ break;
+ }
+ } else if (node->type == XML_ATTRIBUTE_NODE) {
+ if ((!test_attr || !xmlStrcmp(node->name,
sxe->iter.name)) && match_ns(sxe, node, prefix)) {
+ break;
+ }
+ }
+next_iter:
+ node = node->next;
+ }
+
+ if (node) {
+ ALLOC_INIT_ZVAL(sxe->iter.data);
+ _node_as_zval(sxe, node, sxe->iter.data, SXE_ITER_NONE, NULL,
sxe->iter.nsprefix TSRMLS_CC);
+ }
+}
+
ZEND_API void php_sxe_reset_iterator(php_sxe_object *sxe TSRMLS_DC)
{
xmlNodePtr node;
- char *prefix;
- int test;
if (sxe->iter.data) {
zval_ptr_dtor(&sxe->iter.data);
@@ -1588,37 +1613,7 @@
case SXE_ITER_ATTRLIST:
node = (xmlNodePtr) node->properties;
}
- }
-
- prefix = sxe->iter.nsprefix;
- test = sxe->iter.type == SXE_ITER_ATTRLIST && sxe->iter.name;
-
- while (node) {
- SKIP_TEXT(node);
- if (sxe->iter.type != SXE_ITER_ATTRLIST && node->type ==
XML_ELEMENT_NODE) {
- if (sxe->iter.type == SXE_ITER_ELEMENT) {
- if (!xmlStrcmp(node->name, sxe->iter.name) &&
match_ns(sxe, node, prefix)) {
- break;
- }
- } else {
- if (match_ns(sxe, node, prefix)) {
- break;
- }
- }
- } else {
- if (node->type == XML_ATTRIBUTE_NODE) {
- if ((!test || !xmlStrcmp(node->name,
sxe->iter.name)) && match_ns(sxe, node, prefix)) {
- break;
- }
- }
- }
-next_iter:
- node = node->next;
- }
-
- if (node) {
- ALLOC_INIT_ZVAL(sxe->iter.data);
- _node_as_zval(sxe, node, sxe->iter.data, SXE_ITER_NONE, NULL,
sxe->iter.nsprefix TSRMLS_CC);
+ php_sxe_iterator_fetch(sxe, node TSRMLS_CC);
}
}
@@ -1695,8 +1690,6 @@
{
xmlNodePtr node = NULL;
php_sxe_object *intern;
- char *prefix;
- int test;
if (sxe->iter.data) {
intern = (php_sxe_object
*)zend_object_store_get_object(sxe->iter.data TSRMLS_CC);
@@ -1706,39 +1699,7 @@
}
if (node) {
- node = node->next;
- }
-
- prefix = sxe->iter.nsprefix;
- test = sxe->iter.type == SXE_ITER_ATTRLIST && sxe->iter.name;
-
- while (node) {
- SKIP_TEXT(node);
-
- if (sxe->iter.type != SXE_ITER_ATTRLIST && node->type ==
XML_ELEMENT_NODE) {
- if (sxe->iter.type == SXE_ITER_ELEMENT) {
- if (!xmlStrcmp(node->name, sxe->iter.name) &&
match_ns(sxe, node, prefix)) {
- break;
- }
- } else {
- if (match_ns(sxe, node, prefix)) {
- break;
- }
- }
- } else {
- if (node->type == XML_ATTRIBUTE_NODE) {
- if ((!test || !xmlStrcmp(node->name,
sxe->iter.name)) && match_ns(sxe, node, prefix)) {
- break;
- }
- }
- }
-next_iter:
- node = node->next;
- }
-
- if (node) {
- ALLOC_INIT_ZVAL(sxe->iter.data);
- _node_as_zval(sxe, node, sxe->iter.data, SXE_ITER_NONE, NULL,
sxe->iter.nsprefix TSRMLS_CC);
+ php_sxe_iterator_fetch(sxe, node->next TSRMLS_CC);
}
}
@@ -1917,7 +1878,7 @@
{
php_info_print_table_start();
php_info_print_table_header(2, "Simplexml support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.167 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.168 $");
php_info_print_table_row(2, "Schema support",
#ifdef LIBXML_SCHEMAS_ENABLED
"enabled");
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php