acl
3.5.3.0
pipe_stream.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include <list>
4
#include "
noncopyable.hpp
"
5
#include "
string.hpp
"
6
7
namespace
acl
{
8
9
/**
10
* 双向输入输出缓冲管道流, 该流不仅可接收输入数据,同时还可输出所
11
* 输入的数据,纯虚基类,子类需要实现三个接口函数
12
*/
13
class
ACL_CPP_API
pipe_stream
:
public
noncopyable
14
{
15
public
:
16
pipe_stream
() {}
17
virtual
~pipe_stream
() {}
18
19
/**
20
* 数据输入输出接口
21
* @param in {const char*} 输入数据的地址
22
* @param len {size_t} 输入数据长度
23
* @param out {string*} 存储输出结果缓冲区,不能为空
24
* @param max {size_t} 希望接收到输出结果的长度限制,如果为0则
25
* 表示没有限制,输出结果都存储在 out 缓冲区中
26
* @return {int} 输出数据的长度,如果 < 0 则表示出错
27
*/
28
virtual
int
push_pop(
const
char
* in,
size_t
len,
29
string
* out,
size_t
max = 0) = 0;
30
31
/**
32
* 最后处理的输出数据接口
33
* @param out {string*} 存储输出结果缓冲区,不能为空
34
* @param max {size_t} 希望接收到输出结果的长度限制,如果为0则
35
* 表示没有限制,输出结果都存储在 out 缓冲区中
36
* @return {int} 输出数据的长度,如果 < 0 则表示出错
37
*/
38
virtual
int
pop_end(
string
* out,
size_t
max = 0) = 0;
39
40
/**
41
* 清空内部缓冲区
42
*/
43
virtual
void
clear
() {}
44
};
45
46
/**
47
* 字符串处理双向管理流
48
*/
49
class
ACL_CPP_API
pipe_string
:
public
pipe_stream
50
{
51
public
:
52
pipe_string
();
53
pipe_string
(
string
& s);
54
virtual
~
pipe_string
();
55
56
// pipe_stream 基类中的四个虚函数
57
virtual
int
push_pop(
const
char
* in,
size_t
len,
58
string
* out,
size_t
max = 0);
59
virtual
int
pop_end(
string
* out,
size_t
max = 0);
60
virtual
void
clear
()
61
{
62
m_pBuf->clear();
63
m_pos = 0;
64
}
65
66
string
&
get_buf
()
const
67
{
68
return
(*m_pBuf);
69
}
70
71
char
*
c_str
()
const
72
{
73
return
(m_pBuf->c_str());
74
}
75
76
size_t
length
()
const
77
{
78
return
(m_pBuf->length());
79
}
80
81
bool
empty
()
const
82
{
83
return
(m_pBuf->empty());
84
}
85
86
private
:
87
string
* m_pBuf;
88
string
* m_pSavedBufPtr;
89
size_t
m_pos;
90
};
91
92
/**
93
* 管道流管理器,该类管理所有的管理流,将数据依次传递给所有管理流的
94
* 输入接口,同时从所有管道流的输出接口中获得数据然后再将数据传递给
95
* 下一个管道流的输入接口,以此类推,直到最后一个管道流
96
*/
97
class
ACL_CPP_API
pipe_manager
:
public
noncopyable
98
{
99
public
:
100
pipe_manager
();
101
~
pipe_manager
();
102
103
/**
104
* 以尾部添加的方式注册新的管道流处理器
105
* @param stream {pipe_stream*} 管道流处理器对象
106
* @return {bool} 如果该管道流处理器对象已经存在则返回 false
107
*/
108
bool
push_back(
pipe_stream
*
stream
);
109
110
/**
111
* 以头部添加的方式注册新的管道流处理器
112
* @param stream {pipe_stream*} 管道流处理器对象
113
* @return {bool} 如果该管道流处理器对象已经存在则返回 false
114
*/
115
bool
push_front(
pipe_stream
*
stream
);
116
117
/**
118
* 应用向管道流管理器添加新数据,由该管理器依次传递给所有已注册管道流
119
* 处理器,同时从已注册管道流处理器接收处理结果,依次传递给下一个
120
* @param src {const char*} 待处理的数据地址
121
* @param len {size_t} src 数据长度
122
* @param out {pipe_stream*} 如果非空,则该管道处理器将是最后一个只接收
123
* 输入而不进行输出的管道处理器
124
* @return {bool} 是否有错误发生
125
*/
126
bool
update(
const
char
* src,
size_t
len,
pipe_stream
* out = NULL);
127
128
/**
129
* 最后必须调用一次该函数,以使有些管道的缓冲区里的数据可以一次性地
130
* 刷新至最后的管道中
131
* @param out {pipe_stream*} 如果非空,则该管道处理器将是最后一个只接收
132
* 输入而不进行输出的管道处理器
133
* @return {bool} 是否有错误发生
134
*/
135
bool
update_end(
pipe_stream
* out = NULL);
136
137
pipe_manager
& operator<<(
const
string
&);
138
pipe_manager
& operator<<(
const
string
*);
139
pipe_manager
& operator<<(
const
char
*);
140
#if defined(_WIN32) || defined(_WIN64)
141
pipe_manager
& operator<<(__int64);
142
pipe_manager
& operator<<(
unsigned
__int64);
143
#else
144
pipe_manager
& operator<<(
long
long
int
);
145
pipe_manager
& operator<<(
unsigned
long
long
int
);
146
#endif
147
pipe_manager
& operator<<(
long
);
148
pipe_manager
& operator<<(
unsigned
long
);
149
pipe_manager
& operator<<(
int
);
150
pipe_manager
& operator<<(
unsigned
int
);
151
pipe_manager
& operator<<(
short
);
152
pipe_manager
& operator<<(
unsigned
short
);
153
pipe_manager
& operator<<(
char
);
154
pipe_manager
& operator<<(
unsigned
char
);
155
156
char
* c_str()
const
;
157
size_t
length()
const
;
158
void
clear();
159
160
private
:
161
std::list<pipe_stream*> m_streams;
162
string
* m_pBuf1, *m_pBuf2;
163
pipe_string
* m_pPipeStream;
164
};
165
166
}
// namespace acl
acl::pipe_stream::pipe_stream
pipe_stream()
Definition:
pipe_stream.hpp:16
string.hpp
acl::pipe_stream::~pipe_stream
virtual ~pipe_stream()
Definition:
pipe_stream.hpp:17
acl
Definition:
acl_cpp_init.hpp:4
acl::pipe_manager
Definition:
pipe_stream.hpp:97
acl::noncopyable
Definition:
noncopyable.hpp:6
noncopyable.hpp
acl::pipe_string::c_str
char * c_str() const
Definition:
pipe_stream.hpp:71
acl::pipe_stream::clear
virtual void clear()
Definition:
pipe_stream.hpp:43
acl::pipe_string
Definition:
pipe_stream.hpp:49
acl::stream
Definition:
stream.hpp:24
acl::pipe_string::get_buf
string & get_buf() const
Definition:
pipe_stream.hpp:66
acl::pipe_stream
Definition:
pipe_stream.hpp:13
acl::pipe_string::length
size_t length() const
Definition:
pipe_stream.hpp:76
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
acl::pipe_string::empty
bool empty() const
Definition:
pipe_stream.hpp:81
acl::pipe_string::clear
virtual void clear()
Definition:
pipe_stream.hpp:60
include
acl_cpp
stdlib
pipe_stream.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15