Dispatcher.MakeSourcemodule Fm : File_manager.S with module Io = Io.Unixmodule Fm = FmAn 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)
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 ->
accessorcreate_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 create_accessor_to_prefix_exn :
Mapping_file.t ->
off:Optint.Int63.t ->
len:int ->
accessorcreate_accessor_to_prefix_exn mapping ~off ~len returns an accessor for the prefix file associated with mapping.
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.tcreate_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)
read_exn either reads in the prefix or the suffix file, depending on accessor.
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.
suffix_start_offset is the offsets of the first pack entry in the suffix. All pack entries in the prefix fit below suffix_start_offset.
offset_of_soff t suffix_off converts a suffix offset into a (global) offset.
soff_of_offset t global_offset converts a global offset to a suffix offset.
val read_bytes_exn :
t ->
f:(string -> unit) ->
off:Optint.Int63.t ->
len:Optint.Int63.t ->
unitread_bytes_exn reads a slice of the global offset space defined by off and len.
The calls to f ignore the objects boundaries (i.e. the string passed to f will most of the time not be the beginning of an object).
The strings passed to f are safe. They can be kept around, they are not the result of an unsafe_to_string conversion.
The call will fail if the (off, len) range is invalid. It will succeed in these cases: