compression.snappy: Add support for snappy compression by Google. Could possibly be optimized?
parent
527318be63
commit
dc67fe0a9f
|
@ -0,0 +1 @@
|
||||||
|
Doug Coleman
|
|
@ -0,0 +1 @@
|
||||||
|
Doug Coleman
|
|
@ -0,0 +1,32 @@
|
||||||
|
! Copyright (C) 2014 Doug Coleman.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.c-types alien.libraries
|
||||||
|
alien.libraries.finder alien.syntax classes.struct ;
|
||||||
|
USE: nested-comments
|
||||||
|
IN: compression.snappy.ffi
|
||||||
|
|
||||||
|
<< "snappy" "snappy" find-library cdecl add-library >>
|
||||||
|
|
||||||
|
LIBRARY: snappy
|
||||||
|
|
||||||
|
ENUM: snappy_status SNAPPY_OK SNAPPY_INVALID_INPUT SNAPPY_BUFFER_TOO_SMALL ;
|
||||||
|
|
||||||
|
FUNCTION: snappy_status snappy_compress ( char* input,
|
||||||
|
size_t input_length,
|
||||||
|
char* compressed,
|
||||||
|
size_t* compressed_length ) ;
|
||||||
|
|
||||||
|
FUNCTION: snappy_status snappy_uncompress ( char* compressed,
|
||||||
|
size_t compressed_length,
|
||||||
|
char* uncompressed,
|
||||||
|
size_t* uncompressed_length ) ;
|
||||||
|
|
||||||
|
FUNCTION: size_t snappy_max_compressed_length ( size_t source_length ) ;
|
||||||
|
|
||||||
|
FUNCTION: snappy_status snappy_uncompressed_length ( char* compressed,
|
||||||
|
size_t compressed_length,
|
||||||
|
size_t* result ) ;
|
||||||
|
|
||||||
|
FUNCTION: snappy_status snappy_validate_compressed_buffer ( char* compressed,
|
||||||
|
size_t compressed_length ) ;
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
! Copyright (C) 2014 Doug Coleman.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: arrays byte-arrays compression.snappy kernel tools.test ;
|
||||||
|
IN: compression.snappy.tests
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
1000 2 <array> >byte-array [ snappy-compress snappy-uncompress ] keep =
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
B{ } [ snappy-compress snappy-uncompress ] keep =
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
B{ 1 } [ snappy-compress snappy-uncompress ] keep =
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
B{ 1 2 } [ snappy-compress snappy-uncompress ] keep =
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
B{ 1 2 3 } [ snappy-compress snappy-uncompress ] keep =
|
||||||
|
] unit-test
|
|
@ -0,0 +1,33 @@
|
||||||
|
! 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 ;
|
||||||
|
|
Loading…
Reference in New Issue