Make UEFI boot-platform build again
[haiku.git] / headers / os / support / Autolock.h
blobfbe793ba16b574d15c7b2c226b28cabd6a32747c
1 /*
2 * Copyright 2001-2009, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef _AUTOLOCK_H
6 #define _AUTOLOCK_H
9 #include <Locker.h>
10 #include <Looper.h>
13 class BAutolock {
14 public:
15 inline BAutolock(BLooper* looper);
16 inline BAutolock(BLocker* locker);
17 inline BAutolock(BLocker& locker);
18 inline ~BAutolock();
20 inline bool IsLocked();
22 inline bool Lock();
23 inline void Unlock();
25 private:
26 BLocker* fLocker;
27 BLooper* fLooper;
28 bool fIsLocked;
32 inline
33 BAutolock::BAutolock(BLooper *looper)
35 fLocker(NULL),
36 fLooper(looper),
37 fIsLocked(looper->Lock())
42 inline
43 BAutolock::BAutolock(BLocker *locker)
45 fLocker(locker),
46 fLooper(NULL),
47 fIsLocked(locker->Lock())
52 inline
53 BAutolock::BAutolock(BLocker &locker)
55 fLocker(&locker),
56 fLooper(NULL),
57 fIsLocked(locker.Lock())
62 inline
63 BAutolock::~BAutolock()
65 Unlock();
69 inline bool
70 BAutolock::IsLocked()
72 return fIsLocked;
76 inline bool
77 BAutolock::Lock()
79 if (fIsLocked)
80 return true;
82 if (fLooper != NULL)
83 fIsLocked = fLooper->Lock();
84 else
85 fIsLocked = fLocker->Lock();
87 return fIsLocked;
91 inline void
92 BAutolock::Unlock()
94 if (!fIsLocked)
95 return;
97 fIsLocked = false;
98 if (fLooper != NULL)
99 fLooper->Unlock();
100 else
101 fLocker->Unlock();
105 #endif // _AUTOLOCK_H