00001 #ifndef MERT_GZFILEBUF_H_
00002 #define MERT_GZFILEBUF_H_
00003 
00004 #include <streambuf>
00005 #include <zlib.h>
00006 
00007 class GzFileBuf : public std::streambuf
00008 {
00009 public:
00010   explicit GzFileBuf(const char* filename);
00011   virtual ~GzFileBuf();
00012 
00013 protected:
00014   virtual int_type overflow(int_type c);
00015 
00016   
00017   virtual int_type underflow();
00018 
00019   virtual std::streampos seekpos(
00020     std::streampos sp,
00021     std::ios_base::openmode which = std::ios_base::in | std::ios_base::out);
00022 
00023   virtual std::streamsize xsgetn(char* s, std::streamsize num);
00024 
00025   
00026   virtual std::streamsize xsputn(const char* s, std::streamsize num);
00027 
00028 private:
00029   gzFile m_gz_file;
00030   static const unsigned int kBufSize = 1024;
00031   char m_buf[kBufSize];
00032 };
00033 
00034 #endif  // MERT_GZFILEBUF_H_