00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * Gzip encoder/decoder based on zlib. 00006 */ 00007 #ifndef __WVGZIP_H 00008 #define __WVGZIP_H 00009 00010 #include "wvencoder.h" 00011 #include "wvencoderstream.h" 00012 00013 struct z_stream_s; 00014 00035 class WvGzipEncoder : public WvEncoder 00036 { 00037 public: 00038 enum Mode { 00039 Deflate, 00040 Inflate 00041 }; 00042 00048 WvGzipEncoder(Mode mode, size_t _out_limit = 0); 00049 virtual ~WvGzipEncoder(); 00050 00055 size_t out_limit; 00056 00063 bool ignore_decompression_errors; 00064 00072 bool full_flush; 00073 00074 protected: 00075 virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush); 00076 virtual bool _finish(WvBuf &outbuf); 00077 virtual bool _reset(); 00078 00079 private: 00080 struct z_stream_s *zstr; 00081 WvInPlaceBuf tmpbuf; 00082 Mode mode; 00083 size_t output; 00084 00085 void init(); 00086 void close(); 00087 void prepare(WvBuf *inbuf); 00088 bool process(WvBuf &outbuf, bool flush, bool finish); 00089 }; 00090 00091 00092 #endif // __WVGZIP_H