//------------------------------------------------------------------------------ /* Copyright (c) 2011-2013, OpenCoin, Inc. */ //============================================================================== #ifndef RIPPLE_SCOPEDLOCK_H #define RIPPLE_SCOPEDLOCK_H typedef boost::recursive_mutex::scoped_lock ScopedLock; // A lock holder that can be returned and copied by value // When the last reference goes away, the lock is released // VFALCO TODO replace these with a more generic template, and not use boost // class SharedScopedLock { protected: mutable boost::shared_ptr mHolder; public: SharedScopedLock (boost::recursive_mutex& mutex) : mHolder (boost::make_shared (boost::ref (mutex))) { ; } void lock () const { mHolder->lock (); } void unlock () const { mHolder->unlock (); } }; // A class that unlocks on construction and locks on destruction /* class ScopedUnlock { protected: bool mUnlocked; boost::recursive_mutex& mMutex; public: // VFALCO TODO get rid of this unlock parameter to restore sanity ScopedUnlock (boost::recursive_mutex& mutex, bool unlock = true) : mUnlocked (unlock), mMutex (mutex) { if (unlock) mMutex.unlock (); } ~ScopedUnlock () { if (mUnlocked) mMutex.lock (); } void lock () { if (mUnlocked) { mMutex.lock (); mUnlocked = false; } } void unlock () { if (!mUnlocked) { mUnlocked = true; mMutex.unlock (); } } private: ScopedUnlock (const ScopedUnlock&); // no implementation ScopedUnlock& operator= (const ScopedUnlock&); // no implementation }; */ #endif