]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: add conversion operators for seastar types
authorCasey Bodley <cbodley@redhat.com>
Fri, 20 Oct 2017 00:03:18 +0000 (20:03 -0400)
committerKefu Chai <kchai@redhat.com>
Fri, 8 Jun 2018 12:58:15 +0000 (20:58 +0800)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/common/buffer_seastar.cc
src/include/buffer.h

index 5be805da52d4e41aee487e0021354b99fb0368de..2c6052ab12b20dbe4a3e276f3414b6048d3b2a6e 100644 (file)
@@ -49,5 +49,33 @@ raw* create(temporary_buffer&& buf) {
   return new raw_seastar_local_ptr(std::move(buf));
 }
 
+// buffer::ptr conversions
+
+ptr::operator seastar::temporary_buffer<char>() &
+{
+  return {c_str(), _len, seastar::make_object_deleter(*this)};
+}
+
+ptr::operator seastar::temporary_buffer<char>() &&
+{
+  auto data = c_str();
+  auto length = _len;
+  return {data, length, seastar::make_object_deleter(std::move(*this))};
+}
+
+// buffer::list conversions
+
+list::operator seastar::net::packet() &&
+{
+  seastar::net::packet p;
+  p.reserve(_buffers.size());
+  for (auto& ptr : _buffers) {
+    // append each ptr as a temporary_buffer
+    p = seastar::net::packet(std::move(p), std::move(ptr));
+  }
+  clear();
+  return p;
+}
+
 } // namespace buffer
 } // namespace ceph
index 2f18adcb3f28d044fdbe640254f0a47422ef9b27..fec3a2aeeeea022c3485a4e06132772059e1195c 100644 (file)
@@ -75,6 +75,9 @@ class XioDispatchHook;
 #ifdef HAVE_SEASTAR
 namespace seastar {
 template <typename T> class temporary_buffer;
+namespace net {
+class packet;
+}
 }
 #endif // HAVE_SEASTAR
 class deleter;
@@ -365,6 +368,13 @@ namespace buffer CEPH_BUFFER_API {
     void zero(unsigned o, unsigned l, bool crc_reset);
     unsigned append_zeros(unsigned l);
 
+#ifdef HAVE_SEASTAR
+    /// create a temporary_buffer, copying the ptr as its deleter
+    operator seastar::temporary_buffer<char>() &;
+    /// convert to temporary_buffer, stealing the ptr as its deleter
+    operator seastar::temporary_buffer<char>() &&;
+#endif // HAVE_SEASTAR
+
   };
 
 
@@ -827,6 +837,11 @@ namespace buffer CEPH_BUFFER_API {
       }
     }
 
+#ifdef HAVE_SEASTAR
+    /// convert the bufferlist into a network packet
+    operator seastar::net::packet() &&;
+#endif
+
     iterator begin() {
       return iterator(this, 0);
     }