X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=tree.ml;h=7ea6f0337765b432c01add6681acbdfa9adb7eda;hb=ac8c1ac563a2c089f789eed5a03ff5b84a2c4fe0;hp=4b7cb5451a0dbef843c75e090252d16cbe4c003d;hpb=d046f2b9d8e39b30350399eafe122c30ff61c8c1;p=SXSI%2Fxpathcomp.git diff --git a/tree.ml b/tree.ml index 4b7cb54..7ea6f03 100644 --- a/tree.ml +++ b/tree.ml @@ -34,8 +34,8 @@ let equal_node : 'a node -> 'a node -> bool = (==) external parse_xml_uri : string -> int -> bool -> bool -> tree = "caml_call_shredder_uri" external parse_xml_string : string -> int -> bool -> bool -> tree = "caml_call_shredder_string" external tree_print_xml_fast3 : tree -> [`Tree ] node -> Unix.file_descr ->unit = "caml_xml_tree_print" -external tree_save : tree -> Unix.file_descr -> unit = "caml_xml_tree_save" -external tree_load : Unix.file_descr -> bool -> int -> tree = "caml_xml_tree_load" +external tree_save : tree -> Unix.file_descr -> string -> unit = "caml_xml_tree_save" +external tree_load : Unix.file_descr -> string -> bool -> int -> tree = "caml_xml_tree_load" external nullt : unit -> 'a node = "caml_xml_tree_nullt" @@ -132,7 +132,7 @@ external benchmark_jump : tree -> Tag.t -> unit = "caml_benchmark_jump" "noalloc let benchmark_jump t s = benchmark_jump t.doc s -external benchmark_fcns : tree -> unit = "caml_benchmark_fcns" "noalloc" +external benchmark_fcns : tree -> int = "caml_benchmark_fcns" "noalloc" let benchmark_fcns t = benchmark_fcns t.doc @@ -421,7 +421,7 @@ let save t str = (* we need to move the fd to the correct position *) flush out_c; ignore (Unix.lseek fd (pos_out out_c) Unix.SEEK_SET); - tree_save t.doc fd; + tree_save t.doc fd str; close_out out_c ;; @@ -430,7 +430,7 @@ let load ?(sample=64) ?(load_text=true) str = let in_c = Unix.in_channel_of_descr fd in 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 " ^ ms)); + (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 table : (Tag.t,(Ptset.Int.t*Ptset.Int.t*Ptset.Int.t*Ptset.Int.t)) Hashtbl.t = Marshal.from_channel in_c @@ -450,9 +450,9 @@ let load ?(sample=64) ?(load_text=true) str = ntable in let _ = Printf.eprintf "\nLoading tag table : " in - let ntable = time ~count:0 load_table () in + let ntable = time (load_table) () in ignore(Unix.lseek fd (pos_in in_c) Unix.SEEK_SET); - let tree = { doc = tree_load fd load_text sample; + let tree = { doc = tree_load fd str load_text sample; ttable = ntable;} in close_in in_c; tree @@ -513,7 +513,8 @@ let select_following_sibling t = fun ts -> fun n -> tree_select_following_sibling t.doc n v let next_sibling_below t = (); fun n _ -> tree_next_sibling t.doc n -let next_element_below t = (); fun n _ -> tree_next_element t.doc n +let next_element_below t = (); fun n _ -> tree_next_element t.doc n + let tagged_following_sibling_below t tag = (); fun n _ -> tree_tagged_following_sibling t.doc n tag let select_following_sibling_below t = fun ts ->