You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

43 lines
851 B

#pragma once
#include <memory>
#include <SDL_mutex.h>
namespace devilution {
/**
* @brief Deletes the SDL mutex using `SDL_DestroyMutex`.
*/
struct SDLMutexDeleter {
void operator()(SDL_mutex *mutex) const
{
SDL_DestroyMutex(mutex);
}
};
using SDLMutexUniquePtr = std::unique_ptr<SDL_mutex, SDLMutexDeleter>;
struct SDLMutexLockGuard {
public:
explicit SDLMutexLockGuard(SDL_mutex *mutex)
: mutex_(mutex)
{
SDL_LockMutex(mutex_);
}
~SDLMutexLockGuard()
{
SDL_UnlockMutex(mutex_);
}
SDLMutexLockGuard(const SDLMutexLockGuard &) = delete;
SDLMutexLockGuard(SDLMutexLockGuard &&) = delete;
SDLMutexLockGuard &operator=(const SDLMutexLockGuard &) = delete;
SDLMutexLockGuard &operator=(SDLMutexLockGuard &&) = delete;
private:
SDL_mutex *mutex_;
};
} // namespace devilution