Skip to main content

HandleManyToManyMap.ixx File

Dense association map from one handle to multiple handles. More...

Included Headers

#include <vector> #include <span> #include <cassert> #include <concepts> #include <iterator> #include <cstddef> #include <helios.ecs.types.EntityHandle>

Namespaces Index

namespacehelios
namespaceengine
namespacecore
namespacecontainer
namespaceecs

Classes Index

classHandleManyToManyMap<TOneHandle, TManyHandle>

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

Description

Dense association map from one handle to multiple handles.

File Listing

The file content with the documentation metadata removed is:

1
5module;
6
7#include <vector>
8#include <span>
9#include <cassert>
10#include <concepts>
11#include <iterator>
12#include <cstddef>
13
14export module helios.engine.core.container.HandleManyToManyMap;
15
16import helios.ecs.types.EntityHandle;
17
18using namespace helios::ecs;
19export namespace helios::engine::core::container {
20
28 template <typename TOneHandle, typename TManyHandle>
30
34 std::vector<std::vector<TManyHandle>> values_;
35
36 public:
37
38
47 template<typename TOneEntity, typename TManyEntity>
48 requires std::same_as<TOneHandle, typename TOneEntity::Handle_type> && std::same_as<TManyHandle, typename TManyEntity::Handle_type>
50 return bind(oneEntity.handle(), manyEntity.handle());
51 }
52
53
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 }
74
75
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 }
91
95 void clear() {
96 values_.clear();
97 }
98
99
104 void reserve(std::size_t keyCapacity) {
105 values_.reserve(keyCapacity);
106 }
107
108 };
109
110}

Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.