Helios Engine 0.1.0
A modular ECS based data-oriented C++23 game engine
 
Loading...
Searching...
No Matches
helios::ecs::details::Resources Class Reference

Resource container for World. More...

#include <resources_manager.hpp>

Public Member Functions

 Resources ()=default
 
 Resources (const Resources &)=delete
 
 Resources (Resources &&) noexcept=default
 
 ~Resources ()=default
 
Resourcesoperator= (const Resources &)=delete
 
Resourcesoperator= (Resources &&) noexcept=default
 
void Clear ()
 Clears all resources.
 
template<ResourceTrait T>
void Insert (T &&resource)
 Inserts a new resource.
 
template<ResourceTrait T>
bool TryInsert (T &&resource)
 Tries to insert a resource if not present.
 
template<ResourceTrait T, typename... Args>
requires std::constructible_from<T, Args...>
void Emplace (Args &&... args)
 Emplaces a new resource in-place.
 
template<ResourceTrait T, typename... Args>
requires std::constructible_from<T, Args...>
bool TryEmplace (Args &&... args)
 Tries to emplace a resource if not present.
 
template<ResourceTrait T>
void Remove ()
 Removes a resource.
 
template<ResourceTrait T>
bool TryRemove ()
 Tries to remove a resource.
 
template<ResourceTrait T>
T & Get ()
 Gets mutable reference to a resource. Triggers assertion if resource doesn't exist.
 
template<ResourceTrait T>
const T & Get () const
 Gets const reference to a resource. Triggers assertion if resource doesn't exist.
 
template<ResourceTrait T>
T * TryGet ()
 Tries to get mutable pointer to a resource.
 
template<ResourceTrait T>
const T * TryGet () const
 Tries to get const pointer to a resource.
 
template<ResourceTrait T>
bool Has () const
 Checks if a resource exists.
 
size_t Count () const
 Gets the number of stored resources.
 

Detailed Description

Resource container for World.

Manages resources with thread-safe access using Boost's concurrent_node_map.

Note
Not thread-safe.

Definition at line 67 of file resources_manager.hpp.

Constructor & Destructor Documentation

◆ Resources() [1/3]

helios::ecs::details::Resources::Resources ( )
default

◆ Resources() [2/3]

helios::ecs::details::Resources::Resources ( const Resources )
delete

◆ Resources() [3/3]

helios::ecs::details::Resources::Resources ( Resources &&  )
defaultnoexcept

◆ ~Resources()

helios::ecs::details::Resources::~Resources ( )
default

Member Function Documentation

◆ Clear()

void helios::ecs::details::Resources::Clear ( )
inline

Clears all resources.

Definition at line 80 of file resources_manager.hpp.

80{ resources_.clear(); }

◆ Count()

size_t helios::ecs::details::Resources::Count ( ) const
inline

Gets the number of stored resources.

Returns
Resource count

Definition at line 184 of file resources_manager.hpp.

184{ return resources_.size(); }

◆ Emplace()

template<ResourceTrait T, typename... Args>
requires std::constructible_from<T, Args...>
void helios::ecs::details::Resources::Emplace ( Args &&...  args)
inline

Emplaces a new resource in-place.

Constructs resource directly in storage.

Template Parameters
TResource type
ArgsConstructor argument types
Parameters
argsArguments to forward to resource constructor

Definition at line 207 of file resources_manager.hpp.

207 {
208 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
209 auto storage = std::make_unique<ResourceStorage<T>>(std::forward<Args>(args)...);
210 resources_.insert_or_assign(type_id, std::move(storage));
211}
size_t ResourceTypeId
Type ID for resources.
Definition resource.hpp:53
BasicQuery< World, Allocator, Components... > Query
Type alias for query with mutable world access.
Definition query.hpp:2481

◆ Get() [1/2]

template<ResourceTrait T>
T & helios::ecs::details::Resources::Get ( )
inline

Gets mutable reference to a resource. Triggers assertion if resource doesn't exist.

Template Parameters
TResource type
Returns
Mutable reference to resource

Definition at line 235 of file resources_manager.hpp.

235 {
236 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
237 const auto it = resources_.find(type_id);
238 HELIOS_ASSERT(it != resources_.end(), "Failed to get resource '{}': Resource does not exist!", ResourceNameOf<T>());
239 return static_cast<ResourceStorage<T>&>(*it->second).Get();
240}
#define HELIOS_ASSERT(condition,...)
Assertion macro that aborts execution in debug builds.
Definition assert.hpp:140
T & Get()
Gets mutable reference to a resource. Triggers assertion if resource doesn't exist.

◆ Get() [2/2]

template<ResourceTrait T>
const T & helios::ecs::details::Resources::Get ( ) const
inline

