Merge from mainline (gomp-merge-2005-02-26).
[official-gcc.git] / zlib / contrib / iostream / zfstream.h
blobed79098a3adaf5d4a33720325186e3e1c3df8a62
2 #ifndef zfstream_h
3 #define zfstream_h
5 #include <fstream.h>
6 #include "zlib.h"
8 class gzfilebuf : public streambuf {
10 public:
12 gzfilebuf( );
13 virtual ~gzfilebuf();
15 gzfilebuf *open( const char *name, int io_mode );
16 gzfilebuf *attach( int file_descriptor, int io_mode );
17 gzfilebuf *close();
19 int setcompressionlevel( int comp_level );
20 int setcompressionstrategy( int comp_strategy );
22 inline int is_open() const { return (file !=NULL); }
24 virtual streampos seekoff( streamoff, ios::seek_dir, int );
26 virtual int sync();
28 protected:
30 virtual int underflow();
31 virtual int overflow( int = EOF );
33 private:
35 gzFile file;
36 short mode;
37 short own_file_descriptor;
39 int flushbuf();
40 int fillbuf();
44 class gzfilestream_common : virtual public ios {
46 friend class gzifstream;
47 friend class gzofstream;
48 friend gzofstream &setcompressionlevel( gzofstream &, int );
49 friend gzofstream &setcompressionstrategy( gzofstream &, int );
51 public:
52 virtual ~gzfilestream_common();
54 void attach( int fd, int io_mode );
55 void open( const char *name, int io_mode );
56 void close();
58 protected:
59 gzfilestream_common();
61 private:
62 gzfilebuf *rdbuf();
64 gzfilebuf buffer;
68 class gzifstream : public gzfilestream_common, public istream {
70 public:
72 gzifstream();
73 gzifstream( const char *name, int io_mode = ios::in );
74 gzifstream( int fd, int io_mode = ios::in );
76 virtual ~gzifstream();
80 class gzofstream : public gzfilestream_common, public ostream {
82 public:
84 gzofstream();
85 gzofstream( const char *name, int io_mode = ios::out );
86 gzofstream( int fd, int io_mode = ios::out );
88 virtual ~gzofstream();
92 template<class T> class gzomanip {
93 friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
94 public:
95 gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
96 private:
97 gzofstream &(*func)(gzofstream &, T);
98 T val;
101 template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)
103 return (*m.func)(s, m.val);
106 inline gzofstream &setcompressionlevel( gzofstream &s, int l )
108 (s.rdbuf())->setcompressionlevel(l);
109 return s;
112 inline gzofstream &setcompressionstrategy( gzofstream &s, int l )
114 (s.rdbuf())->setcompressionstrategy(l);
115 return s;
118 inline gzomanip<int> setcompressionlevel(int l)
120 return gzomanip<int>(&setcompressionlevel,l);
123 inline gzomanip<int> setcompressionstrategy(int l)
125 return gzomanip<int>(&setcompressionstrategy,l);
128 #endif