#ifndef ENTT_CORE_FAMILY_HPP
|
|
#define ENTT_CORE_FAMILY_HPP
|
|
|
|
#include "../config/config.h"
|
|
#include "fwd.hpp"
|
|
|
|
namespace entt {
|
|
|
|
/**
|
|
* @brief Dynamic identifier generator.
|
|
*
|
|
* Utility class template that can be used to assign unique identifiers to types
|
|
* at runtime. Use different specializations to create separate sets of
|
|
* identifiers.
|
|
*/
|
|
template<typename...>
|
|
class family {
|
|
inline static ENTT_MAYBE_ATOMIC(id_type) identifier{};
|
|
|
|
public:
|
|
/*! @brief Unsigned integer type. */
|
|
using family_type = id_type;
|
|
|
|
/*! @brief Statically generated unique identifier for the given type. */
|
|
template<typename... Type>
|
|
// at the time I'm writing, clang crashes during compilation if auto is used instead of family_type
|
|
inline static const family_type type = identifier++;
|
|
};
|
|
|
|
} // namespace entt
|
|
|
|
#endif
|