summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--compat/qcopyable-mutex.cpp36
-rw-r--r--compat/qcopyable-mutex.hpp44
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;
};