From 1ae460bc10b16ab65bbd9d3a49ce6bf29fc5168e Mon Sep 17 00:00:00 2001
From: Ramin Yaghoubzadeh <ryaghoub@techfak.uni-bielefeld.de>
Date: Tue, 18 Sep 2012 01:34:40 +0200
Subject: [PATCH] Added Locker class (stack-based auto-releasing mutex holder).

---
 ipaacalib/cpp/include/ipaaca/ipaaca.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/ipaacalib/cpp/include/ipaaca/ipaaca.h b/ipaacalib/cpp/include/ipaaca/ipaaca.h
index 16f2fb5..39db64d 100644
--- a/ipaacalib/cpp/include/ipaaca/ipaaca.h
+++ b/ipaacalib/cpp/include/ipaaca/ipaaca.h
@@ -150,6 +150,20 @@ class Lock
 		}
 };
 
+/// Stack-based lock holder. Create in a new stack frame
+///  (i.e.  {}-block) and it will obtain the lock and
+///  auto-release in on exiting the stack frame.
+class Locker
+{
+	protected:
+		Lock* _lock;
+	private:
+		inline Locker(): _lock(NULL) { } // not available
+	public:
+		inline Locker(Lock& lock): _lock(&lock) { _lock->lock(); }
+		inline ~Locker() { _lock->unlock(); }
+};
+
 typedef std::set<std::string> LinkSet;
 typedef std::map<std::string, LinkSet> LinkMap;
 class SmartLinkMap {
-- 
GitLab