mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-15 03:45:30 +07:00
get_as<T> for variable and member
This commit is contained in:
@@ -80,8 +80,8 @@ TEST_CASE("meta/meta_examples/scopes/local") {
|
||||
const meta::variable unit3_variable = math_scope.get_variable("unit3");
|
||||
|
||||
// checks and uses found variables with functions
|
||||
CHECK(unit2_variable.get().get_as<ivec2>() == ivec2{1,1});
|
||||
CHECK(unit3_variable.get().get_as<ivec3>() == ivec3{1,1,1});
|
||||
CHECK(unit2_variable.get_as<ivec2>() == ivec2{1,1});
|
||||
CHECK(unit3_variable.get_as<ivec3>() == ivec3{1,1,1});
|
||||
CHECK(dot2_function(unit2_variable.get(), unit2_variable.get()).get_as<int>() == 2);
|
||||
CHECK(dot3_function(unit3_variable.get(), unit3_variable.get()).get_as<int>() == 3);
|
||||
}
|
||||
|
||||
@@ -44,6 +44,6 @@ TEST_CASE("meta/meta_examples/variable/usage") {
|
||||
// prints all variables in the scope
|
||||
std::cout << "* " << constants_scope.get_name() << std::endl;
|
||||
for ( auto&& [index, variable] : constants_scope.get_variables() ) {
|
||||
std::cout << " - " << index.get_name() << ":" << variable.get().get_as<double>() << std::endl;
|
||||
std::cout << " - " << index.get_name() << ":" << variable.get_as<double>() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2668,6 +2668,9 @@ namespace meta_hpp
|
||||
template < typename Instance >
|
||||
[[nodiscard]] uvalue get(Instance&& instance) const;
|
||||
|
||||
template < typename T, typename Instance >
|
||||
[[nodiscard]] T get_as(Instance&& instance) const;
|
||||
|
||||
template < typename Instance, typename Value >
|
||||
void set(Instance&& instance, Value&& value) const;
|
||||
|
||||
@@ -2777,6 +2780,9 @@ namespace meta_hpp
|
||||
|
||||
[[nodiscard]] uvalue get() const;
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] T get_as() const;
|
||||
|
||||
template < typename Value >
|
||||
void set(Value&& value) const;
|
||||
|
||||
@@ -6411,6 +6417,11 @@ namespace meta_hpp
|
||||
return state_->getter(vinst);
|
||||
}
|
||||
|
||||
template < typename T, typename Instance >
|
||||
T member::get_as(Instance&& instance) const {
|
||||
return get(std::forward<Instance>(instance)).template get_as<T>();
|
||||
}
|
||||
|
||||
template < typename Instance, typename Value >
|
||||
void member::set(Instance&& instance, Value&& value) const {
|
||||
using namespace detail;
|
||||
@@ -6899,6 +6910,11 @@ namespace meta_hpp
|
||||
return state_->getter();
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
T variable::get_as() const {
|
||||
return get().get_as<T>();
|
||||
}
|
||||
|
||||
template < typename Value >
|
||||
void variable::set(Value&& value) const {
|
||||
using namespace detail;
|
||||
|
||||
@@ -86,6 +86,13 @@ TEST_CASE("meta/meta_states/member") {
|
||||
CHECK(vm.get(std::move(v)).get_as<int>() == 1);
|
||||
CHECK(vm.get(std::move(std::as_const(v))).get_as<int>() == 1);
|
||||
|
||||
CHECK(vm.get_as<int>(v) == 1);
|
||||
CHECK(vm.get_as<int>(&v) == 1);
|
||||
CHECK(vm.get_as<int>(std::as_const(v)) == 1);
|
||||
CHECK(vm.get_as<int>(&std::as_const(v)) == 1);
|
||||
CHECK(vm.get_as<int>(std::move(v)) == 1);
|
||||
CHECK(vm.get_as<int>(std::move(std::as_const(v))) == 1);
|
||||
|
||||
CHECK(vm(v).get_as<int>() == 1);
|
||||
CHECK(vm(&v).get_as<int>() == 1);
|
||||
CHECK(vm(std::as_const(v)).get_as<int>() == 1);
|
||||
@@ -279,13 +286,13 @@ TEST_CASE("meta/meta_states/member") {
|
||||
{
|
||||
clazz_1 v;
|
||||
CHECK(vm.get(v).get_type() == meta::resolve_type<std::unique_ptr<int>*>());
|
||||
CHECK(vm.get(v).get_as<std::unique_ptr<int>*>() == std::addressof(v.unique_int_member));
|
||||
CHECK(vm.get_as<std::unique_ptr<int>*>(v) == std::addressof(v.unique_int_member));
|
||||
}
|
||||
|
||||
{
|
||||
const clazz_1 v;
|
||||
CHECK(vm.get(v).get_type() == meta::resolve_type<const std::unique_ptr<int>*>());
|
||||
CHECK(vm.get(v).get_as<const std::unique_ptr<int>*>() == std::addressof(v.unique_int_member));
|
||||
CHECK(vm.get_as<const std::unique_ptr<int>*>(v) == std::addressof(v.unique_int_member));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -300,14 +307,14 @@ TEST_CASE("meta/meta_states/member") {
|
||||
clazz_1 v;
|
||||
using ref_t = std::reference_wrapper<std::unique_ptr<int>>;
|
||||
CHECK(vm.get(v).get_type() == meta::resolve_type<ref_t>());
|
||||
CHECK(vm.get(v).get_as<ref_t>().get() == v.unique_int_member);
|
||||
CHECK(vm.get_as<ref_t>(v).get() == v.unique_int_member);
|
||||
}
|
||||
|
||||
{
|
||||
const clazz_1 v;
|
||||
using ref_t = std::reference_wrapper<const std::unique_ptr<int>>;
|
||||
CHECK(vm.get(v).get_type() == meta::resolve_type<ref_t>());
|
||||
CHECK(vm.get(v).get_as<ref_t>().get() == v.unique_int_member);
|
||||
CHECK(vm.get_as<ref_t>(v).get() == v.unique_int_member);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK(vm.get_type() == meta::resolve_type(&clazz_1::int_variable));
|
||||
CHECK(vm.get_name() == "int_variable");
|
||||
|
||||
CHECK(vm.get().get_as<int>() == 1);
|
||||
CHECK(vm.get_as<int>() == 1);
|
||||
CHECK(vm().get_as<int>() == 1);
|
||||
|
||||
CHECK(vm.is_settable_with<int>());
|
||||
@@ -84,7 +84,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK_FALSE(vm.is_settable_with<const float&>());
|
||||
CHECK_FALSE(vm.is_settable_with(1.0));
|
||||
|
||||
vm.set(10); CHECK(vm.get().get_as<int>() == 10);
|
||||
vm.set(10); CHECK(vm.get_as<int>() == 10);
|
||||
vm(11); CHECK(vm().get_as<int>() == 11);
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK(vm.get_type() == meta::resolve_type(&clazz_1::const_int_variable));
|
||||
CHECK(vm.get_name() == "const_int_variable");
|
||||
|
||||
CHECK(vm.get().get_as<int>() == 2);
|
||||
CHECK(vm.get_as<int>() == 2);
|
||||
CHECK(vm().get_as<int>() == 2);
|
||||
|
||||
CHECK_FALSE(vm.is_settable_with<int>());
|
||||
@@ -108,7 +108,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK_FALSE(vm.is_settable_with<const float&>());
|
||||
CHECK_FALSE(vm.is_settable_with(1.0));
|
||||
|
||||
CHECK_THROWS(vm.set(10)); CHECK(vm.get().get_as<int>() == 2);
|
||||
CHECK_THROWS(vm.set(10)); CHECK(vm.get_as<int>() == 2);
|
||||
CHECK_THROWS(vm(10)); CHECK(vm().get_as<int>() == 2);
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK(vm.get_type() == meta::resolve_type(&clazz_1::ref_int_variable));
|
||||
CHECK(vm.get_name() == "ref_int_variable");
|
||||
|
||||
CHECK(vm.get().get_as<int>() == 11);
|
||||
CHECK(vm.get_as<int>() == 11);
|
||||
CHECK(vm().get_as<int>() == 11);
|
||||
|
||||
CHECK(vm.is_settable_with<int>());
|
||||
@@ -132,7 +132,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK_FALSE(vm.is_settable_with<const float&>());
|
||||
CHECK_FALSE(vm.is_settable_with(1.0));
|
||||
|
||||
vm.set(20); CHECK(vm.get().get_as<int>() == 20);
|
||||
vm.set(20); CHECK(vm.get_as<int>() == 20);
|
||||
vm(21); CHECK(vm().get_as<int>() == 21);
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK(vm.get_type() == meta::resolve_type(&clazz_1::const_ref_int_variable));
|
||||
CHECK(vm.get_name() == "const_ref_int_variable");
|
||||
|
||||
CHECK(vm.get().get_as<int>() == 2);
|
||||
CHECK(vm.get_as<int>() == 2);
|
||||
CHECK(vm().get_as<int>() == 2);
|
||||
|
||||
CHECK_FALSE(vm.is_settable_with<int>());
|
||||
@@ -156,7 +156,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
CHECK_FALSE(vm.is_settable_with<const float&>());
|
||||
CHECK_FALSE(vm.is_settable_with(1.0));
|
||||
|
||||
CHECK_THROWS(vm.set(10)); CHECK(vm.get().get_as<int>() == 2);
|
||||
CHECK_THROWS(vm.set(10)); CHECK(vm.get_as<int>() == 2);
|
||||
CHECK_THROWS(vm(11)); CHECK(vm().get_as<int>() == 2);
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
REQUIRE(vm);
|
||||
|
||||
CHECK(vm.get().get_type() == meta::resolve_type<std::unique_ptr<int>*>());
|
||||
CHECK(vm.get().get_as<std::unique_ptr<int>*>() == std::addressof(clazz_1::unique_int_variable));
|
||||
CHECK(vm.get_as<std::unique_ptr<int>*>() == std::addressof(clazz_1::unique_int_variable));
|
||||
|
||||
{
|
||||
auto nv = std::make_unique<int>(11);
|
||||
@@ -186,7 +186,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
|
||||
using ref_t = std::reference_wrapper<std::unique_ptr<int>>;
|
||||
CHECK(vm.get().get_type() == meta::resolve_type<ref_t>());
|
||||
CHECK(vm.get().get_as<ref_t>().get() == clazz_1::unique_int_variable);
|
||||
CHECK(vm.get_as<ref_t>().get() == clazz_1::unique_int_variable);
|
||||
|
||||
{
|
||||
auto nv = std::make_unique<int>(13);
|
||||
@@ -206,7 +206,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
REQUIRE(vm);
|
||||
|
||||
CHECK(vm.get().get_type() == meta::resolve_type<const std::unique_ptr<int>*>());
|
||||
CHECK(vm.get().get_as<const std::unique_ptr<int>*>() == std::addressof(clazz_1::const_unique_int_variable));
|
||||
CHECK(vm.get_as<const std::unique_ptr<int>*>() == std::addressof(clazz_1::const_unique_int_variable));
|
||||
|
||||
{
|
||||
auto nv = std::make_unique<int>(11);
|
||||
@@ -222,7 +222,7 @@ TEST_CASE("meta/meta_states/variable") {
|
||||
|
||||
using ref_t = std::reference_wrapper<const std::unique_ptr<int>>;
|
||||
CHECK(vm.get().get_type() == meta::resolve_type<ref_t>());
|
||||
CHECK(vm.get().get_as<ref_t>().get() == clazz_1::const_unique_int_variable);
|
||||
CHECK(vm.get_as<ref_t>().get() == clazz_1::const_unique_int_variable);
|
||||
|
||||
{
|
||||
auto nv = std::make_unique<int>(12);
|
||||
|
||||
@@ -254,6 +254,9 @@ namespace meta_hpp
|
||||
template < typename Instance >
|
||||
[[nodiscard]] uvalue get(Instance&& instance) const;
|
||||
|
||||
template < typename T, typename Instance >
|
||||
[[nodiscard]] T get_as(Instance&& instance) const;
|
||||
|
||||
template < typename Instance, typename Value >
|
||||
void set(Instance&& instance, Value&& value) const;
|
||||
|
||||
@@ -363,6 +366,9 @@ namespace meta_hpp
|
||||
|
||||
[[nodiscard]] uvalue get() const;
|
||||
|
||||
template < typename T >
|
||||
[[nodiscard]] T get_as() const;
|
||||
|
||||
template < typename Value >
|
||||
void set(Value&& value) const;
|
||||
|
||||
|
||||
@@ -200,6 +200,11 @@ namespace meta_hpp
|
||||
return state_->getter(vinst);
|
||||
}
|
||||
|
||||
template < typename T, typename Instance >
|
||||
T member::get_as(Instance&& instance) const {
|
||||
return get(std::forward<Instance>(instance)).template get_as<T>();
|
||||
}
|
||||
|
||||
template < typename Instance, typename Value >
|
||||
void member::set(Instance&& instance, Value&& value) const {
|
||||
using namespace detail;
|
||||
|
||||
@@ -145,6 +145,11 @@ namespace meta_hpp
|
||||
return state_->getter();
|
||||
}
|
||||
|
||||
template < typename T >
|
||||
T variable::get_as() const {
|
||||
return get().get_as<T>();
|
||||
}
|
||||
|
||||
template < typename Value >
|
||||
void variable::set(Value&& value) const {
|
||||
using namespace detail;
|
||||
|
||||
Reference in New Issue
Block a user