00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _DECAF_UTIL_ZIP_DEFLATEROUTPUTSTREAM_H_
00019 #define _DECAF_UTIL_ZIP_DEFLATEROUTPUTSTREAM_H_
00020
00021 #include <decaf/util/Config.h>
00022
00023 #include <decaf/io/FilterOutputStream.h>
00024 #include <decaf/io/IOException.h>
00025 #include <decaf/util/zip/Deflater.h>
00026
00027 #include <vector>
00028
00029 namespace decaf {
00030 namespace util {
00031 namespace zip {
00032
00039 class DECAF_API DeflaterOutputStream : public decaf::io::FilterOutputStream {
00040 protected:
00041
00045 Deflater* deflater;
00046
00050 std::vector<unsigned char> buf;
00051
00052 bool ownDeflater;
00053 bool isDone;
00054
00055 static const std::size_t DEFAULT_BUFFER_SIZE;
00056
00057 private:
00058
00059 DeflaterOutputStream( const DeflaterOutputStream& );
00060 DeflaterOutputStream& operator= ( const DeflaterOutputStream& );
00061
00062 public:
00063
00072 DeflaterOutputStream( decaf::io::OutputStream* outputStream, bool own = false );
00073
00091 DeflaterOutputStream( decaf::io::OutputStream* outputStream, Deflater* deflater,
00092 bool own = false, bool ownDeflater = false );
00093
00114 DeflaterOutputStream( decaf::io::OutputStream* outputStream, Deflater* deflater,
00115 int bufferSize, bool own = false, bool ownDeflater = false );
00116
00117 virtual ~DeflaterOutputStream();
00118
00125 virtual void finish();
00126
00132 virtual void close();
00133
00134 protected:
00135
00136 virtual void doWriteByte( unsigned char value );
00137
00138 virtual void doWriteArrayBounded( const unsigned char* buffer, int size,
00139 int offset, int length );
00140
00141 protected:
00142
00146 virtual void deflate();
00147
00148 };
00149
00150 }}}
00151
00152 #endif