#ifndef TESDATA_RECORDPATH_H #define TESDATA_RECORDPATH_H #include "TESFile/Stream.h" #include #include #include #include #include namespace TESData { class RecordPath final { public: using Identifier = std::variant; [[nodiscard]] bool hasFormId() const { return std::holds_alternative(m_Identifier); } [[nodiscard]] bool hasEditorId() const { return std::holds_alternative(m_Identifier); } [[nodiscard]] bool hasTypeId() const { return std::holds_alternative(m_Identifier); } [[nodiscard]] std::uint32_t formId() const { return std::get(m_Identifier); } [[nodiscard]] const std::string& editorId() const { return std::get(m_Identifier); } [[nodiscard]] TESFile::Type typeId() const { return std::get(m_Identifier); } [[nodiscard]] std::span files() const { return m_Files; } [[nodiscard]] std::span groups() const { return m_Groups; } [[nodiscard]] const auto& identifier() const { return m_Identifier; } [[nodiscard]] std::string string() const; void setFormId(std::uint32_t formId, std::span masters, const std::string& file); void unsetFormId(); void setEditorId(const std::string& editorId); void setTypeId(TESFile::Type type); void setIdentifier(const Identifier& identifier, std::span files); void push(TESFile::GroupData group, const std::span masters, const std::string& file); void pop(); private: void cleanLastFile(); boost::container::small_vector m_Files; boost::container::small_vector m_Groups; Identifier m_Identifier; }; } // namespace TESData #endif // TESDATA_RECORDPATH_H