From 831841e1c08edf31144667af4c1022f497e4ec86 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 30 Jan 2005 16:09:57 +0000 Subject: [PATCH] Moved generic autolocking code to . git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11158 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../disk_device_manager/KDiskDeviceUtils.h | 143 +----------------- 1 file changed, 2 insertions(+), 141 deletions(-) diff --git a/headers/private/kernel/disk_device_manager/KDiskDeviceUtils.h b/headers/private/kernel/disk_device_manager/KDiskDeviceUtils.h index 326e4e9df8..c1af0ea9b3 100644 --- a/headers/private/kernel/disk_device_manager/KDiskDeviceUtils.h +++ b/headers/private/kernel/disk_device_manager/KDiskDeviceUtils.h @@ -8,6 +8,8 @@ #include +#include + namespace BPrivate { namespace DiskDevice { @@ -82,146 +84,6 @@ compare_string(const char *str1, const char *str2) // locking -// AutoLockerStandardLocking -template -class AutoLockerStandardLocking { -public: - inline bool Lock(Lockable *lockable) - { - return lockable->Lock(); - } - - inline void Unlock(Lockable *lockable) - { - lockable->Unlock(); - } -}; - -// AutoLockerReadLocking -template -class AutoLockerReadLocking { -public: - inline bool Lock(Lockable *lockable) - { - return lockable->ReadLock(); - } - - inline void Unlock(Lockable *lockable) - { - lockable->ReadUnlock(); - } -}; - -// AutoLockerWriteLocking -template -class AutoLockerWriteLocking { -public: - inline bool Lock(Lockable *lockable) - { - return lockable->WriteLock(); - } - - inline void Unlock(Lockable *lockable) - { - lockable->WriteUnlock(); - } -}; - -// AutoLocker -template > -class AutoLocker { -private: - typedef AutoLocker ThisClass; -public: - inline AutoLocker(Lockable *lockable, bool alreadyLocked = false) - : fLockable(lockable), - fLocked(fLockable && alreadyLocked) - { - if (!fLocked) - _Lock(); - } - - inline AutoLocker(Lockable &lockable, bool alreadyLocked = false) - : fLockable(&lockable), - fLocked(fLockable && alreadyLocked) - { - if (!fLocked) - _Lock(); - } - - inline ~AutoLocker() - { - _Unlock(); - } - - inline void SetTo(Lockable *lockable, bool alreadyLocked) - { - _Unlock(); - fLockable = lockable; - fLocked = alreadyLocked; - if (!fLocked) - _Lock(); - } - - inline void SetTo(Lockable &lockable, bool alreadyLocked) - { - SetTo(&lockable, alreadyLocked); - } - - inline void Unset() - { - _Unlock(); - } - - inline void Unlock() - { - _Unlock(); - } - - inline void Detach() - { - fLockable = NULL; - fLocked = false; - } - - inline AutoLocker &operator=(Lockable *lockable) - { - SetTo(lockable); - return *this; - } - - inline AutoLocker &operator=(Lockable &lockable) - { - SetTo(&lockable); - return *this; - } - - inline bool IsLocked() const { return fLocked; } - - inline operator bool() const { return fLocked; } - -private: - inline void _Lock() - { - if (fLockable) - fLocked = fLocking.Lock(fLockable); - } - - inline void _Unlock() - { - if (fLockable && fLocked) { - fLocking.Unlock(fLockable); - fLocked = false; - } - } - -private: - Lockable *fLockable; - bool fLocked; - Locking fLocking; -}; - // instantiations class KDiskDevice; class KDiskDeviceManager; @@ -314,7 +176,6 @@ typedef AutoLocker > } // namespace BPrivate using BPrivate::DiskDevice::set_string; -using BPrivate::DiskDevice::AutoLocker; using BPrivate::DiskDevice::DeviceReadLocker; using BPrivate::DiskDevice::DeviceWriteLocker; using BPrivate::DiskDevice::ManagerLocker;