package irmin-pack

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Parameters

module Fm : File_manager.S with module Io = Io.Unix

Signature

module Fm = Fm
module Mapping_file : Mapping_file.S with module Io = Fm.Io
type t
type location = private
  1. | Prefix
  2. | Suffix
val location_t : location Irmin.Type.t
type accessor = private {
  1. poff : Optint.Int63.t;
  2. len : int;
  3. location : location;
}

An accessor designates a valid readable area in one of the pack files.

Accessors are meant to be used from within the Irmin_pack_unix implementation. Their validity is only checked at creation time, so they are not meant to be kept for a long time. (e.g. if kept over a GC finalisation, an accessor could no longer point to a valid area because the GC changes the domain of valid readable areas)

val accessor_t : accessor Irmin.Type.t
val v : Fm.t -> (t, [> Fm.Errs.t ]) result
val create_accessor_exn : t -> off:Optint.Int63.t -> len:int -> accessor

create_accessor_exn returns an accessor if off and len designate a readable area of the pack files, otherwise it raises one of Errors.Pack_error `Read_out_of_bounds, Errors.Pack_error (`Invalid_prefix_read _) and Errors.Pack_error (`Invalid_read_of_gced_object _).

val create_accessor_from_range_exn : t -> off:Optint.Int63.t -> min_len:int -> max_len:int -> accessor

create_accessor_from_maxlen_exn is similar to create_accessor_exn except that the precise length of the span will be decided during the call.

val shrink_accessor_exn : accessor -> new_len:int -> accessor

shrink_accessor_exn a ~new_len is a where the length is smaller than in a.

val create_sequential_accessor_seq : t -> min_header_len:int -> max_header_len:int -> read_len:(bytes -> int) -> (Optint.Int63.t * accessor) Irmin.Export_for_backends.Seq.t

create_sequential_accessor_seq ~min_header_len ~max_header_len ~read_len returns a sequence of accessors, which simulates iterating sequentially trough the entries of a pack file. min_header_len & max_header_len represents the minimum & maximum lengths required to read the header of an entry. read_len will then be called with a buffer containing the header of the entry and should return the total length of the entry (the length of he header plus the length of the payload)

val read_exn : t -> accessor -> bytes -> unit

read_exn either reads in the prefix or the suffix file, depending on accessor.

val end_offset : t -> Optint.Int63.t

end_offset is the end offsets of the pack entries, counting that the prefix doesn't start at 0. It counts the entries not yet flushed from the prefix.

val offset_of_suffix_poff : t -> Optint.Int63.t -> Optint.Int63.t

offset_of_suffix_poff t suffix_off converts a suffix offset into a (global) offset.

val read_in_prefix_and_suffix_exn : t -> off:Optint.Int63.t -> len:int -> bytes -> unit

Simlar to read_exn but if off + len is greater than the end of the prefix, it will read the remaining in the prefix.

val create_accessor_to_prefix_exn : Mapping_file.t -> off:Optint.Int63.t -> len:int -> accessor

create_accessor_to_prefix_exn mapping ~off ~len returns an accessor for the prefix file associated with mapping.