22
22
* along with this program; if not, write to the Free Software
23
23
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *)
24
24
25
- type ('key, 'value, 'id) t
25
+ type ('key, 'value, 'id) t
26
26
27
27
type ('key, 'id) cmp = ('key , 'id ) Belt_Id .cmp
28
28
@@ -31,119 +31,140 @@ val empty: ('k, 'v, 'id) t
31
31
val isEmpty : ('k , 'v , 'id ) t -> bool
32
32
33
33
val has :
34
- ('k , 'a , 'id ) t -> 'k ->
35
- cmp :('k , 'id ) cmp ->
36
- bool
34
+ ('k , 'a , 'id ) t -> 'k ->
35
+ cmp :('k , 'id ) cmp ->
36
+ bool
37
37
38
- val cmpU :
39
- ('k , 'v , 'id ) t ->
38
+ val cmpU :
39
+ ('k , 'v , 'id ) t ->
40
40
('k , 'v , 'id ) t ->
41
41
kcmp :('k , 'id ) cmp ->
42
42
vcmp :('v -> 'v -> int [@ bs]) ->
43
43
int
44
44
val cmp :
45
- ('k , 'v , 'id ) t ->
45
+ ('k , 'v , 'id ) t ->
46
46
('k , 'v , 'id ) t ->
47
47
kcmp :('k , 'id ) cmp ->
48
- vcmp :('v -> 'v -> int ) ->
48
+ vcmp :('v -> 'v -> int ) ->
49
49
int
50
50
51
- val eqU :
52
- ('k , 'a , 'id ) t ->
51
+ val eqU :
52
+ ('k , 'a , 'id ) t ->
53
53
('k , 'a , 'id ) t ->
54
54
kcmp :('k , 'id ) cmp ->
55
- veq :('a -> 'a -> bool [@ bs]) ->
55
+ veq :('a -> 'a -> bool [@ bs]) ->
56
56
bool
57
- val eq :
58
- ('k , 'a , 'id ) t ->
57
+ val eq :
58
+ ('k , 'a , 'id ) t ->
59
59
('k , 'a , 'id ) t ->
60
60
kcmp :('k , 'id ) cmp ->
61
- veq :('a -> 'a -> bool ) ->
61
+ veq :('a -> 'a -> bool ) ->
62
62
bool
63
63
(* * [eq m1 m2 cmp] tests whether the maps [m1] and [m2] are
64
64
equal, that is, contain equal keys and associate them with
65
65
equal data. [cmp] is the equality predicate used to compare
66
66
the data associated with the keys. *)
67
-
68
- val forEachU : ('k , 'a , 'id ) t -> ('k -> 'a -> unit [@ bs]) -> unit
69
- val forEach : ('k , 'a , 'id ) t -> ('k -> 'a -> unit ) -> unit
67
+
68
+ val forEachU : ('k , 'a , 'id ) t -> ('k -> 'a -> unit [@ bs]) -> unit
69
+ val forEach : ('k , 'a , 'id ) t -> ('k -> 'a -> unit ) -> unit
70
70
(* * [forEach m f] applies [f] to all bindings in map [m].
71
- [f] receives the 'k as first argument, and the associated value
72
- as second argument. The bindings are passed to [f] in increasing
71
+ [f] receives the key as first argument, and the associated value
72
+ as second argument. The bindings are passed to [f] in increasing
73
73
order with respect to the ordering over the type of the keys. *)
74
-
75
- val reduceU : ('k , 'a , 'id ) t -> 'b -> ('b -> 'k -> 'a -> 'b [@ bs]) -> 'b
76
- val reduce : ('k , 'a , 'id ) t -> 'b -> ('b -> 'k -> 'a -> 'b ) -> 'b
74
+
75
+ val reduceU : ('k , 'a , 'id ) t -> 'b -> ('b -> 'k -> 'a -> 'b [@ bs]) -> 'b
76
+ val reduce : ('k , 'a , 'id ) t -> 'b -> ('b -> 'k -> 'a -> 'b ) -> 'b
77
77
(* * [reduce m a f] computes [(f kN dN ... (f k1 d1 a)...)],
78
78
where [k1 ... kN] are the keys of all bindings in [m]
79
79
(in increasing order), and [d1 ... dN] are the associated data. *)
80
80
81
- val everyU : ('k , 'a , 'id ) t -> ('k -> 'a -> bool [@ bs]) -> bool
82
- val every : ('k , 'a , 'id ) t -> ('k -> 'a -> bool ) -> bool
81
+ val everyU : ('k , 'a , 'id ) t -> ('k -> 'a -> bool [@ bs]) -> bool
82
+ val every : ('k , 'a , 'id ) t -> ('k -> 'a -> bool ) -> bool
83
83
(* * [every m p] checks if all the bindings of the map
84
84
satisfy the predicate [p]. Order unspecified *)
85
-
86
- val someU : ('k , 'a , 'id ) t -> ('k -> 'a -> bool [@ bs]) -> bool
87
- val some : ('k , 'a , 'id ) t -> ('k -> 'a -> bool ) -> bool
85
+
86
+ val someU : ('k , 'a , 'id ) t -> ('k -> 'a -> bool [@ bs]) -> bool
87
+ val some : ('k , 'a , 'id ) t -> ('k -> 'a -> bool ) -> bool
88
88
(* * [some m p] checks if at least one binding of the map
89
89
satisfy the predicate [p]. Order unspecified *)
90
90
91
91
val size : ('k , 'a , 'id ) t -> int
92
+
92
93
val toList : ('k , 'a , 'id ) t -> ('k * 'a ) list
93
- (* * In increasing order*)
94
+ (* * In increasing order. *)
95
+
94
96
val toArray : ('k , 'a , 'id ) t -> ('k * 'a ) array
97
+
95
98
val ofArray : ('k * 'a ) array -> cmp :('k ,'id ) cmp -> ('k ,'a,'id) t
96
99
[@@ ocaml.deprecated "Use fromArray instead" ]
100
+
97
101
val fromArray : ('k * 'a ) array -> cmp :('k ,'id ) cmp -> ('k ,'a,'id) t
98
- val keysToArray : ('k , 'a , 'id ) t -> 'k array
99
- val valuesToArray : ('k , 'a , 'id ) t -> 'a array
102
+
103
+ val keysToArray : ('k , 'a , 'id ) t -> 'k array
104
+
105
+ val valuesToArray : ('k , 'a , 'id ) t -> 'a array
106
+
100
107
val minKey : ('k , _ , _ ) t -> 'k option
108
+
101
109
val minKeyUndefined : ('k , _ , _ ) t -> 'k Js .undefined
110
+
102
111
val maxKey : ('k , _ , _ ) t -> 'k option
112
+
103
113
val maxKeyUndefined : ('k , _ , _ ) t -> 'k Js .undefined
104
- val minimum : ('k , 'a , _ ) t -> ('k * 'a ) option
114
+
115
+ val minimum : ('k , 'a , _ ) t -> ('k * 'a ) option
116
+
105
117
val minUndefined : ('k , 'a , _ ) t -> ('k * 'a ) Js .undefined
118
+
106
119
val maximum : ('k , 'a , _ ) t -> ('k * 'a ) option
120
+
107
121
val maxUndefined :('k , 'a , _ ) t -> ('k * 'a ) Js .undefined
122
+
108
123
val get :
109
124
('k , 'a , 'id ) t -> 'k ->
110
- cmp :('k , 'id ) cmp ->
125
+ cmp :('k , 'id ) cmp ->
111
126
'a option
127
+
112
128
val getUndefined :
113
129
('k , 'a , 'id ) t -> 'k ->
114
130
cmp :('k , 'id ) cmp ->
115
131
'a Js .undefined
116
-
132
+
117
133
val getWithDefault :
118
- ('k , 'a , 'id ) t -> 'k -> 'a ->
134
+ ('k , 'a , 'id ) t -> 'k -> 'a ->
119
135
cmp :('k , 'id ) cmp ->
120
- 'a
136
+ 'a
137
+
121
138
val getExn :
122
139
('k , 'a , 'id ) t -> 'k ->
123
140
cmp :('k , 'id ) cmp ->
124
141
'a
125
-
142
+
126
143
val checkInvariantInternal : _ t -> unit
127
144
(* *
128
145
{b raise} when invariant is not held
129
- *)
146
+ *)
130
147
131
148
val remove :
132
149
('a , 'b , 'id ) t -> 'a ->
133
150
cmp :('a , 'id ) cmp ->
134
151
('a , 'b , 'id ) t
135
-
152
+ (* * [remove m x] returns a map containing the same bindings as
153
+ [m], except for [x] which is unbound in the returned map. *)
136
154
137
155
val removeMany :
138
156
('a , 'b , 'id ) t ->
139
157
'a array ->
140
158
cmp :('a , 'id ) cmp ->
141
159
('a , 'b , 'id ) t
142
-
160
+
143
161
val set :
144
162
('a , 'b , 'id ) t -> 'a -> 'b ->
145
163
cmp :('a , 'id ) cmp ->
146
164
('a , 'b , 'id ) t
165
+ (* * [add m x y] returns a map containing the same bindings as
166
+ [m], plus a binding of [x] to [y]. If [x] was already bound
167
+ in [m], its previous binding disappears. *)
147
168
148
169
val updateU :
149
170
('a , 'b , 'id ) t ->
@@ -160,37 +181,41 @@ val update:
160
181
161
182
val mergeU :
162
183
('a , 'b , 'id ) t ->
163
- ('a , 'c , 'id ) t ->
184
+ ('a , 'c , 'id ) t ->
164
185
('a -> 'b option -> 'c option -> 'd option [@ bs]) ->
165
186
cmp :('a , 'id ) cmp -> ('a , 'd , 'id ) t
166
187
val merge :
167
188
('a , 'b , 'id ) t ->
168
- ('a , 'c , 'id ) t ->
189
+ ('a , 'c , 'id ) t ->
169
190
('a -> 'b option -> 'c option -> 'd option ) ->
170
191
cmp :('a , 'id ) cmp -> ('a , 'd , 'id ) t
192
+ (* * [merge m1 m2 f] computes a map whose keys is a subset of keys of [m1]
193
+ and of [m2]. The presence of each such binding, and the corresponding
194
+ value, is determined with the function [f].
195
+ *)
171
196
172
197
val mergeMany :
173
198
('a , 'b , 'id ) t ->
174
199
('a * 'b ) array ->
175
200
cmp :('a , 'id ) cmp ->
176
201
('a , 'b , 'id ) t
177
202
178
- val keepU :
179
- ('k , 'a , 'id ) t ->
180
- ('k -> 'a -> bool [@ bs]) ->
203
+ val keepU :
204
+ ('k , 'a , 'id ) t ->
205
+ ('k -> 'a -> bool [@ bs]) ->
181
206
('k , 'a , 'id ) t
182
- val keep :
183
- ('k , 'a , 'id ) t ->
184
- ('k -> 'a -> bool ) ->
207
+ val keep :
208
+ ('k , 'a , 'id ) t ->
209
+ ('k -> 'a -> bool ) ->
185
210
('k , 'a , 'id ) t
186
211
(* * [keep m p] returns the map with all the bindings in [m]
187
212
that satisfy predicate [p]. *)
188
-
189
- val partitionU :
213
+
214
+ val partitionU :
190
215
('k , 'a , 'id ) t ->
191
- ('k -> 'a -> bool [@ bs]) ->
216
+ ('k -> 'a -> bool [@ bs]) ->
192
217
('k , 'a , 'id ) t * ('k , 'a , 'id ) t
193
- val partition :
218
+ val partition :
194
219
('k , 'a , 'id ) t ->
195
220
('k -> 'a -> bool ) ->
196
221
('k , 'a , 'id ) t * ('k , 'a , 'id ) t
@@ -205,10 +230,17 @@ val split:
205
230
'a ->
206
231
cmp :('a , 'id ) cmp ->
207
232
(('a ,'b,'id) t * ('a , 'b , 'id ) t ) * 'b option
208
-
209
-
210
- val mapU : ('k , 'a , 'id ) t -> ('a -> 'b [@ bs]) -> ('k ,'b,'id ) t
211
- val map : ('k , 'a , 'id ) t -> ('a -> 'b ) -> ('k ,'b,'id ) t
233
+ (* * [split x m] returns a triple [(l, data, r)], where
234
+ [l] is the map with all the bindings of [m] whose key
235
+ is strictly less than [x];
236
+ [r] is the map with all the bindings of [m] whose key
237
+ is strictly greater than [x];
238
+ [data] is [None] if [m] contains no binding for [x],
239
+ or [Some v] if [m] binds [v] to [x].
240
+ *)
241
+
242
+ val mapU : ('k , 'a , 'id ) t -> ('a -> 'b [@ bs]) -> ('k ,'b,'id) t
243
+ val map : ('k , 'a , 'id ) t -> ('a -> 'b ) -> ('k ,'b,'id) t
212
244
(* * [map m f] returns a map with same domain as [m], where the
213
245
associated value [a] of all bindings of [m] has been
214
246
replaced by the result of the application of [f] to [a].
0 commit comments