An embedded, single-file key-value store for OCaml, inspired by BoltDB and LMDB.
1(** Core types for Lithos *)
2
3type ro
4
5type rw
6
7type page_id = int64
8
9type metadata =
10 { version : int
11 ; page_size : int
12 ; root_bucket : page_id option
13 }
14
15type txn_state =
16 | Active
17 | Committed
18 | Rolled_back
19
20type key = bytes
21
22type value = (char, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
23
24let key_of_string s = Bytes.of_string s
25
26let string_of_key k = Bytes.to_string k
27
28let value_of_bytes b =
29 let len = Bytes.length b in
30 let arr = Bigarray.Array1.create Bigarray.char Bigarray.c_layout len in
31 for i = 0 to len - 1 do
32 Bigarray.Array1.set arr i (Bytes.get b i)
33 done;
34 arr
35;;
36
37let bytes_of_value v =
38 let len = Bigarray.Array1.dim v in
39 let b = Bytes.create len in
40 for i = 0 to len - 1 do
41 Bytes.set b i (Bigarray.Array1.get v i)
42 done;
43 b
44;;
45
46let value_of_string s = value_of_bytes (Bytes.of_string s)
47
48let string_of_value v = Bytes.to_string (bytes_of_value v)