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_); 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 { SDL_Renderer* Renderer::Get() const {
return renderer_; return renderer_;
} }

View File

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

View File

@ -39,6 +39,16 @@ Texture::~Texture() {
SDL_DestroyTexture(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 { SDL_Texture* Texture::Get() const {
return texture_; return texture_;
} }
@ -63,8 +73,4 @@ void Texture::SetColorMod(Uint8 r, Uint8 g, Uint8 b) {
throw Exception("SDL_SetTextureColorMod failed"); 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(); virtual ~Texture();
Texture(const Texture& other) = delete; Texture(const Texture& other) = delete;
Texture(Texture&& other) = delete; Texture(Texture&& other) noexcept;
Texture& operator=(const Texture& other) = delete; Texture& operator=(const Texture& other) = delete;
Texture& operator=(Texture&& other) = delete; Texture& operator=(Texture&& other) noexcept;
SDL_Texture* Get() const; SDL_Texture* Get() const;
@ -52,8 +52,6 @@ public:
void SetBlendMode(SDL_BlendMode blendMode); void SetBlendMode(SDL_BlendMode blendMode);
void SetAlphaMod(Uint8 alpha = 255); void SetAlphaMod(Uint8 alpha = 255);
void SetColorMod(Uint8 r = 255, Uint8 g = 255, Uint8 b = 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_); 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 { SDL_Window* Window::Get() const {
return window_; return window_;
} }

View File

@ -37,9 +37,9 @@ public:
virtual ~Window(); virtual ~Window();
Window(const Window& other) = delete; Window(const Window& other) = delete;
Window(Window&& other) = delete; Window(Window&& other) noexcept;
Window& operator=(const Window& other) = delete; Window& operator=(const Window& other) = delete;
Window& operator=(Window&& other) = delete; Window& operator=(Window&& other) noexcept;
SDL_Window* Get() const; 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); 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 // Swap textures to copy recursively
target1.Swap(target2); std::swap(target1, target2);
} }
// Draw result to screen // Draw result to screen