diff options
-rw-r--r-- | compat/qcopyable-mutex.cpp | 36 | ||||
-rw-r--r-- | compat/qcopyable-mutex.hpp | 44 |
2 files changed, 53 insertions, 27 deletions
diff --git a/compat/qcopyable-mutex.cpp b/compat/qcopyable-mutex.cpp new file mode 100644 index 00000000..71720f17 --- /dev/null +++ b/compat/qcopyable-mutex.cpp @@ -0,0 +1,36 @@ +#include "qcopyable-mutex.hpp" + +mutex& mutex::operator=(const mutex& datum) +{ + inner = nullptr; + inner = std::make_unique<QMutex>(datum->isRecursive() + ? QMutex::Recursive + : QMutex::NonRecursive); + return *this; +} + +mutex::mutex(const mutex& datum) +{ + *this = datum; +} + +mutex::mutex(mutex::mode m) : + inner(std::make_unique<QMutex>(static_cast<QMutex::RecursionMode>(int(m)))) +{ +} + +QMutex* mutex::operator&() const +{ + return *this; +} + +QMutex* mutex::operator->() const +{ + return *this; +} + +mutex::operator QMutex*() const +{ + return const_cast<QMutex*>(inner.get()); +} + diff --git a/compat/qcopyable-mutex.hpp b/compat/qcopyable-mutex.hpp index 57b0030d..af82876d 100644 --- a/compat/qcopyable-mutex.hpp +++ b/compat/qcopyable-mutex.hpp @@ -1,37 +1,27 @@ #pragma once -#include <QMutex> - -class MyMutex { -private: - QMutex inner; +#include <memory> -public: - QMutex* operator->() { return &inner; } - QMutex* operator->() const { return &const_cast<MyMutex*>(this)->inner; } +#include <QMutex> - MyMutex operator=(const MyMutex& datum) - { - auto mode = - datum->isRecursive() - ? QMutex::Recursive - : QMutex::NonRecursive; +#include "export.hpp" - return MyMutex(mode); - } +class OTR_COMPAT_EXPORT mutex +{ + std::unique_ptr<QMutex> inner; - MyMutex(const MyMutex& datum) +public: + enum mode { - *this = datum; - } + recursive = QMutex::Recursive, + normal = QMutex::NonRecursive, + }; - MyMutex(QMutex::RecursionMode mode = QMutex::NonRecursive) : - inner(mode) - { - } + mutex& operator=(const mutex& datum); + mutex(const mutex& datum); + mutex(mode m = normal); - QMutex* operator&() const - { - return const_cast<QMutex*>(&inner); - } + QMutex* operator&() const; + operator QMutex*() const; + QMutex* operator->() const; }; |