blob: a7575069c2bb16e208fd589ced66581192914e3d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#ifndef VALUELOCKER_H
#define VALUELOCKER_H
/**
* ValueLocker is similar to QMutexLocker, but it's not intended for multithreaded locks.
* It's rather for event loop locking.
* It can be created as local scope variable with a pointer to member variable.
* It will set "unlockedValue" to that variable once the locker is destroyed (goes out of scope).
* Usually the variable used will be of boolean type, but it can be virtually any other type.
* You can also provide initial value for locked state. Otherwise you will need to set the locked
* by yourself before the lock is created.
*/
template <class T>
class ValueLocker {
public:
ValueLocker(T* valueToLock, const T& lockedValue, const T& unlockedValue);
ValueLocker(T* valueToLock, const T& unlockedValue);
~ValueLocker();
private:
T* valueToLock;
T unlockedValue;
};
template<class T>
ValueLocker<T>::ValueLocker(T *valueToLock, const T &lockedValue, const T &unlockedValue) :
ValueLocker(valueToLock, unlockedValue)
{
*valueToLock = lockedValue;
}
template<class T>
ValueLocker<T>::ValueLocker(T *valueToLock, const T &unlockedValue) :
valueToLock(valueToLock), unlockedValue(unlockedValue)
{
}
template<class T>
ValueLocker<T>::~ValueLocker()
{
*valueToLock = unlockedValue;
}
#endif // VALUELOCKER_H
|