// // $Id: Autolock.h,v 1.2 2003/05/14 17:21:46 haydentech Exp $ // // This is the BAutolock interface for OpenBeOS. It has been created to // be source and binary compatible with the BeOS version of BAutolock. // To that end, all members are inline just as with the BeOS version. // #ifndef _OPENBEOS_AUTOLOCK_H #define _OPENBEOS_AUTOLOCK_H #include #include #ifdef USE_OPENBEOS_NAMESPACE namespace OpenBeOS { #endif class BAutolock { public: inline BAutolock(BLooper *looper); inline BAutolock(BLocker *locker); inline BAutolock(BLocker &locker); inline ~BAutolock(); inline bool IsLocked(void); private: BLocker *fTheLocker; BLooper *fTheLooper; bool fIsLocked; }; inline BAutolock::BAutolock(BLooper *looper) : fTheLocker(NULL), fTheLooper(looper), fIsLocked(looper->Lock()) { } inline BAutolock::BAutolock(BLocker *locker) : fTheLocker(locker), fTheLooper(NULL), fIsLocked(locker->Lock()) { } inline BAutolock::BAutolock(BLocker &locker) : fTheLocker(&locker), fTheLooper(NULL), fIsLocked(locker.Lock()) { } inline BAutolock::~BAutolock() { if (fIsLocked) { if (fTheLooper != NULL) { fTheLooper->Unlock(); } else { fTheLocker->Unlock(); } } } inline bool BAutolock::IsLocked() { return fIsLocked; } #ifdef USE_OPENBEOS_NAMESPACE } #endif #endif // _OPENBEOS_LOCKER_H