aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:51:12 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:51:12 -0400
commitfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (patch)
tree1e50f5f666f419143f510d5ded00fe2006b7bd85 /SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h
parentd9aa870e5d509cc7309ab82dd102a937ab58613a (diff)
New upstream version 3.2.1+dfsg1upstream/3.2.1+dfsg1
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h b/SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h
new file mode 100644
index 0000000..a757506
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/common/valuelocker.h
@@ -0,0 +1,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