// Copyright (C) 2020 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 #pragma once #ifndef NAZARA_RESOURCELOADER_HPP #define NAZARA_RESOURCELOADER_HPP #include #include #include #include #include #include #include #include #include namespace Nz { class Stream; template class ResourceLoader { static_assert(std::is_base_of::value, "ResourceParameters must be a base of Parameters"); friend Type; public: using ExtensionGetter = bool (*)(const std::string& extension); using FileLoader = ObjectRef (*)(const std::filesystem::path& filePath, const Parameters& parameters); using MemoryLoader = ObjectRef (*)(const void* data, std::size_t size, const Parameters& parameters); using StreamChecker = Ternary (*)(Stream& stream, const Parameters& parameters); using StreamLoader = ObjectRef (*)(Stream& stream, const Parameters& parameters); ResourceLoader() = delete; ~ResourceLoader() = delete; static bool IsExtensionSupported(const std::string& extension); static ObjectRef LoadFromFile(const std::filesystem::path& filePath, const Parameters& parameters = Parameters()); static ObjectRef LoadFromMemory(const void* data, std::size_t size, const Parameters& parameters = Parameters()); static ObjectRef LoadFromStream(Stream& stream, const Parameters& parameters = Parameters()); static void RegisterLoader(ExtensionGetter extensionGetter, StreamChecker checkFunc, StreamLoader streamLoader, FileLoader fileLoader = nullptr, MemoryLoader memoryLoader = nullptr); static void UnregisterLoader(ExtensionGetter extensionGetter, StreamChecker checkFunc, StreamLoader streamLoader, FileLoader fileLoader = nullptr, MemoryLoader memoryLoader = nullptr); private: using Loader = std::tuple; using LoaderList = std::list; }; } #include #endif // NAZARA_RESOURCELOADER_HPP