Hashtbl.replace h t
(pt_cup sc schild,pt_cup sbelow sb, pt_cup ssibling ss, pt_cup safter sa)
in
- let rec loop_right id acc_sibling acc_after=
+ let rec loop_right id acc_after =
if id == nil
- then (acc_sibling,acc_after)
+ then Ptset.Int.empty,Ptset.Int.empty,acc_after
else
- let sibling2,after2 = loop_right (tree_next_sibling tree id) acc_sibling acc_after in
- let child1,below1 = loop_left (tree_first_child tree id) after2 in
- let tag = tree_tag_id tree id in
- update tag child1 below1 sibling2 after2;
- (pt_add tag sibling2, (pt_add tag (pt_cup after2 below1)))
+ let sibling2,desc2,after2 = loop_right (tree_next_sibling tree id) acc_after in
+ let child1,desc1,after1 = loop_left (tree_first_child tree id) after2 in
+ let tag = tree_tag_id tree id in
+ update tag child1 desc1 sibling2 after2;
+ ( pt_add tag sibling2,
+ pt_add tag (pt_cup desc1 desc2),
+ pt_cup after1 (pt_cup desc1 desc2) )
and loop_left id acc_after =
- if id == nil
- then (Ptset.Int.empty,Ptset.Int.empty)
+ if id == nil
+ then Ptset.Int.empty,Ptset.Int.empty,acc_after
else
- let sibling2,after2 = loop_right (tree_next_sibling tree id) Ptset.Int.empty acc_after in
- let child1,below1 = loop_left (tree_first_child tree id) after2 in
- let tag = tree_tag_id tree id in
- update tag child1 below1 sibling2 after2;
- (pt_add tag sibling2,(pt_add tag (pt_cup after2 below1)))
+ let sibling2,desc2,after2 = loop_right (tree_next_sibling tree id) acc_after in
+ let child1,desc1,after1 = loop_left (tree_first_child tree id) after2 in
+ let tag = tree_tag_id tree id in
+ update tag child1 desc1 sibling2 after2;
+ (pt_add tag sibling2,
+ pt_add tag (pt_cup desc1 desc2),
+ acc_after )
in
let _ = loop_left (tree_root tree) Ptset.Int.empty in h
let node_of_t t =
let _ = Tag.init (Obj.magic t) in
let table = collect_tags t
+ in (*
+ let _ = Hashtbl.iter (fun t (c,d,ns,f) ->
+ Printf.eprintf "Tag %s has:\n" (Tag.to_string t);
+ Printf.eprintf "Child tags: ";
+ Ptset.Int.iter (fun t -> Printf.eprintf "%s "(Tag.to_string t)) c;
+ Printf.eprintf "\nDescendant tags: ";
+ Ptset.Int.iter (fun t -> Printf.eprintf "%s "(Tag.to_string t)) d;
+ Printf.eprintf "\nNextSibling tags: ";
+ Ptset.Int.iter (fun t -> Printf.eprintf "%s "(Tag.to_string t)) ns;
+ Printf.eprintf "\nFollowing tags: ";
+ Ptset.Int.iter (fun t -> Printf.eprintf "%s "(Tag.to_string t)) f;
+ Printf.eprintf "\n\n%!";) table
in
+
+ *)
{ doc= t;
ttable = table;
}
external pool : tree -> Tag.pool = "%identity"
let magic_string = "SXSI_INDEX"
-let version_string = "1"
+let version_string = "2"
let pos fd =
Unix.lseek fd 0 Unix.SEEK_CUR