Revert "Call directly the low-level subtree_elements function instead of"
[SXSI/xpathcomp.git] / src / tree.ml
index af2ec3f..df72de7 100644 (file)
@@ -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