Give ScopedSpinLock move semantics

Change-Id: Ica36b07ee5389953afccf78d9f4db882c73ead3b
This commit is contained in:
Benson Joeris
2019-11-04 15:17:51 -05:00
committed by Baldur Karlsson
parent 8e2d2f8884
commit c51dc2a802
+22 -2
View File
@@ -84,10 +84,30 @@ private:
class ScopedSpinLock
{
public:
ScopedSpinLock() = default;
ScopedSpinLock(SpinLock &spin) : m_Spin(&spin) { m_Spin->Lock(); }
~ScopedSpinLock() { m_Spin->Unlock(); }
ScopedSpinLock(const ScopedSpinLock &) = delete;
ScopedSpinLock &operator=(const ScopedSpinLock &) = delete;
ScopedSpinLock &operator=(ScopedSpinLock &&other)
{
if(m_Spin != NULL)
m_Spin->Unlock();
m_Spin = other.m_Spin;
other.m_Spin = NULL;
return *this;
}
ScopedSpinLock(ScopedSpinLock &&other) : m_Spin(other.m_Spin) { other.m_Spin = NULL; }
~ScopedSpinLock()
{
if(m_Spin != NULL)
{
m_Spin->Unlock();
m_Spin = NULL;
}
}
private:
SpinLock *m_Spin;
SpinLock *m_Spin = NULL;
};
};