mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-13 03:08:49 +07:00
raw pointer getter for function/member/method/variable
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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{};
|
||||
|
||||
@@ -127,6 +127,7 @@ 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 +146,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();
|
||||
}
|
||||
|
||||
@@ -203,6 +203,7 @@ 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 +223,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;
|
||||
|
||||
@@ -139,6 +139,7 @@ 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 +158,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();
|
||||
}
|
||||
|
||||
@@ -124,6 +124,7 @@ 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 +143,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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user