From: Haomai Wang Date: Tue, 2 Feb 2016 17:50:51 +0000 (+0800) Subject: buffer: add operator= for ptr/bufferlist rvalue X-Git-Tag: v10.0.4~61^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=669f143800c88e168b48826006d3c93b5525df2b;p=ceph-ci.git buffer: add operator= for ptr/bufferlist rvalue Signed-off-by: Haomai Wang --- diff --git a/src/common/buffer.cc b/src/common/buffer.cc index f12771493d0..5a2f60fef03 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 cf319865270..bc988db363c 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);