-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmisc.mli
More file actions
executable file
·225 lines (160 loc) · 8.16 KB
/
misc.mli
File metadata and controls
executable file
·225 lines (160 loc) · 8.16 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
(* Poling: Proof Of Linearizability Generator
* Poling is built on top of CAVE and shares the same license with CAVE
* See LICENSE.txt for license.
* Contact: He Zhu, Department of Computer Science, Purdue University
* Email: zhu103@purdue.edu
*)
(******************************************************************************)
(* __ ___ CAVE: Concurrent Algorithm VErifier *)
(* / /\ \ / | Copyright (c) 2010, Viktor Vafeiadis *)
(* | /--\ \ / |--- *)
(* \__ / \ \/ |___ See LICENSE.txt for license. *)
(* *)
(******************************************************************************)
(** Library functions and miscellaneous routines *)
val formatter : Format.formatter ref
val pp : ('a, Format.formatter, unit) format -> 'a
module StringSet : Set.S with type elt = string
module StringMap : Map.S with type key = string
val identity : 'a -> 'a
(** The identity function *)
val (|>) : 'a -> ('a -> 'b) -> 'b
(** Reverse function application *)
val (|>>) : 'a -> ('a -> unit) -> 'a
(** Reverse function application and return its argument *)
val (>>) : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
(** Reverse function composition *)
val (>>=) : 'a option -> ('a -> 'b option) -> 'b option
(** Option monad bind *)
(** copy the content of tb2 to tb1 *)
val mergeHashtbl : ('a, 'b) Hashtbl.t -> ('a, 'b) Hashtbl.t -> ('a, 'b) Hashtbl.t
(** Transform a hashtable to list *)
val hashtbltoList : ('a, 'b) Hashtbl.t -> ('a * 'b) list
(** Operations on linked lists *)
module List : sig
val length : 'a list -> int
val hd : 'a list -> 'a
val tl : 'a list -> 'a list
val nth : 'a list -> int -> 'a
val rev : 'a list -> 'a list
val append : 'a list -> 'a list -> 'a list
val rev_append : 'a list -> 'a list -> 'a list
val concat : 'a list list -> 'a list
val flatten : 'a list list -> 'a list
val iter : ('a -> unit) -> 'a list -> unit
val map : ('a -> 'b) -> 'a list -> 'b list
val map_i : (int -> 'a -> 'b) -> 'a list -> 'b list
val rev_map : ('a -> 'b) -> 'a list -> 'b list
val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
val fold_right : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b
val iter2 : ('a -> 'b -> unit) -> 'a list -> 'b list -> unit
val map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
val rev_map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
val fold_left2 : ('a -> 'b -> 'c -> 'a) -> 'a -> 'b list -> 'c list -> 'a
val fold_right2 : ('a -> 'b -> 'c -> 'c) -> 'a list -> 'b list -> 'c -> 'c
val for_all : ('a -> bool) -> 'a list -> bool
val exists : ('a -> bool) -> 'a list -> bool
val for_all2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
val exists2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
val mem : 'a -> 'a list -> bool
val memq : 'a -> 'a list -> bool
val find : ('a -> bool) -> 'a list -> 'a
val filter : ('a -> bool) -> 'a list -> 'a list
val find_all : ('a -> bool) -> 'a list -> 'a list
val partition : ('a -> bool) -> 'a list -> 'a list * 'a list
val assoc : 'a -> ('a * 'b) list -> 'b
val assq : 'a -> ('a * 'b) list -> 'b
val mem_assoc : 'a -> ('a * 'b) list -> bool
val mem_assq : 'a -> ('a * 'b) list -> bool
val remove_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list
val remove_assq : 'a -> ('a * 'b) list -> ('a * 'b) list
val split : ('a * 'b) list -> 'a list * 'b list
val combine : 'a list -> 'b list -> ('a * 'b) list
val sort : ('a -> 'a -> int) -> 'a list -> 'a list
val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list
val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list
val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list
(** New operations *)
val fold : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b
val fold_cons : ('a -> 'b) -> 'a list -> 'b list -> 'b list
val fold_append : ('a -> 'b list) -> 'a list -> 'b list -> 'b list
val lifted_fold : ('a -> 'b -> 'b option) -> 'a list -> 'b -> 'b option
val reduce : ('a -> 'b list -> 'b list) -> 'a list -> 'b list
val reduce_append : ('a -> 'b list) -> 'a list -> 'b list
val filter_not : ('a -> bool) -> 'a list -> 'a list
val map_partial: ('a -> 'b option) -> 'a list -> 'b list
val map_option : ('a -> 'b option) -> 'a list -> 'b list option
val power_set : 'a list -> ('a list) list
val remove_duplicates : 'a list -> 'a list
val expand : ('a -> 'a list * 'b list) -> 'a list -> 'b list -> 'b list
val to_string : string -> ('a -> string) -> 'a list -> unit
val flap : ('a -> 'b list) -> 'a list -> ' b list
val lflap : 'a list list -> 'a list list
val tflap2 : 'a list * 'b list -> ('a -> 'b -> 'c) -> 'c list
val tflap3 : 'a list * 'b list * 'c list -> ('a -> 'b -> 'c -> 'd) -> 'd list
val isPrefix : ('a -> 'a -> int) -> 'a list -> 'a list -> bool
val isSuffix : ('a -> 'a -> int) -> 'a list -> 'a list -> bool
val perms : 'a list -> ('a list) list
val intersect : 'a list -> 'a list -> ('a -> 'a -> bool)-> 'a list
val copy : 'a list -> 'a list
end
(* -------------------------------------------------------------------------- *)
(** {2 Components} *)
(* -------------------------------------------------------------------------- *)
(** Components can be compared using pointer equality *)
type component
val component_is_field : component -> bool
val component_of_string : string -> component
val string_of_component : component -> string
val string_of_field_component : component -> string
val compare_component : component -> component -> int
val node_component : component
val list_link_tag : component
val list_data_tag : component
val dl_Llink_tag : component
val dl_Rlink_tag : component
val tree_link_tags : component * component
val tree_data_tag : component
val is_value_field : component -> bool
val is_lock_field : component -> bool
val possible_link_fields : component list ref
module CompSet : Set.S with type elt = component
(* -------------------------------------------------------------------------- *)
(** {2 Packed association lists} *)
(* -------------------------------------------------------------------------- *)
type ('a, 'b) plist =
PNil
| PCons of 'a * 'b * ('a, 'b) plist
(** Packed association lists *)
module PList : sig
val nil : ('a, 'b) plist
val cons : 'a -> 'b -> ('a, 'b) plist -> ('a, 'b) plist
val rev_append : ('a, 'b) plist -> ('a, 'b) plist -> ('a, 'b) plist
val for_all : ('a -> 'b -> bool) -> ('a, 'b) plist -> bool
val exists : ('a -> 'b -> bool) -> ('a, 'b) plist -> bool
val fold : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) plist -> 'c -> 'c
val fold_val : ('b -> 'c -> 'c) -> ('a, 'b) plist -> 'c -> 'c
val lifted_fold : ('a -> 'b -> 'c -> 'c option)
-> ('a, 'b) plist -> 'c -> 'c option
val iter : ('a -> 'b -> unit) -> ('a, 'b) plist -> unit
val iter_val : ('b -> unit) -> ('a, 'b) plist -> unit
val length : ('a, 'b) plist -> int
val filter : ('a -> 'b -> bool) -> ('a, 'b) plist -> ('a, 'b) plist
val rev_partition : ('a -> 'b -> bool) -> ('a, 'b) plist
-> ('a, 'b) plist * ('a, 'b) plist
val map_val : ('b -> 'b) -> ('a, 'b) plist -> ('a, 'b) plist
val mem_assq : 'a -> ('a, 'b) plist -> bool
(** [assq k l] raises [Not_found] if there is no mapping for the key
[k] in the list [l] *)
val assq : 'a -> ('a, 'b) plist -> 'b
val try_assq : 'a -> ('a, 'b) plist -> 'b option
val remove_assq : 'a -> ('a, 'b) plist -> ('a, 'b) plist
(** [findq l e x] returns the first mapping of [x] in [l];
or the default_value [e], if there is none. Pointer equality
is used to compare keys in the association list. *)
val findq : ('a, 'b) plist -> 'b -> 'a -> 'b
val merge : ('a -> 'a -> int) -> ('a, 'b) plist
-> ('a, 'b) plist -> ('a, 'b) plist
val get_first : ('a -> 'b -> 'c option) -> ('a, 'b) plist -> 'c option
val combine : 'a list -> 'b list -> ('a, 'b) plist
end