Lysa  0.0
Lysa 3D Engine
ResourcesManager< T > Class Template Reference

Detailed Description

template<typename T>
class lysa::ResourcesManager< T >

Generic object/resources manager using ID-based access.

Manages a contiguous pool (vector) of resources of type T addressed by a small integral unique identifier (unique_id). Instances are created into available slots and retrieved via their ID. Destruction returns the slot to a free list for reuse.

The manager does not perform dynamic growth; capacity is fixed at construction. All accessors are O(1) by direct indexing. This class is intended to be used as a base for concrete resource managers (e.g., textures, meshes, materials).

Template Parameters
TResource type stored by the manager. T is expected to contain a public field named 'id' of type unique_id that will be assigned upon creation.

Public Member Functions

template<typename... Args>
T & create (Args &&...args)
 
T & operator[] (const unique_id id)
 
const T & operator[] (const unique_id id) const
 
virtual ~ResourcesManager ()
 
 ResourcesManager (ResourcesManager &) = delete
 
ResourcesManager & operator= (ResourcesManager &) = delete
 
virtual bool destroy (const unique_id id)
 
virtual bool destroy (const T &res)
 
void destroy (const std::vector< unique_id > &ids)
 
void use (const unique_id id)
 
bool have (const unique_id id) const
 
unique_id getCapacity () const
 
template<typename Func >
void forEach (Func &&func)
 
template<typename Func >
void forEach (Func &&func) const
 

Protected Member Functions

 ResourcesManager (const size_t capacity, const std::string &name)
 
T & allocate (std::unique_ptr< T > instance)
 
bool isFull () const
 

Protected Attributes

std::vector< std::unique_ptr< T > > resources
 
std::mutex resourcesMutex
 

Constructor & Destructor Documentation

virtual ~ResourcesManager ( )
inlinevirtual
ResourcesManager ( ResourcesManager< T > &  )
delete
ResourcesManager ( const size_t  capacity,
const std::string &  name 
)
inlineprotected

Member Function Documentation

T& allocate ( std::unique_ptr< T >  instance)
inlineprotected
T& create ( Args &&...  args)
inline

Create a new unique resource

void destroy ( const std::vector< unique_id > &  ids)
inline

Releases a batch of resources by ID. Each resource is destroyed individually; slots are freed as their reference counters reach zero.

Parameters
idsList of unique identifiers to destroy.
virtual bool destroy ( const T &  res)
inlinevirtual

Releases a resource by reference, decrementing its reference counter.

Parameters
resResource to destroy.
Returns
true if the resource was actually freed, false if references remain.

Reimplemented in lysa::MeshManager::destroy(), lysa::ImageManager::destroy()

virtual bool destroy ( const unique_id  id)
inlinevirtual

Releases a resource by ID, decrementing its reference counter. The slot is returned to the free list only when the counter reaches zero.

Parameters
idUnique identifier of the resource to destroy.
Returns
true if the resource was actually freed, false if references remain.

Reimplemented in lysa::MaterialManager::destroy(), lysa::MeshManager::destroy(), lysa::ImageManager::destroy()

void forEach ( Func &&  func)
inline
void forEach ( Func &&  func) const
inline
unique_id getCapacity ( ) const
inline
bool have ( const unique_id  id) const
inline

returns true if the id is valid

bool isFull ( ) const
inlineprotected
ResourcesManager& operator= ( ResourcesManager< T > &  )
delete
T& operator[] ( const unique_id  id)
inline

Bracket operator for mutable access without bounds checking.

Parameters
idThe unique identifier of the resource.
Returns
T& Reference to the resource.
const T& operator[] ( const unique_id  id) const
inline

Bracket operator for const access without bounds checking.

Parameters
idThe unique identifier of the resource.
Returns
const T& Const reference to the resource.
void use ( const unique_id  id)
inline

Increments the reference counter of the resources

Member Data Documentation

std::vector<std::unique_ptr<T> > resources
protected
std::mutex resourcesMutex
protected