Implement c++11 move for renderers, textures and windows

This commit is contained in:
Dmitry Marakasov 2014-02-01 00:18:15 +04:00
parent 2decf5162f
commit 411c62a3cc
7 changed files with 37 additions and 13 deletions

View File

@ -41,6 +41,16 @@ Renderer::~Renderer() {
SDL_DestroyRenderer(renderer_);
}
Renderer::Renderer(Renderer&& other) noexcept : renderer_(other.renderer_) {
other.renderer_ = nullptr;
}
Renderer& Renderer::operator=(Renderer&& other) noexcept {
renderer_ = other.renderer_;
other.renderer_ = nullptr;
return *this;
}
SDL_Renderer* Renderer::Get() const {
return renderer_;
}

View File

@ -45,9 +45,9 @@ public:
virtual ~Renderer();
Renderer(const Renderer& other) = delete;
Renderer(Renderer&& other) = delete;
Renderer(Renderer&& other) noexcept;
Renderer& operator=(const Renderer& other) = delete;
Renderer& operator=(Renderer&& other) = delete;
Renderer& operator=(Renderer&& other) noexcept;
SDL_Renderer* Get() const;

View File

@ -39,6 +39,16 @@ Texture::~Texture() {
SDL_DestroyTexture(texture_);
}
Texture::Texture(Texture&& other) noexcept : texture_(other.texture_) {
other.texture_ = nullptr;
}
Texture& Texture::operator=(Texture&& other) noexcept {
texture_ = other.texture_;
other.texture_ = nullptr;
return *this;
}
SDL_Texture* Texture::Get() const {
return texture_;
}
@ -63,8 +73,4 @@ void Texture::SetColorMod(Uint8 r, Uint8 g, Uint8 b) {
throw Exception("SDL_SetTextureColorMod failed");
}
void Texture::Swap(Texture& other) noexcept {
std::swap(texture_, other.texture_);
}
}

View File

@ -41,9 +41,9 @@ public:
virtual ~Texture();
Texture(const Texture& other) = delete;
Texture(Texture&& other) = delete;
Texture(Texture&& other) noexcept;
Texture& operator=(const Texture& other) = delete;
Texture& operator=(Texture&& other) = delete;
Texture& operator=(Texture&& other) noexcept;
SDL_Texture* Get() const;
@ -52,8 +52,6 @@ public:
void SetBlendMode(SDL_BlendMode blendMode);
void SetAlphaMod(Uint8 alpha = 255);
void SetColorMod(Uint8 r = 255, Uint8 g = 255, Uint8 b = 255);
void Swap(Texture& other) noexcept;
};
}

View File

@ -35,6 +35,16 @@ Window::~Window() {
SDL_DestroyWindow(window_);
}
Window::Window(Window&& other) noexcept : window_(other.window_) {
other.window_ = nullptr;
}
Window& Window::operator=(Window&& other) noexcept {
window_ = other.window_;
other.window_ = nullptr;
return *this;
}
SDL_Window* Window::Get() const {
return window_;
}

View File

@ -37,9 +37,9 @@ public:
virtual ~Window();
Window(const Window& other) = delete;
Window(Window&& other) = delete;
Window(Window&& other) noexcept;
Window& operator=(const Window& other) = delete;
Window& operator=(Window&& other) = delete;
Window& operator=(Window&& other) noexcept;
SDL_Window* Get() const;
};

View File

@ -95,7 +95,7 @@ int Run() {
render.Copy(target1, Rect::Null(), Rect(MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2, MY_RENDERTARGET_SIZE / 2), SDL_GetTicks() / 10000.0 * 360.0);
// Swap textures to copy recursively
target1.Swap(target2);
std::swap(target1, target2);
}
// Draw result to screen