hashtable (hashtable::m_erase): Rename to erase_node.

2005-10-14  Paolo Carlini  <pcarlini@suse.de>

	* include/tr1/hashtable (hashtable::m_erase): Rename to erase_node.
	(hashtable::erase(iterator), erase(const_iterator)): Adjust.

From-SVN: r105401
This commit is contained in:
Paolo Carlini 2005-10-14 10:43:30 +00:00 committed by Paolo Carlini
parent a93770efeb
commit 76f5f4414f
2 changed files with 44 additions and 37 deletions

View File

@ -1,3 +1,8 @@
2005-10-14 Paolo Carlini <pcarlini@suse.de>
* include/tr1/hashtable (hashtable::m_erase): Rename to erase_node.
(hashtable::erase(iterator), erase(const_iterator)): Adjust.
2005-10-13 Richard Earnshaw <richard.earnsahw@arm.com> 2005-10-13 Richard Earnshaw <richard.earnsahw@arm.com>
PR libstdc++/23926 PR libstdc++/23926

View File

@ -329,7 +329,8 @@ namespace Internal
{ {
hashtable_iterator tmp(*this); hashtable_iterator tmp(*this);
this->incr(); this->incr();
return tmp; } return tmp;
}
}; };
template<typename Value, bool constant_iterators, bool cache> template<typename Value, bool constant_iterators, bool cache>
@ -374,7 +375,8 @@ namespace Internal
{ {
hashtable_const_iterator tmp(*this); hashtable_const_iterator tmp(*this);
this->incr(); this->incr();
return tmp; } return tmp;
}
}; };
} // namespace Internal } // namespace Internal
@ -1169,6 +1171,9 @@ namespace tr1
iterator iterator
insert(const value_type&, std::tr1::false_type); insert(const value_type&, std::tr1::false_type);
void
erase_node(node*, node**);
public: // Insert and erase public: // Insert and erase
Insert_Return_Type Insert_Return_Type
insert(const value_type& v) insert(const value_type& v)
@ -1191,25 +1196,21 @@ namespace tr1
iterator iterator
erase(iterator); erase(iterator);
const_iterator const_iterator
erase(const_iterator); erase(const_iterator);
size_type size_type
erase(const key_type&); erase(const key_type&);
iterator iterator
erase(iterator, iterator); erase(iterator, iterator);
const_iterator const_iterator
erase(const_iterator, const_iterator); erase(const_iterator, const_iterator);
void void
clear(); clear();
private:
// For erase(iterator) and erase(const_iterator).
void m_erase(node*, node**);
public: public:
// Set number of buckets to be apropriate for container of n element. // Set number of buckets to be apropriate for container of n element.
@ -1673,6 +1674,33 @@ namespace tr1
return iterator(new_node, m_buckets + n); return iterator(new_node, m_buckets + n);
} }
// For erase(iterator) and erase(const_iterator).
template<typename K, typename V,
typename A, typename Ex, typename Eq,
typename H1, typename H2, typename H, typename RP,
bool c, bool ci, bool u>
void
hashtable<K, V, A, Ex, Eq, H1, H2, H, RP, c, ci, u>::
erase_node(node* p, node** b)
{
node* cur = *b;
if (cur == p)
*b = cur->m_next;
else
{
node* next = cur->m_next;
while (next != p)
{
cur = next;
next = cur->m_next;
}
cur->m_next = next->m_next;
}
m_deallocate_node (p);
--m_element_count;
}
template<typename K, typename V, template<typename K, typename V,
typename A, typename Ex, typename Eq, typename A, typename Ex, typename Eq,
typename H1, typename H2, typename H, typename RP, typename H1, typename H2, typename H, typename RP,
@ -1702,7 +1730,7 @@ namespace tr1
{ {
iterator result = i; iterator result = i;
++result; ++result;
m_erase(i.m_cur_node, i.m_cur_bucket); erase_node(i.m_cur_node, i.m_cur_bucket);
return result; return result;
} }
@ -1716,7 +1744,7 @@ namespace tr1
{ {
const_iterator result = i; const_iterator result = i;
++result; ++result;
m_erase(i.m_cur_node, i.m_cur_bucket); erase_node(i.m_cur_node, i.m_cur_bucket);
return result; return result;
} }
@ -1825,32 +1853,6 @@ namespace tr1
__throw_exception_again; __throw_exception_again;
} }
} }
template<typename K, typename V,
typename A, typename Ex, typename Eq,
typename H1, typename H2, typename H, typename RP,
bool c, bool ci, bool u>
void
hashtable<K, V, A, Ex, Eq, H1, H2, H, RP, c, ci, u>::
m_erase(node* p, node** b)
{
node* cur = *b;
if (cur == p)
*b = cur->m_next;
else
{
node* next = cur->m_next;
while (next != p)
{
cur = next;
next = cur->m_next;
}
cur->m_next = next->m_next;
}
m_deallocate_node (p);
--m_element_count;
}
} }
} // Namespace std::tr1 } // Namespace std::tr1