all repos — mgba @ a27cb6c040a0515d004456c20a0842ec2bcbf652

mGBA Game Boy Advance Emulator

src/third-party/zlib/contrib/iostream/zfstream.h (view raw)

  1
  2#ifndef zfstream_h
  3#define zfstream_h
  4
  5#include <fstream.h>
  6#include "zlib.h"
  7
  8class gzfilebuf : public streambuf {
  9
 10public:
 11
 12  gzfilebuf( );
 13  virtual ~gzfilebuf();
 14
 15  gzfilebuf *open( const char *name, int io_mode );
 16  gzfilebuf *attach( int file_descriptor, int io_mode );
 17  gzfilebuf *close();
 18
 19  int setcompressionlevel( int comp_level );
 20  int setcompressionstrategy( int comp_strategy );
 21
 22  inline int is_open() const { return (file !=NULL); }
 23
 24  virtual streampos seekoff( streamoff, ios::seek_dir, int );
 25
 26  virtual int sync();
 27
 28protected:
 29
 30  virtual int underflow();
 31  virtual int overflow( int = EOF );
 32
 33private:
 34
 35  gzFile file;
 36  short mode;
 37  short own_file_descriptor;
 38
 39  int flushbuf();
 40  int fillbuf();
 41
 42};
 43
 44class gzfilestream_common : virtual public ios {
 45
 46  friend class gzifstream;
 47  friend class gzofstream;
 48  friend gzofstream &setcompressionlevel( gzofstream &, int );
 49  friend gzofstream &setcompressionstrategy( gzofstream &, int );
 50
 51public:
 52  virtual ~gzfilestream_common();
 53
 54  void attach( int fd, int io_mode );
 55  void open( const char *name, int io_mode );
 56  void close();
 57
 58protected:
 59  gzfilestream_common();
 60
 61private:
 62  gzfilebuf *rdbuf();
 63
 64  gzfilebuf buffer;
 65
 66};
 67
 68class gzifstream : public gzfilestream_common, public istream {
 69
 70public:
 71
 72  gzifstream();
 73  gzifstream( const char *name, int io_mode = ios::in );
 74  gzifstream( int fd, int io_mode = ios::in );
 75
 76  virtual ~gzifstream();
 77
 78};
 79
 80class gzofstream : public gzfilestream_common, public ostream {
 81
 82public:
 83
 84  gzofstream();
 85  gzofstream( const char *name, int io_mode = ios::out );
 86  gzofstream( int fd, int io_mode = ios::out );
 87
 88  virtual ~gzofstream();
 89
 90};
 91
 92template<class T> class gzomanip {
 93  friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
 94public:
 95  gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
 96private:
 97  gzofstream &(*func)(gzofstream &, T);
 98  T val;
 99};
100
101template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)
102{
103  return (*m.func)(s, m.val);
104}
105
106inline gzofstream &setcompressionlevel( gzofstream &s, int l )
107{
108  (s.rdbuf())->setcompressionlevel(l);
109  return s;
110}
111
112inline gzofstream &setcompressionstrategy( gzofstream &s, int l )
113{
114  (s.rdbuf())->setcompressionstrategy(l);
115  return s;
116}
117
118inline gzomanip<int> setcompressionlevel(int l)
119{
120  return gzomanip<int>(&setcompressionlevel,l);
121}
122
123inline gzomanip<int> setcompressionstrategy(int l)
124{
125  return gzomanip<int>(&setcompressionstrategy,l);
126}
127
128#endif