Compare commits

...

6 Commits

Author SHA1 Message Date
7fd6ba7412 Merge pull request #97 from BlackMATov/dev
Dev
2024-08-10 01:16:23 +07:00
BlackMATov
0b1dac5246 revert get_pointer functionality from method/member/variable/function 2024-08-10 00:58:22 +07:00
794395ba9b Merge pull request #96 from BlackMATov/dev
Dev
2024-08-09 21:31:35 +07:00
BlackMATov
71e0ea73bb update single-header version 2024-08-09 21:08:41 +07:00
BlackMATov
4ddaf7970f raw pointer getter for function/member/method/variable 2024-08-09 21:02:04 +07:00
BlackMATov
ead26278fa increase uvalue internal sbo buffer to 3 pointers 2024-08-09 07:38:03 +07:00
10 changed files with 37 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 {
@@ -4495,6 +4495,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 +4515,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 +4533,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 +4563,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 +7124,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>();
@@ -7712,6 +7718,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);
@@ -8016,6 +8024,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>();
@@ -9358,6 +9368,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);

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;
}

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

@@ -484,6 +484,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 +504,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 +522,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 +552,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>();

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);

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>();

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);

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;