Browse Source

Add std::unique_ptr specializations for SDL types

pull/1448/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
b89d200ef9
  1. 45
      SourceX/sdl_ptrs.h

45
SourceX/sdl_ptrs.h

@ -0,0 +1,45 @@
#pragma once
/**
* @brief std::unique_ptr specializations for SDL types.
*/
#include <memory>
#include <type_traits>
#include <SDL.h>
namespace devilution {
/**
* @brief Deletes the SDL surface using `SDL_FreeSurface`.
*/
struct SDLSurfaceDeleter {
void operator()(SDL_Surface *surface) const
{
SDL_FreeSurface(surface);
}
};
using SDLSurfaceUniquePtr = std::unique_ptr<SDL_Surface, SDLSurfaceDeleter>;
/**
* @brief Deletes the object using `SDL_free`.
*/
template <typename T>
struct SDLFreeDeleter {
static_assert(!std::is_same<T, SDL_Surface>::value,
"SDL_Surface should use SDLSurfaceUniquePtr instead.");
void operator()(T *obj) const
{
SDL_free(obj);
}
};
/**
* @brief A unique pointer to T that is deleted with SDL_free.
*/
template <typename T>
using SDLUniquePtr = std::unique_ptr<T, SDLFreeDeleter<T>>;
} // namespace devilution
Loading…
Cancel
Save