33 lines
832 B
Factor
33 lines
832 B
Factor
! Copyright (C) 2014 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: alien.c-types alien.data byte-arrays compression.snappy.ffi
|
|
kernel sequences ;
|
|
IN: compression.snappy
|
|
|
|
ERROR: snappy-error error ;
|
|
|
|
<PRIVATE
|
|
|
|
: check-snappy ( ret -- )
|
|
dup SNAPPY_OK = [ drop ] [ snappy-error ] if ;
|
|
|
|
: n>outs ( n -- byte-array size_t* )
|
|
[ <byte-array> ] [ size_t <ref> ] bi ;
|
|
|
|
PRIVATE>
|
|
|
|
: snappy-compress ( byte-array -- compressed )
|
|
dup length
|
|
dup snappy_max_compressed_length
|
|
n>outs
|
|
[ snappy_compress check-snappy ] 2keep size_t deref head ;
|
|
|
|
: snappy-uncompress ( compressed -- byte-array )
|
|
dup length
|
|
over
|
|
dup length 0 size_t <ref>
|
|
[ snappy_uncompressed_length check-snappy ] keep
|
|
size_t deref
|
|
n>outs
|
|
[ snappy_uncompress check-snappy ] 2keep drop >byte-array ;
|