Class basic_storage< Entity, Type, std::enable_if_t< is_empty_v< Type > > >
Synopsis
#include <src/entt/entity/storage.hpp>
template<typename Entity, typename Type>
class basic_storage<Entity, Type, std::enable_if_t<is_empty_v<Type>>>: public basic_sparse_set<Entity>
Description
Basic storage implementation.
This class is a refinement of a sparse set that associates an object to an entity. The main purpose of this class is to extend sparse sets to store components in a registry. It guarantees fast access both to the elements and to the entities.
- Note
- Entities and objects have the same order. It's guaranteed both in case of raw access (either to entities or objects) and when using random or input access iterators.
- Note
- Internal data structures arrange elements to maximize performance. There are no guarantees that objects are returned in the insertion order when iterate a storage. Do not make assumption on the order in any case.
- Warning
- Empty types aren't explicitly instantiated. Therefore, many of the functions normally available for non-empty types will not be available for empty ones.
- See
- sparse_set<Entity>
- Template Parameters
Entity
- A valid entity type (see entt_traits for more details).Type
- Type of objects assigned to the entities.
Inheritance
Ancestors: basic_sparse_set
Methods
emplace | Assigns an entity to a storage and constructs its object. | |
insert | Assigns one or more entities to a storage. |
Source
Lines 491-537 in src/entt/entity/storage.hpp.
template<typename Entity, typename Type>
class basic_storage<Entity, Type, std::enable_if_t<is_empty_v<Type>>>: public basic_sparse_set<Entity> {
using underlying_type = basic_sparse_set<Entity>;
public:
/*! @brief Type of the objects associated with the entities. */
using value_type = Type;
/*! @brief Underlying entity identifier. */
using entity_type = Entity;
/*! @brief Unsigned integer type. */
using size_type = std::size_t;
/*! @brief Storage category. */
using storage_category = empty_storage_tag;
/**
* @brief Assigns an entity to a storage and constructs its object.
*
* @warning
* Attempting to use an entity that already belongs to the storage results
* in undefined behavior.
*
* @tparam Args Types of arguments to use to construct the object.
* @param entt A valid entity identifier.
* @param args Parameters to use to construct an object for the entity.
*/
template<typename... Args>
void emplace(const entity_type entt, Args &&... args) {
[[maybe_unused]] value_type instance{std::forward<Args>(args)...};
underlying_type::emplace(entt);
}
/**
* @brief Assigns one or more entities to a storage.
*
* @warning
* Attempting to assign an entity that already belongs to the storage
* results in undefined behavior.
*
* @tparam It Type of input iterator.
* @param first An iterator to the first element of the range of entities.
* @param last An iterator past the last element of the range of entities.
*/
template<typename It>
void insert(It first, It last, const value_type & = {}) {
underlying_type::insert(first, last);
}
};