Skip to main content

HandleManyToManyMap Class Template

Stores associations from one handle domain to many handles. More...

Declaration

template <typename TOneHandle, typename TManyHandle> class helios::engine::core::container::HandleManyToManyMap<TOneHandle, TManyHandle> { ... }

Public Member Functions Index

template <typename TOneEntity, typename TManyEntity>
boolbind (TOneEntity oneEntity, TManyEntity manyEntity)

Binds two entities by their handle types. More...

template <typename TOneHandle, typename TManyHandle>
boolbind (const TOneHandle key, const TManyHandle value)

Appends an association from key handle to value handle. More...

template <typename TOneHandle, typename TManyHandle>
auto values (const TOneHandle key) const noexcept -> std::span< const TManyHandle >

Returns all values associated with a key handle. More...

template <typename TOneHandle, typename TManyHandle>
voidclear ()

Removes all stored associations. More...

template <typename TOneHandle, typename TManyHandle>
voidreserve (std::size_t keyCapacity)

Reserves capacity for key-indexed storage. More...

Private Member Attributes Index

template <typename TOneHandle, typename TManyHandle>
std::vector< std::vector< TManyHandle > >values_

Dense storage: key entityId -> associated values. More...

Description

Stores associations from one handle domain to many handles.

Template Parameters
TOneHandle

Handle type used as association key.

TManyHandle

Handle type stored as associated value.

Uses entityId as direct index into dense storage.

Definition at line 29 of file HandleManyToManyMap.ixx.

Public Member Functions

bind()

template <typename TOneEntity, typename TManyEntity>
bool helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::bind (TOneEntity oneEntity, TManyEntity manyEntity)
inline

Binds two entities by their handle types.

Template Parameters
TOneEntity

Entity type exposing TOneHandle.

TManyEntity

Entity type exposing TManyHandle.

Parameters
oneEntity

Entity providing the key handle.

manyEntity

Entity providing the associated value handle.

Returns

true after the association was appended.

Definition at line 49 of file HandleManyToManyMap.ixx.

50 return bind(oneEntity.handle(), manyEntity.handle());
51 }

References helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::bind and helios::engine::core::registerComponents.

Referenced by helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addCulledMember, helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::addVisibleMember and helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::bind.

bind()

template <typename TOneHandle, typename TManyHandle>
bool helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::bind (const TOneHandle key, const TManyHandle value)
inline

Appends an association from key handle to value handle.

Parameters
key

Key handle on the left side.

value

Value handle on the right side.

Returns

true after the association was appended.

Definition at line 60 of file HandleManyToManyMap.ixx.

60 bool bind(const TOneHandle key, const TManyHandle value) {
61
62 const auto keyIdx = key.entityId;
63 const auto valueIdx = value.entityId;
64
65 // one idx to many handles
66 if (values_.size() <= keyIdx) {
67 values_.resize(keyIdx + 1);
68 }
69 values_[keyIdx].push_back(value);
70
71
72 return true;
73 }

Reference helios::engine::core::registerComponents.

clear()

template <typename TOneHandle, typename TManyHandle>
void helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::clear ()
inline

Removes all stored associations.

Definition at line 95 of file HandleManyToManyMap.ixx.

95 void clear() {
96 values_.clear();
97 }

Referenced by helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::clear.

reserve()

template <typename TOneHandle, typename TManyHandle>
void helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::reserve (std::size_t keyCapacity)
inline

Reserves capacity for key-indexed storage.

Parameters
keyCapacity

Expected number of key slots.

Definition at line 104 of file HandleManyToManyMap.ixx.

104 void reserve(std::size_t keyCapacity) {
105 values_.reserve(keyCapacity);
106 }

Reference helios::engine::core::registerComponents.

Referenced by helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::SceneMemberVisibilityRegistry.

values()

template <typename TOneHandle, typename TManyHandle>
std::span< const TManyHandle > helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::values (const TOneHandle key)
inline noexcept

Returns all values associated with a key handle.

Parameters
key

Key handle to query.

Returns

Read-only span of associated handles, or empty span if none exist.

Definition at line 81 of file HandleManyToManyMap.ixx.

81 [[nodiscard]] std::span<const TManyHandle> values(const TOneHandle key) const noexcept {
82
83 const auto keyIdx = key.entityId;
84
85 if (values_.size() <= keyIdx) {
86 return {};
87 }
88
89 return values_[keyIdx];
90 }

Reference helios::engine::core::registerComponents.

Referenced by helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::culledMembers and helios::engine::scene::SceneMemberVisibilityRegistry< TMemberHandle >::visibleMembers.

Private Member Attributes

values_

template <typename TOneHandle, typename TManyHandle>
std::vector<std::vector<TManyHandle> > helios::engine::core::container::HandleManyToManyMap< TOneHandle, TManyHandle >::values_

Dense storage: key entityId -> associated values.

Definition at line 34 of file HandleManyToManyMap.ixx.

34 std::vector<std::vector<TManyHandle>> values_;

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


Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.