summaryrefslogtreecommitdiff
path: root/libadhocutil/lockHelpers.h
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2018-04-06 11:30:10 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2018-04-06 15:26:07 +0100
commitdb2c0bd9baf2a7e19f977b38fb0c19d9aba75dc1 (patch)
tree201c731ce37782f638dd731754253afb8187e2ff /libadhocutil/lockHelpers.h
parentC++17 (diff)
downloadlibadhocutil-db2c0bd9baf2a7e19f977b38fb0c19d9aba75dc1.tar.bz2
libadhocutil-db2c0bd9baf2a7e19f977b38fb0c19d9aba75dc1.tar.xz
libadhocutil-db2c0bd9baf2a7e19f977b38fb0c19d9aba75dc1.zip
C++17
Replaces boost locks with std locks. Removes upgradable locks which aren't yet supported in native C++. Bolsters tests around behaviour of lock helpers and simplifies their implementation.
Diffstat (limited to 'libadhocutil/lockHelpers.h')
-rw-r--r--libadhocutil/lockHelpers.h39
1 files changed, 6 insertions, 33 deletions
diff --git a/libadhocutil/lockHelpers.h b/libadhocutil/lockHelpers.h
index 1482644..3e2a208 100644
--- a/libadhocutil/lockHelpers.h
+++ b/libadhocutil/lockHelpers.h
@@ -1,45 +1,18 @@
#ifndef ADHOCUTIL_LOCKHELPERS_H
#define ADHOCUTIL_LOCKHELPERS_H
-#include <type_traits>
-
-/// @cond
-template <typename locktype>
-class _LockLoop : public locktype {
- public:
- template<typename MutexType>
- _LockLoop(MutexType & m) :
- locktype(m),
- flag(true)
- {
- }
-
- operator bool() const { return flag; }
- void operator!() { flag = false; }
-
- private:
- bool flag;
-};
-/// @endcond
-
#define LIBADHOC_LOCK_CONCAT2(a, b) a ## b
#define LIBADHOC_LOCK_CONCAT(a, b) LIBADHOC_LOCK_CONCAT2(a, b)
#define LIBADHOC_LOCK_WITHLINE(a) LIBADHOC_LOCK_CONCAT(a, __LINE__)
-#define LIBADHOC_RRT(l) typename std::remove_reference<decltype(l)>::type
-#define BaseScopeLock(l,lt) for (_LockLoop<lt<LIBADHOC_RRT(l)>> LIBADHOC_LOCK_WITHLINE(_lck)(l); LIBADHOC_LOCK_WITHLINE(_lck); !LIBADHOC_LOCK_WITHLINE(_lck))
-#define TypeBaseLock(l,lt,mt) lt<mt> LIBADHOC_LOCK_WITHLINE(_lck)(l)
-#define BaseLock(l,lt) TypeBaseLock(l, lt, LIBADHOC_RRT(l))
+#define BaseLock(l,lt) lt LIBADHOC_LOCK_WITHLINE(_lck)(l)
+#define BaseScopeLock(l,lt) if (auto LIBADHOC_LOCK_WITHLINE(_lck) = lt(l))
-#define Lock(l) BaseLock(l, boost::unique_lock)
-#define SharedLock(l) BaseLock(l, boost::shared_lock)
-#define UpgradableLock(l, ln) boost::upgrade_lock<LIBADHOC_RRT(l)> ln(l)
-#define UpgradeLock(l) TypeBaseLock(l, boost::upgrade_to_unique_lock, LIBADHOC_RRT(l)::mutex_type)
+#define Lock(l) BaseLock(l, std::unique_lock)
+#define SharedLock(l) BaseLock(l, std::shared_lock)
-#define ScopeLock(l) BaseScopeLock(l, boost::unique_lock)
-#define SharedScopeLock(l) BaseScopeLock(l, boost::shared_lock)
-#define UpgradableScopeLock(l, ln) for (_LockLoop<boost::upgrade_lock<LIBADHOC_RRT(l)>> ln(l); ln; !ln)
-#define UpgradeScopeLock(l) for (_LockLoop<boost::upgrade_to_unique_lock<LIBADHOC_RRT(l)::mutex_type>> LIBADHOC_LOCK_WITHLINE(_lck)(l); LIBADHOC_LOCK_WITHLINE(_lck); !LIBADHOC_LOCK_WITHLINE(_lck))
+#define ScopeLock(l) BaseScopeLock(l, std::unique_lock)
+#define SharedScopeLock(l) BaseScopeLock(l, std::shared_lock)
#endif