From 669f143800c88e168b48826006d3c93b5525df2b Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Wed, 3 Feb 2016 01:50:51 +0800 Subject: [PATCH] buffer: add operator= for ptr/bufferlist rvalue Signed-off-by: Haomai Wang --- src/common/buffer.cc | 15 +++++++++++++++ src/include/buffer.h | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index f12771493d06c..5a2f60fef0341 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -738,6 +738,21 @@ static simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZER; } return *this; } + buffer::ptr& buffer::ptr::operator= (ptr&& p) + { + release(); + buffer::raw *raw = p._raw; + if (raw) { + _raw = raw; + _off = p._off; + _len = p._len; + p._raw = nullptr; + p._off = p._len = 0; + } else { + _off = _len = 0; + } + return *this; + } buffer::raw *buffer::ptr::clone() { diff --git a/src/include/buffer.h b/src/include/buffer.h index cf31986527041..bc988db363cb3 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -177,6 +177,7 @@ namespace buffer CEPH_BUFFER_API { ptr(ptr&& p); ptr(const ptr& p, unsigned o, unsigned l); ptr& operator= (const ptr& p); + ptr& operator= (ptr&& p); ~ptr() { release(); } @@ -377,6 +378,16 @@ namespace buffer CEPH_BUFFER_API { return *this; } + list& operator= (list&& other) { + _buffers = std::move(other._buffers); + _len = other._len; + _memcopy_count = other._memcopy_count; + last_p = begin(); + append_buffer.swap(other.append_buffer); + other.clear(); + return *this; + } + unsigned get_memcopy_count() const {return _memcopy_count; } const std::list& buffers() const { return _buffers; } void swap(list& other); -- 2.39.5