|
1 | 1 | open Import
|
2 | 2 | include Irmin_pack.Atomic_write
|
3 | 3 |
|
4 |
| -module UnsafeTbl (K : Irmin.Type.S) = Hashtbl.Make (struct |
5 |
| - type t = K.t [@@deriving irmin ~short_hash ~equal] |
6 |
| - |
7 |
| - let hash = short_hash ?seed:None |
8 |
| -end) |
9 |
| - |
10 |
| -(** Safe but might be incredibly slow. *) |
11 | 4 | module Table (K : Irmin.Type.S) = struct
|
12 |
| - module Unsafe = UnsafeTbl (K) |
13 |
| - |
14 |
| - type 'a t = { lock : Eio.Mutex.t; data : 'a Unsafe.t } |
15 |
| - |
16 |
| - let create n = |
17 |
| - let lock = Eio.Mutex.create () in |
18 |
| - let data = Unsafe.create n in |
19 |
| - { lock; data } |
20 |
| - |
21 |
| - let add { lock; data } k v = |
22 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.add data k v |
23 |
| - |
24 |
| - let mem { lock; data } k = |
25 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.mem data k |
26 |
| - |
27 |
| - let find_opt { lock; data } k = |
28 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.find_opt data k |
29 |
| - |
30 |
| - let find t k = match find_opt t k with Some v -> v | None -> raise Not_found |
| 5 | + module K = (struct |
| 6 | + include K |
31 | 7 |
|
32 |
| - let replace { lock; data } k v = |
33 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.replace data k v |
| 8 | + type t = K.t [@@deriving irmin ~short_hash ~equal] |
34 | 9 |
|
35 |
| - let remove { lock; data } k = |
36 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.remove data k |
| 10 | + let hash = short_hash ?seed:None |
| 11 | + let equal = Irmin.Type.(unstage (equal K.t)) |
| 12 | + end) |
37 | 13 |
|
38 |
| - let reset { lock; data } = |
39 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.reset data |
| 14 | + include Kcas_data.Hashtbl |
40 | 15 |
|
41 |
| - let fold f { lock; data } init = |
42 |
| - Eio.Mutex.use_rw ~protect:true lock @@ fun () -> Unsafe.fold f data init |
| 16 | + let create min_buckets = create ~hashed_type:(module K) ~min_buckets () |
43 | 17 | end
|
44 | 18 |
|
45 | 19 | module Make_persistent (Io : Io_intf.S) (K : Irmin.Type.S) (V : Value.S) =
|
|
53 | 27 | type watch = W.watch
|
54 | 28 |
|
55 | 29 | type t = {
|
56 |
| - index : int63 Tbl.t; |
57 |
| - cache : V.t Tbl.t; |
| 30 | + index : (K.t, int63) Tbl.t; |
| 31 | + cache : (K.t, V.t) Tbl.t; |
58 | 32 | block : Io.t;
|
59 | 33 | mutable block_size : int63;
|
60 | 34 | w : W.t;
|
|
0 commit comments