diff --git a/include/ircd/buffer.h b/include/ircd/buffer.h index f0fcfde7f..37c93bc47 100644 --- a/include/ircd/buffer.h +++ b/include/ircd/buffer.h @@ -91,6 +91,8 @@ namespace ircd::buffer template it copy(it &dest, const it &stop, const const_raw_buffer &); template size_t copy(const it &dest, const size_t &max, const const_raw_buffer &buffer); size_t copy(const mutable_raw_buffer &dst, const const_raw_buffer &src); + size_t reverse(const mutable_raw_buffer &dst, const const_raw_buffer &src); + void reverse(const mutable_raw_buffer &buf); void zero(const mutable_raw_buffer &buf); // Iterable of buffers tools @@ -545,6 +547,21 @@ ircd::buffer::operator<<(std::ostream &s, const buffer &buffer) return s; } +inline void +ircd::buffer::reverse(const mutable_raw_buffer &buf) +{ + std::reverse(data(buf), data(buf) + size(buf)); +} + +inline size_t +ircd::buffer::reverse(const mutable_raw_buffer &dst, + const const_raw_buffer &src) +{ + const size_t ret{std::min(size(dst), size(src))}; + std::reverse_copy(data(src), data(src) + ret, data(dst)); + return ret; +} + inline size_t ircd::buffer::copy(const mutable_raw_buffer &dst, const const_raw_buffer &src)