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
#ifdef HAVE_SEASTAR
namespace seastar {
template <typename T> class temporary_buffer;
+namespace net {
+class packet;
+}
}
#endif // HAVE_SEASTAR
class deleter;
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
+
};
}
}
+#ifdef HAVE_SEASTAR
+ /// convert the bufferlist into a network packet
+ operator seastar::net::packet() &&;
+#endif
+
iterator begin() {
return iterator(this, 0);
}