Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)
zfstream.h
Go to the documentation of this file.
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
13 virtual ~gzfilebuf();
14
15 gzfilebuf *open( const char *name, int io_mode );
16 gzfilebuf *attach( int file_descriptor, int io_mode );
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
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;
50
51public:
53
54 void attach( int fd, int io_mode );
55 void open( const char *name, int io_mode );
56 void close();
57
58protected:
60
61private:
62 gzfilebuf *rdbuf();
63
64 gzfilebuf buffer;
65
66};
67
68class gzifstream : public gzfilestream_common, public istream {
69
70public:
71
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
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
107{
108 (s.rdbuf())->setcompressionlevel(l);
109 return s;
110}
111
113{
115 return s;
116}
117
119{
121}
122
124{
126}
127
128#endif
Gzipped file stream buffer class.
Definition: zfstream.h:8
gzfilebuf * close()
virtual streampos seekoff(streamoff, ios::seek_dir, int)
gzfilebuf * attach(int file_descriptor, int io_mode)
int setcompressionstrategy(int comp_strategy)
int setcompressionlevel(int comp_level)
virtual int sync()
virtual int overflow(int=EOF)
virtual ~gzfilebuf()
virtual int underflow()
gzfilebuf * open(const char *name, int io_mode)
int is_open() const
Definition: zfstream.h:22
friend gzofstream & setcompressionlevel(gzofstream &, int)
Definition: zfstream.h:106
void attach(int fd, int io_mode)
void open(const char *name, int io_mode)
virtual ~gzfilestream_common()
friend gzofstream & setcompressionstrategy(gzofstream &, int)
Definition: zfstream.h:112
Gzipped file input stream class.
Definition: zfstream.h:68
virtual ~gzifstream()
gzifstream(const char *name, int io_mode=ios::in)
gzifstream(int fd, int io_mode=ios::in)
Gzipped file output stream class.
Definition: zfstream.h:80
gzfilebuf * rdbuf() const
Obtain underlying stream buffer.
Definition: zfstream.h:351
gzofstream(int fd, int io_mode=ios::out)
virtual ~gzofstream()
gzofstream(const char *name, int io_mode=ios::out)
gzomanip(gzofstream &(*f)(gzofstream &, T), T v)
Definition: zfstream.h:95
friend gzofstream & operator<<(gzofstream &, const gzomanip< T > &)
Definition: zfstream.h:101
unsigned char T
Definition: cls_uchar_va.c:10
const char int mode
Definition: ioapi.h:137
gzofstream & setcompressionstrategy(gzofstream &s, int l)
Definition: zfstream.h:112
gzofstream & setcompressionlevel(gzofstream &s, int l)
Definition: zfstream.h:106
gzofstream & operator<<(gzofstream &s, const gzomanip< T > &m)
Definition: zfstream.h:101
const char * name
Definition: nkf.c:208
#define NULL
Definition: regenc.h:69
#define f
Definition: gzappend.c:170
#define EOF
Definition: vsnprintf.c:203