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
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
|
|
|