grew_base.mli 8.86 KB
Newer Older
bguillaum's avatar
bguillaum committed
1
2
3
4
5
6
7
8
9
(**********************************************************************************)
(*    Libcaml-grew - a Graph Rewriting library dedicated to NLP applications      *)
(*                                                                                *)
(*    Copyright 2011-2013 Inria, Université de Lorraine                           *)
(*                                                                                *)
(*    Webpage: http://grew.loria.fr                                               *)
(*    License: CeCILL (see LICENSE folder or "http://www.cecill.info")            *)
(*    Authors: see AUTHORS file                                                   *)
(**********************************************************************************)
pj2m's avatar
pj2m committed
10

bguillaum's avatar
bguillaum committed
11
12
module String_map : Map.S with type key = string
module String_set : Set.S with type elt = string
bguillaum's avatar
bguillaum committed
13

bguillaum's avatar
bguillaum committed
14
15
module Int_set : Set.S with type elt = int
module Int_map : Map.S with type key = int
pj2m's avatar
pj2m committed
16

bguillaum's avatar
bguillaum committed
17
18
19
20
21
22
23
24
(* ================================================================================ *)
(* [Pid_set] *)
module String_: sig
  (* [to_float]: robust conversion of string to float whatever is the locale *)
  val to_float: string -> float

  (* [to_float]: robust conversion of float to string whatever is the locale *)
  val of_float: float -> string
25
26
27
28

  (* [rm_first_char s] returns the string [s] without the first charater if s is not empty.
     If s in empty, the empty string is returned  *)
  val rm_first_char: string -> string
bguillaum's avatar
bguillaum committed
29
30
31
32

  (* [rm_peripheral_white s] returns the string [s] without any white space ot tab
    at the beginning or at the end of the string. *)
  val rm_peripheral_white: string -> string
bguillaum's avatar
bguillaum committed
33
34
35
36
37
38
39
40
end


(* ================================================================================ *)
(* [Dot] function to manipulate the dot format *)
module Dot: sig
  val to_png_file: string -> string -> unit
end
pj2m's avatar
pj2m committed
41

42

bguillaum's avatar
bguillaum committed
43
44
(* ================================================================================ *)
(* [Loc] general module to describe errors location: (file name, line number in file) *)
pj2m's avatar
pj2m committed
45
module Loc: sig
bguillaum's avatar
bguillaum committed
46
47
48
49
  type t

  val file_line: string -> int -> t
  val file: string -> t
pj2m's avatar
pj2m committed
50

bguillaum's avatar
bguillaum committed
51
52
  val opt_set_line: int -> t option -> t option

pj2m's avatar
pj2m committed
53
  val to_string: t -> string
54
  val to_line: t -> int
pj2m's avatar
pj2m committed
55
56
57
end


bguillaum's avatar
bguillaum committed
58
(* ================================================================================ *)
bguillaum's avatar
bguillaum committed
59
(* [File] functions to read/write file *)
bguillaum's avatar
bguillaum committed
60
61
module File: sig
  (** [write data file_name] write [data] in file named [file_name] *)
pj2m's avatar
pj2m committed
62
  val write: string -> string -> unit
bguillaum's avatar
bguillaum committed
63

bguillaum's avatar
bguillaum committed
64
  (** [read file_name] read the content of [file_name] line by line.
bguillaum's avatar
bguillaum committed
65
     Blanks lines (empty or only with spaces and tabs) are ignored.
bguillaum's avatar
bguillaum committed
66
     Lines with '%' as the first char are ignored. *)
bguillaum's avatar
bguillaum committed
67
  val read: string -> string list
68

69
  val read_ln: string -> (int * string) list
bguillaum's avatar
bguillaum committed
70
end
bguillaum's avatar
bguillaum committed
71

bguillaum's avatar
bguillaum committed
72
73
(* ================================================================================ *)
(* [Array_] contains additional functions on the caml [array] type. *)
pj2m's avatar
pj2m committed
74
module Array_: sig
bguillaum's avatar
bguillaum committed
75
76
  (* [dicho_mem elt array] returns true iff [elt] belongs to [array].
     Warning: the array MUST be sorted and without duplicates. *)
pj2m's avatar
pj2m committed
77
78
  val dicho_mem: 'a -> 'a array -> bool

bguillaum's avatar
bguillaum committed
79
80
81
  (* [dicho_find elt array] returns the index of the position where [elt] is found in the [array].
     [Not found] is raised if [elt] is not in [array].
     Warning: the array MUST be sorted and without duplicates. *)
pj2m's avatar
pj2m committed
82
  val dicho_find: 'a -> 'a array -> int
bguillaum's avatar
bguillaum committed
83
84
85
86

  (* [dicho_find_assoc key array] returns the value associated with [key] in the assoc [array].
     [Not found] is raised if [key] is not defined in [array].
     Warning: the array MUST be sorted (with respect to the first component) and without duplicates. *)
pj2m's avatar
pj2m committed
87
88
89
  val dicho_find_assoc: 'a -> ('a*'b) array -> int
end

bguillaum's avatar
bguillaum committed
90
91
(* ================================================================================ *)
(* [List_] contains additional functions on the caml [list] type. *)
pj2m's avatar
pj2m committed
92
93
94
95
module List_: sig
  (** [rm elt list] removes the first occurence of [elt] in [list]. [Not_found] can be raised. *)
  val rm: 'a -> 'a list -> 'a list
  val opt: 'a option list -> 'a list
bguillaum's avatar
bguillaum committed
96

97
98
  val set: int -> 'a -> 'a list -> 'a list

bguillaum's avatar
bguillaum committed
99
100
  (** [pos elt list] return [Some index] if [index] is the smallest position in the [list] equals to [elt].
      None is returned if [elt] is not in the [list] *)
bguillaum's avatar
bguillaum committed
101
  val pos: 'a -> 'a list -> int option
pj2m's avatar
pj2m committed
102
103
104

  val opt_map: ('a -> 'b option) -> 'a list -> 'b list

105
106
  val opt_mapi: (int -> 'a -> 'b option) -> 'a list -> 'b list

pj2m's avatar
pj2m committed
107
  val flat_map: ('a -> 'b list) -> 'a list -> 'b list
bguillaum's avatar
bguillaum committed
108
  (* remove [elt] from [list]. raise Not_found if [elt] is not in [list] *)
pj2m's avatar
pj2m committed
109
110
111
112
113
114
115
116
117
118
119
120
121
  val remove: 'a -> 'a list -> 'a list

  val foldi_left: (int -> 'a -> 'b -> 'a) -> 'a -> 'b list -> 'a

  (** [disjoint_list] returns true iff the two strictly ordered list are disjoint *)
  val sort_disjoint: 'a list -> 'a list -> bool

  val to_string: ('a -> string) -> string -> 'a list -> string

  val iteri: (int -> 'a -> unit) -> 'a list -> unit

  val mapi: (int -> 'a -> 'b) -> 'a list -> 'b list

122
123
  val sort_mem: 'a -> 'a list -> bool

pj2m's avatar
pj2m committed
124
125
126
127
128
129
130
131
  (* Insert an element in a sorted list. *)
  val sort_insert: 'a -> 'a list -> 'a list

  (* Insert an element in a usort list. Return Some l or None if the element is already in the list *)
  val usort_insert: ?compare:('a -> 'a -> int) -> 'a -> 'a list -> 'a list option

  val sort_is_empty_inter: 'a list -> 'a list -> bool
  val sort_inter: 'a list -> 'a list -> 'a list
bguillaum's avatar
bguillaum committed
132
  val sort_union: 'a list -> 'a list -> 'a list
pj2m's avatar
pj2m committed
133
134
135
136
137
  val sort_disjoint_union: ?compare:('a -> 'a -> int) -> 'a list -> 'a list -> 'a list
  val sort_include: 'a list -> 'a list -> bool
  val sort_included_diff: 'a list -> 'a list -> 'a list
  val sort_diff: 'a list -> 'a list -> 'a list

138
139
  val sort_assoc: 'a -> ('a * 'b) list -> 'b option

bguillaum's avatar
bguillaum committed
140
   (* [sort_remove_assoc k ass_list] returns the input list without the [key] element,
141
142
143
      if [key] not found, the unchanged input list is returned *)
  val sort_remove_assoc: 'a -> ('a * 'b) list -> ('a * 'b) list

144
  val foldi_left: (int -> 'a -> 'b -> 'a) -> 'a -> 'b list -> 'a
bguillaum's avatar
bguillaum committed
145
146

  val prev_next_iter: (?prev:'a -> ?next:'a -> 'a -> unit) -> 'a list -> unit
pj2m's avatar
pj2m committed
147
148
end

bguillaum's avatar
bguillaum committed
149
(* ================================================================================ *)
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
module type OrderedType =
  sig
    type t
      (** The type of the map keys. *)
    val compare : t -> t -> int
      (** A total ordering function over the keys.
          This is a two-argument function [f] such that
          [f e1 e2] is zero if the keys [e1] and [e2] are equal,
          [f e1 e2] is strictly negative if [e1] is smaller than [e2],
          and [f e1 e2] is strictly positive if [e1] is greater than [e2].
          Example: a suitable ordering function is the generic structural
          comparison function {!Pervasives.compare}. *)
  end
(** Input signature of the functor {!Map.Make}. *)

bguillaum's avatar
bguillaum committed
165
(* ================================================================================ *)
166
167
168
module type S =
  sig
    type key
bguillaum's avatar
bguillaum committed
169

170
171
172
173
    type +'a t

    val empty: 'a t

bguillaum's avatar
bguillaum committed
174
    (* an empty list returned if the key is undefined *)
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
    val assoc: key -> 'a t -> 'a list

    val is_empty: 'a t -> bool

    val to_string: ('a -> string) -> 'a t -> string

    val iter: (key -> 'a -> unit) -> 'a t -> unit

    val add: key -> 'a -> 'a t -> 'a t option

    val fold: ('b -> key -> 'a -> 'b) -> 'b -> 'a t -> 'b

    (* raise Not_found if no (key,elt) *)
    val remove: key -> 'a -> 'a t -> 'a t

    (* raise Not_found if no (key,elt) *)
    val remove_key: key -> 'a t -> 'a t

    (* [mem key value t ] test if the couple (key, value) is in the massoc [t]. *)
    val mem: key -> 'a -> 'a t -> bool

    (* mem_key key t] tests is [key] is associated to at least one value in [t]. *)
    val mem_key: key -> 'a t -> bool

    exception Not_disjoint
bguillaum's avatar
bguillaum committed
200
    val disjoint_union: 'a t -> 'a t -> 'a t
201
202
203
204
205

    exception Duplicate
    val merge_key: key -> key -> 'a t -> 'a t

    val exists: (key -> 'a -> bool) -> 'a t -> bool
206
207

    val rename: (key * key) list -> 'a t -> 'a t
208
209
  end

bguillaum's avatar
bguillaum committed
210
(* ================================================================================ *)
211
212
module Massoc_make (Ord : OrderedType) : S with type key = Ord.t

bguillaum's avatar
bguillaum committed
213
(* ================================================================================ *)
pj2m's avatar
pj2m committed
214
module Error: sig
bguillaum's avatar
bguillaum committed
215
216
217
218
  exception Build of (string * Loc.t option)
  exception Run of (string * Loc.t option)
  exception Bug of (string * Loc.t option)

pj2m's avatar
pj2m committed
219
220
  val build: ?loc: Loc.t -> ('a, unit, string, 'b) format4 -> 'a
  val run: ?loc: Loc.t -> ('a, unit, string, 'b) format4 -> 'a
bguillaum's avatar
bguillaum committed
221
  val bug: ?loc: Loc.t -> ('a, unit, string, 'b) format4 -> 'a
pj2m's avatar
pj2m committed
222
223
end

bguillaum's avatar
bguillaum committed
224
(* ================================================================================ *)
pj2m's avatar
pj2m committed
225
226
227
228
229
230
231
232
233
module Id: sig
  type name = string
  type t = int

  type table = name array

  (* [Stop] is raised if [string] is not in [table] *)
  val build: ?loc:Loc.t -> name -> table -> t

bguillaum's avatar
bguillaum committed
234
  val build_opt: name -> table -> t option
pj2m's avatar
pj2m committed
235
236
end

bguillaum's avatar
bguillaum committed
237
(* ================================================================================ *)
bguillaum's avatar
bguillaum committed
238
239
240
241
242
243
244
245
module Timeout: sig
  exception Stop

  val timeout: float option ref
  val start: unit -> unit

  val check: unit -> unit
end