1 // Copyright 2010 Jochen Becher
3 // This file is part of MovieSchedule.
5 // MovieSchedule is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
10 // MovieSchedule is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with MovieSchedule. If not, see <http://www.gnu.org/licenses/>.
18 #ifndef ASSERTEDLOCK_H
19 #define ASSERTEDLOCK_H
22 #include <QReadWriteLock>
30 enum LockMode { READ, WRITE };
35 LockData() : _lock_mode(READ), _lock_counter(0) {}
40 typedef QMap<QThread*, LockData> ThreadData;
47 void Lock(LockMode mode);
48 void LockForRead() { Lock(READ); }
49 void LockForWrite() { Lock(WRITE); }
53 void AssertLockedForRead() const
56 AssertLockedForMode(READ);
60 void AssertLockedForWrite() const
63 AssertLockedForMode(WRITE);
67 void AssertUnlocked() const
76 LockMode GetLockMode() const;
77 void SetLockMode(LockMode mode);
78 int GetLockCounter() const;
79 void IncLockCounter();
80 void DecLockCounter();
81 void AssertLockedForMode(LockMode mode) const;
82 void AssertNotLocked() const;
88 ThreadData _thread_data;
89 mutable QMutex _mutex;
94 #endif // ASSERTEDLOCK_H