17 #include <glog/logging.h> 25 const size_t DynamicBuffer::kMinBufferSize;
35 for (
auto& buffer : buffers_)
41 if (!buffers_.empty()) {
42 auto* info = &buffers_.back();
43 const size_t to_copy = std::min(info->capacity - info->used, size);
44 std::memcpy(info->buffer.get() + info->used, buffer, to_copy);
45 info->used += to_copy;
46 buffer =
reinterpret_cast<const uint8_t*
>(buffer) + to_copy;
51 const size_t capacity = std::max(kMinBufferSize, size);
52 auto* ptr =
new uint8_t[capacity];
53 std::memcpy(ptr, buffer, size);
54 buffers_.emplace_back(ptr, size, capacity);
59 std::string ret(
Size(),
'\0');
60 CopyDataTo(reinterpret_cast<uint8_t*>(&ret[0]), ret.size());
65 for (
auto& buffer : buffers_) {
66 CHECK_GE(size, buffer.used);
67 std::memcpy(dest, buffer.buffer.get(), buffer.used);
73 DynamicBuffer::SubBuffer::SubBuffer(uint8_t* buffer,
size_t used,
75 : buffer(buffer), used(used), capacity(capacity) {}
77 DynamicBuffer::SubBuffer::~SubBuffer() {}
void CopyDataTo(uint8_t *dest, size_t size) const
std::string CreateString() const
void AppendCopy(const void *buffer, size_t size)
DynamicBuffer & operator=(const DynamicBuffer &)=delete