mirror of
https://github.com/matrix-construct/construct
synced 2024-07-03 01:09:05 +02:00
Complete the unique_buffer semantics.
This commit is contained in:
parent
77900b61af
commit
ad611c5aa5
|
@ -63,14 +63,16 @@ struct mutable_buffer
|
||||||
using buffer<char *>::buffer;
|
using buffer<char *>::buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class it,
|
template<class buffer,
|
||||||
size_t align = 16>
|
size_t align = 16>
|
||||||
struct unique_buffer
|
struct unique_buffer
|
||||||
:buffer<it>
|
:buffer
|
||||||
{
|
{
|
||||||
template<class T> unique_buffer(std::unique_ptr<T[]> &&, const size_t &size);
|
unique_buffer(std::unique_ptr<uint8_t[]> &&, const size_t &size);
|
||||||
unique_buffer(const size_t &size);
|
unique_buffer(const size_t &size);
|
||||||
unique_buffer() = default;
|
unique_buffer() = default;
|
||||||
|
unique_buffer(unique_buffer &&) noexcept;
|
||||||
|
unique_buffer(const unique_buffer &) = delete;
|
||||||
~unique_buffer() noexcept;
|
~unique_buffer() noexcept;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -278,19 +280,21 @@ ircd::buffer::rend(const buffer<it> &buffer)
|
||||||
return std::reverse_iterator<it>(get<0>(buffer));
|
return std::reverse_iterator<it>(get<0>(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class it,
|
template<class buffer,
|
||||||
size_t alignment>
|
size_t alignment>
|
||||||
template<class T>
|
ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer(std::unique_ptr<uint8_t[]> &&b,
|
||||||
ircd::buffer::unique_buffer<it, alignment>::unique_buffer(std::unique_ptr<T[]> &&b,
|
const size_t &size)
|
||||||
const size_t &size)
|
:buffer
|
||||||
:buffer<it>{it(b.release()), size}
|
{
|
||||||
|
typename buffer::value_type(b.release()), size
|
||||||
|
}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class it,
|
template<class buffer,
|
||||||
size_t alignment>
|
size_t alignment>
|
||||||
ircd::buffer::unique_buffer<it, alignment>::unique_buffer(const size_t &size)
|
ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer(const size_t &size)
|
||||||
:unique_buffer
|
:unique_buffer<buffer, alignment>
|
||||||
{
|
{
|
||||||
std::unique_ptr<uint8_t[]>
|
std::unique_ptr<uint8_t[]>
|
||||||
{
|
{
|
||||||
|
@ -301,9 +305,21 @@ ircd::buffer::unique_buffer<it, alignment>::unique_buffer(const size_t &size)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class it,
|
template<class buffer,
|
||||||
size_t alignment>
|
size_t alignment>
|
||||||
ircd::buffer::unique_buffer<it, alignment>::~unique_buffer()
|
ircd::buffer::unique_buffer<buffer, alignment>::unique_buffer(unique_buffer &&other)
|
||||||
|
noexcept
|
||||||
|
:buffer
|
||||||
|
{
|
||||||
|
std::move(other)
|
||||||
|
}
|
||||||
|
{
|
||||||
|
get<0>(other) = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class buffer,
|
||||||
|
size_t alignment>
|
||||||
|
ircd::buffer::unique_buffer<buffer, alignment>::~unique_buffer()
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
delete[] data(*this);
|
delete[] data(*this);
|
||||||
|
|
Loading…
Reference in a new issue