From: Kim Nguyễn Date: Tue, 24 Apr 2012 14:24:39 +0000 (+0200) Subject: Revert "Call directly the low-level subtree_elements function instead of" X-Git-Url: http://git.nguyen.vg/gitweb/?p=SXSI%2Fxpathcomp.git;a=commitdiff_plain;h=94ca223be992a0514b08bc55263a787a577cfe4c Revert "Call directly the low-level subtree_elements function instead of" This reverts commit d6c57f01eabebe2b11e1c701835562c2efc2fd92. The tentative fix for performance regression is buggy and make things slower. --- diff --git a/src/tree.ml b/src/tree.ml index af2ec3f..df72de7 100644 --- a/src/tree.ml +++ b/src/tree.ml @@ -337,8 +337,16 @@ let subtree_tags t n tag = tree_subtree_tags t.doc n tag external tree_subtree_size : tree -> [`Tree] Node.t -> int = "caml_xml_tree_subtree_size" "noalloc" let subtree_size t n = tree_subtree_size t.doc n -external tree_subtree_elements : tree -> [`Tree] Node.t -> int = "caml_xml_tree_subtree_elements" "noalloc" -let subtree_elements t n = tree_subtree_elements t.doc n +let subtree_elements t node = + let size = tree_subtree_size t.doc node - 1 in + if size == 0 then 0 + else let size = size - (tree_subtree_tags t.doc node Tag.pcdata) in + if size < 2 then size else + let acc = ref size in + for i = 0 to Array.length t.attribute_array - 1 do + acc := !acc - tree_subtree_tags t.doc node t.attribute_array.(i) + done; + !acc external tree_closing : tree -> [`Tree] Node.t -> [`Tree] Node.t = "caml_xml_tree_closing" "noalloc" let closing t n = tree_closing t.doc n