From 4f57a463ef86212f1c09e440156a76554b85581b Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 29 Aug 2015 00:34:09 +0100 Subject: Move and test lock helpers --- libadhocutil/lockHelpers.h | 36 ++++++++++++++++++++++++++++++++++++ libadhocutil/unittests/Jamfile.jam | 13 +++++++++++++ libadhocutil/unittests/testLocks.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 libadhocutil/lockHelpers.h create mode 100644 libadhocutil/unittests/testLocks.cpp diff --git a/libadhocutil/lockHelpers.h b/libadhocutil/lockHelpers.h new file mode 100644 index 0000000..85a1b73 --- /dev/null +++ b/libadhocutil/lockHelpers.h @@ -0,0 +1,36 @@ +#ifndef LIBADHOC_LOCKHELPERS_H +#define LIBADHOC_LOCKHELPERS_H + +template +class _lockLoop { + public: + template + _lockLoop(l & _l) : + lock(_l), + flag(true) + { + } + + operator bool() const { return flag; } + void operator!() { flag = false; } + + private: + locktype lock; + bool flag; +}; + +#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 BaseScopeLock(l,lt,mt) for (_lockLoop> LIBADHOC_LOCK_WITHLINE(_lck)(l); LIBADHOC_LOCK_WITHLINE(_lck); !LIBADHOC_LOCK_WITHLINE(_lck)) +#define BaseLock(l,lt,mt) lt LIBADHOC_LOCK_WITHLINE(_lck)(l) + +#define Lock(l) BaseLock(l, boost::unique_lock, boost::shared_mutex) +#define SharedLock(l) BaseLock(l, boost::shared_lock, boost::shared_mutex) + +#define ScopeLock(l) BaseScopeLock(l, boost::unique_lock, boost::shared_mutex) +#define SharedScopeLock(l) BaseScopeLock(l, boost::shared_lock, boost::shared_mutex) + +#endif + diff --git a/libadhocutil/unittests/Jamfile.jam b/libadhocutil/unittests/Jamfile.jam index 610a3c4..e26825a 100644 --- a/libadhocutil/unittests/Jamfile.jam +++ b/libadhocutil/unittests/Jamfile.jam @@ -5,6 +5,7 @@ path-constant me : . ; lib boost_utf : : boost_unit_test_framework ; lib boost_filesystem ; lib boost_system ; +lib boost_thread ; run testContext.cpp @@ -73,3 +74,15 @@ run testScopeExit ; +run + testLocks.cpp + : : : + BOOST_TEST_DYN_LINK + ..//adhocutil + boost_utf + boost_system + boost_thread + : + testLocks + ; + diff --git a/libadhocutil/unittests/testLocks.cpp b/libadhocutil/unittests/testLocks.cpp new file mode 100644 index 0000000..bdf0d18 --- /dev/null +++ b/libadhocutil/unittests/testLocks.cpp @@ -0,0 +1,30 @@ +#define BOOST_TEST_MODULE Locks +#include + +#include "lockHelpers.h" +#include + +BOOST_AUTO_TEST_CASE ( lock ) +{ + boost::shared_mutex _lock; + Lock(_lock); +} + +BOOST_AUTO_TEST_CASE ( sharedlock ) +{ + boost::shared_mutex _lock; + SharedLock(_lock); +} + +BOOST_AUTO_TEST_CASE ( scopelock ) +{ + boost::shared_mutex _lock; + ScopeLock(_lock) { } +} + +BOOST_AUTO_TEST_CASE ( sharedscopelock ) +{ + boost::shared_mutex _lock; + SharedScopeLock(_lock) { } +} + -- cgit v1.2.3