package decompress

  1. Overview
  2. Docs
type src = [
  1. | `Channel of Stdlib.in_channel
  2. | `String of string
  3. | `Manual
]

The type for input sources. With a `Manual source the client must provide input with src. With `String or `Channel source the client can safely discard `Await case (with assert false).

type decode = [
  1. | `Await
  2. | `Flush
  3. | `End
  4. | `Malformed of string
]
type decoder

The type for decoders.

val decoder : src -> o:bigstring -> w:window -> decoder

decoder src ~o ~w is a decoder that inputs from src.

Output buffer.

de uses o buffer as internal buffer to store output. We recommend to allocate an io_buffer_size buffer as output buffer. Then, dst_rem gives you how many bytes it remains in o.

Window.

de needs a window to be able to interpret `Copy code. Length of window is commonly 32k bytes (but the client can use a smaller one with some assumptions).

val decode : decoder -> decode

decode d is:

  • `Await if d has a `Manual input source and awaits for more input. The client must use src to provide it.
  • `Flush d if given output buffer o (see decoder) is full. The client must use flush to completely flush o. dst_rem gives you how many bytes it remains in o. Inf.dst_rem d - bigstring_length o gives you how many bytes are available.
  • `Malformed err if given input is malformed. err is a human-readable error.
  • `End if given input notify end of flow. o is possibly not empty (it can be check with dst_rem).
val reset : decoder -> unit

reset d is a decoder as is when it was created by decoder.

val src : decoder -> bigstring -> int -> int -> unit

src d s j l provides d with l bytes to read, starting at j in s. This byte range is read by calls to decode with d until `Await is returned. To signal the end of input call the function with l = 0.

  • raises Invalid_argument

    when j and l do not correspond to a valid range.

val dst_rem : decoder -> int

dst_rem d is how many bytes it remains in given output buffer o.

val src_rem : decoder -> int

src_rem d is how many bytes it remains in given input buffer.

val flush : decoder -> unit

flush d provides d with new output storage.

val checksum : decoder -> optint

checkseum d is ADLER-32 checksum of consumed inputs.

module Ns : sig ... end

A non-streamable implementation of the RFC 1951. It considers the input to be whole and is therefore able to save some time