SparseSet.ixx File
Generic sparse set data structure for efficient entity-keyed storage. More...
Included Headers
#include <cassert>
#include <functional>
#include <vector>
#include <cstddef>
#include <helios.ecs.types.TypeDefs>
#include <helios.ecs.types.EntityHandle>
Namespaces Index
| namespace | helios |
| namespace | ecs |
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:
18using namespace helios::ecs::types;
19export namespace helios::ecs {
31 class SparseSetBase {
38 virtual ~SparseSetBase() = default;
75 constexpr auto Tombstone = EntityTombstone;
118 class SparseSet : public SparseSetBase {
196 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
201 sparse_.resize(idx + 1, Tombstone);
228 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
233 sparse_.resize(idx + 1, Tombstone);
261 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
280 sparse_[idx] = Tombstone;
294 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
310 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
326 return idx < sparse_.size() && sparse_[idx] != Tombstone;
333 T* ptr = get(id);
358 using iterator_category = std::forward_iterator_tag;
359 using value_type = T;
360 using difference_type = std::ptrdiff_t;
369 pointer operator->() const { return &*dataIt_; }
378 [[nodiscard]] bool operator==(const Iterator& other) const { return dataIt_ == other.dataIt_;}
379 [[nodiscard]] bool operator!=(const Iterator& other) const { return dataIt_ != other.dataIt_;}
381 Iterator operator++(int) {
382 Iterator tmp = *this;
387 Iterator& operator++() {
397 struct ConstIterator {
411 using iterator_category = std::forward_iterator_tag;
412 using value_type = T;
413 using difference_type = std::ptrdiff_t;
417 ConstIterator() = default;
422 pointer operator->() const { return &*dataIt_; }
431 [[nodiscard]] bool operator==(const ConstIterator& other) const { return dataIt_ == other.dataIt_;}
432 [[nodiscard]] bool operator!=(const ConstIterator& other) const { return dataIt_ != other.dataIt_;}
434 ConstIterator operator++(int) {
435 ConstIterator tmp = *this;
440 ConstIterator& operator++() {
451 return Iterator(storage_.begin(), denseToSparse_.begin());
460 return Iterator(storage_.end(), denseToSparse_.end());
468 [[nodiscard]] ConstIterator begin() const {
469 return ConstIterator(storage_.begin(), denseToSparse_.begin());
477 [[nodiscard]] ConstIterator end() const {
478 return ConstIterator(storage_.end(), denseToSparse_.end());
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.