Skip to content

Commit

Permalink
migrate from deprecated api; allow compression level to be given
Browse files Browse the repository at this point in the history
  • Loading branch information
gray committed May 19, 2015
1 parent 401227a commit a2b4325
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
13 changes: 8 additions & 5 deletions LZ4.xs
Expand Up @@ -15,15 +15,17 @@ MODULE = Compress::LZ4 PACKAGE = Compress::LZ4
PROTOTYPES: ENABLE

SV *
compress (sv)
compress (sv, level=0)
SV *sv
IV level
ALIAS:
compress_hc = 1
lz4_compress = 2
lz4_compress_hc = 3
PREINIT:
char *src, *dest;
STRLEN src_len, dest_len;
int hc;
CODE:
SvGETMAGIC(sv);
if (SvROK(sv) && ! SvAMAGIC(sv)) {
Expand All @@ -43,20 +45,21 @@ CODE:
if (! dest)
XSRETURN_UNDEF;

hc = ix || 0 < level;
if (2 > ix) {
/* Add the length header as 4 bytes in little endian. */
dest[0] = src_len & 0xff;
dest[1] = (src_len>> 8) & 0xff;
dest[2] = (src_len>>16) & 0xff;
dest[3] = (src_len>>24) & 0xff;

dest_len = ix ? LZ4_compressHC(src, dest + 4, src_len)
: LZ4_compress(src, dest + 4, src_len);
dest_len = hc ? LZ4_compress_HC(src, dest + 4, src_len, dest_len, level)
: LZ4_compress_default(src, dest + 4, src_len, dest_len);
dest_len += 4;
}
else {
dest_len = ix ? LZ4_compressHC(src, dest, src_len)
: LZ4_compress(src, dest, src_len);
dest_len = hc ? LZ4_compress_HC(src, dest, src_len, dest_len, level)
: LZ4_compress_default(src, dest, src_len, dest_len);
}

SvCUR_set(RETVAL, dest_len);
Expand Down
5 changes: 3 additions & 2 deletions lib/Compress/LZ4.pm
Expand Up @@ -48,9 +48,10 @@ buffer can be either a scalar or a scalar reference.
=head2 compress_hc
$compressed = compress_hc($bytes)
$compressed = compress_hc($bytes [, $level])
A higher-compression, but slower, version of C<compress>.
A higher-compression, but slower, version of C<compress>. The default
compression level may be changed if an optional value (0-16) is given.
=head2 decompress
Expand Down
2 changes: 1 addition & 1 deletion t/01_lz4.t
Expand Up @@ -21,7 +21,7 @@ for my $len (0 .. 1_024) {
my $compressed = compress($in);
my $decompressed = decompress($compressed);
is $decompressed, $in, "rountrip- length: $len";
is compress_hc($in), $compressed, "compress_hc- length: $len";
is compress_hc($in, 4), $compressed, "compress_hc- length: $len";
}

{
Expand Down

0 comments on commit a2b4325

Please sign in to comment.