X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=tree.ml;h=c3a225545a56fafd9bae7294cf1ef68e6b07fa11;hb=b821684aac2e3114c2eb28188020d7a09b5de2a5;hp=0c1f10b2ec8e4cf2af2fd453f824de1577e8a8d1;hpb=24fdea81b5506233d139bd7d72364a190bef35b8;p=SXSI%2Fxpathcomp.git diff --git a/tree.ml b/tree.ml index 0c1f10b..c3a2255 100644 --- a/tree.ml +++ b/tree.ml @@ -52,7 +52,7 @@ struct module Text = struct - type t (* pointer to the text collection *) + (* Todo *) external nullt : unit -> [`Text ] node = "caml_xml_tree_nullt" let nil = nullt () @@ -98,8 +98,6 @@ struct external tag : t -> [`Tree ] node -> Tag.t = "caml_xml_tree_tag" external tag_id : t -> [`Tree ] node -> unit = "caml_xml_tree_tag_id" - external text_collection : t -> Text.t = "caml_xml_tree_text_collection" - let is_last t n = equal nil (next_sibling t n) external prev_text : t -> [`Tree] node -> [`Text ] node = "caml_xml_tree_prev_text" @@ -113,7 +111,6 @@ struct external is_ancestor : t -> [`Tree ] node -> [`Tree ] node -> bool = "caml_xml_tree_is_ancestor" let print_skel t = - let textcol = text_collection t in let rec aux id = if (is_nil id) then Printf.eprintf "#\n" @@ -124,11 +121,11 @@ struct (Tag.to_string (tag t id)) (node_xml_id t id) (int_of_node (prev_text t id)) - (Text.get_text textcol (prev_text t id)) + (Text.get_text t (prev_text t id)) (int_of_node (my_text t id)) - (Text.get_text textcol (my_text t id)) + (Text.get_text t (my_text t id)) (int_of_node (next_text t id)) - (Text.get_text textcol (next_text t id)); + (Text.get_text t (next_text t id)); aux(first_child t id); aux(next_sibling t id); end @@ -136,17 +133,16 @@ struct aux (root t) let traversal t = - let textcol = text_collection t in let rec aux id = if not (is_nil id) then begin (* ignore (tag t id); - ignore (Text.get_text textcol (prev_text t id)); + ignore (Text.get_text t (prev_text t id)); if (is_leaf t id) - then ignore (Text.get_text textcol (my_text t id)); + then ignore (Text.get_text t (my_text t id)); if (is_last t id) - then ignore (Text.get_text textcol (next_text t id)); *) + then ignore (Text.get_text t (next_text t id)); *) aux (first_child t id); aux (next_sibling t id); end @@ -168,8 +164,7 @@ struct type doc = t - type t = { doc : doc; - text : Text.t; + type t = { doc : doc; node : descr } let dump { doc=t } = Tree.print_skel t @@ -179,7 +174,6 @@ struct open Tree let node_of_t t = { doc= t; - text = text_collection t; node = Node(NC (root t)) } @@ -201,7 +195,7 @@ struct let equal a b = (compare a b) == 0 let string t = match t.node with - | String i -> Text.get_text t.text i + | String i -> Text.get_text t.doc i | _ -> assert false let norm (n : [`Tree ] node ) = if is_nil n then Nil else Node (NC n) @@ -231,13 +225,13 @@ struct match n.node with | Node (NC t) when is_leaf n.doc t -> let txt = my_text n.doc t in - if Text.is_empty n.text txt + if Text.is_empty n.doc txt then Nil else Node(SC (txt,Tree.nil)) | Node (NC t) -> let fs = first_child n.doc t in let txt = prev_text n.doc fs in - if Text.is_empty n.text txt + if Text.is_empty n.doc txt then norm fs else Node (SC (txt, fs)) | Node(SC (i,_)) -> String i @@ -253,7 +247,7 @@ struct | Node(NC t) -> let ns = next_sibling n.doc t in let txt = next_text n.doc t in - if Text.is_empty n.text txt + if Text.is_empty n.doc txt then norm ns else Node (SC (txt, ns)) | Nil | String _ -> failwith "next_sibling" @@ -287,7 +281,7 @@ struct | _ -> false let contains t s = - Array.fold_left (fun a i -> DocIdSet.add i a) DocIdSet.empty (Text.contains t.text s) + Array.fold_left (fun a i -> DocIdSet.add i a) DocIdSet.empty (Text.contains t.doc s) let contains_old t s = let regexp = Str.regexp_string s in @@ -367,7 +361,7 @@ struct let rec aux n = match n.node with | Nil -> () - | String i -> () (*ignore(Text.get_text t.text i) *) + | String i -> () (*ignore(Text.get_text t.doc i) *) | Node(_) -> (* tag_id n; *) aux (first_child n); @@ -438,13 +432,13 @@ module DEBUGTREE match n.node with | Node (NC t) when is_leaf_ n.doc t -> let txt = my_text_ n.doc t in - if is_empty_ n.text txt + if is_empty_ n.doc txt then Nil else Node(SC (txt,XML.Tree.nil)) | Node (NC t) -> let fs = first_child_ n.doc t in let txt = prev_text_ n.doc fs in - if is_empty_ n.text txt + if is_empty_ n.doc txt then norm fs else Node (SC (txt, fs)) | Node(SC (i,_)) -> String i @@ -460,7 +454,7 @@ module DEBUGTREE | Node(NC t) -> let ns = next_sibling_ n.doc t in let txt = next_text_ n.doc t in - if is_empty_ n.text txt + if is_empty_ n.doc txt then norm ns else Node (SC (txt, ns)) | Nil | String _ -> failwith "next_sibling"