]> gitweb.factorcode.org Git - factor.git/blob - basis/compression/snappy/snappy.factor
basis: ERROR: changes.
[factor.git] / basis / compression / snappy / snappy.factor
1 ! Copyright (C) 2014 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.data byte-arrays compression.snappy.ffi
4 kernel sequences ;
5 IN: compression.snappy
6
7 ERROR: snappy-error error ;
8
9 <PRIVATE
10
11 : check-snappy ( ret -- )
12     dup SNAPPY_OK = [ drop ] [ throw-snappy-error ] if ;
13
14 : n>outs ( n -- byte-array size_t* )
15     [ <byte-array> ] [ size_t <ref> ] bi ;
16
17 PRIVATE>
18
19 : snappy-compress ( byte-array -- compressed )
20     dup length
21     dup snappy_max_compressed_length
22     n>outs
23     [ snappy_compress check-snappy ] 2keep size_t deref head ;
24
25 : snappy-uncompress ( compressed -- byte-array )
26     dup length
27     over
28     dup length 0 size_t <ref>
29     [ snappy_uncompressed_length check-snappy ] keep
30     size_t deref
31     n>outs
32     [ snappy_uncompress check-snappy ] 2keep drop >byte-array ;