]> gitweb.factorcode.org Git - factor.git/blob - basis/compression/zstd/zstd.factor
Switch to https urls
[factor.git] / basis / compression / zstd / zstd.factor
1 ! Copyright (C) 2021 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types byte-arrays compression.zstd.ffi
4 generalizations kernel math math.bitwise sequences ;
5 IN: compression.zstd
6
7 ERROR: zstd-error n str ;
8
9 : check-zstd-error ( n -- n )
10     dup ZSTD_isError 0 > [
11         size_t heap-size 8 * >signed
12         dup ZSTD_getErrorName
13         zstd-error
14     ] when ;
15
16 : zstd-uncompress-size ( byte-array -- n )
17     dup byte-length ZSTD_getFrameContentSize check-zstd-error ;
18
19 <PRIVATE
20
21 : zstd-setup-compress-buffers ( byte-array -- dst dstlen src srclen )
22     [ length 64 + [ <byte-array> ] keep ]
23     [ dup length ] bi ; inline
24
25 : zstd-setup-uncompress-buffers ( byte-array -- dst dstlen src srclen )
26     [ zstd-uncompress-size <byte-array> dup byte-length ]
27     [ dup length ] bi ; inline
28
29 PRIVATE>
30
31 : zstd-compress-level ( byte-array level -- compressed )
32     [ zstd-setup-compress-buffers ] dip
33     [ ZSTD_compress check-zstd-error ] 5 nkeep 4drop swap head ;
34
35 : zstd-compress ( byte-array -- compressed )
36     1 zstd-compress-level ;
37
38 : zstd-uncompress ( compressed -- byte-array )
39     zstd-setup-uncompress-buffers
40     [ ZSTD_decompress check-zstd-error ] 4keep 3drop swap head ;