// Copyright (C) 2013 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #include #include template NzResourceRef::NzResourceRef(T* resource) : m_resource(resource) { if (m_resource) m_resource->AddResourceReference(); } template NzResourceRef::NzResourceRef(const NzResourceRef& ref) : m_resource(ref.m_resource) { if (m_resource) m_resource->AddResourceReference(); } template NzResourceRef::NzResourceRef(NzResourceRef&& ref) : m_resource(ref.m_resource) { ref.m_resource = nullptr; // On vole la référence } template NzResourceRef::~NzResourceRef() { if (m_resource) m_resource->RemoveResourceReference(); } template bool NzResourceRef::IsValid() const { return m_resource != nullptr; } template T* NzResourceRef::Release() { T* resource = m_resource; m_resource = nullptr; return resource; } template bool NzResourceRef::Reset(T* resource) { bool destroyed = false; if (m_resource) { destroyed = m_resource->RemoveResourceReference(); m_resource = nullptr; } m_resource = resource; if (m_resource) m_resource->AddResourceReference(); return destroyed; } template NzResourceRef& NzResourceRef::Swap(NzResourceRef& ref) { std::swap(m_resource, ref.m_resource); return *this; } template NzResourceRef::operator bool() const { return IsValid(); } template NzResourceRef::operator T*() const { return m_resource; } template T* NzResourceRef::operator->() const { return m_resource; } template NzResourceRef& NzResourceRef::operator=(T* resource) { if (m_resource != resource) { Release(); if (resource) { m_resource = resource; m_resource->AddResourceReference(); } } return *this; } template NzResourceRef& NzResourceRef::operator=(const NzResourceRef& ref) { if (m_resource != ref.m_resource) { Release(); if (ref) { m_resource = ref.m_resource; m_resource->AddResourceReference(); } } return *this; } template NzResourceRef& NzResourceRef::operator=(NzResourceRef&& ref) { Release(); std::swap(m_resource, ref.m_resource); return *this; } #include