]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common: bufferlist::buffers_t wraps bi::list now.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 27 Nov 2018 16:24:02 +0000 (17:24 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 2 Dec 2018 23:49:34 +0000 (00:49 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/common/buffer.cc
src/include/buffer.h

index 8f7d37f69f2d55ae3228df8fff8b45458bf4df94..ab20f397bec6d288ff01bc9e7e9d78622ebbf382 100644 (file)
@@ -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;
     }
index 9394d85f1482f602c45854755948f689faa53d73..71ca796b7786eac5c257348b71eca67740c3e5eb 100644 (file)
@@ -434,7 +434,69 @@ namespace buffer CEPH_BUFFER_API {
 
   class CEPH_BUFFER_API list {
   public:
-    typedef boost::intrusive::list<ptr_node> buffers_t;
+    class buffers_t : private boost::intrusive::list<ptr_node> {
+      typedef boost::intrusive::list<ptr_node> 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();