31
31
* Since:
32
32
*/
33
33
34
+ static int get_nodelist_length (dom_object * obj )
35
+ {
36
+ dom_nnodemap_object * objmap = (dom_nnodemap_object * ) obj -> ptr ;
37
+ if (!objmap ) {
38
+ return 0 ;
39
+ }
40
+
41
+ if (objmap -> ht ) {
42
+ return xmlHashSize (objmap -> ht );
43
+ }
44
+
45
+ if (objmap -> nodetype == DOM_NODESET ) {
46
+ HashTable * nodeht = HASH_OF (& objmap -> baseobj_zv );
47
+ return zend_hash_num_elements (nodeht );
48
+ }
49
+
50
+ xmlNodePtr nodep = dom_object_get_node (objmap -> baseobj );
51
+ if (!nodep ) {
52
+ return 0 ;
53
+ }
54
+
55
+ int count = 0 ;
56
+ if (objmap -> nodetype == XML_ATTRIBUTE_NODE || objmap -> nodetype == XML_ELEMENT_NODE ) {
57
+ xmlNodePtr curnode = nodep -> children ;
58
+ if (curnode ) {
59
+ count ++ ;
60
+ while (curnode -> next != NULL ) {
61
+ count ++ ;
62
+ curnode = curnode -> next ;
63
+ }
64
+ }
65
+ } else {
66
+ if (nodep -> type == XML_DOCUMENT_NODE || nodep -> type == XML_HTML_DOCUMENT_NODE ) {
67
+ nodep = xmlDocGetRootElement ((xmlDoc * ) nodep );
68
+ } else {
69
+ nodep = nodep -> children ;
70
+ }
71
+ dom_get_elements_by_tag_name_ns_raw (
72
+ nodep , (char * ) objmap -> ns , (char * ) objmap -> local , & count , -1 );
73
+ }
74
+
75
+ return count ;
76
+ }
77
+
34
78
/* {{{ length int
35
79
readonly=yes
36
80
URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-203510337
37
81
Since:
38
82
*/
39
83
int dom_nodelist_length_read (dom_object * obj , zval * retval )
40
84
{
41
- dom_nnodemap_object * objmap ;
42
- xmlNodePtr nodep , curnode ;
43
- int count = 0 ;
44
- HashTable * nodeht ;
45
-
46
- objmap = (dom_nnodemap_object * )obj -> ptr ;
47
- if (objmap != NULL ) {
48
- if (objmap -> ht ) {
49
- count = xmlHashSize (objmap -> ht );
50
- } else {
51
- if (objmap -> nodetype == DOM_NODESET ) {
52
- nodeht = HASH_OF (& objmap -> baseobj_zv );
53
- count = zend_hash_num_elements (nodeht );
54
- } else {
55
- nodep = dom_object_get_node (objmap -> baseobj );
56
- if (nodep ) {
57
- if (objmap -> nodetype == XML_ATTRIBUTE_NODE || objmap -> nodetype == XML_ELEMENT_NODE ) {
58
- curnode = nodep -> children ;
59
- if (curnode ) {
60
- count ++ ;
61
- while (curnode -> next != NULL ) {
62
- count ++ ;
63
- curnode = curnode -> next ;
64
- }
65
- }
66
- } else {
67
- if (nodep -> type == XML_DOCUMENT_NODE || nodep -> type == XML_HTML_DOCUMENT_NODE ) {
68
- nodep = xmlDocGetRootElement ((xmlDoc * ) nodep );
69
- } else {
70
- nodep = nodep -> children ;
71
- }
72
- curnode = dom_get_elements_by_tag_name_ns_raw (
73
- nodep , (char * ) objmap -> ns , (char * ) objmap -> local , & count , -1 );
74
- }
75
- }
76
- }
77
- }
78
- }
79
-
80
- ZVAL_LONG (retval , count );
85
+ ZVAL_LONG (retval , get_nodelist_length (obj ));
81
86
return SUCCESS ;
82
87
}
83
88
@@ -94,9 +99,7 @@ PHP_METHOD(DOMNodeList, count)
94
99
}
95
100
96
101
intern = Z_DOMOBJ_P (id );
97
- if (dom_nodelist_length_read (intern , return_value ) == FAILURE ) {
98
- RETURN_FALSE ;
99
- }
102
+ RETURN_LONG (get_nodelist_length (intern ));
100
103
}
101
104
/* }}} end dom_nodelist_count */
102
105
0 commit comments