Upgrade Utility
This commit is contained in:
@@ -28,25 +28,38 @@ namespace Nz
|
||||
friend Type;
|
||||
|
||||
public:
|
||||
using ExtensionGetter = bool (*)(const std::string& extension);
|
||||
using FormatQuerier = bool (*)(const std::string& format);
|
||||
using FileSaver = bool (*)(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters);
|
||||
using StreamSaver = bool (*)(const Type& resource, const std::string& format, Stream& stream, const Parameters& parameters);
|
||||
struct Entry;
|
||||
using FormatSupport = std::function<bool(const std::string_view& format)>;
|
||||
using FileSaver = std::function<bool(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters)>;
|
||||
using StreamSaver = std::function<bool(const Type& resource, const std::string& format, Stream& stream, const Parameters& parameters)>;
|
||||
|
||||
ResourceSaver() = delete;
|
||||
~ResourceSaver() = delete;
|
||||
ResourceSaver() = default;
|
||||
ResourceSaver(const ResourceSaver&) = delete;
|
||||
ResourceSaver(ResourceSaver&&) noexcept = default;
|
||||
~ResourceSaver() = default;
|
||||
|
||||
static bool IsFormatSupported(const std::string& extension);
|
||||
void Clear();
|
||||
|
||||
static bool SaveToFile(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters = Parameters());
|
||||
static bool SaveToStream(const Type& resource, Stream& stream, const std::string& format, const Parameters& parameters = Parameters());
|
||||
bool IsExtensionSupported(const std::string_view& extension) const;
|
||||
|
||||
static void RegisterSaver(FormatQuerier formatQuerier, StreamSaver streamSaver, FileSaver fileSaver = nullptr);
|
||||
static void UnregisterSaver(FormatQuerier formatQuerier, StreamSaver streamSaver, FileSaver fileSaver = nullptr);
|
||||
bool SaveToFile(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters = Parameters()) const;
|
||||
bool SaveToStream(const Type& resource, Stream& stream, const std::string& 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:
|
||||
using Saver = std::tuple<FormatQuerier, StreamSaver, FileSaver>;
|
||||
using SaverList = std::list<Saver>;
|
||||
std::vector<std::unique_ptr<Entry>> m_savers;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user