// Copyright (C) 2015 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 #include #include namespace Nz { template void ResourceManager::Clear() { Type::s_managerMap.clear(); } template ObjectRef ResourceManager::Get(const String& filePath) { String absolutePath = File::AbsolutePath(filePath); auto it = Type::s_managerMap.find(absolutePath); if (it == Type::s_managerMap.end()) { ObjectRef resource = Type::New(); if (!resource) { NazaraError("Failed to create resource"); return ObjectRef(); } if (!resource->LoadFromFile(absolutePath, GetDefaultParameters())) { NazaraError("Failed to load resource from file: " + absolutePath); return ObjectRef(); } NazaraDebug("Loaded resource from file " + absolutePath); it = Type::s_managerMap.insert(std::make_pair(absolutePath, resource)).first; } return it->second; } template const Parameters& ResourceManager::GetDefaultParameters() { return Type::s_managerParameters; } template void ResourceManager::Purge() { auto it = Type::s_managerMap.begin(); while (it != Type::s_managerMap.end()) { const ObjectRef& ref = it->second; if (ref.GetReferenceCount() == 1) // Sommes-nous les seuls à détenir la ressource ? { NazaraDebug("Purging resource from file " + ref->GetFilePath()); Type::s_managerMap.erase(it++); // Alors on la supprime } else ++it; } } template void ResourceManager::Register(const String& filePath, ObjectRef resource) { String absolutePath = File::AbsolutePath(filePath); Type::s_managerMap[absolutePath] = resource; } template void ResourceManager::SetDefaultParameters(const Parameters& params) { Type::s_managerParameters = params; } template void ResourceManager::Unregister(const String& filePath) { String absolutePath = File::AbsolutePath(filePath); Type::s_managerMap.erase(absolutePath); } template bool ResourceManager::Initialize() { return true; } template void ResourceManager::Uninitialize() { Clear(); } } #include