An embedded, single-file key-value store for OCaml, inspired by BoltDB and LMDB.
at main 919 B view raw
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)