// Copyright (C) 2017 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include #include #include namespace Nz { /*! * \ingroup core * \class Nz::LockGuard * \brief Core class that represents a mutex wrapper that provides a convenient RAII-style mechanism */ /*! * \brief Constructs a LockGuard object with a mutex * * \param mutex Mutex to lock * \param lock Should the mutex be locked by the constructor */ inline LockGuard::LockGuard(Mutex& mutex, bool lock) : m_mutex(mutex), m_locked(false) { if (lock) { m_mutex.Lock(); m_locked = true; } } /*! * \brief Destructs a LockGuard object and unlocks the mutex if it was previously locked */ inline LockGuard::~LockGuard() { if (m_locked) m_mutex.Unlock(); } /*! * \brief Locks the underlying mutex * * \see Mutex::Lock */ inline void LockGuard::Lock() { NazaraAssert(!m_locked, "Mutex is already locked"); m_mutex.Lock(); } /*! * \brief Tries to lock the underlying mutex * * \see Mutex::TryLock * * \return true if the lock was acquired successfully */ inline bool LockGuard::TryLock() { NazaraAssert(!m_locked, "Mutex is already locked"); return m_mutex.TryLock(); } /*! * \brief Unlocks the underlying mutex * * \see Mutex::Unlock */ inline void LockGuard::Unlock() { NazaraAssert(m_locked, "Mutex is not locked"); m_mutex.Unlock(); } } #include