@@ -36,7 +36,7 @@ type ('a, 'b) t =
36
36
37
37
and ('a, 'b) bucketlist =
38
38
Empty
39
- | Cons of 'a * 'b * ('a, 'b) bucketlist
39
+ | Cons of { key : 'a ; data : 'b ; rest : ('a , 'b ) bucketlist }
40
40
41
41
(* To pick random seeds if requested *)
42
42
@@ -95,10 +95,10 @@ let resize indexfun h =
95
95
h.data < - ndata; (* so that indexfun sees the new bucket count *)
96
96
let rec insert_bucket = function
97
97
Empty -> ()
98
- | Cons ( key , data , rest ) ->
98
+ | Cons { key; data; rest} ->
99
99
insert_bucket rest; (* preserve original order of elements *)
100
100
let nidx = indexfun h key in
101
- ndata.(nidx) < - Cons ( key, data, ndata.(nidx)) in
101
+ ndata.(nidx) < - Cons { key; data; rest = ndata.(nidx)} in
102
102
for i = 0 to osize - 1 do
103
103
insert_bucket odata.(i)
104
104
done
@@ -112,7 +112,7 @@ let key_index h key =
112
112
113
113
let add h key info =
114
114
let i = key_index h key in
115
- let bucket = Cons ( key, info, h.data.(i)) in
115
+ let bucket = Cons { key; data = info; rest = h.data.(i)} in
116
116
h.data.(i) < - bucket;
117
117
h.size < - h.size + 1 ;
118
118
if h.size > Array. length h.data lsl 1 then resize key_index h
@@ -121,38 +121,38 @@ let remove h key =
121
121
let rec remove_bucket = function
122
122
| Empty ->
123
123
Empty
124
- | Cons ( k , i , next ) ->
124
+ | Cons { key = k ; data = i ; rest = next } ->
125
125
if compare k key = 0
126
126
then begin h.size < - h.size - 1 ; next end
127
- else Cons (k, i, remove_bucket next) in
127
+ else Cons {key = k; data = i; rest = remove_bucket next} in
128
128
let i = key_index h key in
129
129
h.data.(i) < - remove_bucket h.data.(i)
130
130
131
131
let rec find_rec key = function
132
132
| Empty ->
133
133
raise Not_found
134
- | Cons ( k , d , rest ) ->
134
+ | Cons { key = k ; data = d ; rest} ->
135
135
if compare key k = 0 then d else find_rec key rest
136
136
137
137
let find h key =
138
138
match h.data.(key_index h key) with
139
139
| Empty -> raise Not_found
140
- | Cons ( k1 , d1 , rest1 ) ->
140
+ | Cons { key = k1 ; data = d1 ; rest = rest1 } ->
141
141
if compare key k1 = 0 then d1 else
142
142
match rest1 with
143
143
| Empty -> raise Not_found
144
- | Cons ( k2 , d2 , rest2 ) ->
144
+ | Cons { key = k2 ; data = d2 ; rest = rest2 } ->
145
145
if compare key k2 = 0 then d2 else
146
146
match rest2 with
147
147
| Empty -> raise Not_found
148
- | Cons ( k3 , d3 , rest3 ) ->
148
+ | Cons { key = k3 ; data = d3 ; rest = rest3 } ->
149
149
if compare key k3 = 0 then d3 else find_rec key rest3
150
150
151
151
let find_all h key =
152
152
let rec find_in_bucket = function
153
153
| Empty ->
154
154
[]
155
- | Cons ( k , d , rest ) ->
155
+ | Cons { key = k ; data = d ; rest} ->
156
156
if compare k key = 0
157
157
then d :: find_in_bucket rest
158
158
else find_in_bucket rest in
@@ -162,32 +162,32 @@ let replace h key info =
162
162
let rec replace_bucket = function
163
163
| Empty ->
164
164
raise_notrace Not_found
165
- | Cons ( k , i , next ) ->
165
+ | Cons { key = k ; data = i ; rest = next } ->
166
166
if compare k key = 0
167
- then Cons ( key, info, next)
168
- else Cons (k, i, replace_bucket next) in
167
+ then Cons { key; data = info; rest = next}
168
+ else Cons {key = k; data = i; rest = replace_bucket next} in
169
169
let i = key_index h key in
170
170
let l = h.data.(i) in
171
171
try
172
172
h.data.(i) < - replace_bucket l
173
173
with Not_found ->
174
- h.data.(i) < - Cons ( key, info, l) ;
174
+ h.data.(i) < - Cons { key; data = info; rest = l} ;
175
175
h.size < - h.size + 1 ;
176
176
if h.size > Array. length h.data lsl 1 then resize key_index h
177
177
178
178
let mem h key =
179
179
let rec mem_in_bucket = function
180
180
| Empty ->
181
181
false
182
- | Cons ( k , d , rest ) ->
182
+ | Cons { key = k ; data = d ; rest} ->
183
183
compare k key = 0 || mem_in_bucket rest in
184
184
mem_in_bucket h.data.(key_index h key)
185
185
186
186
let iter f h =
187
187
let rec do_bucket = function
188
188
| Empty ->
189
189
()
190
- | Cons ( k , d , rest ) ->
190
+ | Cons { key = k ; data = d ; rest} ->
191
191
f k d; do_bucket rest in
192
192
let d = h.data in
193
193
for i = 0 to Array. length d - 1 do
@@ -213,7 +213,7 @@ let fold f h init =
213
213
match b with
214
214
Empty ->
215
215
accu
216
- | Cons ( k , d , rest ) ->
216
+ | Cons { key = k ; data = d ; rest} ->
217
217
do_bucket rest (f k d accu) in
218
218
let d = h.data in
219
219
let accu = ref init in
@@ -231,7 +231,7 @@ type statistics = {
231
231
232
232
let rec bucket_length accu = function
233
233
| Empty -> accu
234
- | Cons ( _ , _ , rest ) -> bucket_length (accu + 1 ) rest
234
+ | Cons { rest} -> bucket_length (accu + 1 ) rest
235
235
236
236
let stats h =
237
237
let mbl =
@@ -320,7 +320,7 @@ module MakeSeeded(H: SeededHashedType): (SeededS with type key = H.t) =
320
320
321
321
let add h key info =
322
322
let i = key_index h key in
323
- let bucket = Cons ( key, info, h.data.(i)) in
323
+ let bucket = Cons { key; data = info; rest = h.data.(i)} in
324
324
h.data.(i) < - bucket;
325
325
h.size < - h.size + 1 ;
326
326
if h.size > Array. length h.data lsl 1 then resize key_index h
@@ -329,38 +329,38 @@ module MakeSeeded(H: SeededHashedType): (SeededS with type key = H.t) =
329
329
let rec remove_bucket = function
330
330
| Empty ->
331
331
Empty
332
- | Cons ( k , i , next ) ->
332
+ | Cons { key = k ; data = i ; rest = next } ->
333
333
if H. equal k key
334
334
then begin h.size < - h.size - 1 ; next end
335
- else Cons (k, i, remove_bucket next) in
335
+ else Cons {key = k; data = i; rest = remove_bucket next} in
336
336
let i = key_index h key in
337
337
h.data.(i) < - remove_bucket h.data.(i)
338
338
339
339
let rec find_rec key = function
340
340
| Empty ->
341
341
raise Not_found
342
- | Cons ( k , d , rest ) ->
342
+ | Cons { key = k ; data = d ; rest} ->
343
343
if H. equal key k then d else find_rec key rest
344
344
345
345
let find h key =
346
346
match h.data.(key_index h key) with
347
347
| Empty -> raise Not_found
348
- | Cons ( k1 , d1 , rest1 ) ->
348
+ | Cons { key = k1 ; data = d1 ; rest = rest1 } ->
349
349
if H. equal key k1 then d1 else
350
350
match rest1 with
351
351
| Empty -> raise Not_found
352
- | Cons ( k2 , d2 , rest2 ) ->
352
+ | Cons { key = k2 ; data = d2 ; rest = rest2 } ->
353
353
if H. equal key k2 then d2 else
354
354
match rest2 with
355
355
| Empty -> raise Not_found
356
- | Cons ( k3 , d3 , rest3 ) ->
356
+ | Cons { key = k3 ; data = d3 ; rest = rest3 } ->
357
357
if H. equal key k3 then d3 else find_rec key rest3
358
358
359
359
let find_all h key =
360
360
let rec find_in_bucket = function
361
361
| Empty ->
362
362
[]
363
- | Cons ( k , d , rest ) ->
363
+ | Cons { key = k ; data = d ; rest} ->
364
364
if H. equal k key
365
365
then d :: find_in_bucket rest
366
366
else find_in_bucket rest in
@@ -370,24 +370,24 @@ module MakeSeeded(H: SeededHashedType): (SeededS with type key = H.t) =
370
370
let rec replace_bucket = function
371
371
| Empty ->
372
372
raise_notrace Not_found
373
- | Cons ( k , i , next ) ->
373
+ | Cons { key = k ; data = i ; rest = next } ->
374
374
if H. equal k key
375
- then Cons ( key, info, next)
376
- else Cons (k, i, replace_bucket next) in
375
+ then Cons { key; data = info; rest = next}
376
+ else Cons {key = k; data = i; rest = replace_bucket next} in
377
377
let i = key_index h key in
378
378
let l = h.data.(i) in
379
379
try
380
380
h.data.(i) < - replace_bucket l
381
381
with Not_found ->
382
- h.data.(i) < - Cons ( key, info, l) ;
382
+ h.data.(i) < - Cons { key; data = info; rest = l} ;
383
383
h.size < - h.size + 1 ;
384
384
if h.size > Array. length h.data lsl 1 then resize key_index h
385
385
386
386
let mem h key =
387
387
let rec mem_in_bucket = function
388
388
| Empty ->
389
389
false
390
- | Cons ( k , d , rest ) ->
390
+ | Cons { key = k ; data = d ; rest} ->
391
391
H. equal k key || mem_in_bucket rest in
392
392
mem_in_bucket h.data.(key_index h key)
393
393
0 commit comments