1 ! Copyright (C) 2009 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.data alien.syntax byte-arrays
4 combinators kernel math math.functions sequences system
6 QUALIFIED: compression.zlib.ffi
9 TUPLE: compressed data length ;
11 : <compressed> ( data length -- compressed )
16 ERROR: zlib-failed n string ;
18 : zlib-error-message ( n -- * )
19 dup compression.zlib.ffi:Z_ERRNO = [
20 drop errno "native libc error"
23 neg ! zlib error codes are negative
25 "no error" "libc_error"
26 "stream error" "data error"
27 "memory error" "buffer error" "zlib version error"
32 dup compression.zlib.ffi:Z_OK = [ drop ] [ dup zlib-error-message zlib-failed ] if ;
34 : compressed-size ( byte-array -- n )
35 length 1001/1000 * ceiling 12 + ;
37 : compress ( byte-array -- compressed )
39 [ compressed-size <byte-array> dup length ulong <ref> ] keep [
40 dup length compression.zlib.ffi:compress zlib-error
41 ] 3keep drop ulong deref head
42 ] keep length <compressed> ;
44 : uncompress ( compressed -- byte-array )
46 length>> [ <byte-array> ] keep ulong <ref> 2dup
49 compression.zlib.ffi:uncompress zlib-error
50 ] bi ulong deref head ;