]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
buffer: add operator= for ptr/bufferlist rvalue
authorHaomai Wang <haomai@xsky.com>
Tue, 2 Feb 2016 17:50:51 +0000 (01:50 +0800)
committerHaomai Wang <haomai@xsky.com>
Tue, 2 Feb 2016 18:36:48 +0000 (02:36 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/common/buffer.cc
src/include/buffer.h

index f12771493d06cc838b9e1f3870d69f33ec3cfe1f..5a2f60fef0341d23f5b4b581a36df93b2b0fa0be 100644 (file)
@@ -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()
   {
index cf31986527041e93fc07819b38bc49e9dd565742..bc988db363cb385c5ba2d9f18e23eaa1961a02b9 100644 (file)
@@ -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<ptr>& buffers() const { return _buffers; }
     void swap(list& other);