MxEngine
Public Types | Public Member Functions | List of all members
MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage > Class Template Reference

#include <LifetimeManager.h>

Public Types

using Value = ValueType
 
using Key = Id
 
using Storage = ValueStorage
 

Public Member Functions

template<typename IdT , typename ValueT >
void Add (IdT &&key, ValueT &&value)
 
ValueStorage & GetElements ()
 
const ValueStorage & GetElements () const
 
template<typename IdT >
void Remove (IdT &&key)
 
template<typename IdT >
bool Exists (IdT &&key)
 
void Update ()
 

Detailed Description

template<typename ValueType, typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
class MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >

lifetime manager is a generic class which stores elements using their unique ids. It supports lazy invokation (i.e. deleting K elements event from vector with N elements will still be O(N), not (K*N)) Note that before getting element it should be checked for Existance using Exist() or call Update() to invalidate cache. For performance reasons functions like GetElements does not invalidate cache, so be careful with them and do not suppose recently added object is already in list In general, you want to write something like LifetimeManager<GameObject, UUID> to create manager, but you also can specify storage and cache containers as well

Member Function Documentation

§ Add()

template<typename ValueType , typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
template<typename IdT , typename ValueT >
void MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >::Add ( IdT &&  key,
ValueT &&  value 
)
inline

adds new object to the storage. If object with same id already present, it will be replaced. Note that all additions are stored in cache until Update() method is being called

Parameters
keyunique object identifier
valueobject itself

§ Exists()

template<typename ValueType , typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
template<typename IdT >
bool MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >::Exists ( IdT &&  key)
inline

checks if object with id exists in storage. This method DOES force cache invalidation (see Update())

Parameters
idto search for
Returns
true if object with id is present, false either

§ GetElements() [1/2]

template<typename ValueType , typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
ValueStorage& MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >::GetElements ( )
inline

get inner storage. This method does not force cache invalidation. Probably you want to call Update() before it

Returns
inner storage of object manager

§ GetElements() [2/2]

template<typename ValueType , typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
const ValueStorage& MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >::GetElements ( ) const
inline

get inner storage. This method does not force cache invalidation. Probably you want to call Update() before it

Returns
inner storage of object manager

§ Remove()

template<typename ValueType , typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
template<typename IdT >
void MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >::Remove ( IdT &&  key)
inline

removes object from the storage by id. If object with that id does not exists, no action is performed Note that all removals are stored in cache until Update() method is being called

Parameters
keyunique object identifier to remove

§ Update()

template<typename ValueType , typename Id = MxString, typename ValueStorage = MxHashMap<Id, ValueType>, typename IdStorage = MxVector<Id>>
void MxEngine::LifetimeManager< ValueType, Id, ValueStorage, IdStorage >::Update ( )
inline

invalidates caches, resulting in new object addition and deleting of requested once if object with same ID is added and deleted before update, firstly manager will try to delete id from storage, then add new object


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