From: Casey Bodley Date: Fri, 20 Oct 2017 00:03:18 +0000 (-0400) Subject: buffer: add conversion operators for seastar types X-Git-Tag: v14.0.1~1153^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f0bd4cf06e47ad7084917b4318e5eaae6910859b;p=ceph.git buffer: add conversion operators for seastar types Signed-off-by: Casey Bodley --- diff --git a/src/common/buffer_seastar.cc b/src/common/buffer_seastar.cc index 5be805da52d4..2c6052ab12b2 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 2f18adcb3f28..fec3a2aeeeea 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); }