parameter_index without name

This commit is contained in:
BlackMATov
2022-02-08 07:16:16 +07:00
parent 5a20a1c7b2
commit 9afb3920fc
4 changed files with 22 additions and 16 deletions

View File

@@ -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 {

View File

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

View File

@@ -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 {

View File

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