From: Kim Nguyễn Date: Tue, 24 Apr 2012 13:50:38 +0000 (+0200) Subject: 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=d6c57f01eabebe2b11e1c701835562c2efc2fd92 Call directly the low-level subtree_elements function instead of re-implementing it in ocaml. Fixes bug: a3fdf1a5 Performance regression --- diff --git a/src/tree.ml b/src/tree.ml index df72de7..af2ec3f 100644 --- a/src/tree.ml +++ b/src/tree.ml @@ -337,16 +337,8 @@ 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 -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_subtree_elements : tree -> [`Tree] Node.t -> int = "caml_xml_tree_subtree_elements" "noalloc" +let subtree_elements t n = tree_subtree_elements t.doc n external tree_closing : tree -> [`Tree] Node.t -> [`Tree] Node.t = "caml_xml_tree_closing" "noalloc" let closing t n = tree_closing t.doc n