Fossil SCM

fossil-scm / compat / zlib / contrib / iostream / zfstream.h
Blame History Raw 129 lines
1
2
#ifndef zfstream_h
3
#define zfstream_h
4
5
#include <fstream.h>
6
#include "zlib.h"
7
8
class gzfilebuf : public streambuf {
9
10
public:
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
28
protected:
29
30
virtual int underflow();
31
virtual int overflow( int = EOF );
32
33
private:
34
35
gzFile file;
36
short mode;
37
short own_file_descriptor;
38
39
int flushbuf();
40
int fillbuf();
41
42
};
43
44
class 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
51
public:
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
58
protected:
59
gzfilestream_common();
60
61
private:
62
gzfilebuf *rdbuf();
63
64
gzfilebuf buffer;
65
66
};
67
68
class gzifstream : public gzfilestream_common, public istream {
69
70
public:
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
80
class gzofstream : public gzfilestream_common, public ostream {
81
82
public:
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
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;
99
};
100
101
template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)
102
{
103
return (*m.func)(s, m.val);
104
}
105
106
inline gzofstream &setcompressionlevel( gzofstream &s, int l )
107
{
108
(s.rdbuf())->setcompressionlevel(l);
109
return s;
110
}
111
112
inline gzofstream &setcompressionstrategy( gzofstream &s, int l )
113
{
114
(s.rdbuf())->setcompressionstrategy(l);
115
return s;
116
}
117
118
inline gzomanip<int> setcompressionlevel(int l)
119
{
120
return gzomanip<int>(&setcompressionlevel,l);
121
}
122
123
inline gzomanip<int> setcompressionstrategy(int l)
124
{
125
return gzomanip<int>(&setcompressionstrategy,l);
126
}
127
128
#endif
129

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button