package decompress
Library
Module
Module type
Parameter
Class
Class type
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
).
The type for output destinations. With a `Manual
destination the client must provide output storage with dst
. With `String
or `Channel
destination the client can safely discard `Flush
case (with assert false
).
val encoder : src -> dst -> q:De.Queue.t -> w:window -> level:int -> encoder
encoder src dst ~q ~w ~level
is an encoder that inputs from src
and that outputs to dst
.
Internal queue.
encoder
deals internally with compression algorithm and DEFLATE encoder. To pass compression values to DEFLATE encoder, we need a queue q
. Length of q
has an impact on performance, and small lengths can be a bottleneck, leading encode
to emit many `Flush
. We recommend a queue as large as output buffer.
Window.
ZLIB is able to constrain length of window used to do LZ77 compression. However, small window can slow-down LZ77 compression algorithm. Small windows are mostly used to enable inflation of output in memory-constrained environments, for example when compressed data from untrusted sources must be processed.
Level.
Current implementation of ZLIB does not handle any compression level. However, the client must give a level between 0 and 3, inclusively. Otherwise, we raise an Invalid_argument
.
val src_rem : encoder -> int
src_rem e
is how many bytes it remains in given input buffer.
val dst_rem : encoder -> int
dst_rem e
is how many unused bytes remain in the output buffer of e
.
src e s j l
provides e
with l
bytes to read, starting at j
in s
. This byte range is read by calls to encode
with e
until `Await
is returned. To signal the end of input call the function with l = 0
.
dst e s j l
provides e
with l
bytes available to write, starting at j
in s
. This byte range is read by calls to encode
with e
until `Flush
is returned.
encode e0
is:
`Await e1
ife0
has a`Manual
input source and awaits for more input. The client must usesrc
withe1
to provide it.`Flush e1
ife1
has a`Manual
destination and needs more output storage. The client must drain the buffer before resuming operation.`End e1
ife1
encoded all input. Output buffer is possibly not empty (it can be check withdst_rem
).