mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-13 19:18:01 +07:00
try to fix msvc
This commit is contained in:
@@ -4447,42 +4447,79 @@ namespace meta_hpp::detail
|
||||
|
||||
namespace meta_hpp
|
||||
{
|
||||
struct argument_opts final {
|
||||
std::string name{};
|
||||
metadata_map metadata{};
|
||||
class argument_info final {
|
||||
public:
|
||||
argument_info() = default;
|
||||
~argument_info() = default;
|
||||
|
||||
argument_info(argument_info&& other) = default;
|
||||
argument_info& operator=(argument_info&&) = default;
|
||||
|
||||
argument_info(const argument_info&) = delete;
|
||||
argument_info& operator=(const argument_info&) = delete;
|
||||
|
||||
argument_info(std::string name)
|
||||
: name_{std::move(name)} {}
|
||||
|
||||
argument_info(std::string name, metadata_map metadata)
|
||||
: name_{std::move(name)}
|
||||
, metadata_{std::move(metadata)} {}
|
||||
|
||||
[[nodiscard]] std::string& get_name() {
|
||||
return name_;
|
||||
}
|
||||
|
||||
[[nodiscard]] const std::string& get_name() const {
|
||||
return name_;
|
||||
}
|
||||
|
||||
[[nodiscard]] metadata_map& get_metadata() {
|
||||
return metadata_;
|
||||
}
|
||||
|
||||
[[nodiscard]] const metadata_map& get_metadata() const {
|
||||
return metadata_;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string name_;
|
||||
metadata_map metadata_;
|
||||
};
|
||||
|
||||
using argument_opts_list = std::vector<argument_opts>;
|
||||
using argument_info_list = std::vector<argument_info>;
|
||||
}
|
||||
|
||||
namespace meta_hpp
|
||||
{
|
||||
struct constructor_opts final {
|
||||
argument_opts_list arguments{};
|
||||
metadata_map metadata{};
|
||||
argument_info_list arguments;
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct destructor_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct evalue_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct function_opts final {
|
||||
argument_opts_list arguments{};
|
||||
metadata_map metadata{};
|
||||
argument_info_list arguments;
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct member_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct method_opts final {
|
||||
argument_opts_list arguments{};
|
||||
metadata_map metadata{};
|
||||
argument_info_list arguments;
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct variable_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -4834,41 +4871,31 @@ namespace meta_hpp
|
||||
arguments_bind& operator=(const arguments_bind&) = delete;
|
||||
|
||||
arguments_bind& operator()(std::string name) & {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name));
|
||||
return *this;
|
||||
}
|
||||
|
||||
arguments_bind operator()(std::string name) && {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name));
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
arguments_bind& operator()(std::string name, metadata_map metadata) & {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
.metadata = std::move(metadata),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name), std::move(metadata));
|
||||
return *this;
|
||||
}
|
||||
|
||||
arguments_bind operator()(std::string name, metadata_map metadata) && {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
.metadata = std::move(metadata),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name), std::move(metadata));
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
operator argument_opts_list() && {
|
||||
operator argument_info_list() && {
|
||||
return std::move(arguments_);
|
||||
}
|
||||
|
||||
private:
|
||||
argument_opts_list arguments_;
|
||||
argument_info_list arguments_;
|
||||
};
|
||||
|
||||
inline arguments_bind arguments_() {
|
||||
@@ -5080,8 +5107,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_data().constructors, constructor{std::move(state)});
|
||||
@@ -5130,8 +5157,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_data().functions, function{std::move(state)});
|
||||
@@ -5202,8 +5229,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_data().methods, method{std::move(state)});
|
||||
@@ -5354,8 +5381,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_state().functions, function{std::move(state)});
|
||||
|
||||
@@ -158,23 +158,6 @@ TEST_CASE("meta/meta_utilities/value2/counters/small") {
|
||||
CHECK(ivec2::copy_constructor_counter == 0);
|
||||
}
|
||||
|
||||
SUBCASE("copy ctor") {
|
||||
{
|
||||
meta::uvalue v1{ivec2{1,2}};
|
||||
meta::uvalue v2{std::as_const(v1).copy()};
|
||||
|
||||
CHECK(v1.as<ivec2>().x == 1);
|
||||
CHECK(v2.as<ivec2>().y == 2);
|
||||
|
||||
CHECK(ivec2::destructor_counter == 1);
|
||||
CHECK(ivec2::move_constructor_counter == 1);
|
||||
CHECK(ivec2::copy_constructor_counter == 1);
|
||||
}
|
||||
CHECK(ivec2::destructor_counter == 3);
|
||||
CHECK(ivec2::move_constructor_counter == 1);
|
||||
CHECK(ivec2::copy_constructor_counter == 1);
|
||||
}
|
||||
|
||||
SUBCASE("swap") {
|
||||
{
|
||||
meta::uvalue v1{ivec2{1,2}};
|
||||
|
||||
@@ -476,6 +476,22 @@ TEST_CASE("meta/meta_utilities/value") {
|
||||
}
|
||||
}
|
||||
|
||||
SUBCASE("copy") {
|
||||
{
|
||||
const meta::uvalue u{42};
|
||||
CHECK(u.has_copy_op());
|
||||
|
||||
const meta::uvalue v{u.copy()};
|
||||
CHECK(v.get_type() == meta::resolve_type<int>());
|
||||
CHECK(v.as<int>() == 42);
|
||||
}
|
||||
{
|
||||
const meta::uvalue u{std::unique_ptr<int>{}};
|
||||
CHECK_FALSE(u.has_copy_op());
|
||||
CHECK_FALSE(u.copy());
|
||||
}
|
||||
}
|
||||
|
||||
SUBCASE("unmap") {
|
||||
{
|
||||
const meta::uvalue u{42};
|
||||
|
||||
@@ -40,42 +40,79 @@ namespace meta_hpp::detail
|
||||
|
||||
namespace meta_hpp
|
||||
{
|
||||
struct argument_opts final {
|
||||
std::string name{};
|
||||
metadata_map metadata{};
|
||||
class argument_info final {
|
||||
public:
|
||||
argument_info() = default;
|
||||
~argument_info() = default;
|
||||
|
||||
argument_info(argument_info&& other) = default;
|
||||
argument_info& operator=(argument_info&&) = default;
|
||||
|
||||
argument_info(const argument_info&) = delete;
|
||||
argument_info& operator=(const argument_info&) = delete;
|
||||
|
||||
argument_info(std::string name)
|
||||
: name_{std::move(name)} {}
|
||||
|
||||
argument_info(std::string name, metadata_map metadata)
|
||||
: name_{std::move(name)}
|
||||
, metadata_{std::move(metadata)} {}
|
||||
|
||||
[[nodiscard]] std::string& get_name() {
|
||||
return name_;
|
||||
}
|
||||
|
||||
[[nodiscard]] const std::string& get_name() const {
|
||||
return name_;
|
||||
}
|
||||
|
||||
[[nodiscard]] metadata_map& get_metadata() {
|
||||
return metadata_;
|
||||
}
|
||||
|
||||
[[nodiscard]] const metadata_map& get_metadata() const {
|
||||
return metadata_;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string name_;
|
||||
metadata_map metadata_;
|
||||
};
|
||||
|
||||
using argument_opts_list = std::vector<argument_opts>;
|
||||
using argument_info_list = std::vector<argument_info>;
|
||||
}
|
||||
|
||||
namespace meta_hpp
|
||||
{
|
||||
struct constructor_opts final {
|
||||
argument_opts_list arguments{};
|
||||
metadata_map metadata{};
|
||||
argument_info_list arguments;
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct destructor_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct evalue_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct function_opts final {
|
||||
argument_opts_list arguments{};
|
||||
metadata_map metadata{};
|
||||
argument_info_list arguments;
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct member_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct method_opts final {
|
||||
argument_opts_list arguments{};
|
||||
metadata_map metadata{};
|
||||
argument_info_list arguments;
|
||||
metadata_map metadata;
|
||||
};
|
||||
|
||||
struct variable_opts final {
|
||||
metadata_map metadata{};
|
||||
metadata_map metadata;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -427,41 +464,31 @@ namespace meta_hpp
|
||||
arguments_bind& operator=(const arguments_bind&) = delete;
|
||||
|
||||
arguments_bind& operator()(std::string name) & {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name));
|
||||
return *this;
|
||||
}
|
||||
|
||||
arguments_bind operator()(std::string name) && {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name));
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
arguments_bind& operator()(std::string name, metadata_map metadata) & {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
.metadata = std::move(metadata),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name), std::move(metadata));
|
||||
return *this;
|
||||
}
|
||||
|
||||
arguments_bind operator()(std::string name, metadata_map metadata) && {
|
||||
arguments_.push_back(argument_opts{
|
||||
.name = std::move(name),
|
||||
.metadata = std::move(metadata),
|
||||
});
|
||||
arguments_.emplace_back(std::move(name), std::move(metadata));
|
||||
return std::move(*this);
|
||||
}
|
||||
|
||||
operator argument_opts_list() && {
|
||||
operator argument_info_list() && {
|
||||
return std::move(arguments_);
|
||||
}
|
||||
|
||||
private:
|
||||
argument_opts_list arguments_;
|
||||
argument_info_list arguments_;
|
||||
};
|
||||
|
||||
inline arguments_bind arguments_() {
|
||||
|
||||
@@ -171,8 +171,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_data().constructors, constructor{std::move(state)});
|
||||
@@ -221,8 +221,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_data().functions, function{std::move(state)});
|
||||
@@ -293,8 +293,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_data().methods, method{std::move(state)});
|
||||
|
||||
@@ -35,8 +35,8 @@ namespace meta_hpp
|
||||
|
||||
for ( std::size_t i{}, e{std::min(opts.arguments.size(), state->arguments.size())}; i < e; ++i ) {
|
||||
argument& arg = state->arguments[i];
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].name);
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].metadata);
|
||||
detail::state_access(arg)->name = std::move(opts.arguments[i].get_name());
|
||||
detail::state_access(arg)->metadata = std::move(opts.arguments[i].get_metadata());
|
||||
}
|
||||
|
||||
detail::insert_or_assign(get_state().functions, function{std::move(state)});
|
||||
|
||||
Reference in New Issue
Block a user