AK: Add NonnullOwnPtr::swap() as well for symmetry

This commit is contained in:
Andreas Kling 2020-01-19 16:03:57 +01:00
parent 05836757c6
commit d394267f50
Notes: sideshowbarker 2024-07-19 09:57:23 +09:00

View File

@ -100,11 +100,8 @@ public:
RETURN_TYPESTATE(unconsumed)
NonnullOwnPtr& operator=(NonnullOwnPtr&& other)
{
if (this != &other) {
delete m_ptr;
m_ptr = other.leak_ptr();
ASSERT(m_ptr);
}
NonnullOwnPtr ptr(move(other));
swap(ptr);
return *this;
}
@ -112,11 +109,8 @@ public:
RETURN_TYPESTATE(unconsumed)
NonnullOwnPtr& operator=(NonnullOwnPtr<U>&& other)
{
if (this != static_cast<void*>(&other)) {
delete m_ptr;
m_ptr = other.leak_ptr();
ASSERT(m_ptr);
}
NonnullOwnPtr ptr(move(other));
swap(ptr);
return *this;
}
@ -150,6 +144,17 @@ public:
operator bool() const = delete;
bool operator!() const = delete;
void swap(NonnullOwnPtr& other)
{
::swap(m_ptr, other.m_ptr);
}
template<typename U>
void swap(NonnullOwnPtr<U>& other)
{
::swap(m_ptr, other.m_ptr);
}
private:
void clear()
{
@ -183,6 +188,12 @@ inline const LogStream& operator<<(const LogStream& stream, const NonnullOwnPtr<
return stream << value.ptr();
}
template<typename T, typename U>
inline void swap(NonnullOwnPtr<T>& a, NonnullOwnPtr<U>& b)
{
a.swap(b);
}
}
using AK::make;