#pragma once #include #include #include #include #include namespace jvalidate { template class DocumentCache { public: using value_type = typename A::value_type; private: URIResolver resolve_; std::map cache_; public: DocumentCache() = default; DocumentCache(URIResolver const & resolve) : resolve_(resolve) {} operator bool() const { return resolve_; } std::optional try_load(URI const & uri) { if (not resolve_) { return std::nullopt; } auto [it, created] = cache_.try_emplace(uri); if (created && not resolve_(uri, it->second)) { cache_.erase(it); return std::nullopt; } return A(it->second); } }; }