mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-15 03:45:30 +07:00
parameter_index without name
This commit is contained in:
@@ -119,18 +119,18 @@ namespace meta_hpp
|
|||||||
public:
|
public:
|
||||||
parameter_index() = delete;
|
parameter_index() = delete;
|
||||||
[[nodiscard]] const any_type& get_type() const noexcept;
|
[[nodiscard]] const any_type& get_type() const noexcept;
|
||||||
[[nodiscard]] const std::string& get_name() const noexcept;
|
[[nodiscard]] std::size_t get_position() const noexcept;
|
||||||
private:
|
private:
|
||||||
friend detail::parameter_state;
|
friend detail::parameter_state;
|
||||||
template < typename Parameter >
|
template < typename Parameter >
|
||||||
[[nodiscard]] static parameter_index make(std::string name);
|
[[nodiscard]] static parameter_index make(std::size_t position);
|
||||||
private:
|
private:
|
||||||
explicit parameter_index(any_type type, std::string name);
|
explicit parameter_index(any_type type, std::size_t position);
|
||||||
friend bool operator<(const parameter_index& l, const parameter_index& r) noexcept;
|
friend bool operator<(const parameter_index& l, const parameter_index& r) noexcept;
|
||||||
friend bool operator==(const parameter_index& l, const parameter_index& r) noexcept;
|
friend bool operator==(const parameter_index& l, const parameter_index& r) noexcept;
|
||||||
private:
|
private:
|
||||||
any_type type_;
|
any_type type_;
|
||||||
std::string name_;
|
std::size_t position_{};
|
||||||
};
|
};
|
||||||
|
|
||||||
class scope_index final {
|
class scope_index final {
|
||||||
|
|||||||
@@ -14,28 +14,28 @@
|
|||||||
|
|
||||||
namespace meta_hpp
|
namespace meta_hpp
|
||||||
{
|
{
|
||||||
inline parameter_index::parameter_index(any_type type, std::string name)
|
inline parameter_index::parameter_index(any_type type, std::size_t position)
|
||||||
: type_{std::move(type)}
|
: type_{std::move(type)}
|
||||||
, name_{std::move(name)} {}
|
, position_{position} {}
|
||||||
|
|
||||||
template < typename Parameter >
|
template < typename Parameter >
|
||||||
inline parameter_index parameter_index::make(std::string name) {
|
inline parameter_index parameter_index::make(std::size_t position) {
|
||||||
return parameter_index{detail::resolve_type<Parameter>(), std::move(name)};
|
return parameter_index{detail::resolve_type<Parameter>(), position};
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const any_type& parameter_index::get_type() const noexcept {
|
inline const any_type& parameter_index::get_type() const noexcept {
|
||||||
return type_;
|
return type_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const std::string& parameter_index::get_name() const noexcept {
|
inline std::size_t parameter_index::get_position() const noexcept {
|
||||||
return name_;
|
return position_;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator<(const parameter_index& l, const parameter_index& r) noexcept {
|
inline bool operator<(const parameter_index& l, const parameter_index& r) noexcept {
|
||||||
return l.type_ < r.type_ || (l.type_ == r.type_ && std::less<>{}(l.name_, r.name_));
|
return l.type_ < r.type_ || (l.type_ == r.type_ && l.position_ < r.position_);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator==(const parameter_index& l, const parameter_index& r) noexcept {
|
inline bool operator==(const parameter_index& l, const parameter_index& r) noexcept {
|
||||||
return l.type_ == r.type_ && std::equal_to<>{}(l.name_, r.name_);
|
return l.type_ == r.type_ && l.position_ == r.position_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -461,8 +461,10 @@ namespace meta_hpp::detail
|
|||||||
struct parameter_state final {
|
struct parameter_state final {
|
||||||
parameter_index index;
|
parameter_index index;
|
||||||
|
|
||||||
|
std::string name{};
|
||||||
|
|
||||||
template < typename Parameter >
|
template < typename Parameter >
|
||||||
[[nodiscard]] static parameter_state_ptr make(std::string name);
|
[[nodiscard]] static parameter_state_ptr make(std::size_t position);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct scope_state final {
|
struct scope_state final {
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
namespace meta_hpp::detail
|
namespace meta_hpp::detail
|
||||||
{
|
{
|
||||||
template < typename Parameter >
|
template < typename Parameter >
|
||||||
inline parameter_state_ptr parameter_state::make(std::string name) {
|
inline parameter_state_ptr parameter_state::make(std::size_t position) {
|
||||||
return std::make_shared<parameter_state>(parameter_state{
|
return std::make_shared<parameter_state>(parameter_state{
|
||||||
.index{parameter_index::make<Parameter>(std::move(name))},
|
.index{parameter_index::make<Parameter>(position)},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,11 @@ namespace meta_hpp
|
|||||||
return state_->index.get_type();
|
return state_->index.get_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline std::size_t parameter::get_position() const noexcept {
|
||||||
|
return state_->index.get_position();
|
||||||
|
}
|
||||||
|
|
||||||
inline const std::string& parameter::get_name() const noexcept {
|
inline const std::string& parameter::get_name() const noexcept {
|
||||||
return state_->index.get_name();
|
return state_->name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user