17#include <boost/asio/buffer.hpp>
29#ifdef LIBCARLA_INCLUDED_FROM_UE4
33#include "Containers/Array.h"
103 template <
typename T>
207 boost::asio::const_buffer
cbuffer() const noexcept {
213 boost::asio::const_buffer
buffer() const noexcept {
219 boost::asio::mutable_buffer
buffer() noexcept {
243 return (std::numeric_limits<size_type>::max)();
303 _data = std::make_unique<value_type[]>(
size);
327 std::unique_ptr<value_type[]>
data = std::move(
_data);
328 uint64_t old_size =
size;
342 std::unique_ptr<value_type[]>
pop() noexcept {
345 return std::move(
_data);
366 template <
typename T>
390 template <
typename T>
391 typename std::enable_if<boost::asio::is_const_buffer_sequence<T>::value>::type
393 reset(boost::asio::buffer_size(source) + offset);
396 boost::asio::buffer_copy(
buffer() + offset, source);
406 template <
typename T>
407 typename std::enable_if<!boost::asio::is_const_buffer_sequence<T>::value>::type
409 copy_from(offset, boost::asio::buffer(source));
414#ifdef LIBCARLA_INCLUDED_FROM_UE4
416 template <
typename T>
420 reinterpret_cast<const value_type *
>(source.GetData()),
421 sizeof(T) * source.Num());
460std::unique_ptr<value_type[]>
_data =
nullptr;
#define DEBUG_ASSERT(predicate)
一个缓冲区池。 从这个池中弹出的缓冲区在销毁时会自动返回到池中, 这样分配的内存可以被重用。
一块原始数据。 请注意,如果需要更多容量,则会分配一个新的内存块,并 删除旧的内存块。这意味着默认情况下,缓冲区只能增长。要释放内存,使用 clear 或 pop。
std::unique_ptr< value_type[]> _data
Buffer & operator=(const Buffer &)=delete
const_iterator begin() const noexcept
const value_type * data() const noexcept
直接访问分配的内存,如果没有分配内存则返回 nullptr。
static constexpr size_type max_size() noexcept
std::enable_if<!boost::asio::is_const_buffer_sequence< T >::value >::type copy_from(size_type offset, const T &source)
将 source复制到此缓冲区,在前面留出 offset字节未初始化的空间。 如果需要,则分配内存。
void reset(size_type size)
重置缓冲区的大小。如果容量不足,当前内存将被丢弃,并分配一个新的大小为 size的内存块。 allocated.
size_type size() const noexcept
const_iterator cend() const noexcept
Buffer()=default
创建一个空的缓冲区。
void copy_from(size_type offset, const Buffer &rhs)
将 source复制到此缓冲区,在前面留出 offset字节未初始化的空间。 如果需要,则分配内存。
std::unique_ptr< value_type[]> pop() noexcept
释放此缓冲区的内容,并将其大小和容量设置为零。
value_type & operator[](size_t i)
Access the byte at position i.
void copy_from(const T &source)
将 source复制到此缓冲区。如果需要,则分配内存。
void resize(uint64_t size)
调整缓冲区的大小。如果容量不足,将分配一个新的大小为 size的内存块,并复制数据。
boost::asio::const_buffer buffer() const noexcept
从这个缓冲区创建一个boost::asio::buffer。
Buffer(size_type size)
创建一个分配了 size字节的缓冲区。
size_type capacity() const noexcept
Buffer & operator=(Buffer &&rhs) noexcept
void copy_from(const value_type *data, size_type size)
Copy size bytes of the memory pointed by data into this buffer.
std::weak_ptr< BufferPool > _parent_pool
boost::asio::mutable_buffer buffer() noexcept
从这个缓冲区创建一个boost::asio::buffer。
std::enable_if< boost::asio::is_const_buffer_sequence< T >::value >::type copy_from(size_type offset, const T &source)
将 source复制到此缓冲区,在前面留出 offset字节未初始化的空间。 如果需要,则分配内存。
bool empty() const noexcept
Buffer(const value_type *data, size_type size)
Buffer(const T &source)
将 source复制到此缓冲区中。分配所需的内存。
const value_type * const_iterator
void copy_from(size_type offset, const value_type *data, size_type size)
将 data指向的内存中的 size字节复制到此缓冲区, 在前面留出 offset字节未初始化的空间。 如果需要,则分配内存。
Buffer(const value_type *data, uint64_t size)
创建一个分配了 size字节的缓冲区。
iterator begin() noexcept
const_iterator cbegin() const noexcept
const_iterator end() const noexcept
value_type * data() noexcept
Direct access to the allocated memory or nullptr if no memory is allocated.
Buffer(Buffer &&rhs) noexcept
boost::asio::const_buffer cbuffer() const noexcept
从这个缓冲区创建一个boost::asio::buffer。
void reset(uint64_t size)
重置缓冲区的大小。如果容量不足,当前内存将被丢弃,并分配一个新的大小为 size的内存块。 allocated.
void clear() noexcept
清除此缓冲区的内容,并将其大小和容量设置为零。 删除已分配的内存。
Buffer(uint64_t size)
创建一个分配了 size字节的缓冲区。
Buffer(const Buffer &)=delete
const value_type & operator[](size_t i) const
访问位置 i处的字节
void throw_exception(const std::exception &e)
static void log_debug(Args &&... args)