diff options
| -rw-r--r-- | libadhocutil/lockHelpers.h | 36 | ||||
| -rw-r--r-- | libadhocutil/unittests/Jamfile.jam | 13 | ||||
| -rw-r--r-- | libadhocutil/unittests/testLocks.cpp | 30 | 
3 files changed, 79 insertions, 0 deletions
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 <typename locktype> +class _lockLoop { +	public: +		template<typename l> +		_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<lt<mt>> LIBADHOC_LOCK_WITHLINE(_lck)(l); LIBADHOC_LOCK_WITHLINE(_lck); !LIBADHOC_LOCK_WITHLINE(_lck)) +#define BaseLock(l,lt,mt) lt<mt> 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 : : <name>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 +	: : : +	<define>BOOST_TEST_DYN_LINK +	<library>..//adhocutil +	<library>boost_utf +	<library>boost_system +	<library>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 <boost/test/unit_test.hpp> + +#include "lockHelpers.h" +#include <boost/thread/shared_mutex.hpp> + +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) { } +} +  | 
