Improve and complete cachet
This commit is contained in:
parent
ee2702a921
commit
2860b7d33a
5 changed files with 98 additions and 8 deletions
23
cachet.opam
Normal file
23
cachet.opam
Normal file
|
@ -0,0 +1,23 @@
|
|||
opam-version: "2.0"
|
||||
name: "cachet"
|
||||
maintainer: [ "Romain Calascibetta <romain.calascibetta@gmail.com>"
|
||||
"Reynir Björnsson <reynir@reynir.dk>" ]
|
||||
authors: [ "Romain Calascibetta <romain.calascibetta@gmail.com>"
|
||||
"Reynir Björnsson <reynir@reynir.dk>" ]
|
||||
homepage: "https://git.robur.coop/robur/cachet"
|
||||
bug-reports: "https://git.robur.coop/robur/cachet"
|
||||
dev-repo: "git+https://git.robur.coop/robur/cachet"
|
||||
doc: "https://robur-coop.github.io/cachet/"
|
||||
license: "MIT"
|
||||
synopsis: "A simple cache system for mmap"
|
||||
description: """A small library that provides a simple cache system for page-by-page read access on a block device."""
|
||||
|
||||
build: [ "dune" "build" "-p" name "-j" jobs ]
|
||||
run-test: [ "dune" "runtest" "-p" name "-j" jobs ]
|
||||
|
||||
depends: [
|
||||
"ocaml" {>= "4.14.0"}
|
||||
"dune" {>= "3.5.0"}
|
||||
"bigstringaf" {with-test & >= "0.9.0"}
|
||||
"alcotest" {with-test & >= "1.7.0"}
|
||||
]
|
|
@ -9,6 +9,7 @@ module Bstr = struct
|
|||
type t = bigstring
|
||||
|
||||
let of_bigstring x = x
|
||||
let empty = Bigarray.Array1.create Bigarray.char Bigarray.c_layout 0
|
||||
let length = Bigarray.Array1.dim
|
||||
|
||||
external get : t -> int -> char = "%caml_ba_ref_1"
|
||||
|
@ -230,6 +231,54 @@ let get_string t ~len logical_address =
|
|||
blit_to_bytes t ~src_off:logical_address buf ~dst_off:0 ~len;
|
||||
Bytes.unsafe_to_string buf
|
||||
|
||||
let get_uint16_ne t logical_address =
|
||||
let str = get_string t ~len:2 logical_address in
|
||||
String.get_uint16_ne str 0
|
||||
|
||||
let get_uint16_le t logical_address =
|
||||
let str = get_string t ~len:2 logical_address in
|
||||
String.get_uint16_le str 0
|
||||
|
||||
let get_uint16_be t logical_address =
|
||||
let str = get_string t ~len:2 logical_address in
|
||||
String.get_uint16_be str 0
|
||||
|
||||
let get_int16_ne t logical_address =
|
||||
let str = get_string t ~len:2 logical_address in
|
||||
String.get_int16_ne str 0
|
||||
|
||||
let get_int16_le t logical_address =
|
||||
let str = get_string t ~len:2 logical_address in
|
||||
String.get_int16_le str 0
|
||||
|
||||
let get_int16_be t logical_address =
|
||||
let str = get_string t ~len:2 logical_address in
|
||||
String.get_int16_be str 0
|
||||
|
||||
let get_int32_ne t logical_address =
|
||||
let str = get_string t ~len:4 logical_address in
|
||||
String.get_int32_ne str 0
|
||||
|
||||
let get_int32_le t logical_address =
|
||||
let str = get_string t ~len:4 logical_address in
|
||||
String.get_int32_le str 0
|
||||
|
||||
let get_int32_be t logical_address =
|
||||
let str = get_string t ~len:4 logical_address in
|
||||
String.get_int32_be str 0
|
||||
|
||||
let get_int64_ne t logical_address =
|
||||
let str = get_string t ~len:8 logical_address in
|
||||
String.get_int64_ne str 0
|
||||
|
||||
let get_int64_le t logical_address =
|
||||
let str = get_string t ~len:8 logical_address in
|
||||
String.get_int64_le str 0
|
||||
|
||||
let get_int64_be t logical_address =
|
||||
let str = get_string t ~len:8 logical_address in
|
||||
String.get_int64_be str 0
|
||||
|
||||
let rec get_seq t logical_address () =
|
||||
match load t logical_address with
|
||||
| Some { offset; payload; length; _ } ->
|
||||
|
|
|
@ -6,9 +6,20 @@ module Bstr : sig
|
|||
|
||||
type t = private bigstring
|
||||
|
||||
val empty : t
|
||||
(** [empty] is an empty bigstring. *)
|
||||
|
||||
val of_bigstring : bigstring -> t
|
||||
|
||||
val length : t -> int
|
||||
(** [length bstr] is the number of bytes in [bstr]. *)
|
||||
|
||||
val get : t -> int -> char
|
||||
(** [get bstr i] is the byte of [bstr]' at index [i]. This is
|
||||
equivalent to the [bstr.{i}] notation.
|
||||
|
||||
@raise Invalid_argument if [i] is not an index of [bstr]. *)
|
||||
|
||||
val get_int8 : t -> int -> int
|
||||
val get_uint8 : t -> int -> int
|
||||
val get_int16_ne : t -> int -> int
|
||||
|
@ -129,8 +140,13 @@ val invalidate : 'fd t -> off:int -> len:int -> unit
|
|||
zero-extend) their result. *)
|
||||
|
||||
val get_int8 : 'fd t -> int -> int
|
||||
(** [get_int8 t logical_address] is [t]'s signed 8-bit integer starting at byte
|
||||
index [logical_address]. *)
|
||||
|
||||
val get_uint8 : 'fd t -> int -> int
|
||||
(*
|
||||
(** [get_uint8 t logical_address] is [t]'s unsigned 8-bit integer starting at byte
|
||||
index [logical_address]. *)
|
||||
|
||||
val get_uint16_ne : 'fd t -> int -> int
|
||||
val get_uint16_le : 'fd t -> int -> int
|
||||
val get_uint16_be : 'fd t -> int -> int
|
||||
|
@ -143,8 +159,6 @@ val get_int32_be : 'fd t -> int -> int32
|
|||
val get_int64_ne : 'fd t -> int -> int64
|
||||
val get_int64_le : 'fd t -> int -> int64
|
||||
val get_int64_be : 'fd t -> int -> int64
|
||||
*)
|
||||
|
||||
val get_string : 'fd t -> len:int -> int -> string
|
||||
val get_seq : 'fd t -> int -> string Seq.t
|
||||
val next : 'fd t -> slice -> slice option
|
||||
|
|
14
lib/dune
14
lib/dune
|
@ -1,8 +1,12 @@
|
|||
(library
|
||||
(name cachet)
|
||||
(modes native)
|
||||
; (foreign_stubs
|
||||
; (language c)
|
||||
; (mode byte)
|
||||
; (names hash))
|
||||
(modes native byte)
|
||||
(foreign_stubs
|
||||
(language c)
|
||||
(mode byte)
|
||||
(names hash))
|
||||
(foreign_stubs
|
||||
(language c)
|
||||
(mode native)
|
||||
(names stub))
|
||||
(modules cachet))
|
||||
|
|
0
lib/stub.c
Normal file
0
lib/stub.c
Normal file
Loading…
Reference in a new issue