From f0bd4cf06e47ad7084917b4318e5eaae6910859b Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Thu, 19 Oct 2017 20:03:18 -0400 Subject: [PATCH] buffer: add conversion operators for seastar types Signed-off-by: Casey Bodley --- src/common/buffer_seastar.cc | 28 ++++++++++++++++++++++++++++ src/include/buffer.h | 15 +++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/common/buffer_seastar.cc b/src/common/buffer_seastar.cc index 5be805da52d4e..2c6052ab12b20 100644 --- a/src/common/buffer_seastar.cc +++ b/src/common/buffer_seastar.cc @@ -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() & +{ + return {c_str(), _len, seastar::make_object_deleter(*this)}; +} + +ptr::operator seastar::temporary_buffer() && +{ + 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 diff --git a/src/include/buffer.h b/src/include/buffer.h index 2f18adcb3f28d..fec3a2aeeeea0 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -75,6 +75,9 @@ class XioDispatchHook; #ifdef HAVE_SEASTAR namespace seastar { template 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() &; + /// convert to temporary_buffer, stealing the ptr as its deleter + operator seastar::temporary_buffer() &&; +#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); } -- 2.39.5