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