#pragma once #include "ISave.h" #include #include #include #include #include class SaveMap final { std::string class_name; std::shared_ptr parent_; // Индивидуальные значения std::unordered_map save_long; std::unordered_map save_double; std::unordered_map save_string; std::unordered_map> save_objects; // Массивы std::unordered_map> save_vector_integer; std::unordered_map> save_vector_double; std::unordered_map>> save_vector_objects; std::unordered_map> save_vector_strings; // Связаные списки std::unordered_map> save_list_integer; std::unordered_map> save_list_double; std::unordered_map>> save_list_objects; std::unordered_map> save_list_strings; static ISave* MakeObjectByName(const std::string& name); public: // Создаёт пустой объект для заполнения SaveMap(const char* class_name); // Токенезирут JSON строку SaveMap(const std::string& json_data); // Коприрование SaveMap(SaveMap& save_map); // Перемещение SaveMap(SaveMap&& save_map) noexcept; // Методы созранения значений std::shared_ptr SaveInteger(const char* name, int value) noexcept; std::shared_ptr SaveDouble(const char* name, double value) noexcept; std::shared_ptr SaveString(const char* name, const std::string& value) noexcept; std::shared_ptr SaveObject(const char* name, std::shared_ptr object) noexcept; std::shared_ptr SaveVectorInteger(const char* name, std::vector&& value) noexcept; std::shared_ptr SaveVectorDouble(const char* name, std::vector&& value) noexcept; std::shared_ptr SaveVectorStrings(const char* name, std::vector&& value) noexcept; std::shared_ptr SaveVectorObject(const char* name, std::vector>&& value) noexcept; std::shared_ptr SaveListInteger(const char* name, std::list&& value) noexcept; std::shared_ptr SaveListDouble(const char* name, std::list&& value) noexcept; std::shared_ptr SaveListStrings(const char* name, std::list&& value) noexcept; std::shared_ptr SaveListObject(const char* name, std::list>&& value) noexcept; // Методы получения значенй long long GetInteger(const char* name); double GetDouble(const char* name); std::string GetString(const char* name); std::shared_ptr GetObject(const char* name); std::vector& GetVectorInteger(const char* name); std::vector& GetVectorDouble(const char* name); std::vector GetVectorString(const char* name); std::vector>& GetVectorObject(const char* name); std::list& GetListInteger(const char* name); std::list& GetListDouble(const char* name); std::list& GetListString(const char* name); std::list>& GetListObject(const char* name); std::shared_ptr getParent() const { return parent_; } const std::string& getClassName() const { return class_name; } // Собирает все токены в JSON объект std::string serialize() noexcept; std::shared_ptr connect_to(const std::shared_ptr& parent); static std::string CleaningJSON(const std::string& json_data); };