8#include <unordered_map>
32template <
typename Resource>
47 template <
typename Loader>
48 [[nodiscard]]
const Resource*
getOrLoad(
const std::string& key, Loader&& loader) {
49 const auto found =
_entries.find(key);
51 return found->second ? &*found->second :
nullptr;
53 const auto inserted =
_entries.emplace(key, std::forward<Loader>(loader)()).first;
54 return inserted->second ? &*inserted->second :
nullptr;
69 [[nodiscard]] std::size_t
size() const noexcept {
74 std::unordered_map<std::string, std::optional<Resource>>
_entries;
Mémoïsation par clé logique : charge au premier accès, retient aussi un échec, et s'invalide par clé ...
Definition CacheRegistry.h:33
void invalidateAll()
Retire toutes les entrées.
Definition CacheRegistry.h:64
std::size_t size() const noexcept
Definition CacheRegistry.h:69
std::unordered_map< std::string, std::optional< Resource > > _entries
Definition CacheRegistry.h:74
void invalidate(const std::string &key)
Retire une entrée (succès ou échec mémorisé) : le prochain getOrLoad sous cette clé rappelle loader.
Definition CacheRegistry.h:59
const Resource * getOrLoad(const std::string &key, Loader &&loader)
Obtient la ressource sous key, en la chargeant via loader au premier accès.
Definition CacheRegistry.h:48
Definition AudioEngine.cpp:15