Skip to content
This repository
tag: v521
Fetching contributors…

Cannot retrieve contributors at this time

file 68 lines (55 sloc) 1.871 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
(*
Copyright © 2011 MLstate

This file is part of OPA.

OPA is free software: you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License, version 3, as published by
the Free Software Foundation.

OPA is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
more details.

You should have received a copy of the GNU Affero General Public License
along with OPA. If not, see <http://www.gnu.org/licenses/>.
*)

(**
@author Henri Binsztok,
@author Gregoire Makridis
*)

  type t

  val root : t
  val add : t -> Keys.t -> t
  val pop_last: t -> (Keys.t * t) option
  val last: t -> Keys.t (* Warning: raises an exception on root path! *)
  val fold : ('a -> Keys.t -> 'a) -> 'a -> t -> 'a
  val to_string : t -> string
  val size : t -> int

  val compare : t -> t -> int
  val remaining : t -> t -> Keys.t list option
  val remaining_prefix : t -> t -> t option
  val is_prefix : t -> t -> bool
  val concat : t -> t -> t
  val to_list : t -> Keys.t list
  val of_list : Keys.t list -> t

(** {6 IO} *)

(**
Access the keys from a path in reverse order.
Currently, keys in path are stored physically in reverse order.
*)
val write : t -> Keys.t list

(**
Build a path from a physicall path. Keys are given in reverse order,
since currently keys in path are stored physically in reverse order.
*)
val read : Keys.t list -> t

(** {6 HashCons} *)

(**
The implementation needs rectypes, but the interface does not export it.
*)
module HashCons :
sig
  type ht
  val create : unit -> ht
  val clear : ht -> unit
  val find : ht -> Keys.t -> ht * Keys.t list
  val add : ht -> Keys.t -> ht * Keys.t list -> unit
end
Something went wrong with that request. Please try again.