refactor: simplify internally-used function

This commit is contained in:
ToruNiina
2020-02-19 15:46:25 +09:00
parent 189b910384
commit 82fec38e37

View File

@@ -20,11 +20,24 @@ namespace detail
{ {
// to show error messages. not recommended for users. // to show error messages. not recommended for users.
template<typename C, template<typename ...> class T, template<typename ...> class A> template<typename Value>
region_base const& get_region(const basic_value<C, T, A>&); inline region_base const& get_region(const Value& v)
template<typename Region, {
typename C, template<typename ...> class T, template<typename ...> class A> return *(v.region_info_);
void change_region(basic_value<C, T, A>&, Region&&); }
template<typename Value, typename Region>
void change_region(Value& v, Region&& reg)
{
using region_type = typename std::remove_reference<
typename std::remove_cv<Region>::type
>::type;
std::shared_ptr<region_base> new_reg =
std::make_shared<region_type>(std::forward<region_type>(reg));
v.region_info_ = new_reg;
return;
}
template<value_t Expected, template<value_t Expected,
typename C, template<typename ...> class T, template<typename ...> class A> typename C, template<typename ...> class T, template<typename ...> class A>
@@ -1724,13 +1737,11 @@ class basic_value
} }
// for error messages // for error messages
template<typename C, template<typename Value>
template<typename ...> class T, template<typename ...> class A> friend region_base const& detail::get_region(const Value& v);
friend region_base const& detail::get_region(const basic_value<C, T, A>&);
template<typename Region, typename C, template<typename Value, typename Region>
template<typename ...> class T, template<typename ...> class A> friend void detail::change_region(Value& v, Region&& reg);
friend void detail::change_region(basic_value<C, T, A>&, Region&&);
private: private:
@@ -1760,30 +1771,6 @@ using value = basic_value<discard_comments, std::unordered_map, std::vector>;
using array = typename value::array_type; using array = typename value::array_type;
using table = typename value::table_type; using table = typename value::table_type;
namespace detail
{
template<typename C,
template<typename ...> class T, template<typename ...> class A>
inline region_base const& get_region(const basic_value<C, T, A>& v)
{
return *(v.region_info_);
}
template<typename Region, typename C,
template<typename ...> class T, template<typename ...> class A>
void change_region(basic_value<C, T, A>& v, Region&& reg)
{
using region_type = typename std::remove_reference<
typename std::remove_cv<Region>::type
>::type;
std::shared_ptr<region_base> new_reg =
std::make_shared<region_type>(std::forward<region_type>(reg));
v.region_info_ = new_reg;
return;
}
}// detail
template<typename C, template<typename ...> class T, template<typename ...> class A> template<typename C, template<typename ...> class T, template<typename ...> class A>
inline bool inline bool
operator==(const basic_value<C, T, A>& lhs, const basic_value<C, T, A>& rhs) operator==(const basic_value<C, T, A>& lhs, const basic_value<C, T, A>& rhs)