-
Notifications
You must be signed in to change notification settings - Fork 125
/
path.mli
68 lines (55 loc) · 1.83 KB
/
path.mli
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