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

Reply via email to