acl  3.5.3.0
url_coder.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "dbuf_pool.hpp"
4 #include <vector>
5 
6 namespace acl {
7 
8 class string;
9 
10 struct URL_NV
11 {
12  char* name;
13  char* value;
14 };
15 
17 {
18 public:
19  /**
20  * 构造函数
21  * @param nocase {bool} 当为 true 时表示参数名不区别大小写
22  * @param dbuf {dbuf_guard*} 内存池对象
23  */
24  url_coder(bool nocase = true, dbuf_guard* dbuf = NULL);
25 
26  /**
27  * 构造函数,通过类实例对象构造
28  * @param coder {const url_coder&}
29  * @param dbuf {dbuf_guard*} 内存池对象
30  */
31  url_coder(const url_coder& coder, dbuf_guard* dbuf = NULL);
32 
33  ~url_coder(void);
34 
35  /**
36  * 将存储于 params_ 数组中的数据进行 url 编码
37  * @param buf {string&} 存储编码后的结果
38  * @param clean {bool} 是否清空传入的 buf 缓冲区
39  */
40  void encode(string& buf, bool clean = true) const;
41 
42  /**
43  * 获得将数组对象转换为编码后的字符串对象
44  * @return {const string&}
45  */
46  const string& to_string(void) const;
47 
48  /**
49  * 解析以 URL 编码的字符串
50  * @param str {const char*} url 编码形式的字符串
51  */
52  void decode(const char* str);
53 
54  /**
55  * 采用 url 编码时,调用此函数添加变量
56  * @param name {const char*} 变量名
57  * @param value 变量值
58  * @param override {bool} 如果存在同名变量是否直接覆盖
59  * @return 返回 url_coder 对象的引用
60  */
61  url_coder& set(const char* name, const char* value,
62  bool override = true);
63  url_coder& set(const char* name, int value, bool override = true);
64  url_coder& set(const char* name, bool override, const char* fmt, ...)
65  ACL_CPP_PRINTF(4, 5);
66  url_coder& set(const char* name, const char* fmt, va_list ap,
67  bool override = true);
68 
69  /**
70  * 获得 URL 解码后 params_ 数组中某个变量名的值
71  * @param name {const char*} 变量名
72  * @param found {bool*} 该指针非 NULL 时,将存储 name 是否存在,主要
73  * 用在 name 的值为空的情形
74  * @return {const char*} 返回 NULL 表示不存在
75  */
76  const char* get(const char* name, bool* found = NULL) const;
77 
78  /**
79  * 获得 URL 解码后 params_ 数组中某个变量名的值
80  * @param name {const char*} 变量名
81  * @return {const char*} 返回 NULL 表示不存在或 name 的值为空
82  * 注:如果 name 的值为空,则不能正确判断 name 是否存在
83  */
84  const char* operator[](const char* name) const;
85 
86  /**
87  * URL 编码器对象的拷贝
88  * @param coder {const url_coder&} URL 源编码器对象
89  * @return {const url_coder&}
90  */
91  const url_coder& operator =(const url_coder& coder);
92 
93  /**
94  * 获得参数数组对象
95  * @return {std::vector<URL_NV*>&}
96  */
97  const std::vector<URL_NV*>& get_params(void) const
98  {
99  return params_;
100  }
101 
102  /**
103  * 从 params_ 参数数组中删除某个变量
104  * @param name {const char*} 变量名
105  * @return {bool} 返回 true 表示删除成功,否则表示不存在
106  */
107  bool del(const char* name);
108 
109  /**
110  * 重置解析器状态,清除内部缓存
111  */
112  void reset(void);
113 
114 private:
115  bool nocase_;
116  dbuf_guard* dbuf_;
117  dbuf_guard* dbuf_internal_;
118  std::vector<URL_NV*> params_;
119  string* buf_;
120 
121  void init_dbuf(dbuf_guard* dbuf);
122 };
123 
124 } // namespace acl end
HTTP_API void const char * name
Definition: lib_http.h:620
#define ACL_CPP_PRINTF(format_idx, arg_idx)
Definition: atomic.hpp:75
char * value
Definition: url_coder.hpp:13
const std::vector< URL_NV * > & get_params(void) const
Definition: url_coder.hpp:97
ACL_API void const char * fmt
Definition: acl_aio.h:771
#define ACL_CPP_API
char * name
Definition: url_coder.hpp:12