]> gitweb.factorcode.org Git - factor.git/commitdiff
compression.zlib: faster by using byte-vectors.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 25 Mar 2013 18:36:08 +0000 (11:36 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 25 Mar 2013 18:36:08 +0000 (11:36 -0700)
basis/compression/zlib/zlib.factor

index 02a40defcf7170b1c42bd64e0baf49dc17c45805..4016dde0472ca11f0925e1012f790d551b93a02c 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2009 Doug Coleman.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: alien alien.c-types alien.data alien.syntax byte-arrays
+USING: alien alien.c-types alien.data alien.syntax byte-vectors
 combinators kernel math math.functions sequences system
 accessors libc ;
 QUALIFIED: compression.zlib.ffi
@@ -36,15 +36,19 @@ ERROR: zlib-failed n string ;
 
 : compress ( byte-array -- compressed )
     [
-        [ compressed-size <byte-array> dup length ulong <ref> ] keep [
+        [
+            compressed-size
+            [ <byte-vector> dup underlying>> ] keep ulong <ref>
+        ] keep [
             dup length compression.zlib.ffi:compress zlib-error
-        ] 3keep drop ulong deref head
+        ] 2keep drop ulong deref >>length B{ } like
     ] keep length <compressed> ;
 
 : uncompress ( compressed -- byte-array )
     [
-        length>> [ <byte-array> ] keep ulong <ref> 2dup
+        length>> [ <byte-vector> dup underlying>> ] keep
+        ulong <ref>
     ] [
-        data>> dup length
-        compression.zlib.ffi:uncompress zlib-error
-    ] bi ulong deref head ;
+        data>> dup length pick
+        [ compression.zlib.ffi:uncompress zlib-error ] dip
+    ] bi ulong deref >>length B{ } like ;