From 94ca223be992a0514b08bc55263a787a577cfe4c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kim=20Nguy=E1=BB=85n?= Date: Tue, 24 Apr 2012 16:24:39 +0200 Subject: [PATCH] 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. --- src/tree.ml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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 -- 2.17.1