diff options
Diffstat (limited to 'facetracknoir/qcopyable-mutex.hpp')
| -rw-r--r-- | facetracknoir/qcopyable-mutex.hpp | 37 | 
1 files changed, 37 insertions, 0 deletions
| diff --git a/facetracknoir/qcopyable-mutex.hpp b/facetracknoir/qcopyable-mutex.hpp new file mode 100644 index 00000000..f7f36f93 --- /dev/null +++ b/facetracknoir/qcopyable-mutex.hpp @@ -0,0 +1,37 @@ +#pragma once + +#include <QMutex> + +class MyMutex { +private: +    QMutex inner; + +public: +    QMutex* operator->() { return &inner; } +    QMutex* operator->() const { return &const_cast<MyMutex*>(this)->inner; } + +    MyMutex operator=(const MyMutex& datum) +    { +        auto mode = +                datum->isRecursive() +                ? QMutex::Recursive +                : QMutex::NonRecursive; + +        return MyMutex(mode); +    } + +    MyMutex(const MyMutex& datum) +    { +        *this = datum; +    } + +    MyMutex(QMutex::RecursionMode mode = QMutex::NonRecursive) : +        inner(mode) +    { +    } + +    QMutex* operator&() +    { +        return &inner; +    } +}; | 
