#pragma once #include "SearchPath/SharedSearchPaths.h" #include "Zone/LoadedZoneInformation.h" #include "Zone/Zone.h" #include #include #include #include #include template class ReadAccess { public: ReadAccess(std::shared_lock lock, T& data) : m_read_lock(std::move(lock)), m_data(data) { } [[nodiscard]] T& Data() const { return m_data; } private: std::shared_lock m_read_lock; T& m_data; }; class FastFileContext { public: void Destroy(); std::expected LoadFastFile(const std::string& path); std::expected UnloadZone(const std::string& zoneName); ReadAccess>> GetLoadedZones(); ReadAccess GetSearchPaths(); private: std::vector> m_loaded_zones; std::shared_mutex m_zone_lock; SharedSearchPaths m_shared_search_paths; std::shared_mutex m_search_path_lock; };