1#ifndef NEFORCE_CORE_CONTAINER_BUFFER_CHAIN_HPP__
2#define NEFORCE_CORE_CONTAINER_BUFFER_CHAIN_HPP__
4#ifdef NEFORCE_PLATFORM_LINUX
7#ifdef NEFORCE_PLATFORM_WINDOWS
13NEFORCE_BEGIN_NAMESPACE__
25 const char*
data{
nullptr};
31 size_t total_size_{0};
34 buffer_chain() =
default;
52 void append(
const buffer_chain& other) {
53 segments_.insert(segments_.end(), other.segments_.
begin(), other.segments_.
end());
54 total_size_ += other.total_size_;
60 NEFORCE_NODISCARD
string flatten()
const {
63 for (
const auto& seg: segments_) {
64 result.
append(seg.data, seg.size);
75 for (
const auto& seg: segments_) {
77 v.iov_base =
const_cast<char*
>(seg.data);
84 NEFORCE_NODISCARD
size_t total_size() const noexcept {
return total_size_; }
85 NEFORCE_NODISCARD
size_t segment_count() const noexcept {
return segments_.
size(); }
86 NEFORCE_NODISCARD
bool empty() const noexcept {
return total_size_ == 0; }
88 void clear() noexcept {
93 void reserve(
size_t count) { segments_.
reserve(count); }
96NEFORCE_END_NAMESPACE__
constexpr size_type size() const noexcept
获取字符串长度
constexpr const_pointer data() const noexcept
获取底层数据指针
constexpr basic_string & append(size_type n, value_type value)
追加多个相同字符
constexpr void reserve(const size_type n)
预留容量
void append(const string_view sv)
追加 string_view
void append(const buffer_chain &other)
追加另一个 buffer_chain 的内容
string flatten() const
合并所有段为单一字符串
void append(const char *data, size_t size)
追加数据视图
vector<::iovec > to_iovec() const
构建 writev iovec 数组
constexpr iterator begin() noexcept
获取起始迭代器
constexpr size_type size() const noexcept
获取当前元素数量
constexpr void reserve(const size_type n)
预留容量
constexpr void push_back(const T &value)
在末尾拷贝插入元素
constexpr void clear() noexcept(is_nothrow_destructible_v< value_type >)
清空向量
constexpr iterator end() noexcept
获取结束迭代器
basic_string_view< char > string_view
字符字符串视图
constexpr bool empty(const Container &cont) noexcept(noexcept(cont.empty()))
检查容器是否为空
constexpr decltype(auto) size(const Container &cont) noexcept(noexcept(cont.size()))
获取容器的大小
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针