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
).
literals s
is frequencies of lengths and literals emitted by s
since it was created.
distances s
is frequencies of distances emitted by s
since it was created.
src s i j l
provides s
with l
bytes to read, starting at j
in i
. This byte range is read by calls to compress
with s
until `Await
is returned. To signal the end of input call the function with l = 0
.
val src_rem : state -> int
src_rem s
is how many bytes it remains in given input buffer.
compress s
is:
`Await
ifs
has a`Manual
input source and awits for more input. The client must usesrc
to provide it.`Flush
ifs
filled completely the shared-queueq
(given instate
).Queue.junk_exn
orQueue.pop_exn
can be used to give some free cells tocompress
.`End
ifs
compressed all input. Given shared-queueq
is possibly not empty.
val make_window : bits:int -> window
state src ~w ~q
is an state that inputs from src
and that outputs to q
.
Window.
The client can constrain lookup operation by a window. Small window enforces compress
to emit small distances. However, large window allows compress
to go furthermore to recognize a pattern which can be expensive.
Level.
Lz77
has mainly 2 levels:
0
where we only copy inputs to outpus, we don't do a lookupn
(to9
) with a certain configuration of the lookup. The higher the level, the longer it may take to find a pattern.
The 0
can be useful to only pack an input into a format such as DEFLATE
- as an already compressed document such as a video or an image. Otherwise, 4
as the level is pretty common.
val no_compression : state -> bool