1 ! Copyright (C) 2021 Doug Coleman.
2 ! See http://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 ;
7 ERROR: zstd-error n str ;
9 : check-zstd-error ( n -- n )
10 dup ZSTD_isError 0 > [
11 size_t heap-size 8 * >signed
16 : zstd-uncompress-size ( byte-array -- n )
17 dup byte-length ZSTD_getFrameContentSize check-zstd-error ;
21 : zstd-setup-compress-buffers ( byte-array -- dst dstlen src srclen )
22 [ length 64 + [ <byte-array> ] keep ]
23 [ dup length ] bi ; inline
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
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 ;
35 : zstd-compress ( byte-array -- compressed )
36 1 zstd-compress-level ;
38 : zstd-uncompress ( compressed -- byte-array )
39 zstd-setup-uncompress-buffers
40 [ ZSTD_decompress check-zstd-error ] 4keep 3drop swap head ;