From 0f0b7a8d17e9b7df589e7dfc278ee46978d188f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 1 Oct 2012 12:48:55 +0200 Subject: [PATCH] Move constructor and move assignment for Resource. Saves unnecessary manager access. --- src/ResourceManager.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/ResourceManager.h b/src/ResourceManager.h index 2ff23433e..c355aeb86 100644 --- a/src/ResourceManager.h +++ b/src/ResourceManager.h @@ -270,6 +270,11 @@ template class Resource { if(manager) manager->incrementReferenceCount(key); } + /** @brief Move constructor */ + inline Resource(Resource&& other): manager(other.manager), key(other.key), lastCheck(other.lastCheck), _state(other._state), data(other.data) { + other.manager = nullptr; + } + /** @brief Destructor */ inline ~Resource() { if(manager) manager->decrementReferenceCount(key); @@ -289,6 +294,20 @@ template class Resource { return *this; } + /** @brief Assignment move operator */ + Resource& operator=(Resource&& other) { + if(manager) manager->decrementReferenceCount(key); + + manager = other.manager; + key = other.key; + lastCheck = other.lastCheck; + _state = other._state; + data = other.data; + + other.manager = nullptr; + return *this; + } + /** * @brief %Resource state *