Skip to content

Commit 5cc1d9b

Browse files
committed
Trying to fix mirage#280
1 parent c228c9d commit 5cc1d9b

File tree

3 files changed

+13
-15
lines changed

3 files changed

+13
-15
lines changed

bench/bench.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ module Context = struct
4949

5050
let hash_size = 30
5151

52-
let encode s = s
52+
let encode s f = f s
5353

5454
let decode s off = String.sub s off key_size
5555

@@ -63,7 +63,7 @@ module Context = struct
6363

6464
let v () = random_string value_size
6565

66-
let encode s = s
66+
let encode s f = f s
6767

6868
let decode s off = String.sub s off value_size
6969

src/data.ml

+9-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module type Key = sig
2121
Overestimating the [hash_size] will result in performance drops;
2222
underestimation will result in undefined behavior. *)
2323

24-
val encode : t -> string
24+
val encode : t -> (string -> unit) -> unit
2525
(** [encode] is an encoding function. The resultant encoded values must have
2626
size {!encoded_size}. *)
2727

@@ -37,7 +37,7 @@ end
3737
module type Value = sig
3838
type t [@@deriving repr]
3939

40-
val encode : t -> string
40+
val encode : t -> (string -> unit) -> unit
4141

4242
val encoded_size : int
4343

@@ -88,14 +88,12 @@ module Entry = struct
8888
let decode_value string off = V.decode string (off + K.encoded_size)
8989

9090
let encode' key value f =
91-
let encoded_key = K.encode key in
92-
let encoded_value = V.encode value in
93-
if String.length encoded_key <> K.encoded_size then
94-
raise (Invalid_size encoded_key);
95-
if String.length encoded_value <> V.encoded_size then
96-
raise (Invalid_size encoded_value);
97-
f encoded_key;
98-
f encoded_value
91+
K.encode key (fun s ->
92+
if String.length s <> K.encoded_size then raise (Invalid_size s));
93+
V.encode value (fun s ->
94+
if String.length s <> K.encoded_size then raise (Invalid_size s));
95+
K.encode key f;
96+
V.encode value f
9997

10098
let encode { key; value; _ } f = encode' key value f
10199
end
@@ -116,7 +114,7 @@ end = struct
116114

117115
let hash_size = 30
118116

119-
let encode s = s
117+
let encode s f = f s
120118

121119
let decode s off = String.sub s off L.length
122120

test/unix/io_array.ml

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ module Entry = struct
2121
let append_io io (key, value) =
2222
let encoded_key = Key.encode key in
2323
let encoded_value = Value.encode value in
24-
IO.append io encoded_key;
25-
IO.append io encoded_value
24+
encoded_key (IO.append io);
25+
encoded_value (IO.append io)
2626
end
2727

2828
module IOArray = Index.Private.Io_array.Make (IO) (Entry)

0 commit comments

Comments
 (0)