Fixed bug in NextElement, improved caching
[SXSI/xpathcomp.git] / tree.mli
index 3f72894..ba0fc44 100644 (file)
--- a/tree.mli
+++ b/tree.mli
@@ -1,59 +1,80 @@
 type t 
+
 val init_contains : t -> string -> unit
 val init_naive_contains : t -> string -> unit
-val is_nil : t -> bool
-val is_node : t -> bool
-val dump_node : t -> string
+
+
 val parse_xml_uri : string -> t
 val parse_xml_string : string -> t
 val save : t -> string -> unit
 val load : ?sample:int -> string -> t
 val tag_pool : t -> Tag.pool
-val compare : t -> t -> int
-val equal : t -> t -> bool
-val mk_nil : t -> t
-val root : t -> t
-val is_root : t -> bool
-val parent : t -> t
-val first_child : t -> t
-val tagged_child : Tag.t -> t ->  t
-val select_child : Ptset.Int.t -> t ->  t
 
-val next_sibling : t -> t
 
-val tagged_sibling : Tag.t -> t ->  t
-val tagged_sibling_ctx : Tag.t -> t -> t -> t
+type 'a node = private int
+type node_kind = [ `Tree | `Text ]
+val equal : [ `Tree ] node -> [ `Tree ] node -> bool
+val compare : [ `Tree ] node -> [ `Tree ] node -> int
+val dump_node : 'a node -> string
+
+
+val nil : [ `Tree ] node
+val root : [ `Tree ] node
+
+val is_root : [ `Tree ] node -> bool
+val is_nil : [ `Tree ] node -> bool
+
+val parent : t -> [ `Tree ] node -> [ `Tree ] node
+val first_child : t -> [ `Tree ] node -> [ `Tree ] node
+val first_element : t -> [ `Tree ] node -> [ `Tree ] node
+val tagged_child : t -> Tag.t -> [ `Tree ] node -> [ `Tree ] node
+
+val select_child : t -> Ptset.Int.t -> [ `Tree ] node -> [ `Tree ] node
+
+val next_sibling : t -> [ `Tree ] node -> [ `Tree ] node
+val next_element : t -> [ `Tree ] node -> [ `Tree ] node
+
+val next_sibling_ctx : t -> [ `Tree ] node -> [ `Tree ] node ->  [ `Tree ] node
+val next_element_ctx : t -> [ `Tree ] node -> [ `Tree ] node ->  [ `Tree ] node
+
+val tagged_sibling : t ->  Tag.t ->  [ `Tree ] node -> [ `Tree ] node
+val tagged_sibling_ctx : t -> Tag.t -> [ `Tree ] node -> [ `Tree ] node -> [ `Tree ] node
+
+val select_sibling : t -> Ptset.Int.t -> [ `Tree ] node -> [ `Tree ] node
+val select_sibling_ctx : t -> Ptset.Int.t -> [ `Tree ] node -> [ `Tree ] node -> [ `Tree ] node 
 
-val select_sibling : Ptset.Int.t -> t -> t 
-val select_sibling_ctx : Ptset.Int.t -> t -> t -> t
 
-val next_sibling_ctx : t -> t -> t
 
-val tag : t -> Tag.t
-val id : t -> int
+val tag : t -> [ `Tree ] node -> Tag.t
+val id : t -> [ `Tree ] node -> int
 
-val tagged_desc : Tag.t -> t -> t
-val select_desc : Ptset.Int.t -> t -> t
+val tagged_desc : t -> Tag.t -> [ `Tree ] node -> [`Tree] node
+val select_desc : t -> Ptset.Int.t -> [ `Tree ] node -> [`Tree] node
 
-val tagged_foll_ctx : Tag.t -> t -> t -> t
-val select_foll_ctx : Ptset.Int.t -> t -> t -> t
+val tagged_foll_ctx : t -> Tag.t ->  [ `Tree ] node -> [`Tree] node -> [ `Tree ] node
+val select_foll_ctx : t -> Ptset.Int.t ->  [ `Tree ] node -> [`Tree] node -> [ `Tree ] node
 
 val count : t -> string -> int
-val print_xml_fast : out_channel -> t -> unit
+val print_xml_fast : out_channel -> t -> [ `Tree ] node -> unit
 
+val tags_children : t -> Tag.t -> Ptset.Int.t
 val tags_below : t -> Tag.t -> Ptset.Int.t
+val tags_siblings : t -> Tag.t -> Ptset.Int.t
 val tags_after : t -> Tag.t -> Ptset.Int.t
-val tags : t -> Tag.t -> Ptset.Int.t*Ptset.Int.t
-val is_below_right : t -> t -> bool
-val is_left : t -> bool
+val tags : t ->  Tag.t  -> Ptset.Int.t*Ptset.Int.t*Ptset.Int.t*Ptset.Int.t
+val is_below_right : t ->  [`Tree] node ->  [`Tree] node -> bool
+val is_left : t ->  [`Tree] node -> bool
 
-val binary_parent : t -> t
+val binary_parent : t ->  [`Tree] node -> [`Tree] node 
 
 val count_contains : t -> string -> int
 val unsorted_contains : t -> string -> unit
 val text_size : t -> int
-val doc_ids : t -> int*int
-val subtree_tags : t -> Tag.t -> int
-val get_text : t -> string
+val doc_ids : t ->  [`Tree] node ->  [`Text] node *  [`Text] node 
+val subtree_tags : t -> Tag.t ->  [`Tree] node -> int
+val get_text : t -> [`Tree] node ->  string
 
 val dump_tree : Format.formatter -> t -> unit
+val subtree_size : t -> [`Tree] node -> int
+val text_below : t -> [`Tree] node -> [`Tree] node
+val text_next :  t -> [`Tree] node -> [`Tree] node -> [`Tree] node