Follow the changes in XMLTree API: xml_tree::subtree_elements() does
[SXSI/xpathcomp.git] / src / tree.ml
index ec253bc..f73e347 100644 (file)
@@ -347,10 +347,10 @@ let rec iter_array_tag i a len tree node acc =
     iter_array_tag (i+1) a len tree node
       (acc - (tree_subtree_tags tree node a.(i)))
 
-external tree_subtree_elements : tree -> [`Tree] Node.t -> tag_list -> int = "caml_xml_tree_subtree_elements" "noalloc"
+external tree_subtree_elements : tree -> [`Tree] Node.t -> int = "caml_xml_tree_subtree_elements" "noalloc"
 
 let subtree_elements t node =
-  tree_subtree_elements t.doc node t.attribute_array
+  tree_subtree_elements t.doc node
 (*
 let subtree_elements t node =
   let size = tree_subtree_size t.doc node - 1 in
@@ -572,7 +572,7 @@ let parse_xml_string str = node_of_t (TreeBuilder.parse_string str)
 let size t = tree_size t.doc;;
 
 let magic_string = "SXSI_INDEX"
-let version_string = "3"
+let version_string = "4"
 
 let pos fd =
   Unix.lseek fd 0  Unix.SEEK_CUR
@@ -633,7 +633,7 @@ let load ?(sample=64) ?(load_text=true) str =
   let _ = set_binary_mode_in in_c true in
   let load_table () =
     (let ms = input_line in_c in if ms <> magic_string then failwith "Invalid index file");
-    (let vs = input_line in_c in if vs <> version_string then failwith "Invalid version file");
+    (let vs = input_line in_c in if vs <> version_string then failwith "Unsupported index format");
     let c = load_tag_table in_c in
     let s = load_tag_table in_c in
     let d = load_tag_table in_c in
@@ -785,7 +785,7 @@ let stats tree =
     in
     traverse tree.doc root [] 0;
     let sumdepth = Hashtbl.fold (fun p c acc -> (List.length p) * c + acc) h 0 in
-    
+    let alltags = Ptset.Int.union tree.elements tree.attributes in
     Logger.print err_formatter "Statistics :@\n\
 Average depth: %f@\n\
 Longest path: %i@\n\
@@ -793,17 +793,22 @@ Number of distinct paths: %i@\n\
 Number of nodes: %i@\n\
 Number of leaves: %i@\n\
 Number of pcdata/cdata nodes: %i@\n\
-Number of distinct tags: %i@\n@?"
+Number of distinct tags: %i@\n\
+Largest tag id: %i@\n@?"
       (float_of_int sumdepth /. float_of_int !numleaves)
       !depth
       (Hashtbl.length h)
       (tree_subtree_size tree.doc root)
       !numleaves
       !numtexts
-      (Ptset.Int.cardinal (Ptset.Int.union tree.elements tree.attributes))
+      (Ptset.Int.cardinal alltags)
+      (Ptset.Int.max_elt alltags)
 
 (*
   Logger.print err_formatter "Average depth: %f, number of leaves %i@\n@?" ((float_of_int a)/. (float_of_int b)) b
 ;;
 
 *)
+
+type tree_pointer = tree
+let get_tree_pointer x = x.doc