sub
init {
my
$comp
=
shift
;
my
(
$level
) =
@_
;
my
(
$err
);
(
$comp
->{d},
$err
) = Compress::Zlib::deflateInit({
Level
=>
$level
});
croak
"Can't create outgoing compression stream"
unless
$err
== Compress::Zlib::Z_OK();
(
$comp
->{i},
$err
) = Compress::Zlib::inflateInit();
croak
"Can't create incoming compression stream"
unless
$err
== Compress::Zlib::Z_OK();
}
sub
compress {
my
$comp
=
shift
;
my
(
$data
) =
@_
;
my
$d
=
$comp
->{d};
my
(
$compressed
,
$err
);
{
my
(
$output
,
$out
);
(
$output
,
$err
) =
$d
->deflate(
$data
);
last
unless
$err
== Compress::Zlib::Z_OK();
(
$out
,
$err
) =
$d
->flush(Compress::Zlib::Z_PARTIAL_FLUSH());
last
unless
$err
== Compress::Zlib::Z_OK();
$compressed
=
$output
.
$out
;
}
croak
"Error while compressing: $err"
unless
defined
$compressed
;
$compressed
;
}
sub
uncompress {
my
$comp
=
shift
;
my
(
$data
) =
@_
;
my
$i
=
$comp
->{i};
my
(
$inflated
,
$err
);
{
my
(
$out
);
(
$out
,
$err
) =
$i
->inflate(
$data
);
last
unless
$err
== Compress::Zlib::Z_OK();
$inflated
=
$out
;
}
croak
"Error while inflating: $err"
unless
defined
$inflated
;
$inflated
;
}
1;