Implement basic version of single element visitation

This commit is contained in:
Christian Mazakas
2023-04-06 13:42:57 -07:00
parent e4d2da40f2
commit 3bd28dc3d7
3 changed files with 360 additions and 5 deletions
@@ -138,6 +138,56 @@ namespace boost {
return size() == 0;
}
template <class F> std::size_t visit(key_type const& k, F f)
{
BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F)
return table_.visit(k, f);
}
template <class F> std::size_t visit(key_type const& k, F f) const
{
BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
return table_.visit(k, f);
}
template <class F> std::size_t cvisit(key_type const& k, F f) const
{
BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
return table_.visit(k, f);
}
template <class K, class F>
typename std::enable_if<
detail::are_transparent<K, hasher, key_equal>::value, std::size_t>::type
visit(K&& k, F f)
{
BOOST_UNORDERED_STATIC_ASSERT_INVOCABLE(F)
return table_.visit(std::forward<K>(k), f);
}
template <class K, class F>
typename std::enable_if<
detail::are_transparent<K, hasher, key_equal>::value, std::size_t>::type
visit(K&& k, F f) const
{
BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
return table_.visit(std::forward<K>(k), f);
}
template <class K, class F>
typename std::enable_if<
detail::are_transparent<K, hasher, key_equal>::value, std::size_t>::type
cvisit(K&& k, F f) const
{
BOOST_UNORDERED_STATIC_ASSERT_CONST_INVOCABLE(F)
return table_.visit(std::forward<K>(k), f);
}
template <class F> std::size_t visit_all(F f)
{
return table_.visit_all(f);
}
/// Modifiers
///
@@ -160,11 +210,6 @@ namespace boost {
this->insert(ilist.begin(), ilist.end());
}
template <class F> std::size_t visit_all(F f)
{
return table_.visit_all(f);
}
template <class M> bool insert_or_assign(key_type const& k, M&& obj)
{
return table_.try_emplace_or_visit(