engine/ecs/SparseSet.ixx File
Generic sparse set data structure for efficient entity-component storage. More...
Included Headers
#include <cassert>
#include <functional>
#include <vector>
#include <helios.engine.ecs.Traits>
#include <helios.engine.ecs.types>
Namespaces Index
| namespace | helios |
| namespace | engine |
|
Main engine module aggregating core infrastructure and game systems. More... | |
| namespace | ecs |
|
Core Entity-Component-System architecture. 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-component storage.
File Listing
The file content with the documentation metadata removed is:
16export namespace helios::engine::ecs {
29 class SparseSetBase {
36 virtual ~SparseSetBase() = default;
46 virtual bool remove(helios::engine::ecs::types::EntityId id) = 0;
55 [[nodiscard]] virtual bool contains(helios::engine::ecs::types::EntityId id) const = 0;
64 [[nodiscard]] virtual void* raw(helios::engine::ecs::types::EntityId id) = 0;
73 constexpr auto Tombstone = helios::engine::ecs::types::EntityTombstone;
75 using namespace helios::engine::ecs::types;
156 class SparseSet : public SparseSetBase {
233 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
265 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
270 sparse_.resize(idx + 1, Tombstone);
299 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
318 sparse_[idx] = Tombstone;
332 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
348 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
364 return idx < sparse_.size() && sparse_[idx] != Tombstone;
370 [[nodiscard]] void* raw(const helios::engine::ecs::types::EntityId id) override {
372 T* ptr = get(id);
390 using iterator_category = std::forward_iterator_tag;
391 using value_type = T;
392 using difference_type = std::ptrdiff_t;
401 pointer operator->() const { return &*dataIt_; }
410 [[nodiscard]] bool operator==(const Iterator& other) const { return dataIt_ == other.dataIt_;}
411 [[nodiscard]] bool operator!=(const Iterator& other) const { return dataIt_ != other.dataIt_;}
413 Iterator& operator++(int) {
414 Iterator tmp = *this;
419 Iterator& operator++() {
429 struct ConstIterator {
436 using iterator_category = std::forward_iterator_tag;
437 using value_type = T;
438 using difference_type = std::ptrdiff_t;
442 ConstIterator() = default;
447 pointer operator->() const { return &*dataIt_; }
456 [[nodiscard]] bool operator==(const ConstIterator& other) const { return dataIt_ == other.dataIt_;}
457 [[nodiscard]] bool operator!=(const ConstIterator& other) const { return dataIt_ != other.dataIt_;}
459 ConstIterator& operator++(int) {
460 ConstIterator tmp = *this;
465 ConstIterator& operator++() {
476 return Iterator(storage_.begin(), denseToSparse_.begin());
485 return Iterator(storage_.end(), denseToSparse_.end());
493 [[nodiscard]] ConstIterator begin() const {
494 return ConstIterator(storage_.begin(), denseToSparse_.begin());
502 [[nodiscard]] ConstIterator end() const {
503 return ConstIterator(storage_.end(), denseToSparse_.end());
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.15.0.