Chira Engine
A customizable MIT-licensed game engine.
chira::Resource Class Referenceabstract

A chunk of data, usually a file. Is typically cached and shared. More...

#include <Resource.h>

Inheritance diagram for chira::Resource:
Collaboration diagram for chira::Resource:

Public Member Functions

 Resource (std::string identifier_)
 
virtual void compile (const byte[], std::size_t)=0
 
std::string_view getIdentifier () const
 

Static Public Member Functions

static void addResourceProvider (IResourceProvider *provider)
 
static IResourceProvidergetLatestResourceProvider (const std::string &provider)
 
static IResourceProvidergetResourceProviderWithResource (const std::string &identifier)
 
template<typename ResourceType , typename... Params>
static SharedPointer< ResourceType > getResource (const std::string &identifier, Params... params)
 
template<typename ResourceType , typename... Params>
static void precacheResource (const std::string &identifier, Params... params)
 
template<typename ResourceType >
static SharedPointer< ResourceType > getCachedResource (const std::string &identifier)
 
template<typename ResourceType , typename... Params>
static SharedPointer< ResourceType > getUniqueResource (const std::string &identifier, Params... params)
 
template<typename ResourceType , typename... Params>
static SharedPointer< ResourceType > getUniqueUncachedResource (const std::string &identifier, Params... params)
 You might want to use this sparingly as it defeats the entire point of a cached, shared resource system.
 
template<typename ResourceType , typename... Params>
static std::unique_ptr< ResourceType > getUniqueUncachedPropertyResource (const std::string &identifier, const nlohmann::json &props, Params... params)
 The only way to make a PropertiesResource without a provider is to make it unique, and not to cache it. More...
 
static std::pair< std::string, std::string > splitResourceIdentifier (const std::string &identifier)
 
static const std::vector< std::unique_ptr< IResourceProvider > > & getResourceProviders (const std::string &providerName)
 
static bool hasResource (const std::string &identifier)
 
static void removeResource (const std::string &identifier)
 If resource is present in the cache and has a reference count less than or equal to 2, mark it for removal.
 
static void cleanup ()
 Delete all resources marked for removal.
 
static void discardAll ()
 Deletes ALL resources and providers. Should only ever be called once, when the program closes.
 
template<typename ResourceType >
static bool registerDefaultResource (const std::string &identifier)
 
template<typename ResourceType >
static bool hasDefaultResource ()
 
template<typename ResourceType >
static SharedPointer< ResourceType > getDefaultResource ()
 
static void createDefaultResources ()
 

Static Protected Member Functions

static auto getDefaultResourceConstructors () -> std::unordered_map< std::type_index, std::function< void()>> &
 
static void logResourceError (const std::string &identifier, const std::string &resourceName)
 We do a few predeclaration workarounds.
 

Protected Attributes

std::string identifier
 

Static Protected Attributes

static std::unordered_map< std::string, std::vector< std::unique_ptr< IResourceProvider > > > providers
 
static std::unordered_map< std::string, std::unordered_map< std::string, SharedPointer< Resource > > > resources
 
static std::unordered_map< std::type_index, SharedPointer< Resource > > defaultResources
 
static std::vector< std::string > garbageResources
 

Friends

class ResourceUsageTrackerPanel
 

Detailed Description

A chunk of data, usually a file. Is typically cached and shared.

Definition at line 19 of file Resource.h.

Member Function Documentation

◆ getUniqueUncachedPropertyResource()

template<typename ResourceType , typename... Params>
static std::unique_ptr<ResourceType> chira::Resource::getUniqueUncachedPropertyResource ( const std::string &  identifier,
const nlohmann::json &  props,
Params...  params 
)
inlinestatic

The only way to make a PropertiesResource without a provider is to make it unique, and not to cache it.

You might want to use this sparingly as it defeats the entire point of a cached, shared resource system.

Definition at line 129 of file Resource.h.


The documentation for this class was generated from the following files: