#pragma once #include #include #include #include #include namespace extra2d { template class AssetCache { public: Handle find(const std::string &key) const { std::shared_lock lock(mutex_); auto it = map_.find(key); if (it == map_.end()) { return Handle::invalid(); } return it->second; } void set(const std::string &key, Handle handle) { std::unique_lock lock(mutex_); map_[key] = handle; } void erase(const std::string &key) { std::unique_lock lock(mutex_); map_.erase(key); } void clear() { std::unique_lock lock(mutex_); map_.clear(); } std::string findKeyByHandle(Handle handle) const { std::shared_lock lock(mutex_); for (const auto &pair : map_) { if (pair.second == handle) { return pair.first; } } return ""; } private: std::unordered_map> map_; mutable std::shared_mutex mutex_; }; } // namespace extra2d