diff --git a/include/ircd/buffer.h b/include/ircd/buffer.h index 5c9977a35..d9ed18232 100644 --- a/include/ircd/buffer.h +++ b/include/ircd/buffer.h @@ -144,31 +144,12 @@ struct ircd::buffer::buffer {} }; -struct ircd::buffer::const_buffer -:buffer -{ - operator boost::asio::const_buffer() const; - - using buffer::buffer; - const_buffer(const string_view &s) - :buffer{std::begin(s), std::end(s)} - {} -}; - struct ircd::buffer::mutable_buffer :buffer { operator boost::asio::mutable_buffer() const; - using buffer::buffer; -}; - -struct ircd::buffer::const_raw_buffer -:buffer -{ - operator boost::asio::const_buffer() const; - - using buffer::buffer; + using buffer::buffer; }; struct ircd::buffer::mutable_raw_buffer @@ -176,7 +157,51 @@ struct ircd::buffer::mutable_raw_buffer { operator boost::asio::mutable_buffer() const; - using buffer::buffer; + using buffer::buffer; + + mutable_raw_buffer(const mutable_buffer &b) + :buffer{reinterpret_cast(data(b)), size(b)} + {} +}; + +struct ircd::buffer::const_buffer +:buffer +{ + operator boost::asio::const_buffer() const; + + using buffer::buffer; + + const_buffer(const mutable_buffer &b) + :buffer{data(b), size(b)} + {} + + const_buffer(const string_view &s) + :buffer{std::begin(s), std::end(s)} + {} + + explicit const_buffer(const std::string &s) + :buffer{s.data(), s.size()} + {} +}; + +struct ircd::buffer::const_raw_buffer +:buffer +{ + operator boost::asio::const_buffer() const; + + using buffer::buffer; + + const_raw_buffer(const const_buffer &b) + :buffer{reinterpret_cast(data(b)), size(b)} + {} + + const_raw_buffer(const mutable_raw_buffer &b) + :buffer{data(b), size(b)} + {} + + const_raw_buffer(const mutable_buffer &b) + :const_raw_buffer{mutable_raw_buffer{b}} + {} }; template