WvStreams
wvgzip.h
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 
00066     bool ignore_decompression_errors;
00067 
00075     bool full_flush;
00076 
00077 protected:
00078     virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf, bool flush);
00079     virtual bool _finish(WvBuf &outbuf);
00080     virtual bool _reset();
00081 
00082 private:
00083     struct z_stream_s *zstr;
00084     WvInPlaceBuf tmpbuf;
00085     Mode mode;
00086     size_t output;
00087 
00088     void init();
00089     void close();
00090     void prepare(WvBuf *inbuf);
00091     bool process(WvBuf &outbuf, bool flush, bool finish);
00092 };
00093 
00094 
00095 #endif // __WVGZIP_H