tinyrpc/includes/net/tcp/tcp_buffer.hpp

64 lines
1.4 KiB
C++
Raw Normal View History

2024-12-26 17:01:04 +08:00
#pragma once
2025-02-05 20:50:31 +08:00
#include "logger.hpp"
2024-12-26 17:01:04 +08:00
#include <cstddef>
#include <cstring>
#include <vector>
namespace tinyrpc {
class TcpBuffer {
public:
TcpBuffer(std::size_t size = 128) : m_buffer(size) {
2024-12-26 17:01:04 +08:00
}
~TcpBuffer() {
}
2025-02-05 20:50:31 +08:00
void reserved(std::size_t spaceSize) { // 预留空间
if(getWriteable() <= spaceSize) {
resize((getReadable() + spaceSize) * 2);
}
}
void dilatation() {
resize(m_buffer.size() * 2);
}
2024-12-26 17:01:04 +08:00
std::size_t getReadable() const {
return m_write_index - m_read_index;
}
std::size_t getWriteable() const {
return m_buffer.size() - m_write_index;
}
void* getWriteAddress() {
return m_buffer.data() + m_write_index;
}
void* getReadAddress() {
return m_buffer.data() + m_read_index;
}
void adjustBuffer();
void readOffset(std::size_t offset) ;
void writeOffset(std::size_t offset) ;
2024-12-26 17:01:04 +08:00
void clear();
int readFromBuffer(void* buf, std::size_t size);
int writeToBuffer(const void* buf, std::size_t size);
void resize(std::size_t size);
private:
std::size_t m_read_index{0};
std::size_t m_write_index{0};
std::vector<char> m_buffer{};
};
}