diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-04-06 11:30:10 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-04-06 15:26:07 +0100 |
commit | db2c0bd9baf2a7e19f977b38fb0c19d9aba75dc1 (patch) | |
tree | 201c731ce37782f638dd731754253afb8187e2ff /libadhocutil/lockHelpers.h | |
parent | C++17 (diff) | |
download | libadhocutil-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.h | 39 |
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 |