mirror of
https://github.com/matrix-construct/construct
synced 2024-09-30 12:48:54 +02:00
ircd::buffer: Add non-char array convenience cast constructions.
This commit is contained in:
parent
5d6554b1a3
commit
d6d18f7b08
2 changed files with 16 additions and 0 deletions
|
@ -21,6 +21,7 @@ struct ircd::buffer::const_buffer
|
|||
void insert(const char *const &, const char &);
|
||||
|
||||
using buffer<const char *>::buffer;
|
||||
template<class T, size_t SIZE> explicit const_buffer(const T (&)[SIZE]);
|
||||
template<size_t SIZE> const_buffer(const char (&buf)[SIZE]);
|
||||
template<size_t SIZE> const_buffer(const std::array<char, SIZE> &buf);
|
||||
const_buffer(const buffer<const char *> &b);
|
||||
|
@ -74,6 +75,13 @@ ircd::buffer::const_buffer::const_buffer(const std::array<char, SIZE> &buf)
|
|||
:buffer<const char *>{reinterpret_cast<const char *>(buf.data()), SIZE}
|
||||
{}
|
||||
|
||||
template<class T,
|
||||
size_t SIZE>
|
||||
inline __attribute__((always_inline))
|
||||
ircd::buffer::const_buffer::const_buffer(const T (&buf)[SIZE])
|
||||
:buffer<const char *>{reinterpret_cast<const char *>(buf), SIZE * sizeof(T)}
|
||||
{}
|
||||
|
||||
#ifndef _NDEBUG
|
||||
__attribute__((noreturn))
|
||||
#endif
|
||||
|
|
|
@ -27,6 +27,7 @@ struct ircd::buffer::mutable_buffer
|
|||
void insert(char *const &it, const value_type &v);
|
||||
|
||||
using buffer<char *>::buffer;
|
||||
template<class T, size_t SIZE> explicit mutable_buffer(T (&)[SIZE]);
|
||||
template<size_t SIZE> mutable_buffer(char (&buf)[SIZE]);
|
||||
template<size_t SIZE> mutable_buffer(std::array<char, SIZE> &buf);
|
||||
mutable_buffer(const std::function<void (const mutable_buffer &)> &);
|
||||
|
@ -68,6 +69,13 @@ ircd::buffer::mutable_buffer::mutable_buffer(std::array<char, SIZE> &buf)
|
|||
:buffer<char *>{buf.data(), SIZE}
|
||||
{}
|
||||
|
||||
template<class T,
|
||||
size_t SIZE>
|
||||
inline __attribute__((always_inline))
|
||||
ircd::buffer::mutable_buffer::mutable_buffer(T (&buf)[SIZE])
|
||||
:buffer<char *>{reinterpret_cast<char *>(buf), SIZE * sizeof(T)}
|
||||
{}
|
||||
|
||||
inline void
|
||||
ircd::buffer::mutable_buffer::insert(char *const &it,
|
||||
const value_type &v)
|
||||
|
|
Loading…
Reference in a new issue