Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

zipiostream.h

00001 /*
00002     wrapping the zlib with iostream using gzFile
00003     setbuf NYI
00004     Jean-Louis Ardoint 1996
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 /* NYI
00039     virtual streambuf*
00040             setbuf(char*  p, int len) ;
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 // NYI  void setbuf(char*  p, int l);
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 } // namespace OW32
00088 
00089 #endif //OW32_zipiostream_h

Generated on Sun Jun 5 01:29:18 2005 for OW32 by  doxygen 1.3.9.1