|
EnTT
3.8.0
|
Basic sparse set implementation. More...
#include <sparse_set.hpp>
Public Types | |
| using | allocator_type = typename alloc_traits::allocator_type |
| Allocator type. | |
| using | entity_type = Entity |
| Underlying entity identifier. | |
| using | size_type = std::size_t |
| Unsigned integer type. | |
| using | pointer = alloc_const_pointer |
| Pointer type to contained entities. | |
| using | iterator = sparse_set_iterator |
| Random access iterator type. | |
| using | reverse_iterator = std::reverse_iterator< iterator > |
| Reverse iterator type. | |
Public Member Functions | |
| basic_sparse_set (deletion_policy pol, const allocator_type &alloc={}) | |
| Constructs an empty container with the given policy and allocator. More... | |
| basic_sparse_set (const allocator_type &alloc={}) | |
| Constructs an empty container with the given allocator. More... | |
| basic_sparse_set (basic_sparse_set &&other) | |
| Move constructor. More... | |
| virtual | ~basic_sparse_set () |
| Default destructor. | |
| basic_sparse_set & | operator= (basic_sparse_set &&other) |
| Move assignment operator. More... | |
| deletion_policy | policy () const |
| Returns the deletion policy of a sparse set. More... | |
| size_type | slot () const |
| Returns the next slot available for insertion. More... | |
| void | reserve (const size_type cap) |
| Increases the capacity of a sparse set. More... | |
| size_type | capacity () const |
| Returns the number of elements that a sparse set has currently allocated space for. More... | |
| void | shrink_to_fit () |
| Requests the removal of unused capacity. | |
| size_type | extent () const |
| Returns the extent of a sparse set. More... | |
| size_type | size () const |
| Returns the number of elements in a sparse set. More... | |
| bool | empty () const |
| Checks whether a sparse set is empty. More... | |
| pointer | data () const |
| Direct access to the internal packed array. More... | |
| iterator | begin () const |
| Returns an iterator to the beginning. More... | |
| iterator | end () const |
| Returns an iterator to the end. More... | |
| reverse_iterator | rbegin () const |
| Returns a reverse iterator to the beginning. More... | |
| reverse_iterator | rend () const |
| Returns a reverse iterator to the end. More... | |
| iterator | find (const entity_type entt) const |
| Finds an entity. More... | |
| bool | contains (const entity_type entt) const |
| Checks if a sparse set contains an entity. More... | |
| size_type | index (const entity_type entt) const |
| Returns the position of an entity in a sparse set. More... | |
| entity_type | at (const size_type pos) const |
| Returns the entity at specified location, with bounds checking. More... | |
| entity_type | operator[] (const size_type pos) const |
| Returns the entity at specified location, without bounds checking. More... | |
| size_type | emplace_back (const entity_type entt) |
| Appends an entity to a sparse set. More... | |
| size_type | emplace (const entity_type entt) |
| Assigns an entity to a sparse set. More... | |
| template<typename It > | |
| void | insert (It first, It last) |
| Assigns one or more entities to a sparse set. More... | |
| void | erase (const entity_type entt, void *ud=nullptr) |
| Erases an entity from a sparse set. More... | |
| template<typename It > | |
| void | erase (It first, It last, void *ud=nullptr) |
| Erases entities from a set. More... | |
| bool | remove (const entity_type entt, void *ud=nullptr) |
| Removes an entity from a sparse set if it exists. More... | |
| template<typename It > | |
| size_type | remove (It first, It last, void *ud=nullptr) |
| Removes entities from a sparse set if they exist. More... | |
| void | compact () |
| Removes all tombstones from the packed array of a sparse set. | |
| void | swap (const entity_type lhs, const entity_type rhs) |
| Swaps two entities in the internal packed array. More... | |
| template<typename Compare , typename Sort = std_sort, typename... Args> | |
| void | sort_n (const size_type length, Compare compare, Sort algo=Sort{}, Args &&... args) |
| Sort the first count elements according to the given comparison function. More... | |
| template<typename Compare , typename Sort = std_sort, typename... Args> | |
| void | sort (Compare compare, Sort algo=Sort{}, Args &&... args) |
| Sort all elements according to the given comparison function. More... | |
| void | respect (const basic_sparse_set &other) |
| Sort entities according to their order in another sparse set. More... | |
| void | clear (void *ud=nullptr) |
| Clears a sparse set. More... | |
Protected Member Functions | |
| virtual void | swap_at ([[maybe_unused]] const std::size_t lhs, [[maybe_unused]] const std::size_t rhs) |
| Swaps two entities in the internal packed array. More... | |
| virtual void | move_and_pop ([[maybe_unused]] const std::size_t from, [[maybe_unused]] const std::size_t to) |
| Moves an entity in the internal packed array. More... | |
| virtual void | swap_and_pop (const Entity entt, [[maybe_unused]] void *ud) |
| Attempts to erase an entity from the internal packed array. More... | |
| virtual void | in_place_pop (const Entity entt, [[maybe_unused]] void *ud) |
| Attempts to erase an entity from the internal packed array. More... | |
Basic sparse set implementation.
Sparse set or packed array or whatever is the name users give it.
Two arrays: an external one and an internal one; a sparse one and a packed one; one used for direct access through contiguous memory, the other one used to get the data through an extra level of indirection.
This is largely used by the registry to offer users the fastest access ever to the components. Views and groups in general are almost entirely designed around sparse sets.
This type of data structure is widely documented in the literature and on the web. This is nothing more than a customized implementation suitable for the purpose of the framework.
| Entity | A valid entity type (see entt_traits for more details). |
| Allocator | Type of allocator used to manage memory and elements. |
Definition at line 53 of file sparse_set.hpp.
|
inlineexplicit |
Constructs an empty container with the given policy and allocator.
| pol | Type of deletion policy. |
| alloc | Allocator to use (possibly default-constructed). |
Definition at line 295 of file sparse_set.hpp.
|
inlineexplicit |
Constructs an empty container with the given allocator.
| alloc | Allocator to use (possibly default-constructed). |
Definition at line 311 of file sparse_set.hpp.
|
inline |
Move constructor.
| other | The instance to move from. |
Definition at line 319 of file sparse_set.hpp.
|
inline |
Returns the entity at specified location, with bounds checking.
| pos | The position for which to return the entity. |
Definition at line 544 of file sparse_set.hpp.
|
inline |
Returns an iterator to the beginning.
The returned iterator points to the first entity of the internal packed array. If the sparse set is empty, the returned iterator will be equal to end().
Definition at line 456 of file sparse_set.hpp.
|
inline |
Returns the number of elements that a sparse set has currently allocated space for.
Definition at line 392 of file sparse_set.hpp.
|
inline |
Clears a sparse set.
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 843 of file sparse_set.hpp.
|
inline |
Checks if a sparse set contains an entity.
| entt | A valid entity identifier. |
Definition at line 517 of file sparse_set.hpp.
|
inline |
Direct access to the internal packed array.
Definition at line 443 of file sparse_set.hpp.
|
inline |
Assigns an entity to a sparse set.
| entt | A valid entity identifier. |
Definition at line 591 of file sparse_set.hpp.
|
inline |
Appends an entity to a sparse set.
| entt | A valid entity identifier. |
Definition at line 568 of file sparse_set.hpp.
|
inline |
Checks whether a sparse set is empty.
Definition at line 435 of file sparse_set.hpp.
|
inline |
Returns an iterator to the end.
The returned iterator points to the element following the last entity in the internal packed array. Attempting to dereference the returned iterator results in undefined behavior.
Definition at line 470 of file sparse_set.hpp.
|
inline |
Erases an entity from a sparse set.
| entt | A valid entity identifier. |
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 636 of file sparse_set.hpp.
|
inline |
Erases entities from a set.
| It | Type of input iterator. |
| first | An iterator to the first element of the range of entities. |
| last | An iterator past the last element of the range of entities. |
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 652 of file sparse_set.hpp.
|
inline |
Returns the extent of a sparse set.
The extent of a sparse set is also the size of the internal sparse array. There is no guarantee that the internal packed array has the same size. Usually the size of the internal sparse array is equal or greater than the one of the internal packed array.
Definition at line 413 of file sparse_set.hpp.
|
inline |
Finds an entity.
| entt | A valid entity identifier. |
Definition at line 508 of file sparse_set.hpp.
|
inlineprotectedvirtual |
Attempts to erase an entity from the internal packed array.
| entt | A valid entity identifier. |
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 266 of file sparse_set.hpp.
|
inline |
Returns the position of an entity in a sparse set.
| entt | A valid entity identifier. |
Definition at line 534 of file sparse_set.hpp.
|
inline |
Assigns one or more entities to a sparse set.
| It | Type of input iterator. |
| first | An iterator to the first element of the range of entities. |
| last | An iterator past the last element of the range of entities. |
Definition at line 615 of file sparse_set.hpp.
|
inlineprotectedvirtual |
Moves an entity in the internal packed array.
| from | A valid position of an entity within storage. |
| to | A valid position of an entity within storage. |
Definition at line 240 of file sparse_set.hpp.
|
inline |
Move assignment operator.
| other | The instance to move from. |
Definition at line 341 of file sparse_set.hpp.
|
inline |
Returns the entity at specified location, without bounds checking.
| pos | The position for which to return the entity. |
Definition at line 553 of file sparse_set.hpp.
|
inline |
Returns the deletion policy of a sparse set.
Definition at line 361 of file sparse_set.hpp.
|
inline |
Returns a reverse iterator to the beginning.
The returned iterator points to the first entity of the reversed internal packed array. If the sparse set is empty, the returned iterator will be equal to rend().
Definition at line 484 of file sparse_set.hpp.
|
inline |
Removes an entity from a sparse set if it exists.
| entt | A valid entity identifier. |
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 664 of file sparse_set.hpp.
|
inline |
Removes entities from a sparse set if they exist.
| It | Type of input iterator. |
| first | An iterator to the first element of the range of entities. |
| last | An iterator past the last element of the range of entities. |
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 677 of file sparse_set.hpp.
|
inline |
Returns a reverse iterator to the end.
The returned iterator points to the element following the last entity in the reversed internal packed array. Attempting to dereference the returned iterator results in undefined behavior.
Definition at line 498 of file sparse_set.hpp.
|
inline |
Increases the capacity of a sparse set.
If the new capacity is greater than the current capacity, new storage is allocated, otherwise the method does nothing.
| cap | Desired capacity. |
Definition at line 381 of file sparse_set.hpp.
|
inline |
Sort entities according to their order in another sparse set.
Entities that are part of both the sparse sets are ordered internally according to the order they have in other. All the other entities goes to the end of the list and there are no guarantees on their order.
In other terms, this function can be used to impose the same order on two sets by using one of them as a master and the other one as a slave.
Iterating the sparse set with a couple of iterators returns elements in the expected order after a call to respect. See begin and end for more details.
| other | The sparse sets that imposes the order of the entities. |
Definition at line 821 of file sparse_set.hpp.
|
inline |
Returns the number of elements in a sparse set.
The number of elements is also the size of the internal packed array. There is no guarantee that the internal sparse array has the same size. Usually the size of the internal sparse array is equal or greater than the one of the internal packed array.
Definition at line 427 of file sparse_set.hpp.
|
inline |
Returns the next slot available for insertion.
Definition at line 369 of file sparse_set.hpp.
|
inline |
Sort all elements according to the given comparison function.
| Compare | Type of comparison function object. |
| Sort | Type of sort function object. |
| Args | Types of arguments to forward to the sort function object. |
| compare | A valid comparison function object. |
| algo | A valid sort function object. |
| args | Arguments to forward to the sort function object, if any. |
Definition at line 802 of file sparse_set.hpp.
|
inline |
Sort the first count elements according to the given comparison function.
The comparison function object must return true if the first element is less than the second one, false otherwise. The signature of the comparison function should be equivalent to the following:
Moreover, the comparison function object shall induce a strict weak ordering on the values.
The sort function object must offer a member function template operator() that accepts three arguments:
| Compare | Type of comparison function object. |
| Sort | Type of sort function object. |
| Args | Types of arguments to forward to the sort function object. |
| length | Number of elements to sort. |
| compare | A valid comparison function object. |
| algo | A valid sort function object. |
| args | Arguments to forward to the sort function object, if any. |
Definition at line 767 of file sparse_set.hpp.
|
inline |
Swaps two entities in the internal packed array.
For what it's worth, this function affects both the internal sparse array and the internal packed array. Users should not care of that anyway.
| lhs | A valid entity identifier. |
| rhs | A valid entity identifier. |
Definition at line 720 of file sparse_set.hpp.
|
inlineprotectedvirtual |
Attempts to erase an entity from the internal packed array.
| entt | A valid entity identifier. |
| ud | Optional user data that are forwarded as-is to derived classes. |
Definition at line 247 of file sparse_set.hpp.
|
inlineprotectedvirtual |
Swaps two entities in the internal packed array.
| lhs | A valid position of an entity within storage. |
| rhs | A valid position of an entity within storage. |
Definition at line 233 of file sparse_set.hpp.