00001
00002
00003
00004
00005
00006
00007 #ifndef OW32_zipiostream_h
00008 #define OW32_zipiostream_h
00009
00010 #include <iostream.h>
00011 #include <zlib.h>
00012 #include <OW32/auto_buf.h>
00013 #include <OW32/OW32Libs.h>
00014
00015 namespace OW32
00016 {
00017
00019 class OW32_LIB_EXPORT zipstreambuf : public streambuf
00020 {
00021 public:
00022 static const int openprot;
00023 private:
00024 char opened;
00025 int mode;
00026 gzFile file;
00027
00028 public:
00029 zipstreambuf() { opened = 0; }
00030 int is_open() { return opened; }
00031 zipstreambuf* open(const char * name, int om);
00032 zipstreambuf* close();
00033 ~zipstreambuf() { close(); }
00034
00035 virtual int overflow(int=EOF);
00036 virtual int underflow();
00037 virtual int sync() ;
00038
00039
00040
00041
00042 };
00043
00045 class zipstreambase : virtual public ios
00046 {
00047 zipstreambuf buf;
00048 public:
00049 zipstreambase() {init(&buf);}
00050 zipstreambase(const char* name,
00051 int mode);
00052 ~zipstreambase();
00053 void open(const char* name, int mode);
00054 void close();
00055
00056 zipstreambuf* rdbuf() { return &buf; }
00057 };
00058
00060 class izipstream : public zipstreambase, public istream
00061 {
00062 public:
00063 izipstream() {}
00064 izipstream(const char* name,
00065 int mode=ios::in)
00066 : zipstreambase(name,mode) {}
00067
00068 zipstreambuf* rdbuf() {return zipstreambase::rdbuf(); }
00069 void open(const char* name)
00070 {zipstreambase::open(name,ios::in);}
00071 };
00072
00074 class ozipstream : public zipstreambase, public ostream
00075 {
00076 public:
00077 ozipstream() {}
00078 ozipstream(const char* name,
00079 int mode=ios::out)
00080 : zipstreambase(name,mode) {}
00081
00082 zipstreambuf* rdbuf() {return zipstreambase::rdbuf(); }
00083 void open(const char* name)
00084 {zipstreambase::open(name,ios::out);}
00085 };
00086
00087 }
00088
00089 #endif //OW32_zipiostream_h