12 #ifndef hifi_QTryWriteLocker_h
13 #define hifi_QTryWriteLocker_h
15 #include <QtCore/QReadWriteLock>
17 class QTryWriteLocker {
19 QTryWriteLocker(QReadWriteLock* readWriteLock);
20 QTryWriteLocker(QReadWriteLock* readWriteLock,
int timeout);
23 bool isLocked()
const;
27 bool tryRelock(
int timeout);
29 QReadWriteLock* readWriteLock()
const;
32 Q_DISABLE_COPY(QTryWriteLocker)
37 inline QTryWriteLocker::QTryWriteLocker(QReadWriteLock* readWriteLock) :
38 _val(reinterpret_cast<quintptr>(readWriteLock))
40 Q_ASSERT_X((_val & quintptr(1u)) == quintptr(0),
41 "QTryWriteLocker",
"QTryWriteLocker pointer is misaligned");
45 inline QTryWriteLocker::QTryWriteLocker(QReadWriteLock* readWriteLock,
int timeout) :
46 _val(reinterpret_cast<quintptr>(readWriteLock))
48 Q_ASSERT_X((_val & quintptr(1u)) == quintptr(0),
49 "QTryWriteLocker",
"QTryWriteLocker pointer is misaligned");
53 inline QTryWriteLocker::~QTryWriteLocker() {
57 inline bool QTryWriteLocker::isLocked()
const {
58 return (_val & quintptr(1u)) == quintptr(1u);
61 inline void QTryWriteLocker::unlock() {
62 if (_val && isLocked()) {
63 _val &= ~quintptr(1u);
64 readWriteLock()->unlock();
68 inline bool QTryWriteLocker::tryRelock() {
69 if (_val && !isLocked()) {
70 if (readWriteLock()->tryLockForWrite()) {
78 inline bool QTryWriteLocker::tryRelock(
int timeout) {
79 if (_val && !isLocked()) {
80 if (readWriteLock()->tryLockForWrite(timeout)) {
88 inline QReadWriteLock* QTryWriteLocker::readWriteLock()
const {
89 return reinterpret_cast<QReadWriteLock*
>(_val & ~quintptr(1u));