8#ifndef GALAXY_RESOURCE_CACHE_HPP_
9#define GALAXY_RESOURCE_CACHE_HPP_
11#include <ankerl/unordered_dense.h>
12#include <entt/locator/locator.hpp>
27 template<
typename Resource,
typename SpecLoader>
34 using Map = ankerl::unordered_dense::map<std::uint64_t, std::shared_ptr<Resource>>;
65 template<typename... Args>
84 void insert(const
std::
string& key,
std::shared_ptr<Resource> resource) noexcept;
94 std::shared_ptr<Resource>
get(const
std::
string& key) noexcept;
104 bool has(const
std::
string& key) noexcept;
117 bool empty() const noexcept;
123 std::
size_t size() const noexcept;
166 template<typename Resource, typename SpecLoader>
167 requires meta::not_memory<Resource> && meta::is_class<Resource> && meta::is_instance_of_v<SpecLoader,
Loader>
172 template<
typename Resource,
typename SpecLoader>
179 template<
typename Resource,
typename SpecLoader>
194 template<
typename Resource,
typename SpecLoader>
196 template<
typename... Args>
210 template<
typename Resource,
typename SpecLoader>
214 auto& fs = entt::locator<VirtualFileSystem>::value();
215 for (
const auto& file : fs.list(dir))
221 template<
typename Resource,
typename SpecLoader>
236 template<
typename Resource,
typename SpecLoader>
249 template<
typename Resource,
typename SpecLoader>
257 template<
typename Resource,
typename SpecLoader>
264 template<
typename Resource,
typename SpecLoader>
271 template<
typename Resource,
typename SpecLoader>
278 template<
typename Resource,
typename SpecLoader>
#define GALAXY_LOG(level, msg,...)
Cache for resources such as audio, fonts, etc.
bool has(const std::string &key) noexcept
Check if a resource exists.
const Map & cache() const noexcept
Get entire resource cache.
std::shared_ptr< Resource > get(const std::string &key) noexcept
Get a resource.
void load_file(const std::string &file)
Load a resource.
void load_folder(const std::string &dir)
Load all resources in a folder.
ankerl::unordered_dense::map< std::uint64_t, std::shared_ptr< Resource > > Map
Use a dense map for storage.
void clear()
Destroy all data in cache.
void load_resource(const std::string &key, Args &&... args)
Loads a resource with custom args.
SpecLoader m_loader
Flexible Loader used to create/load a Resource into the cache.
std::size_t size() const noexcept
Get amount of resources cached.
Map m_cache
Resource storage map.
bool empty() const noexcept
Does the cache have any resources.
Cache() noexcept
Constructor.
void insert(const std::string &key, std::shared_ptr< Resource > resource) noexcept
Insert a resource directly into the cache.
constexpr bits fnv1a(const char *const str, const bits value=fnv_1a_params< bits >::offset) noexcept
Convert string to hash.
Loads resources for a resource cache.