Replace several uses of iterators with node pointers.

Which is to some extent going in circles, as this is how the containers
were originally implemented. But I think this is cleaner. It also fixes
a minor problem where the internal and external iterator types are
different for some containers, as the external iterators are all const.
This commit is contained in:
Daniel James
2016-10-22 10:04:36 +01:00
parent 6071f9a08b
commit 9772c01161
6 changed files with 196 additions and 183 deletions

View File

@@ -202,12 +202,12 @@ namespace unordered
iterator begin() BOOST_NOEXCEPT
{
return table_.begin();
return iterator(table_.begin());
}
const_iterator begin() const BOOST_NOEXCEPT
{
return table_.begin();
return const_iterator(table_.begin());
}
iterator end() BOOST_NOEXCEPT
@@ -222,7 +222,7 @@ namespace unordered
const_iterator cbegin() const BOOST_NOEXCEPT
{
return table_.begin();
return const_iterator(table_.begin());
}
const_iterator cend() const BOOST_NOEXCEPT
@@ -686,12 +686,12 @@ namespace unordered
iterator begin() BOOST_NOEXCEPT
{
return table_.begin();
return iterator(table_.begin());
}
const_iterator begin() const BOOST_NOEXCEPT
{
return table_.begin();
return const_iterator(table_.begin());
}
iterator end() BOOST_NOEXCEPT
@@ -706,7 +706,7 @@ namespace unordered
const_iterator cbegin() const BOOST_NOEXCEPT
{
return table_.begin();
return const_iterator(table_.begin());
}
const_iterator cend() const BOOST_NOEXCEPT
@@ -1208,14 +1208,14 @@ namespace unordered
typename unordered_map<K,T,H,P,A>::iterator
unordered_map<K,T,H,P,A>::find(const key_type& k)
{
return table_.find_node(k);
return iterator(table_.find_node(k));
}
template <class K, class T, class H, class P, class A>
typename unordered_map<K,T,H,P,A>::const_iterator
unordered_map<K,T,H,P,A>::find(const key_type& k) const
{
return table_.find_node(k);
return const_iterator(table_.find_node(k));
}
template <class K, class T, class H, class P, class A>
@@ -1227,7 +1227,7 @@ namespace unordered
CompatibleHash const& hash,
CompatiblePredicate const& eq)
{
return table_.generic_find_node(k, hash, eq);
return iterator(table_.generic_find_node(k, hash, eq));
}
template <class K, class T, class H, class P, class A>
@@ -1239,7 +1239,7 @@ namespace unordered
CompatibleHash const& hash,
CompatiblePredicate const& eq) const
{
return table_.generic_find_node(k, hash, eq);
return const_iterator(table_.generic_find_node(k, hash, eq));
}
template <class K, class T, class H, class P, class A>
@@ -1520,14 +1520,14 @@ namespace unordered
typename unordered_multimap<K,T,H,P,A>::iterator
unordered_multimap<K,T,H,P,A>::find(const key_type& k)
{
return table_.find_node(k);
return iterator(table_.find_node(k));
}
template <class K, class T, class H, class P, class A>
typename unordered_multimap<K,T,H,P,A>::const_iterator
unordered_multimap<K,T,H,P,A>::find(const key_type& k) const
{
return table_.find_node(k);
return const_iterator(table_.find_node(k));
}
template <class K, class T, class H, class P, class A>
@@ -1539,7 +1539,7 @@ namespace unordered
CompatibleHash const& hash,
CompatiblePredicate const& eq)
{
return table_.generic_find_node(k, hash, eq);
return iterator(table_.generic_find_node(k, hash, eq));
}
template <class K, class T, class H, class P, class A>
@@ -1551,7 +1551,7 @@ namespace unordered
CompatibleHash const& hash,
CompatiblePredicate const& eq) const
{
return table_.generic_find_node(k, hash, eq);
return const_iterator(table_.generic_find_node(k, hash, eq));
}
template <class K, class T, class H, class P, class A>