Merge pull request #96 from BlackMATov/dev

Dev
This commit is contained in:
2024-08-09 21:31:35 +07:00
committed by GitHub
13 changed files with 105 additions and 4 deletions

View File

@@ -2812,7 +2812,7 @@ namespace meta_hpp
struct alignas(std::max_align_t) internal_storage_t final {
// NOLINTNEXTLINE(*-avoid-c-arrays)
std::byte data[sizeof(void*) * 2];
std::byte data[sizeof(void*) * 3];
};
struct external_storage_t final {
@@ -4176,6 +4176,8 @@ namespace meta_hpp
[[nodiscard]] function_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
[[nodiscard]] std::size_t get_arity() const noexcept;
[[nodiscard]] argument get_argument(std::size_t position) const noexcept;
[[nodiscard]] const argument_list& get_arguments() const noexcept;
@@ -4225,6 +4227,8 @@ namespace meta_hpp
[[nodiscard]] member_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
template < typename Instance >
[[nodiscard]] uvalue get(Instance&& instance) const;
@@ -4275,6 +4279,8 @@ namespace meta_hpp
[[nodiscard]] method_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
[[nodiscard]] std::size_t get_arity() const noexcept;
[[nodiscard]] argument get_argument(std::size_t position) const noexcept;
[[nodiscard]] const argument_list& get_arguments() const noexcept;
@@ -4361,6 +4367,8 @@ namespace meta_hpp
[[nodiscard]] pointer_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
[[nodiscard]] uvalue get() const;
[[nodiscard]] uresult try_get() const;
@@ -4495,6 +4503,7 @@ namespace meta_hpp::detail
function_index index;
metadata_map metadata;
uvalue pointer;
invoke_impl invoke{};
invoke_error_impl invoke_error{};
argument_list arguments{};
@@ -4514,6 +4523,7 @@ namespace meta_hpp::detail
member_index index;
metadata_map metadata;
uvalue pointer;
getter_impl getter{};
setter_impl setter{};
getter_error_impl getter_error{};
@@ -4531,6 +4541,7 @@ namespace meta_hpp::detail
method_index index;
metadata_map metadata;
uvalue pointer;
invoke_impl invoke{};
invoke_error_impl invoke_error{};
argument_list arguments{};
@@ -4560,6 +4571,7 @@ namespace meta_hpp::detail
variable_index index;
metadata_map metadata;
uvalue pointer;
getter_impl getter{};
setter_impl setter{};
setter_error_impl setter_error{};
@@ -7120,6 +7132,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = function_ptr;
state.invoke = make_function_invoke<Policy>(registry, function_ptr);
state.invoke_error = make_function_invoke_error<Function>(registry);
state.arguments = make_function_arguments<Function>();
@@ -7138,6 +7152,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& function::get_pointer() const noexcept {
return state_->pointer;
}
inline std::size_t function::get_arity() const noexcept {
return state_->arguments.size();
}
@@ -7712,6 +7730,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = member_ptr;
state.getter = make_member_getter<Policy>(registry, member_ptr);
state.setter = make_member_setter(registry, member_ptr);
state.getter_error = make_member_getter_error<Member>(registry);
@@ -7731,6 +7751,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& member::get_pointer() const noexcept {
return state_->pointer;
}
template < typename Instance >
uvalue member::get(Instance&& instance) const {
using namespace detail;
@@ -8016,6 +8040,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = method_ptr;
state.invoke = make_method_invoke<Policy>(registry, method_ptr);
state.invoke_error = make_method_invoke_error<Method>(registry);
state.arguments = make_method_arguments<Method>();
@@ -8034,6 +8060,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& method::get_pointer() const noexcept {
return state_->pointer;
}
inline std::size_t method::get_arity() const noexcept {
return state_->arguments.size();
}
@@ -9358,6 +9388,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = variable_ptr;
state.getter = make_variable_getter<Policy>(registry, variable_ptr);
state.setter = make_variable_setter(registry, variable_ptr);
state.setter_error = make_variable_setter_error<Pointer>(registry);
@@ -9376,6 +9408,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& variable::get_pointer() const noexcept {
return state_->pointer;
}
inline uvalue variable::get() const {
return state_->getter();
}

View File

@@ -28,6 +28,7 @@ namespace
static int arg_unbounded_const_arr(const ivec2 vs[]) { return vs[0].x + vs[0].y + vs[1].x + vs[1].y; }
};
[[maybe_unused]]
bool operator==(const ivec2& l, const ivec2& r) noexcept {
return l.x == r.x && l.y == r.y;
}
@@ -63,6 +64,11 @@ TEST_CASE("meta/meta_states/function") {
CHECK((iadd_f < ilength2_f || ilength2_f < iadd_f));
}
SUBCASE("pointers") {
CHECK(ivec2_type.get_function("iadd").get_pointer().as<decltype(&ivec2::iadd)>() == &ivec2::iadd);
CHECK(ivec2_type.get_function("ilength2").get_pointer().as<decltype(&ivec2::ilength2)>() == &ivec2::ilength2);
}
SUBCASE("iadd") {
const meta::function func = ivec2_type.get_function("iadd");
REQUIRE(func);

View File

@@ -50,6 +50,11 @@ TEST_CASE("meta/meta_states/member") {
CHECK((int_member_m < const_int_member_m || const_int_member_m < int_member_m));
}
SUBCASE("pointers") {
CHECK(clazz_1_type.get_member("int_member").get_pointer().as<decltype(&clazz_1::int_member)>() == &clazz_1::int_member);
CHECK(clazz_1_type.get_member("const_int_member").get_pointer().as<decltype(&clazz_1::const_int_member)>() == &clazz_1::const_int_member);
}
SUBCASE("int") {
meta::member vm = clazz_1_type.get_member("int_member");
REQUIRE(vm);

View File

@@ -114,6 +114,11 @@ TEST_CASE("meta/meta_states/method") {
CHECK((non_const_method_m < non_const_method_rref_m || non_const_method_rref_m < non_const_method_m));
}
SUBCASE("pointers") {
CHECK(ct.get_method("non_const_method").get_pointer().as<decltype(&clazz::non_const_method)>() == &clazz::non_const_method);
CHECK(ct.get_method("const_method").get_pointer().as<decltype(&clazz::const_method)>() == &clazz::const_method);
}
SUBCASE("non_const_method") {
const meta::method mi = ct.get_method("non_const_method");
REQUIRE(mi);

View File

@@ -80,6 +80,11 @@ TEST_CASE("meta/meta_states/variable") {
CHECK((int_variable_v < const_int_variable_v || const_int_variable_v < int_variable_v));
}
SUBCASE("pointers") {
CHECK(clazz_1_type.get_variable("int_variable").get_pointer().as<decltype(&clazz_1::int_variable)>() == &clazz_1::int_variable);
CHECK(clazz_1_type.get_variable("const_int_variable").get_pointer().as<decltype(&clazz_1::const_int_variable)>() == &clazz_1::const_int_variable);
}
SUBCASE("int") {
meta::variable vm = clazz_1_type.get_variable("int_variable");
REQUIRE(vm);

View File

@@ -376,13 +376,13 @@ TEST_CASE("meta/meta_utilities/value") {
CHECK(ivec2::move_constructor_counter == 1);
CHECK(ivec2::copy_constructor_counter == 0);
val1.swap(val2);
val2.swap(val1);
CHECK(val1.as<ivec2>() == ivec2{1,2});
CHECK(val2.as<std::string>() == "world"s);
CHECK(ivec2::move_constructor_counter == 2);
CHECK(ivec2::copy_constructor_counter == 0);
swap(val1, val2);
swap(val2, val1);
CHECK(val1.as<std::string>() == "world"s);
CHECK(val2.as<ivec2>() == ivec2{1,2});
}

View File

@@ -165,6 +165,8 @@ namespace meta_hpp
[[nodiscard]] function_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
[[nodiscard]] std::size_t get_arity() const noexcept;
[[nodiscard]] argument get_argument(std::size_t position) const noexcept;
[[nodiscard]] const argument_list& get_arguments() const noexcept;
@@ -214,6 +216,8 @@ namespace meta_hpp
[[nodiscard]] member_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
template < typename Instance >
[[nodiscard]] uvalue get(Instance&& instance) const;
@@ -264,6 +268,8 @@ namespace meta_hpp
[[nodiscard]] method_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
[[nodiscard]] std::size_t get_arity() const noexcept;
[[nodiscard]] argument get_argument(std::size_t position) const noexcept;
[[nodiscard]] const argument_list& get_arguments() const noexcept;
@@ -350,6 +356,8 @@ namespace meta_hpp
[[nodiscard]] pointer_type get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
[[nodiscard]] const uvalue& get_pointer() const noexcept;
[[nodiscard]] uvalue get() const;
[[nodiscard]] uresult try_get() const;
@@ -484,6 +492,7 @@ namespace meta_hpp::detail
function_index index;
metadata_map metadata;
uvalue pointer;
invoke_impl invoke{};
invoke_error_impl invoke_error{};
argument_list arguments{};
@@ -503,6 +512,7 @@ namespace meta_hpp::detail
member_index index;
metadata_map metadata;
uvalue pointer;
getter_impl getter{};
setter_impl setter{};
getter_error_impl getter_error{};
@@ -520,6 +530,7 @@ namespace meta_hpp::detail
method_index index;
metadata_map metadata;
uvalue pointer;
invoke_impl invoke{};
invoke_error_impl invoke_error{};
argument_list arguments{};
@@ -549,6 +560,7 @@ namespace meta_hpp::detail
variable_index index;
metadata_map metadata;
uvalue pointer;
getter_impl getter{};
setter_impl setter{};
setter_error_impl setter_error{};

View File

@@ -127,6 +127,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = function_ptr;
state.invoke = make_function_invoke<Policy>(registry, function_ptr);
state.invoke_error = make_function_invoke_error<Function>(registry);
state.arguments = make_function_arguments<Function>();
@@ -145,6 +147,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& function::get_pointer() const noexcept {
return state_->pointer;
}
inline std::size_t function::get_arity() const noexcept {
return state_->arguments.size();
}

View File

@@ -203,6 +203,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = member_ptr;
state.getter = make_member_getter<Policy>(registry, member_ptr);
state.setter = make_member_setter(registry, member_ptr);
state.getter_error = make_member_getter_error<Member>(registry);
@@ -222,6 +224,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& member::get_pointer() const noexcept {
return state_->pointer;
}
template < typename Instance >
uvalue member::get(Instance&& instance) const {
using namespace detail;

View File

@@ -139,6 +139,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = method_ptr;
state.invoke = make_method_invoke<Policy>(registry, method_ptr);
state.invoke_error = make_method_invoke_error<Method>(registry);
state.arguments = make_method_arguments<Method>();
@@ -157,6 +159,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& method::get_pointer() const noexcept {
return state_->pointer;
}
inline std::size_t method::get_arity() const noexcept {
return state_->arguments.size();
}

View File

@@ -124,6 +124,8 @@ namespace meta_hpp::detail
std::move(metadata),
};
state.pointer = variable_ptr;
state.getter = make_variable_getter<Policy>(registry, variable_ptr);
state.setter = make_variable_setter(registry, variable_ptr);
state.setter_error = make_variable_setter_error<Pointer>(registry);
@@ -142,6 +144,10 @@ namespace meta_hpp
return state_->index.get_name();
}
inline const uvalue& variable::get_pointer() const noexcept {
return state_->pointer;
}
inline uvalue variable::get() const {
return state_->getter();
}

View File

@@ -119,7 +119,7 @@ namespace meta_hpp
struct alignas(std::max_align_t) internal_storage_t final {
// NOLINTNEXTLINE(*-avoid-c-arrays)
std::byte data[sizeof(void*) * 2];
std::byte data[sizeof(void*) * 3];
};
struct external_storage_t final {

View File

@@ -174,6 +174,8 @@ public:
function_type get_type() const noexcept;
const std::string& get_name() const noexcept;
const uvalue& get_pointer() const noexcept;
std::size_t get_arity() const noexcept;
argument get_argument(std::size_t position) const noexcept;
const argument_list& get_arguments() const noexcept;
@@ -227,6 +229,8 @@ public:
member_type get_type() const noexcept;
const std::string& get_name() const noexcept;
const uvalue& get_pointer() const noexcept;
template < typename Instance >
uvalue get(Instance&& instance) const;
@@ -281,6 +285,8 @@ public:
method_type get_type() const noexcept;
const std::string& get_name() const noexcept;
const uvalue& get_pointer() const noexcept;
std::size_t get_arity() const noexcept;
argument get_argument(std::size_t position) const noexcept;
const argument_list& get_arguments() const noexcept;
@@ -375,6 +381,8 @@ public:
pointer_type get_type() const noexcept;
const std::string& get_name() const noexcept;
const uvalue& get_pointer() const noexcept;
uvalue get() const;
uresult try_get() const;