BIMHome v1.0.0
BIMHome接口文档说明
gzstream.h
浏览该文件的文档.
1/************************************************************************
2* @file gzstream.h
3*
4* @brief 压缩文件流相关类
5*
6* @details 压缩文件流相关类
7*
8* @author wukx
9*
10* @version v1.0
11*
12* @date 2016.9.29
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEBASE_GZSTREAM_H
19#define BIMHOMEBASE_GZSTREAM_H 1
20
21#include <sstream>
22#include <zlib.h>
23
24#ifdef _MSC_VER
25using std::ostream;
26using std::istream;
27#endif
28
29
30namespace Base
31{
32
33#define BUFFERSIZE 47+256
34
35 // ----------------------------------------------------------------------------
36 // 实现 gzstream 的内部类。有关用户类,请参见下文。
37 // ----------------------------------------------------------------------------
43 class BaseExport gzstreambuf : public std::streambuf
44 {
45 public:
51 gzstreambuf() : file(nullptr), opened(0), mode(0)
52 {
53 setp(buffer, buffer + (bufferSize - 1)); // 设置输出缓冲区的起始和结束位置
54 setg(buffer + 4, // 输入缓冲区的回退区域起始位置
55 buffer + 4, // 输入缓冲区的读取位置
56 buffer + 4); // 输入缓冲区的结束位置
57 }
58
64 int is_open() { return opened; }
65
74 gzstreambuf* open(const char* name, int open_mode, int comp);
75
82
87 ~gzstreambuf() { close(); }
88
95 virtual int overflow(int c = EOF);
96
102 virtual int underflow();
103
109 virtual int sync();
110
111 private:
118
119 static const int bufferSize;
120 //在 g++ 下,最后的 igzstream 总计 512 字节。
121
122 gzFile file;
123 char buffer[BUFFERSIZE];
124 char opened;
125 int mode;
126 };
127
133 class BaseExport gzstreambase : virtual public std::ios
134 {
135 public:
140 gzstreambase() { init(&buf); }
141
149 gzstreambase(const char* name, int open_mode, int comp);
150
156
164 void open(const char* name, int open_mode, int comp);
165
170 void close();
171
177 gzstreambuf* rdbuf() { return &buf; }
178
179 protected:
181 };
182
183
184 // ----------------------------------------------------------------------------
185 // 用户类。igzstream 和 ogzstream 分别类似于 ifstream 和 ofstream。它们基于 zlib 的 gz* 函数接口读取和写入文件。
186 // 支持 gzip 压缩格式的文件。
187 // ----------------------------------------------------------------------------
194 class BaseExport igzstream : public gzstreambase, public std::istream
195 {
196 public:
202#ifdef _MSC_VER
203 : istream(&buf) {}
204#else
205 : std::istream(&buf) {}
206#endif
214 igzstream(const char* name, int open_mode = std::ios_base::in, int comp = 1)
215#ifdef _MSC_VER
216 : gzstreambase(name, open_mode, comp), istream(&buf) {}
217#else
218 : gzstreambase(name, open_mode, comp), std::istream(&buf) {}
219#endif
225 gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); }
226
234 void open(const char* name, int open_mode = std::ios_base::in, int comp = 1)
235 {
236 gzstreambase::open(name, open_mode, comp);
237 }
238 };
239
246 class BaseExport ogzstream : public gzstreambase, public std::ostream
247 {
248 public:
254#ifdef _MSC_VER
255 : ostream(&buf) {}
256#else
257 : std::ostream(&buf) {}
258#endif
266 ogzstream(const char* name, int mode = std::ios_base::out, int comp = 1)
267#ifdef _MSC_VER
268 : gzstreambase(name, mode, comp), ostream(&buf) {}
269#else
270 : gzstreambase(name, mode, comp), std::ostream(&buf) {}
271#endif
277 gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); }
285 void open(const char* name, int open_mode = std::ios_base::out, int comp = 1)
286 {
287 gzstreambase::open(name, open_mode, comp);
288 }
289 };
290
291} // namespace BAse
292
293#endif // BIMHOMEBASE_GZSTREAM_H
294// ============================================================================
295// EOF //
296
void close()
关闭压缩文件
gzstreambase(const char *name, int open_mode, int comp)
构造函数
~gzstreambase()
析构函数
void open(const char *name, int open_mode, int comp)
打开压缩文件
gzstreambase()
默认构造函数
Definition gzstream.h:140
gzstreambuf buf
流缓冲区
Definition gzstream.h:180
gzstreambuf * rdbuf()
获取流缓冲区
Definition gzstream.h:177
压缩文件流基类
Definition gzstream.h:134
char opened
流的打开/关闭状态
Definition gzstream.h:124
gzstreambuf * open(const char *name, int open_mode, int comp)
打开压缩文件
int mode
I/O 模式
Definition gzstream.h:125
gzFile file
压缩文件句柄
Definition gzstream.h:122
gzstreambuf()
默认构造函数
Definition gzstream.h:51
static const int bufferSize
数据缓冲区大小
Definition gzstream.h:119
int is_open()
检查流是否打开
Definition gzstream.h:64
virtual int sync()
同步缓冲区
gzstreambuf * close()
关闭压缩文件
~gzstreambuf()
析构函数
Definition gzstream.h:87
virtual int overflow(int c=EOF)
处理字符溢出
virtual int underflow()
处理字符不足
int flush_buffer()
刷新缓冲区
压缩文件流缓冲区
Definition gzstream.h:44
void open(const char *name, int open_mode=std::ios_base::in, int comp=1)
打开压缩文件
Definition gzstream.h:234
igzstream(const char *name, int open_mode=std::ios_base::in, int comp=1)
构造函数
Definition gzstream.h:214
igzstream()
默认构造函数
Definition gzstream.h:201
gzstreambuf * rdbuf()
获取流缓冲区
Definition gzstream.h:225
压缩文件输入流类
Definition gzstream.h:195
ogzstream()
默认构造函数
Definition gzstream.h:253
ogzstream(const char *name, int mode=std::ios_base::out, int comp=1)
构造函数
Definition gzstream.h:266
void open(const char *name, int open_mode=std::ios_base::out, int comp=1)
打开压缩文件
Definition gzstream.h:285
gzstreambuf * rdbuf()
获取流缓冲区
Definition gzstream.h:277
压缩文件输出流类
Definition gzstream.h:247
#define BUFFERSIZE
Definition gzstream.h:33
Definition BaseFigureFactory.h:24