ecs/SparseSet.ixx File
Generic sparse set data structure for efficient entity-keyed storage. More...
Included Headers
#include <cassert>
#include <functional>
#include <vector>
#include <helios.ecs.types.TypeDefs>
#include <helios.ecs.types.EntityHandle>
Namespaces Index
| namespace | helios |
| namespace | ecs |
|
Generic, reusable ECS primitives. More... | |
Classes Index
| class | SparseSetBase |
|
Abstract base class for type-erased sparse set access. More... | |
| class | SparseSet<T> |
|
A generic sparse set providing O(1) insertion, lookup, and removal. More... | |
| struct | Iterator |
|
Forward iterator for traversing the sparse set. More... | |
| struct | ConstIterator |
|
Const forward iterator for traversing the sparse set. More... | |
Description
Generic sparse set data structure for efficient entity-keyed storage.
File Listing
The file content with the documentation metadata removed is:
17using namespace helios::ecs::types;
18export namespace helios::ecs {
30 class SparseSetBase {
37 virtual ~SparseSetBase() = default;
74 constexpr auto Tombstone = EntityTombstone;
117 class SparseSet : public SparseSetBase {
195 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
227 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
232 sparse_.resize(idx + 1, Tombstone);
260 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
279 sparse_[idx] = Tombstone;
293 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
309 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
325 return idx < sparse_.size() && sparse_[idx] != Tombstone;
332 T* ptr = get(id);
357 using iterator_category = std::forward_iterator_tag;
358 using value_type = T;
359 using difference_type = std::ptrdiff_t;
368 pointer operator->() const { return &*dataIt_; }
377 [[nodiscard]] bool operator==(const Iterator& other) const { return dataIt_ == other.dataIt_;}
378 [[nodiscard]] bool operator!=(const Iterator& other) const { return dataIt_ != other.dataIt_;}
380 Iterator operator++(int) {
381 Iterator tmp = *this;
386 Iterator& operator++() {
396 struct ConstIterator {
410 using iterator_category = std::forward_iterator_tag;
411 using value_type = T;
412 using difference_type = std::ptrdiff_t;
416 ConstIterator() = default;
421 pointer operator->() const { return &*dataIt_; }
430 [[nodiscard]] bool operator==(const ConstIterator& other) const { return dataIt_ == other.dataIt_;}
431 [[nodiscard]] bool operator!=(const ConstIterator& other) const { return dataIt_ != other.dataIt_;}
433 ConstIterator operator++(int) {
434 ConstIterator tmp = *this;
439 ConstIterator& operator++() {
450 return Iterator(storage_.begin(), denseToSparse_.begin());
459 return Iterator(storage_.end(), denseToSparse_.end());
467 [[nodiscard]] ConstIterator begin() const {
468 return ConstIterator(storage_.begin(), denseToSparse_.begin());
476 [[nodiscard]] ConstIterator end() const {
477 return ConstIterator(storage_.end(), denseToSparse_.end());
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.