From dbede2ffc6229faf55e9e171f3814db31d5a94f3 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 27 Nov 2018 17:24:02 +0100 Subject: [PATCH] common: bufferlist::buffers_t wraps bi::list now. Signed-off-by: Radoslaw Zarzynski --- src/common/buffer.cc | 8 ++--- src/include/buffer.h | 74 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 8f7d37f69f2..ab20f397bec 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1256,7 +1256,7 @@ using namespace ceph; bool buffer::list::is_contiguous() const { - return &(*_buffers.begin()) == &(*_buffers.rbegin()); + return _buffers.size() <= 1; } bool buffer::list::is_n_page_sized() const @@ -1326,7 +1326,7 @@ using namespace ceph; void buffer::list::rebuild() { if (_len == 0) { - _buffers.clear_and_dispose(ptr_node::disposer()); + _buffers.clear_and_dispose(); return; } if ((_len & ~CEPH_PAGE_MASK) == 0) @@ -1344,7 +1344,7 @@ using namespace ceph; pos += node.length(); } _memcopy_count += pos; - _buffers.clear_and_dispose(ptr_node::disposer()); + _buffers.clear_and_dispose(); if (likely(nb->length())) { _buffers.push_back(*nb.release()); } @@ -1764,7 +1764,7 @@ using namespace ceph; if (claim_by) claim_by->append( *curbuf, off, howmuch ); _len -= (*curbuf).length(); - curbuf = _buffers.erase_and_dispose( curbuf, ptr_node::disposer() ); + curbuf = _buffers.erase_and_dispose(curbuf); len -= howmuch; off = 0; } diff --git a/src/include/buffer.h b/src/include/buffer.h index 9394d85f148..71ca796b778 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -434,7 +434,69 @@ namespace buffer CEPH_BUFFER_API { class CEPH_BUFFER_API list { public: - typedef boost::intrusive::list buffers_t; + class buffers_t : private boost::intrusive::list { + typedef boost::intrusive::list base_t; + + public: + using base_t::const_reference; + using base_t::const_iterator; + using base_t::iterator; + + using base_t::base_t; + using base_t::iterator_to; + + using base_t::push_front; + using base_t::push_back; + using base_t::erase; + using base_t::insert; + using base_t::size; + using base_t::empty; + + const_iterator begin() const { + return base_t::cbegin(); + } + const_iterator end() const { + return base_t::cend(); + } + iterator begin() { + return base_t::begin(); + } + iterator end() { + return base_t::end(); + } + + reference front() { + return base_t::front(); + } + reference back() { + return base_t::back(); + } + const_reference front() const { + return base_t::front(); + } + const_reference back() const { + return base_t::back(); + } + + void clone_from(const buffers_t& other) { + base_t::clone_from(other, ptr_node::cloner(), ptr_node::disposer()); + } + void clear_and_dispose() { + base_t::clear_and_dispose(ptr_node::disposer()); + } + auto erase_and_dispose(const_iterator it) { + return base_t::erase_and_dispose(it, ptr_node::disposer()); + } + + auto splice(const_iterator it, buffers_t& other) { + return base_t::splice(it, other); + } + + void swap(buffers_t& other) { + base_t::swap(other); + } + }; + class iterator; private: @@ -754,20 +816,18 @@ namespace buffer CEPH_BUFFER_API { list(const list& other) : _len(other._len), _memcopy_count(other._memcopy_count), last_p(this) { - _buffers.clone_from(other._buffers, - ptr_node::cloner(), ptr_node::disposer()); + _buffers.clone_from(other._buffers); make_shareable(); } list(list&& other) noexcept; ~list() { - _buffers.clear_and_dispose(ptr_node::disposer()); + _buffers.clear_and_dispose(); } list& operator= (const list& other) { if (this != &other) { - _buffers.clone_from(other._buffers, - ptr_node::cloner(), ptr_node::disposer()); + _buffers.clone_from(other._buffers); _len = other._len; make_shareable(); } @@ -831,7 +891,7 @@ namespace buffer CEPH_BUFFER_API { // modifiers void clear() noexcept { - _buffers.clear_and_dispose(ptr_node::disposer()); + _buffers.clear_and_dispose(); _len = 0; _memcopy_count = 0; last_p = begin(); -- 2.39.5