// Copyright (C) 2023 Jérôme "Lynix" Leclercq (lynix680@gmail.com) // 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_CORE_RESOURCESAVER_HPP #define NAZARA_CORE_RESOURCESAVER_HPP #include #include #include #include #include #include #include #include namespace Nz { class Stream; template class ResourceSaver { static_assert(std::is_base_of::value, "ResourceParameters must be a base of Parameters"); friend Type; public: struct Entry; using FormatSupport = std::function; using FileSaver = std::function; using StreamSaver = std::function; ResourceSaver() = default; ResourceSaver(const ResourceSaver&) = delete; ResourceSaver(ResourceSaver&&) noexcept = default; ~ResourceSaver() = default; void Clear(); bool IsExtensionSupported(std::string_view extension) const; bool SaveToFile(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters = Parameters()) const; bool SaveToStream(const Type& resource, Stream& stream, std::string_view format, const Parameters& parameters = Parameters()) const; const Entry* RegisterSaver(Entry saver); void UnregisterSaver(const Entry* saver); ResourceSaver& operator=(const ResourceSaver&) = delete; ResourceSaver& operator=(ResourceSaver&&) noexcept = default; struct Entry { FormatSupport formatSupport; FileSaver fileSaver; StreamSaver streamSaver; }; private: std::vector> m_savers; }; } #include #endif // NAZARA_CORE_RESOURCESAVER_HPP