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
|
type t = bigstring
|
||||||
|
|
||||||
let of_bigstring x = x
|
let of_bigstring x = x
|
||||||
|
let empty = Bigarray.Array1.create Bigarray.char Bigarray.c_layout 0
|
||||||
let length = Bigarray.Array1.dim
|
let length = Bigarray.Array1.dim
|
||||||
|
|
||||||
external get : t -> int -> char = "%caml_ba_ref_1"
|
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;
|
blit_to_bytes t ~src_off:logical_address buf ~dst_off:0 ~len;
|
||||||
Bytes.unsafe_to_string buf
|
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 () =
|
let rec get_seq t logical_address () =
|
||||||
match load t logical_address with
|
match load t logical_address with
|
||||||
| Some { offset; payload; length; _ } ->
|
| Some { offset; payload; length; _ } ->
|
||||||
|
|
|
@ -6,9 +6,20 @@ module Bstr : sig
|
||||||
|
|
||||||
type t = private bigstring
|
type t = private bigstring
|
||||||
|
|
||||||
|
val empty : t
|
||||||
|
(** [empty] is an empty bigstring. *)
|
||||||
|
|
||||||
val of_bigstring : bigstring -> t
|
val of_bigstring : bigstring -> t
|
||||||
|
|
||||||
val length : t -> int
|
val length : t -> int
|
||||||
|
(** [length bstr] is the number of bytes in [bstr]. *)
|
||||||
|
|
||||||
val get : t -> int -> char
|
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_int8 : t -> int -> int
|
||||||
val get_uint8 : t -> int -> int
|
val get_uint8 : t -> int -> int
|
||||||
val get_int16_ne : 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. *)
|
zero-extend) their result. *)
|
||||||
|
|
||||||
val get_int8 : 'fd t -> int -> int
|
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
|
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_ne : 'fd t -> int -> int
|
||||||
val get_uint16_le : 'fd t -> int -> int
|
val get_uint16_le : 'fd t -> int -> int
|
||||||
val get_uint16_be : '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_ne : 'fd t -> int -> int64
|
||||||
val get_int64_le : 'fd t -> int -> int64
|
val get_int64_le : 'fd t -> int -> int64
|
||||||
val get_int64_be : 'fd t -> int -> int64
|
val get_int64_be : 'fd t -> int -> int64
|
||||||
*)
|
|
||||||
|
|
||||||
val get_string : 'fd t -> len:int -> int -> string
|
val get_string : 'fd t -> len:int -> int -> string
|
||||||
val get_seq : 'fd t -> int -> string Seq.t
|
val get_seq : 'fd t -> int -> string Seq.t
|
||||||
val next : 'fd t -> slice -> slice option
|
val next : 'fd t -> slice -> slice option
|
||||||
|
|
14
lib/dune
14
lib/dune
|
@ -1,8 +1,12 @@
|
||||||
(library
|
(library
|
||||||
(name cachet)
|
(name cachet)
|
||||||
(modes native)
|
(modes native byte)
|
||||||
; (foreign_stubs
|
(foreign_stubs
|
||||||
; (language c)
|
(language c)
|
||||||
; (mode byte)
|
(mode byte)
|
||||||
; (names hash))
|
(names hash))
|
||||||
|
(foreign_stubs
|
||||||
|
(language c)
|
||||||
|
(mode native)
|
||||||
|
(names stub))
|
||||||
(modules cachet))
|
(modules cachet))
|
||||||
|
|
0
lib/stub.c
Normal file
0
lib/stub.c
Normal file
Loading…
Reference in a new issue