meta: prepare meta_data rework

This commit is contained in:
Michele Caini
2024-08-26 14:54:09 +02:00
parent becfd01fd4
commit 0cf60202ff
2 changed files with 10 additions and 9 deletions

View File

@@ -73,11 +73,11 @@ protected:
meta_context::from(*ctx).value[parent].dtor = node;
}
void data(const id_type id, meta_data_node node) {
reset_bucket(id);
void data(meta_data_node node) {
reset_bucket(node.id);
if(auto it = details->data.find(id); it == details->data.end()) {
details->data.insert_or_assign(id, std::move(node));
if(auto it = details->data.find(node.id); it == details->data.end()) {
details->data.insert_or_assign(node.id, std::move(node));
} else if(it->second.set != node.set || it->second.get != node.get) {
it->second = std::move(node);
}
@@ -176,8 +176,8 @@ class meta_factory: private internal::basic_meta_factory {
static_assert(Policy::template value<data_type>, "Invalid return type for the given policy");
base_type::data(
id,
internal::meta_data_node{
id,
/* this is never static */
(std::is_member_object_pointer_v<decltype(value_list_element_v<Index, Setter>)> && ... && std::is_const_v<std::remove_reference_t<data_type>>) ? internal::meta_traits::is_const : internal::meta_traits::is_none,
Setter::size,
@@ -351,8 +351,8 @@ public:
static_assert(Policy::template value<data_type>, "Invalid return type for the given policy");
base_type::data(
id,
internal::meta_data_node{
id,
/* this is never static */
std::is_const_v<std::remove_reference_t<data_type>> ? internal::meta_traits::is_const : internal::meta_traits::is_none,
1u,
@@ -370,8 +370,8 @@ public:
}
base_type::data(
id,
internal::meta_data_node{
id,
((std::is_same_v<Type, std::remove_cv_t<std::remove_reference_t<data_type>>> || std::is_const_v<std::remove_reference_t<data_type>>) ? internal::meta_traits::is_const : internal::meta_traits::is_none) | internal::meta_traits::is_static,
1u,
&internal::resolve<std::remove_cv_t<std::remove_reference_t<data_type>>>,
@@ -410,8 +410,8 @@ public:
if constexpr(std::is_same_v<decltype(Setter), std::nullptr_t>) {
base_type::data(
id,
internal::meta_data_node{
id,
/* this is never static */
internal::meta_traits::is_const,
0u,
@@ -423,8 +423,8 @@ public:
using args_type = typename meta_function_helper_t<Type, decltype(Setter)>::args_type;
base_type::data(
id,
internal::meta_data_node{
id,
/* this is never static nor const */
internal::meta_traits::is_none,
1u,

View File

@@ -96,6 +96,7 @@ struct meta_dtor_node {
struct meta_data_node {
using size_type = std::size_t;
id_type id{};
meta_traits traits{meta_traits::is_none};
size_type arity{0u};
meta_type_node (*type)(const meta_context &) noexcept {};