8#include <initializer_list>
15#include "wpi/util/SmallVector.hpp"
35 :
Buffer{reinterpret_cast<const char*>(arr.
data()), arr.size()} {}
38 len =
static_cast<decltype(len)
>(len_);
40 Buffer(
const char* base_,
size_t len_) {
41 base =
const_cast<char*
>(base_);
42 len =
static_cast<decltype(len)
>(len_);
44 Buffer(uint8_t* base_,
size_t len_) {
45 base =
reinterpret_cast<char*
>(base_);
46 len =
static_cast<decltype(len)
>(len_);
48 Buffer(
const uint8_t* base_,
size_t len_) {
49 base =
reinterpret_cast<char*
>(
const_cast<uint8_t*
>(base_));
50 len =
static_cast<decltype(len)
>(len_);
53 std::span<const char>
data()
const {
return {base, len}; }
54 std::span<char>
data() {
return {base, len}; }
56 std::span<const uint8_t>
bytes()
const {
57 return {
reinterpret_cast<const uint8_t*
>(base), len};
59 std::span<uint8_t>
bytes() {
return {
reinterpret_cast<uint8_t*
>(base), len}; }
61 operator std::span<const char>()
const {
return data(); }
62 operator std::span<char>() {
return data(); }
68 std::memcpy(buf.base, in.data(), in.size());
74 std::memcpy(buf.base, in.data(), in.size());
80 std::memcpy(buf.base, base, len);
110template <
size_t DEPTH = 4>
127 if (m_pool.empty()) {
130 auto buf = m_pool.back();
147 for (
auto& buf : bufs) {
148 m_pool.emplace_back(buf.Move());
156 for (
auto& buf : m_pool) {
169 wpi::util::SmallVector<Buffer, DEPTH> m_pool;
Data buffer.
Definition Buffer.hpp:22
std::span< const char > data() const
Definition Buffer.hpp:53
Buffer(uint8_t *base_, size_t len_)
Definition Buffer.hpp:44
Buffer(const uint8_t *base_, size_t len_)
Definition Buffer.hpp:48
Buffer Move()
Definition Buffer.hpp:90
Buffer Dup() const
Definition Buffer.hpp:78
std::span< char > data()
Definition Buffer.hpp:54
std::span< uint8_t > bytes()
Definition Buffer.hpp:59
Buffer(const uv_buf_t &oth)
Definition Buffer.hpp:28
Buffer(const char *base_, size_t len_)
Definition Buffer.hpp:40
std::span< const uint8_t > bytes() const
Definition Buffer.hpp:56
static Buffer Dup(std::span< const uint8_t > in)
Definition Buffer.hpp:72
Buffer()
Definition Buffer.hpp:24
void Deallocate()
Definition Buffer.hpp:84
Buffer(char *base_, size_t len_)
Definition Buffer.hpp:36
Buffer(std::span< const uint8_t > arr)
Definition Buffer.hpp:34
static Buffer Allocate(size_t size)
Definition Buffer.hpp:64
static Buffer Dup(std::string_view in)
Definition Buffer.hpp:66
Buffer(std::string_view str)
Definition Buffer.hpp:32
friend void swap(Buffer &a, Buffer &b)
Definition Buffer.hpp:97
~SimpleBufferPool()
Definition Buffer.hpp:118
void Release(std::span< Buffer > bufs)
Release allocated buffers back into the pool.
Definition Buffer.hpp:146
Buffer operator()()
Allocate a buffer.
Definition Buffer.hpp:139
void Clear()
Clear the pool, releasing all buffers.
Definition Buffer.hpp:155
SimpleBufferPool(const SimpleBufferPool &other)=delete
SimpleBufferPool & operator=(const SimpleBufferPool &other)=delete
Buffer Allocate()
Allocate a buffer.
Definition Buffer.hpp:126
SimpleBufferPool(size_t size=4096)
Constructor.
Definition Buffer.hpp:117
size_t Remaining() const
Get number of buffers left in the pool before a new buffer will be allocated from the heap.
Definition Buffer.hpp:166
void swap(wpi::util::StringMap< T > &lhs, wpi::util::StringMap< T > &rhs)
Definition StringMap.hpp:775
Definition Prepare.hpp:14