#pragma once #include #include #include #include namespace Copium { class MetaFileClass { friend class MetaFile; private: std::map values; public: MetaFileClass() {} MetaFileClass(const std::map& values) : values{values} {} std::string GetValue(const std::string& key, const std::string& val) const; bool HasValue(const std::string& key) const; const std::string& GetValue(const std::string& key) const; const std::map& GetValues() const; void AddValue(const std::string& key, const std::string& val); friend std::ostream& operator<<(std::ostream& stream, const MetaFileClass& file); }; class MetaFile { private: std::string filepath; std::map classes; // map> public: MetaFile(); MetaFile(const std::string& filepath); MetaFile(std::istream& stream); bool HasMetaClass(const std::string& className) const; const std::map& GetMetaFileClasses(); MetaFileClass& GetMetaClass(const std::string& className); const MetaFileClass& GetMetaClass(const std::string& className) const; const std::string& GetFilePath() const; void AddMetaClass(const std::string& name, const MetaFileClass& metaClass); friend std::ostream& operator<<(std::ostream& stream, const MetaFile& file); friend std::istream& operator>>(std::istream& stream, MetaFile& file); static std::vector ReadList(const std::string& file); private: void LoadMetaFile(std::istream& stream); }; }