compression.snappy: Add support for snappy compression by Google. Could possibly be optimized?

db4
Doug Coleman 2014-10-03 22:56:21 -07:00
parent 527318be63
commit dc67fe0a9f
5 changed files with 91 additions and 0 deletions

View File

@ -0,0 +1 @@
Doug Coleman

View File

@ -0,0 +1 @@
Doug Coleman

View File

@ -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 ) ;

View File

@ -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

View File

@ -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 ;