1package IO::Compress::Adapter::Deflate ;
2
3use strict;
4use warnings;
5use bytes;
6
7use IO::Compress::Base::Common 2.064 qw(:Status);
8use Compress::Raw::Zlib  2.064 qw( !crc32 !adler32 ) ;
9
10require Exporter;
11our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, @EXPORT, %DEFLATE_CONSTANTS);
12
13$VERSION = '2.064';
14@ISA = qw(Exporter);
15@EXPORT_OK = @Compress::Raw::Zlib::DEFLATE_CONSTANTS;
16%EXPORT_TAGS = %Compress::Raw::Zlib::DEFLATE_CONSTANTS;
17@EXPORT = @EXPORT_OK;
18%DEFLATE_CONSTANTS = %EXPORT_TAGS ;
19
20sub mkCompObject
21{
22    my $crc32    = shift ;
23    my $adler32  = shift ;
24    my $level    = shift ;
25    my $strategy = shift ;
26
27    my ($def, $status) = new Compress::Raw::Zlib::Deflate
28                                -AppendOutput   => 1,
29                                -CRC32          => $crc32,
30                                -ADLER32        => $adler32,
31                                -Level          => $level,
32                                -Strategy       => $strategy,
33                                -WindowBits     => - MAX_WBITS;
34
35    return (undef, "Cannot create Deflate object: $status", $status)
36        if $status != Z_OK;
37
38    return bless {'Def'        => $def,
39                  'Error'      => '',
40                 } ;
41}
42
43sub compr
44{
45    my $self = shift ;
46
47    my $def   = $self->{Def};
48
49    my $status = $def->deflate($_[0], $_[1]) ;
50    $self->{ErrorNo} = $status;
51
52    if ($status != Z_OK)
53    {
54        $self->{Error} = "Deflate Error: $status";
55        return STATUS_ERROR;
56    }
57
58    return STATUS_OK;
59}
60
61sub flush
62{
63    my $self = shift ;
64
65    my $def   = $self->{Def};
66
67    my $opt = $_[1] || Z_FINISH;
68    my $status = $def->flush($_[0], $opt);
69    $self->{ErrorNo} = $status;
70
71    if ($status != Z_OK)
72    {
73        $self->{Error} = "Deflate Error: $status";
74        return STATUS_ERROR;
75    }
76
77    return STATUS_OK;
78}
79
80sub close
81{
82    my $self = shift ;
83
84    my $def   = $self->{Def};
85
86    $def->flush($_[0], Z_FINISH)
87        if defined $def ;
88}
89
90sub reset
91{
92    my $self = shift ;
93
94    my $def   = $self->{Def};
95
96    my $status = $def->deflateReset() ;
97    $self->{ErrorNo} = $status;
98    if ($status != Z_OK)
99    {
100        $self->{Error} = "Deflate Error: $status";
101        return STATUS_ERROR;
102    }
103
104    return STATUS_OK;
105}
106
107sub deflateParams
108{
109    my $self = shift ;
110
111    my $def   = $self->{Def};
112
113    my $status = $def->deflateParams(@_);
114    $self->{ErrorNo} = $status;
115    if ($status != Z_OK)
116    {
117        $self->{Error} = "deflateParams Error: $status";
118        return STATUS_ERROR;
119    }
120
121    return STATUS_OK;
122}
123
124
125
126#sub total_out
127#{
128#    my $self = shift ;
129#    $self->{Def}->total_out();
130#}
131#
132#sub total_in
133#{
134#    my $self = shift ;
135#    $self->{Def}->total_in();
136#}
137
138sub compressedBytes
139{
140    my $self = shift ;
141
142    $self->{Def}->compressedBytes();
143}
144
145sub uncompressedBytes
146{
147    my $self = shift ;
148    $self->{Def}->uncompressedBytes();
149}
150
151
152
153
154sub crc32
155{
156    my $self = shift ;
157    $self->{Def}->crc32();
158}
159
160sub adler32
161{
162    my $self = shift ;
163    $self->{Def}->adler32();
164}
165
166
1671;
168
169__END__
170
171