JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
CacheRegistry.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <optional>
7#include <string>
8#include <unordered_map>
9#include <utility>
10
16
17namespace hmi {
18
32template <typename Resource>
34public:
47 template <typename Loader>
48 [[nodiscard]] const Resource* getOrLoad(const std::string& key, Loader&& loader) {
49 const auto found = _entries.find(key);
50 if (found != _entries.end()) {
51 return found->second ? &*found->second : nullptr;
52 }
53 const auto inserted = _entries.emplace(key, std::forward<Loader>(loader)()).first;
54 return inserted->second ? &*inserted->second : nullptr;
55 }
56
59 void invalidate(const std::string& key) {
60 _entries.erase(key);
61 }
62
65 _entries.clear();
66 }
67
69 [[nodiscard]] std::size_t size() const noexcept {
70 return _entries.size();
71 }
72
73private:
74 std::unordered_map<std::string, std::optional<Resource>> _entries;
75};
76
77} // namespace hmi
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