package git

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

Module Index_pack.DecoderSource

The functor to make the decoder module by a specific hash implementation. We constraint the Hash.S module to compute a

struct.t

flow. This module is a non-blocking decoder with a pure state of the IDX file. It's better to use this module instead Lazy if the client wants an OCaml representation of the IDX file - he can construct this specific OCaml value step by step with this decoder like a Radix tree.

In the result, if the client construct an efficient data-structure (like a Radix tree) when he decodes the IDX file, the find operation should be more fast than the Lazy.find. However, the Lazy.make operation could be more fast than to decode and to construct an OCaml value.

Parameters

module Hash : sig ... end

Signature

Sourcetype error =
  1. | Invalid_byte of int
    (*

    Appear when we expect a specific byte and we catch another one.

    *)
  2. | Invalid_version of Int32.t
    (*

    Appear when the version of the IDX file is wrong.

    *)
  3. | Invalid_index_of_bigoffset of int
    (*

    Appear when we try to read a big offset value and we can't catch it.

    *)
  4. | Expected_bigoffset_table
    (*

    Appear when we don't have a big offset table but expect one.

    *)
  5. | Invalid_hash of Hash.t * Hash.t
    (*

    Appear when the hash produced when we un-serialize the IDX file does not correspond with the hash provided.

    *)

The error type.

Sourceval pp_error : error Fmt.t

Pretty-printer of error.

Sourcetype t

The decoder state.

Sourceval pp : t Fmt.t

Pretty-printer of the decoder t.

Sourceval make : unit -> t

Make a new decoder state t.

Sourceval refill : int -> int -> t -> t

refill off len t provides a new t with len bytes to read, starting at off. This byte range is read by calls to eval with t until `Await is returned.

Sourceval eval : Cstruct.t -> t -> [ `Await of t | `End of t * Hash.t | `Hash of t * (Hash.t * Checkseum.Crc32.t * int64) | `Error of t * error ]

eval src t is:

  • `Await t iff t needs more input storage. The client must use refill to provide a new buffer and then call eval with `Await until other value returned.
  • `End (t, hash) when t is done. We returns the hash of the IDX file.
  • `Hash (t, (hash, crc, offset)) when t can returns a new value (hash, crc, offset). The client can call eval to continue the process. The value will be consumed then.
  • `Error (t, exn) iff the decoder meet an error exn. The decoder can't continue and sticks in this situation.