Irmin_pack_unix.Pack_keytype ('hash, _) unsafe_state = private | Direct : {hash : 'hash;offset : Optint.Int63.t;length : int;volume_identifier : Lower.volume_identifier option;} -> ('hash, safe) unsafe_stateA "direct" pointer to a value stored at offset in the pack-file (with hash hash and length length). Such keys can be dereferenced from the store with a single IO read, without needing to consult the index.
They are built in-memory (e.g. after adding a fresh value to the pack file), but have no corresponding encoding format, as the pack format keeps length information with the values themselves.
When decoding a inode, which references its children as single offsets, we fetch the length information of the child at the same time as fetching its hash (which we must do anyway in order to do an integrity check), creating keys of this form.
*)| Indexed : 'hash -> ('hash, safe) unsafe_stateA pointer to an object in the pack file that is indexed. Reading the object necessitates consulting the index, after which the key can be promoted to Direct.
Such keys result from decoding pointers to other store objects (nodes or commits) from commits or from the branch store.
*)| Offset : Optint.Int63.t -> ('hash, unsafe) unsafe_stateSame as Direct, but the hash and length of the object have not been fetched. Only used to speed up the GC traversal.
type 'hash state = ('hash, safe) unsafe_stateA key k is "undereferencable" with respect to some store handle t if find t k <> Some _. Such keys should not arise during regular operation of a single Irmin repository, but are still technically constructible in the following ways:
find (or mem).val v_direct :
offset:Optint.Int63.t ->
length:int ->
?volume_identifier:Lower.volume_identifier ->
'h ->
'h tval v_indexed : 'h -> 'h tval v_offset : Optint.Int63.t -> 'h tval promote_exn :
offset:Optint.Int63.t ->
length:int ->
?volume_identifier:Lower.volume_identifier ->
'h t ->
unitval set_volume_identifier_exn :
volume_identifier:Lower.volume_identifier option ->
'h t ->
unitval to_offset : 'h t -> Optint.Int63.t optionval to_hash : 'h t -> 'hval to_length : 'h t -> int optionmodule type S = sig ... endmodule type Store_spec = sig ... endmodule Store_spec : Store_spec