1*087882c2SAxel Dörfler /* 2*087882c2SAxel Dörfler * Copyright 2001-2007, Haiku, Inc. All Rights Reserved. 3*087882c2SAxel Dörfler * Distributed under the terms of the MIT License. 4*087882c2SAxel Dörfler */ 5*087882c2SAxel Dörfler #ifndef _SUPPORT_AUTOLOCK_H 6*087882c2SAxel Dörfler #define _SUPPORT_AUTOLOCK_H 752a38012Sejakowatz 852a38012Sejakowatz 930fd5147Shaydentech #include <Locker.h> 1052a38012Sejakowatz #include <Looper.h> 1152a38012Sejakowatz 1252a38012Sejakowatz 1352a38012Sejakowatz class BAutolock { 1452a38012Sejakowatz public: 1552a38012Sejakowatz inline BAutolock(BLooper *looper); 1652a38012Sejakowatz inline BAutolock(BLocker *locker); 1752a38012Sejakowatz inline BAutolock(BLocker &locker); 1852a38012Sejakowatz inline ~BAutolock(); 1952a38012Sejakowatz 2052a38012Sejakowatz inline bool IsLocked(void); 2152a38012Sejakowatz 2252a38012Sejakowatz private: 23*087882c2SAxel Dörfler BLocker *fLocker; 24*087882c2SAxel Dörfler BLooper *fLooper; 2552a38012Sejakowatz bool fIsLocked; 2652a38012Sejakowatz }; 2752a38012Sejakowatz 2852a38012Sejakowatz 29*087882c2SAxel Dörfler inline 30*087882c2SAxel Dörfler BAutolock::BAutolock(BLooper *looper) 31*087882c2SAxel Dörfler : fLocker(NULL), fLooper(looper), fIsLocked(looper->Lock()) 3252a38012Sejakowatz { 3352a38012Sejakowatz } 3452a38012Sejakowatz 3552a38012Sejakowatz 36*087882c2SAxel Dörfler inline 37*087882c2SAxel Dörfler BAutolock::BAutolock(BLocker *locker) 38*087882c2SAxel Dörfler : fLocker(locker), fLooper(NULL), fIsLocked(locker->Lock()) 3952a38012Sejakowatz { 4052a38012Sejakowatz } 4152a38012Sejakowatz 4252a38012Sejakowatz 43*087882c2SAxel Dörfler inline 44*087882c2SAxel Dörfler BAutolock::BAutolock(BLocker &locker) 45*087882c2SAxel Dörfler : fLocker(&locker), fLooper(NULL), fIsLocked(locker.Lock()) 4652a38012Sejakowatz { 4752a38012Sejakowatz } 4852a38012Sejakowatz 4952a38012Sejakowatz 50*087882c2SAxel Dörfler inline 51*087882c2SAxel Dörfler BAutolock::~BAutolock() 5252a38012Sejakowatz { 5352a38012Sejakowatz if (fIsLocked) { 54*087882c2SAxel Dörfler if (fLooper != NULL) 55*087882c2SAxel Dörfler fLooper->Unlock(); 56*087882c2SAxel Dörfler else 57*087882c2SAxel Dörfler fLocker->Unlock(); 5852a38012Sejakowatz } 5952a38012Sejakowatz } 6052a38012Sejakowatz 6152a38012Sejakowatz 62*087882c2SAxel Dörfler inline bool 63*087882c2SAxel Dörfler BAutolock::IsLocked() 6452a38012Sejakowatz { 6552a38012Sejakowatz return fIsLocked; 6652a38012Sejakowatz } 6752a38012Sejakowatz 68*087882c2SAxel Dörfler #endif // _SUPPORT_AUTOLOCK_H 69