-(******************************************************************************)
-(* SXSI : XPath evaluator *)
-(* Kim Nguyen (Kim.Nguyen@nicta.com.au) *)
-(* Copyright NICTA 2008 *)
-(* Distributed under the terms of the LGPL (see LICENCE) *)
-(******************************************************************************)
-module type BINARY =
-sig
- type node_content
- type string_content
- type descr = Nil| Node of node_content | String of string_content
- type t
- val parse_xml_uri : string -> t
- val parse_xml_string : string -> t
- val string : t -> string
- val descr : t -> descr
- val left : t -> t
- val right : t -> t
- val id : t -> int
- val tag : t -> Tag.t
- val print_xml_fast : out_channel -> t -> unit
- val compare : t -> t -> int
- val equal : t -> t -> bool
-end
-
-module Binary : BINARY
-
-val dump : Binary.t -> unit
-val traversal : Binary.t -> unit
-val full_traversal : Binary.t -> unit
-val cpp_traversal : Binary.t -> unit
+type t
+
+val init_contains : t -> string -> unit
+val init_naive_contains : t -> string -> unit
+
+
+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
+
+
+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 tag : t -> [ `Tree ] node -> Tag.t
+val id : t -> [ `Tree ] node -> int
+
+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 : 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 -> [ `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*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 -> [`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 -> [`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