A Guile FFI for Google’s Snappy compression library. (snappy-c.h
bindings only).
Recommended import style…
(use-modules ((snappy) #:prefix snappy:))
(define-module (...) #:use-module ((snappy) #:prefix snappy:))
Note: Fn signatures abbreviated here.
(compress bv-uncompressed
#:key
(uncompressed-offset 0)
uncompressed-length
(trim-compressed? #t))
Produces a compressed version of bv-uncompressed
(bytevector) at the uncompressed-offset
(integer) position with the specified length uncompressed-length
(integer). By default it will use the entire bytevector range.
It will return a compressed bytevector. If trim-compressed?
is #f
, then it shall be two values, the compressed bytevector and the length (integer) of the compressed buffer used.
(uncompress bv-compressed
#:key
(compressed-offset 0)
compressed-length)
Produces a uncompressed version of bv-compressed
(bytevector) at the compressed-offset
(integer) position with the specified length compressed-length
(integer). By default it will use the entire bytevector range.
It will return a uncompressed bytevector.
(validate-compressed bv-compressed
#:key
(compressed-offset 0)
compressed-length)
Checks bv-compressed
(bytevector) at the compressed-offset
(integer) with the specified length compressed-length
(integer) for a valid Snappy compression. As per Snappy documentation:
… Takes time proportional to compressed_length, but is usually at least a factor of four faster than actual decompression. — snappy_validate_compressed_buffer :: snappy-c.h
It will return a boolean on valid or invalid compression.
(uncompressed-length bv-compressed
#:key
(compressed-offset 0)
compressed-length
Produces the maximum uncompressed bytevector length needed to decompress bv-compressed
(bytevector) at compressed-offset
(integer) for the specified length compressed-length
(integer). Probably not something you’ll need with the current Guile interface.
Any of the above functions may produce the following errors, unless noted otherwise…
<&compound-exception <&programming-error> ...>
- Produced on invalid input types.
<&snappy-invalid-input>
- Usually produced on buffer range or bad data issues.
<&snappy-buffer-too-small-exception>
- Produced if the output buffer is too small, (unlikely to occur with the current API).
The above &snappy-*
exceptions inherits from a parent type &snappy-exception
and &exception
.