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;
83 constexpr auto Tombstone = EntityTombstone;
126 class SparseSet : public SparseSetBase {
203 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
208 sparse_.resize(idx + 1, Tombstone);
235 if (idx < sparse_.size() && sparse_[idx] != Tombstone) {
240 sparse_.resize(idx + 1, Tombstone);
268 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
287 sparse_[idx] = Tombstone;
301 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
317 if (idx >= sparse_.size() || sparse_[idx] == Tombstone) {
333 return idx < sparse_.size() && sparse_[idx] != Tombstone;
340 T* ptr = get(id);
374 using iterator_category = std::forward_iterator_tag;
375 using value_type = T;
376 using difference_type = std::ptrdiff_t;
385 pointer operator->() const { return &*dataIt_; }
394 [[nodiscard]] bool operator==(const Iterator& other) const { return dataIt_ == other.dataIt_;}
395 [[nodiscard]] bool operator!=(const Iterator& other) const { return dataIt_ != other.dataIt_;}
397 Iterator operator++(int) {
398 Iterator tmp = *this;
403 Iterator& operator++() {
413 struct ConstIterator {
427 using iterator_category = std::forward_iterator_tag;
428 using value_type = T;
429 using difference_type = std::ptrdiff_t;
433 ConstIterator() = default;
438 pointer operator->() const { return &*dataIt_; }
447 [[nodiscard]] bool operator==(const ConstIterator& other) const { return dataIt_ == other.dataIt_;}
448 [[nodiscard]] bool operator!=(const ConstIterator& other) const { return dataIt_ != other.dataIt_;}
450 ConstIterator operator++(int) {
451 ConstIterator tmp = *this;
456 ConstIterator& operator++() {
467 return Iterator(storage_.begin(), denseToSparse_.begin());
476 return Iterator(storage_.end(), denseToSparse_.end());
484 [[nodiscard]] ConstIterator begin() const {
485 return ConstIterator(storage_.begin(), denseToSparse_.begin());
493 [[nodiscard]] ConstIterator end() const {
494 return ConstIterator(storage_.end(), denseToSparse_.end());
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.