diff options
Diffstat (limited to 'source/Ires.hpp')
-rw-r--r-- | source/Ires.hpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/source/Ires.hpp b/source/Ires.hpp index 9b055af..f821d87 100644 --- a/source/Ires.hpp +++ b/source/Ires.hpp @@ -2,6 +2,7 @@ #include "EditorAttachment.hpp" #include "RcPtr.hpp" +#include "Uid.hpp" #include "Utils.hpp" #include <rapidjson/fwd.h> @@ -26,10 +27,11 @@ public: }; private: - std::string mName; - std::unique_ptr<EditorAttachment> mEditorAttachment; - IresManager* mMan = nullptr; - Kind mKind; + std::string mName; // Serialized as filename + Uid mUid; // Serialized in full mode + std::unique_ptr<EditorAttachment> mEditorAttachment; // Transient + IresManager* mMan = nullptr; // Transient + Kind mKind; // Serialized in full mode public: IresObject(Kind kind); @@ -44,6 +46,7 @@ public: bool IsAnnoymous() const; const std::string& GetName() const { return mName; } void SetName(std::string name); + const Uid& GetUid() const { return mUid; } virtual void ShowEditor(EditorInstance& editor); @@ -53,8 +56,8 @@ public: static void WriteFull(IresObject* ires, rapidjson::Value& value, rapidjson::Document& root); static std::unique_ptr<IresObject> ReadFull(const rapidjson::Value& value); static bool ReadPartial(IresObject* ires, const rapidjson::Value& value); - virtual void Write(rapidjson::Value& value, rapidjson::Document& root) const = 0; - virtual void Read(const rapidjson::Value& value) = 0; + virtual void Write(rapidjson::Value& value, rapidjson::Document& root) const; + virtual void Read(const rapidjson::Value& value); }; class IresManager { @@ -62,21 +65,21 @@ public: static inline IresManager* instance = nullptr; private: - robin_hood::unordered_map<std::string_view, RcPtr<IresObject>> mObjects; + robin_hood::unordered_map<Uid, RcPtr<IresObject>> mObjByUid; public: void DiscoverFilesDesignatedLocation(); void DiscoverFiles(const std::filesystem::path& dir); std::pair<IresObject*, bool> Add(IresObject* mat); + IresObject* Load(const std::filesystem::path& filePath); void Delete(IresObject* ires); bool Rename(IresObject* ires, std::string newName); - IresObject* Load(const std::filesystem::path& path); void Reload(IresObject* ires); void Save(IresObject* ires); void Save(IresObject* ires, const std::filesystem::path& filePath); - const auto& GetObjects() const { return mObjects; } - IresObject* FindIres(std::string_view path); + const auto& GetObjects() const { return mObjByUid; } + IresObject* FindIres(const Uid& uid); }; |