NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
buffer.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_ASYNC_BUFFER_HPP__
2#define NEFORCE_CORE_ASYNC_BUFFER_HPP__
3
11
13NEFORCE_BEGIN_NAMESPACE__
14
20
27
34
45public:
49
50private:
51 vector<mutable_buffer> buffers_;
52
53public:
57 mutable_buffers() = default;
58
63 explicit mutable_buffers(mutable_buffer b) { buffers_.push_back(b); }
64
69 void push_back(mutable_buffer b) { buffers_.push_back(b); }
70
75 NEFORCE_NODISCARD size_t size() const noexcept { return buffers_.size(); }
76
81 NEFORCE_NODISCARD bool empty() const noexcept { return buffers_.empty(); }
82
88 NEFORCE_NODISCARD const mutable_buffer& operator[](size_t i) const { return buffers_[i]; }
89
95 NEFORCE_NODISCARD mutable_buffer& operator[](size_t i) { return buffers_[i]; }
96
101 NEFORCE_NODISCARD iterator begin() noexcept { return buffers_.begin(); }
102
107 NEFORCE_NODISCARD iterator end() noexcept { return buffers_.end(); }
108
113 NEFORCE_NODISCARD const_iterator begin() const noexcept { return buffers_.begin(); }
114
119 NEFORCE_NODISCARD const_iterator end() const noexcept { return buffers_.end(); }
120};
121
132public:
136
137private:
138 vector<const_buffer> buffers_;
139
140public:
144 const_buffers() = default;
145
150 explicit const_buffers(const_buffer b) { buffers_.push_back(b); }
151
156 void push_back(const_buffer b) { buffers_.push_back(b); }
157
162 NEFORCE_NODISCARD size_t size() const noexcept { return buffers_.size(); }
163
168 NEFORCE_NODISCARD bool empty() const noexcept { return buffers_.empty(); }
169
175 NEFORCE_NODISCARD const const_buffer& operator[](size_t i) const { return buffers_[i]; }
176
182 NEFORCE_NODISCARD const_buffer& operator[](size_t i) { return buffers_[i]; }
183
188 NEFORCE_NODISCARD iterator begin() noexcept { return buffers_.begin(); }
189
194 NEFORCE_NODISCARD iterator end() noexcept { return buffers_.end(); }
195
200 NEFORCE_NODISCARD const_iterator begin() const noexcept { return buffers_.begin(); }
201
206 NEFORCE_NODISCARD const_iterator end() const noexcept { return buffers_.end(); }
207};
208
229private:
230 vector<char> data_;
231 size_t write_pos_{0};
232
233public:
245 if (data_.size() - write_pos_ < n) {
246 data_.resize(write_pos_ + n);
247 }
248 return mutable_buffers(mutable_buffer(data_.data() + write_pos_, data_.size() - write_pos_));
249 }
250
260 void commit(size_t n) { write_pos_ += n; }
261
269 void consume(size_t n) {
270 if (n >= write_pos_) {
271 write_pos_ = 0;
272 return;
273 }
274 const size_t remaining = write_pos_ - n;
275 memory_move(data_.data(), data_.data() + n, remaining);
276 write_pos_ = remaining;
277 }
278
283 NEFORCE_NODISCARD size_t size() const noexcept { return write_pos_; }
284
289 NEFORCE_NODISCARD const char* data() const noexcept { return data_.data(); }
290
295 NEFORCE_NODISCARD char* data() noexcept { return data_.data(); }
296
301 NEFORCE_NODISCARD size_t capacity() const noexcept { return data_.size(); }
302
307 NEFORCE_NODISCARD size_t max_size() const noexcept { return numeric_traits<size_t>::max(); }
308};
309 // AsyncBuffers
311
312NEFORCE_END_NAMESPACE__
313#endif // NEFORCE_CORE_ASYNC_BUFFER_HPP__
void push_back(const_buffer b)
添加缓冲区到序列末尾
const_buffers()=default
默认构造函数
const const_buffer & operator[](size_t i) const
访问指定索引的缓冲区
iterator begin() noexcept
获取起始迭代器
const_buffer value_type
元素类型
const_iterator begin() const noexcept
获取起始常量迭代器
iterator end() noexcept
获取结束迭代器
const_buffer & operator[](size_t i)
访问指定索引的缓冲区(可修改)
bool empty() const noexcept
检查序列是否为空
const_iterator end() const noexcept
获取结束常量迭代器
size_t size() const noexcept
获取缓冲区的数量
vector< const_buffer >::const_iterator const_iterator
常量迭代器类型
vector< const_buffer >::iterator iterator
迭代器类型
const_buffers(const_buffer b)
从单个 buffer 构造
自适应扩容的动态缓冲区
size_t max_size() const noexcept
最大允许大小
mutable_buffers prepare(size_t n)
准备写入区域
char * data() noexcept
获取可写数据的原始指针
const char * data() const noexcept
获取可读数据的原始指针
size_t size() const noexcept
当前可读数据大小
size_t capacity() const noexcept
内部缓冲区容量
void commit(size_t n)
标记已写入的字节数
void consume(size_t n)
移除已消费的数据
可变缓冲区序列(scatter-gather 读)
mutable_buffers()=default
默认构造函数
const_iterator begin() const noexcept
获取起始常量迭代器
iterator begin() noexcept
获取起始迭代器
const_iterator end() const noexcept
获取结束常量迭代器
size_t size() const noexcept
获取缓冲区的数量
vector< mutable_buffer >::const_iterator const_iterator
常量迭代器类型
mutable_buffer & operator[](size_t i)
访问指定索引的缓冲区(可修改)
mutable_buffers(mutable_buffer b)
从单个 buffer 构造
mutable_buffer value_type
元素类型
void push_back(mutable_buffer b)
添加缓冲区到序列末尾
bool empty() const noexcept
检查序列是否为空
iterator end() noexcept
获取结束迭代器
vector< mutable_buffer >::iterator iterator
迭代器类型
const mutable_buffer & operator[](size_t i) const
访问指定索引的缓冲区
static constexpr T max() noexcept
获取类型的最大值
动态大小数组容器
vector_iterator< false, vector< T, Alloc > > iterator
迭代器类型
vector_iterator< true, vector< T, Alloc > > const_iterator
常量迭代器类型
memory_view< const char > const_buffer
常量缓冲区(用于异步写入操作)
memory_view< char > mutable_buffer
可变缓冲区(用于异步读取操作)
constexpr void * memory_move(void *dest, const void *src, size_t count) noexcept
从源内存移动数据到目标内存
动态大小数组容器