parameter state

This commit is contained in:
BlackMATov
2022-02-08 01:38:49 +07:00
parent 9a7808939b
commit a30d8075e8
5 changed files with 75 additions and 0 deletions

View File

@@ -31,6 +31,7 @@
#include "meta_states/function.hpp" #include "meta_states/function.hpp"
#include "meta_states/member.hpp" #include "meta_states/member.hpp"
#include "meta_states/method.hpp" #include "meta_states/method.hpp"
#include "meta_states/parameter.hpp"
#include "meta_states/scope.hpp" #include "meta_states/scope.hpp"
#include "meta_states/variable.hpp" #include "meta_states/variable.hpp"

View File

@@ -109,6 +109,7 @@ namespace meta_hpp
class function; class function;
class member; class member;
class method; class method;
class parameter;
class scope; class scope;
class variable; class variable;
@@ -120,6 +121,7 @@ namespace meta_hpp
struct function_state; struct function_state;
struct member_state; struct member_state;
struct method_state; struct method_state;
struct parameter_state;
struct scope_state; struct scope_state;
struct variable_state; struct variable_state;
@@ -129,6 +131,7 @@ namespace meta_hpp
using function_state_ptr = std::shared_ptr<function_state>; using function_state_ptr = std::shared_ptr<function_state>;
using member_state_ptr = std::shared_ptr<member_state>; using member_state_ptr = std::shared_ptr<member_state>;
using method_state_ptr = std::shared_ptr<method_state>; using method_state_ptr = std::shared_ptr<method_state>;
using parameter_state_ptr = std::shared_ptr<parameter_state>;
using scope_state_ptr = std::shared_ptr<scope_state>; using scope_state_ptr = std::shared_ptr<scope_state>;
using variable_state_ptr = std::shared_ptr<variable_state>; using variable_state_ptr = std::shared_ptr<variable_state>;
} }

View File

@@ -18,6 +18,7 @@ namespace meta_hpp::detail
std::is_same_v<T, function> || std::is_same_v<T, function> ||
std::is_same_v<T, member> || std::is_same_v<T, member> ||
std::is_same_v<T, method> || std::is_same_v<T, method> ||
std::is_same_v<T, parameter> ||
std::is_same_v<T, scope> || std::is_same_v<T, scope> ||
std::is_same_v<T, variable>; std::is_same_v<T, variable>;

View File

@@ -267,6 +267,22 @@ namespace meta_hpp
friend auto detail::state_access<method>(const method&); friend auto detail::state_access<method>(const method&);
}; };
class parameter final {
public:
explicit parameter() = default;
explicit parameter(detail::parameter_state_ptr state);
[[nodiscard]] bool is_valid() const noexcept;
[[nodiscard]] explicit operator bool() const noexcept;
[[nodiscard]] const parameter_index& get_index() const noexcept;
[[nodiscard]] const any_type& get_type() const noexcept;
[[nodiscard]] const std::string& get_name() const noexcept;
private:
detail::parameter_state_ptr state_;
friend auto detail::state_access<parameter>(const parameter&);
};
class scope final { class scope final {
public: public:
explicit scope() = default; explicit scope() = default;
@@ -440,6 +456,13 @@ namespace meta_hpp::detail
[[nodiscard]] static method_state_ptr make(std::string name, Method method); [[nodiscard]] static method_state_ptr make(std::string name, Method method);
}; };
struct parameter_state final {
parameter_index index;
template < typename Parameter >
[[nodiscard]] static parameter_state_ptr make(std::string name);
};
struct scope_state final { struct scope_state final {
scope_index index; scope_index index;

View File

@@ -0,0 +1,47 @@
/*******************************************************************************
* This file is part of the "https://github.com/blackmatov/meta.hpp"
* For conditions of distribution and use, see copyright notice in LICENSE.md
* Copyright (C) 2021, by Matvey Cherevko (blackmatov@gmail.com)
******************************************************************************/
#pragma once
#include "../meta_base.hpp"
#include "../meta_states.hpp"
namespace meta_hpp::detail
{
template < typename Parameter >
inline parameter_state_ptr parameter_state::make(std::string name) {
return std::make_shared<parameter_state>(parameter_state{
.index{parameter_index::make<Parameter>(std::move(name))},
});
}
}
namespace meta_hpp
{
inline parameter::parameter(detail::parameter_state_ptr state)
: state_{std::move(state)} {}
inline bool parameter::is_valid() const noexcept {
return !!state_;
}
inline parameter::operator bool() const noexcept {
return is_valid();
}
inline const parameter_index& parameter::get_index() const noexcept {
return state_->index;
}
inline const any_type& parameter::get_type() const noexcept {
return state_->index.get_type();
}
inline const std::string& parameter::get_name() const noexcept {
return state_->index.get_name();
}
}