mirror of
https://github.com/matrix-construct/construct
synced 2024-10-03 06:08:52 +02:00
ircd::buffer: Complete move construction and assignment for unique_buffer.
This commit is contained in:
parent
a8b3d08c3a
commit
865270f70a
1 changed files with 28 additions and 4 deletions
|
@ -383,12 +383,23 @@ struct ircd::buffer::unique_buffer
|
|||
{
|
||||
unique_buffer(std::unique_ptr<uint8_t[]> &&, const size_t &size);
|
||||
unique_buffer(const size_t &size);
|
||||
unique_buffer() = default;
|
||||
unique_buffer();
|
||||
unique_buffer(unique_buffer &&) noexcept;
|
||||
unique_buffer(const unique_buffer &) = delete;
|
||||
unique_buffer &operator=(unique_buffer &&) noexcept;
|
||||
unique_buffer &operator=(const unique_buffer &) = delete;
|
||||
~unique_buffer() noexcept;
|
||||
};
|
||||
|
||||
template<class buffer,
|
||||
uint alignment>
|
||||
ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer()
|
||||
:buffer
|
||||
{
|
||||
nullptr, nullptr
|
||||
}
|
||||
{}
|
||||
|
||||
template<class buffer,
|
||||
uint alignment>
|
||||
ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer(std::unique_ptr<uint8_t[]> &&b,
|
||||
|
@ -397,8 +408,7 @@ ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer(std::unique_ptr<ui
|
|||
{
|
||||
typename buffer::iterator(b.release()), size
|
||||
}
|
||||
{
|
||||
}
|
||||
{}
|
||||
|
||||
template<class buffer,
|
||||
uint alignment>
|
||||
|
@ -426,12 +436,26 @@ ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer(unique_buffer &&ot
|
|||
noexcept
|
||||
:buffer
|
||||
{
|
||||
std::move(other)
|
||||
std::move(static_cast<buffer &>(other))
|
||||
}
|
||||
{
|
||||
get<0>(other) = nullptr;
|
||||
}
|
||||
|
||||
template<class buffer,
|
||||
uint alignment>
|
||||
ircd::buffer::unique_buffer<buffer, alignment> &
|
||||
ircd::buffer::unique_buffer<buffer, alignment>::operator=(unique_buffer &&other)
|
||||
noexcept
|
||||
{
|
||||
this->~unique_buffer();
|
||||
|
||||
static_cast<buffer &>(*this) = std::move(static_cast<buffer &>(other));
|
||||
get<0>(other) = nullptr;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<class buffer,
|
||||
uint alignment>
|
||||
ircd::buffer::unique_buffer<buffer, alignment>::~unique_buffer()
|
||||
|
|
Loading…
Reference in a new issue