SpiecsEngine
 
Loading...
Searching...
No Matches
Buffer.cpp
Go to the documentation of this file.
1/**
2* @file Buffer.cpp.
3* @brief The Buffer Class Implementation.
4* @author Spices & Muduo.
5*/
6
7#include "Pchheader.h"
8#include "Buffer.h"
9
10namespace Spices {
11
12namespace Net {
13
14 void Buffer::Retrieve(size_t len)
15 {
16 if (len < ReadableBytes())
17 {
18 m_ReaderIndex += len;
19 }
20 else
21 {
23 }
24 }
25
26 std::string Buffer::RetrieveAsString(size_t len)
27 {
28 std::string result(Peek(), len);
29 Retrieve(len);
30 return result;
31 }
32
33 void Buffer::EnsureWriteableBytes(size_t len)
34 {
35 if (WriteableBytes() < len)
36 {
37 expend(len);
38 }
39 }
40
41 void Buffer::Append(const std::string& msg)
42 {
43 Append(msg.c_str(), msg.size());
44 }
45
46 void Buffer::Append(const char* data, size_t len)
47 {
48 EnsureWriteableBytes(len);
49 std::copy(data, data + len, BeginWrite());
50 m_WriterIndex += len;
51 }
52
54 {
55 char buffer[65536] = {}; // 64k
56
57 int n = ::recv(fd, buffer, sizeof(buffer), 0);
58
59 if (n < 0)
60 {
61 *saveErrno = WSAGetLastError();
62 }
63 else
64 {
65 const std::string str(buffer, n);
66 Append(str.c_str(), str.size());
67 }
68
69 return n;
70 }
71
73 {
74 int n = ::send(fd, Peek(), ReadableBytes(), 0);
75
76 if (n < 0)
77 {
78 *saveErrno = WSAGetLastError();
79 }
80
81 return n;
82 }
83
84 void Buffer::expend(size_t len)
85 {
86 if (WriteableBytes() + HeaderBytes() < len + header)
87 {
88 m_Buffer.resize(m_WriterIndex + len);
89 }
90 else
91 {
92 const size_t readableBytes = ReadableBytes();
93 std::copy(
94 Begin() + m_ReaderIndex,
95 Begin() + m_WriterIndex,
96 Begin() + header
97 );
98
99 m_ReaderIndex = header;
100 m_WriterIndex = m_ReaderIndex + readableBytes;
101 }
102 }
103
104}
105
106}
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 WriteFd(SOCKET fd, int *saveErrno) const
Write to Socket.
Definition Buffer.cpp:72
size_t ReadFd(SOCKET fd, int *saveErrno)
Read from Socket.
Definition Buffer.cpp:53
void Append(const char *data, size_t len)
Append another buffer data.
Definition Buffer.cpp:46
void Retrieve(size_t len)
Retrieve some buffer data from data area.
Definition Buffer.cpp:14
void RetrieveAll()
Retrieve all buffer data.
Definition Buffer.h:87
void expend(size_t len)
Expend buffer size.
Definition Buffer.cpp:84
void Append(const std::string &msg)
Append Message to this buffer.
Definition Buffer.cpp:41
Wrapper of readwrite buffer.
Definition Buffer.h:19