blob: b3c522f846c03c2d021713156eaf7891e4383308 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/base/datagram_buffer.h"
#include "net/third_party/quic/platform/api/quic_ptr_util.h"
namespace net {
DatagramBufferPool::DatagramBufferPool(size_t max_buffer_size)
: max_buffer_size_(max_buffer_size) {}
DatagramBufferPool::~DatagramBufferPool() {}
void DatagramBufferPool::Enqueue(const char* buffer,
size_t buf_len,
DatagramBuffers* buffers) {
DCHECK_LE(buf_len, max_buffer_size_);
std::unique_ptr<DatagramBuffer> datagram_buffer;
if (free_list_.empty()) {
datagram_buffer = quic::QuicWrapUnique<DatagramBuffer>(
new DatagramBuffer(max_buffer_size_));
} else {
datagram_buffer = std::move(free_list_.front());
free_list_.pop_front();
}
datagram_buffer->Set(buffer, buf_len);
buffers->emplace_back(std::move(datagram_buffer));
}
void DatagramBufferPool::Dequeue(DatagramBuffers* buffers) {
if (buffers->size() == 0)
return;
free_list_.splice(free_list_.cend(), *buffers);
}
DatagramBuffer::DatagramBuffer(size_t max_buffer_size)
: data_(new char[max_buffer_size]), length_(0) {}
DatagramBuffer::~DatagramBuffer() {}
void DatagramBuffer::Set(const char* buffer, size_t buf_len) {
length_ = buf_len;
std::memcpy(data_.get(), buffer, buf_len);
}
char* DatagramBuffer::data() const {
return data_.get();
}
size_t DatagramBuffer::length() const {
return length_;
}
} // namespace net