package decompress
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=a950f91c33af4d14b25c62dd3edf7067b4020b7f39c2664a2afa925f767be2b9
sha512=abb4994150ef724b4cbf0612e0215092818139a5eca33c2365b6fdac61e4e33323da490fd8ea1adf8348c136b11a6448b1500173352f7b61f7641d32c02f3874
doc/decompress.de/De/Def/index.html
Module De.DefSource
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).
The type for DEFLATE DYNAMIC block.
type kind = | Flat of int(*A
*)Flat lenblock is a non-compressed block oflenbyte(s). After a flat block, output is aligned on bytes.| Fixed(*A
*)Fixedblock is a compressed block by a precomputed Huffman tree. Any symbols can be encoded with this kind of block -encodeshould never return`Blockwith it.| Dynamic of dynamic(*A
*)Dynamic hblock is a compressed block by an Huffman tree represented byh. It allows to encode a subset of symbols (or any symbols).
The type for DEFLATE header block.
dynamic_of_frequencies ~literals ~distances is a DEFLATE DYNAMIC block header computed from given frequencies. According frequencies, dynamic_of_frequencies makes a Huffman tree which provides smaller representation for symbols which frequency is upper than 0 (others symbols are not a part of resulted Huffman tree). At the end, a dynamic Huffman tree is able to encode a subset of symbols.
If all frequencies are upper than 0, resulted dynamic Huffman tree is able to encode any symbols.
The type for DEFLATE encoders.
encoder dst ~q is an encoder that outputs to dst.
Internal queue.
encoder needs a side-channel about compressed inputs. To pass compression values to encoder, we use a queue q. Length of it can be a bottleneck where a small one will let encode to emit too many `Flush (which is commonly associated to a syscall). We recommend a queue as large as output buffer.
encode e v is:
`Partialiffehas a`Manualdestination and needs more output storage. The client must usedstto provide a new buffer and then callencodewith`Awaituntil`Okis returned.`Okwhen the encoder is ready to encode a newencodeaction.`Blockwhen the encoder reachs aQueue.cmdwhich can not be encoded with the currentblock. The client must respond with`Block blockwhereblockis a new block able to encode currentQueue.cmd.
How to signal end of flow?
End of flow is characterized by a block where last = true. Then, the client must emit into the queue q Queue.eob.
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.