mirror of
https://github.com/ToruNiina/toml11.git
synced 2025-09-17 00:38:08 +08:00
feat: enable to unset flag
This commit is contained in:
@@ -59,6 +59,11 @@ void change_region_of_value(basic_value<TC>&, const basic_value<TC>&);
|
|||||||
|
|
||||||
template<typename TC, value_t V>
|
template<typename TC, value_t V>
|
||||||
struct getter;
|
struct getter;
|
||||||
|
|
||||||
|
#ifdef TOML11_ENABLE_ACCESS_CHECK
|
||||||
|
template<typename TC>
|
||||||
|
void unset_access_flag(basic_value<TC>&);
|
||||||
|
#endif
|
||||||
} // detail
|
} // detail
|
||||||
|
|
||||||
template<typename TypeConfig>
|
template<typename TypeConfig>
|
||||||
@@ -2102,6 +2107,12 @@ class basic_value
|
|||||||
template<typename TC>
|
template<typename TC>
|
||||||
friend class basic_value;
|
friend class basic_value;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef TOML11_ENABLE_ACCESS_CHECK
|
||||||
|
template<typename TC>
|
||||||
|
friend void detail::unset_access_flag(basic_value<TC>&);
|
||||||
|
#endif
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -2450,6 +2461,48 @@ void change_region_of_value(basic_value<TC>& dst, const basic_value<TC>& src)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TOML11_ENABLE_ACCESS_CHECK
|
||||||
|
template<typename TC>
|
||||||
|
void unset_access_flag(basic_value<TC>& v)
|
||||||
|
{
|
||||||
|
v.accessed_.store(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename TC>
|
||||||
|
void unset_access_flag_recursively(basic_value<TC>& v)
|
||||||
|
{
|
||||||
|
switch(v.type())
|
||||||
|
{
|
||||||
|
case value_t::empty : { return unset_access_flag(v); }
|
||||||
|
case value_t::boolean : { return unset_access_flag(v); }
|
||||||
|
case value_t::integer : { return unset_access_flag(v); }
|
||||||
|
case value_t::floating : { return unset_access_flag(v); }
|
||||||
|
case value_t::string : { return unset_access_flag(v); }
|
||||||
|
case value_t::offset_datetime : { return unset_access_flag(v); }
|
||||||
|
case value_t::local_datetime : { return unset_access_flag(v); }
|
||||||
|
case value_t::local_date : { return unset_access_flag(v); }
|
||||||
|
case value_t::local_time : { return unset_access_flag(v); }
|
||||||
|
case value_t::array:
|
||||||
|
{
|
||||||
|
for(auto& elem : v.as_array())
|
||||||
|
{
|
||||||
|
unset_access_flag_recursively(elem);
|
||||||
|
}
|
||||||
|
return unset_access_flag(v);
|
||||||
|
}
|
||||||
|
case value_t::table:
|
||||||
|
{
|
||||||
|
for(auto& kv : v.as_table())
|
||||||
|
{
|
||||||
|
unset_access_flag_recursively(kv.second);
|
||||||
|
}
|
||||||
|
return unset_access_flag(v);
|
||||||
|
}
|
||||||
|
default: { return unset_access_flag(v); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
} // namespace toml
|
} // namespace toml
|
||||||
#endif // TOML11_VALUE_HPP
|
#endif // TOML11_VALUE_HPP
|
||||||
|
Reference in New Issue
Block a user