1 #ifndef ENTT_RESOURCE_CACHE_HPP 2 #define ENTT_RESOURCE_CACHE_HPP 8 #include <unordered_map> 9 #include "../config/config.h" 28 template<
typename Resource>
30 using container_type = std::unordered_map<ENTT_ID_TYPE, std::shared_ptr<Resource>>;
34 using size_type =
typename container_type::size_type;
52 return resources.size();
59 bool empty() const ENTT_NOEXCEPT {
60 return resources.empty();
95 template<
typename Loader,
typename... Args>
100 if(
auto it = resources.find(
id); it == resources.cend()) {
101 if(
auto resource = Loader{}.get(std::forward<Args>(args)...); resource) {
102 resources[id] = resource;
103 handle = std::move(resource);
135 template<
typename Loader,
typename... Args>
137 return (
discard(
id), load<Loader>(
id, std::forward<Args>(args)...));
152 template<
typename Loader,
typename... Args>
154 return { Loader{}.get(std::forward<Args>(args)...) };
171 auto it = resources.find(
id);
172 return { it == resources.end() ? nullptr : it->second };
181 return (resources.find(
id) != resources.cend());
193 if(
auto it = resources.find(
id); it != resources.end()) {
215 template <
typename Func>
217 auto begin = resources.begin();
218 auto end = resources.end();
220 while(begin != end) {
223 if constexpr(std::is_invocable_v<Func, resource_type>) {
234 container_type resources;
241 #endif // ENTT_RESOURCE_CACHE_HPP size_type size() const ENTT_NOEXCEPT
Number of resources managed by a cache.
Simple cache for resources of a given type.
resource_handle< Resource > reload(const resource_type id, Args &&... args)
Reloads a resource or loads it for the first time if not present.
resource_handle< Resource > temp(Args &&... args) const
Creates a temporary handle for a resource.
Base class for resource loaders.
ENTT_ID_TYPE resource_type
Type of resources managed by a cache.
typename container_type::size_type size_type
Unsigned integer type.
resource_cache & operator=(resource_cache &&)=default
Default move assignment operator.
void each(Func func) const
Iterates all resources.
void discard(const resource_type id) ENTT_NOEXCEPT
Discards the resource that corresponds to a given identifier.
bool empty() const ENTT_NOEXCEPT
Returns true if a cache contains no resources, false otherwise.
bool contains(const resource_type id) const ENTT_NOEXCEPT
Checks if a cache contains a given identifier.
resource_handle< Resource > handle(const resource_type id) const
Creates a handle for a given resource identifier.
void clear() ENTT_NOEXCEPT
Clears a cache and discards all its resources.
resource_handle< Resource > load(const resource_type id, Args &&... args)
Loads the resource that corresponds to a given identifier.
resource_cache()=default
Default constructor.