Gets const reference to a resource. Triggers assertion if resource doesn't exist.

Template Parameters
TResource type
Returns
Const reference to resource

Definition at line 243 of file resources_manager.hpp.

243 {
244 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
245 const auto it = resources_.find(type_id);
246 HELIOS_ASSERT(it != resources_.end(), "Failed to get resource '{}': Resource does not exist!", ResourceNameOf<T>());
247 return static_cast<const ResourceStorage<T>&>(*it->second).Get();
248}

◆ Has()

template<ResourceTrait T>
bool helios::ecs::details::Resources::Has ( ) const
inline

Checks if a resource exists.

Template Parameters
TResource type
Returns
True if resource exists, false otherwise

Definition at line 271 of file resources_manager.hpp.

271 {
272 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
273 return resources_.contains(type_id);
274}

◆ Insert()

template<ResourceTrait T>
void helios::ecs::details::Resources::Insert ( T &&  resource)

Inserts a new resource.

Replaces existing resource if present.

Template Parameters
TResource type
Parameters
resourceResource to insert

Definition at line 192 of file resources_manager.hpp.

192 {
193 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
194 auto storage = std::make_unique<ResourceStorage<T>>(std::forward<T>(resource));
195 resources_.insert_or_assign(type_id, std::move(storage));
196}

◆ operator=() [1/2]

Resources & helios::ecs::details::Resources::operator= ( const Resources )
delete

◆ operator=() [2/2]

Resources & helios::ecs::details::Resources::operator= ( Resources &&  )
defaultnoexcept

◆ Remove()

template<ResourceTrait T>
void helios::ecs::details::Resources::Remove ( )
inline

Removes a resource.

Warning
Triggers assertion if resource doesn't exist.
Template Parameters
TResource type

Definition at line 222 of file resources_manager.hpp.

222 {
223 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
224 const size_t erased = resources_.erase(type_id);
225 HELIOS_ASSERT(erased > 0, "Failed to remove resource '{}': Resource does not exist!", ResourceNameOf<T>());
226}

◆ TryEmplace()

template<ResourceTrait T, typename... Args>
requires std::constructible_from<T, Args...>
bool helios::ecs::details::Resources::TryEmplace ( Args &&...  args)
inline

Tries to emplace a resource if not present.

Template Parameters
TResource type
ArgsConstructor argument types
Parameters
argsArguments to forward to resource constructor
Returns
True if emplaced, false if resource already exists

Definition at line 215 of file resources_manager.hpp.

215 {
216 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
217 auto storage = std::make_unique<ResourceStorage<T>>(std::forward<Args>(args)...);
218 return resources_.try_emplace(type_id, std::move(storage)).second;
219}

◆ TryGet() [1/2]

template<ResourceTrait T>
T * helios::ecs::details::Resources::TryGet ( )
inline

Tries to get mutable pointer to a resource.

Template Parameters
TResource type
Returns
Pointer to resource, or nullptr if not found

Definition at line 251 of file resources_manager.hpp.

251 {
252 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
253 const auto it = resources_.find(type_id);
254 if (it == resources_.end()) {
255 return nullptr;
256 }
257 return &static_cast<ResourceStorage<T>&>(*it->second).Get();
258}

◆ TryGet() [2/2]

template<ResourceTrait T>
const T * helios::ecs::details::Resources::TryGet ( ) const
inline

Tries to get const pointer to a resource.

Template Parameters
TResource type
Returns
Const pointer to resource, or nullptr if not found

Definition at line 261 of file resources_manager.hpp.

261 {
262 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
263 const auto it = resources_.find(type_id);
264 if (it == resources_.end()) {
265 return nullptr;
266 }
267 return &static_cast<const ResourceStorage<T>&>(*it->second).Get();
268}

◆ TryInsert()

template<ResourceTrait T>
bool helios::ecs::details::Resources::TryInsert ( T &&  resource)
inline

Tries to insert a resource if not present.

Template Parameters
TResource type
Parameters
resourceResource to insert
Returns
True if inserted, false if resource already exists

Definition at line 199 of file resources_manager.hpp.

199 {
200 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
201 auto storage = std::make_unique<ResourceStorage<T>>(std::forward<T>(resource));
202 return resources_.try_emplace(type_id, std::move(storage)).second;
203}

◆ TryRemove()

template<ResourceTrait T>
bool helios::ecs::details::Resources::TryRemove ( )
inline

Tries to remove a resource.

Template Parameters
TResource type
Returns
True if removed, false if resource didn't exist

Definition at line 229 of file resources_manager.hpp.

229 {
230 constexpr ResourceTypeId type_id = ResourceTypeIdOf<T>();
231 return resources_.erase(type_id) > 0;
232}