SpiecsEngine
 
Loading...
Searching...
No Matches
Buffer.h
Go to the documentation of this file.
1/**
2* @file Buffer.h.
3* @brief The Buffer Class Definitions.
4* @author Spices & Muduo.
5*/
6
7#pragma once
8#include "Core/Core.h"
9#include "InetAddress.h"
10
11namespace Spices {
12
13namespace Net {
14
15 /**
16 * @brief Wrapper of readwrite buffer.
17 */
18 class Buffer
19 {
20 public:
21
22 static constexpr size_t header = 8;
23 static constexpr size_t initialSize = 1024;
24
25 public:
26
27 /**
28 * @brief Constructor Function.
29 * @param[in] bytes Buffer read area Bytes.
30 */
31 Buffer(size_t bytes = initialSize)
35 {}
36
37 /**
38 * @brief Destructor Function.
39 */
40 virtual ~Buffer() = default;
41
42 /**
43 * @brief Get readable area bytes.
44 * @return Returns readable area bytes.
45 */
47 {
48 return m_WriterIndex - m_ReaderIndex;
49 }
50
51 /**
52 * @brief Get writeable area bytes.
53 * @return Returns writeable area bytes.
54 */
56 {
57 return m_Buffer.size() - m_WriterIndex;
58 }
59
60 /**
61 * @brief Get header area bytes.
62 * @return Returns header area bytes.
63 */
65 {
66 return m_ReaderIndex;
67 }
68
69 /**
70 * @brief Get read area start pointer.
71 * @return Returns read area start pointer.
72 */
73 const char* Peek() const
74 {
75 return Begin() + m_ReaderIndex;
76 }
77
78 /**
79 * @brief Retrieve some buffer data from data area.
80 * @param[in] len Retrieve length.
81 */
82 void Retrieve(size_t len);
83
84 /**
85 * @brief Retrieve all buffer data.
86 */
88 {
89 m_ReaderIndex = m_WriterIndex = header;
90 }
91
92 /**
93 * @brief Get readable area data as string.
94 * @return Returns readable area data
95 */
96 std::string RetrieveAllAsString()
97 {
98 return RetrieveAsString(ReadableBytes());
99 }
100
101 /**
102 * @brief Get retrieve area data as string.
103 * @param[in] len Retrieve length.
104 * @return Returns retrieve area data
105 */
106 std::string RetrieveAsString(size_t len);
107
108 /**
109 * @brief Ensure enough bytes to write.
110 * @param[in] len bytes.
111 */
112 void EnsureWriteableBytes(size_t len);
113
114 /**
115 * @brief Append Message to this buffer.
116 * @param[in] msg Message.
117 */
118 void Append(const std::string& msg);
119
120 /**
121 * @brief Append another buffer data.
122 * @param[in] data Buffer start pointer.
123 * @param[in] len Buffer bytes.
124 */
125 void Append(const char* data, size_t len);
126
127 /**
128 * @brief Get writeable area pointer.
129 * @return Returns writeable area pointer.
130 */
132 {
133 return Begin() + m_WriterIndex;
134 }
135
136 /**
137 * @brief Get writeable area pointer.
138 * @return Returns writeable area pointer.
139 */
140 const char* BeginWrite() const
141 {
142 return Begin() + m_WriterIndex;
143 }
144
145 /**
146 * @brief Read from Socket.
147 * @param[in] fd SOCKET.
148 * @param[in,out] saveErrno Error value.
149 * @return Returns read bytes.
150 * @note read api can only be used in linux, on windows use recv instead,
151 */
153
154 /**
155 * @brief Write to Socket.
156 * @param[in] fd SOCKET.
157 * @param[in,out] saveErrno Error value.
158 * @return Returns write bytes.
159 * @note write api can only be used in linux, on windows use send instead,
160 */
161 size_t WriteFd(SOCKET fd, int* saveErrno) const;
162
163 private:
164
165 /**
166 * @brief Get Buffer start pointer.
167 * @return Returns Buffer start pointer.
168 */
169 char* Begin()
170 {
171 return m_Buffer.data();
172 }
173
174 /**
175 * @brief Get Buffer start pointer.
176 * @return Returns Buffer start pointer.
177 */
178 const char* Begin() const
179 {
180 return m_Buffer.data();
181 }
182
183 /**
184 * @brief Expend buffer size.
185 * @param[in] len buffer size.
186 */
187 void expend(size_t len);
188
189 private:
190
191 /**
192 * @brief Buffer data.
193 */
195
196 /**
197 * @brief Reader pointer.
198 */
200
201 /**
202 * @brief Writer pointer.
203 */
205 };
206
207}
208
209}
#define SPICES_PROFILE_ZONE
const char * Peek() const
Get read area start pointer.
Definition Buffer.h:73
std::string RetrieveAllAsString()
Get readable area data as string.
Definition Buffer.h:96
size_t m_WriterIndex
Writer pointer.
Definition Buffer.h:204
const char * BeginWrite() const
Get writeable area pointer.
Definition Buffer.h:140
std::string RetrieveAsString(size_t len)
Get retrieve area data as string.
Definition Buffer.cpp:26
void EnsureWriteableBytes(size_t len)
Ensure enough bytes to write.
Definition Buffer.cpp:33
size_t WriteableBytes() const
Get writeable area bytes.
Definition Buffer.h:55
char * Begin()
Get Buffer start pointer.
Definition Buffer.h:169
size_t WriteFd(SOCKET fd, int *saveErrno) const
Write to Socket.
Definition Buffer.cpp:72
static constexpr size_t header
Definition Buffer.h:22
size_t ReadableBytes() const
Get readable area bytes.
Definition Buffer.h:46
Buffer(size_t bytes=initialSize)
Constructor Function.
Definition Buffer.h:31
size_t ReadFd(SOCKET fd, int *saveErrno)
Read from Socket.
Definition Buffer.cpp:53
size_t m_ReaderIndex
Reader pointer.
Definition Buffer.h:199
void Append(const char *data, size_t len)
Append another buffer data.
Definition Buffer.cpp:46
char * BeginWrite()
Get writeable area pointer.
Definition Buffer.h:131
void Retrieve(size_t len)
Retrieve some buffer data from data area.
Definition Buffer.cpp:14
const char * Begin() const
Get Buffer start pointer.
Definition Buffer.h:178
virtual ~Buffer()=default
Destructor Function.
static constexpr size_t initialSize
Definition Buffer.h:23
void RetrieveAll()
Retrieve all buffer data.
Definition Buffer.h:87
void expend(size_t len)
Expend buffer size.
Definition Buffer.cpp:84
size_t HeaderBytes() const
Get header area bytes.
Definition Buffer.h:64
std::vector< char > m_Buffer
Buffer data.
Definition Buffer.h:194
void Append(const std::string &msg)
Append Message to this buffer.
Definition Buffer.cpp:41
Wrapper of readwrite buffer.
Definition Buffer.h:19
void SetCloseConnection(bool on)
Set CloseConnection.
HttpResponse(bool close)
Constructor Function.
void SetContentType(const std::string &contentType)
Set ContentType.
std::string m_StatusMessage
StatusMessage.
StatusCode m_StatusCode
StatusCode.
bool m_CloseConnection
CloseConnection.
void SetBody(const std::string &body)
Set body.
void SetStatusCode(StatusCode code)
Set StatusCode.
void SetStatusMessage(const std::string &message)
Set StatusMessage.
void AddHeader(const std::string &name, const std::string &value)
Add a header.
std::string m_Body
Body.
void AppendToBuffer(Buffer *output)
Append this response to Buffer.
virtual ~HttpResponse()=default
Destructor Function.
bool CloseConnection() const
Get CloseConnection.
std::unordered_map< std::string, std::string > m_Header
This response header.