mirror of
https://github.com/quizhizhe/LiteLoaderBDS-1.16.40.git
synced 2025-06-01 11:43:41 +00:00
69 lines
1.3 KiB
C++
69 lines
1.3 KiB
C++
#ifndef ENTT_META_CTX_HPP
|
|
#define ENTT_META_CTX_HPP
|
|
|
|
|
|
#include "../core/attribute.h"
|
|
#include "../config/config.h"
|
|
|
|
|
|
namespace entt {
|
|
|
|
|
|
/**
|
|
* @cond TURN_OFF_DOXYGEN
|
|
* Internal details not to be documented.
|
|
*/
|
|
|
|
|
|
namespace internal {
|
|
|
|
|
|
struct meta_type_node;
|
|
|
|
|
|
struct ENTT_API meta_context {
|
|
// we could use the lines below but VS2017 returns with an ICE if combined with ENTT_API despite the code being valid C++
|
|
// inline static meta_type_node *local = nullptr;
|
|
// inline static meta_type_node **global = &local;
|
|
|
|
[[nodiscard]] static meta_type_node * & local() ENTT_NOEXCEPT {
|
|
static meta_type_node *chain = nullptr;
|
|
return chain;
|
|
}
|
|
|
|
[[nodiscard]] static meta_type_node ** & global() ENTT_NOEXCEPT {
|
|
static meta_type_node **chain = &local();
|
|
return chain;
|
|
}
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Internal details not to be documented.
|
|
* @endcond
|
|
*/
|
|
|
|
|
|
/*! @brief Opaque container for a meta context. */
|
|
struct meta_ctx {
|
|
/**
|
|
* @brief Binds the meta system to a given context.
|
|
* @param other A valid context to which to bind.
|
|
*/
|
|
static void bind(meta_ctx other) ENTT_NOEXCEPT {
|
|
internal::meta_context::global() = other.ctx;
|
|
}
|
|
|
|
private:
|
|
internal::meta_type_node **ctx{&internal::meta_context::local()};
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|