Commit e7dbb3ee by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/24054 (std::tr1::unordered_map's erase does not seem to return a value)

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

	PR libstdc++/24054
	* include/tr1/hashtable (erase(const key_type&)): Return the
	number of elements erased.
	* testsuite/tr1/6_containers/unordered/hashtable/24054.cc: New.

From-SVN: r104867
parent 746077ff
2005-10-02 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/24054
* include/tr1/hashtable (erase(const key_type&)): Return the
number of elements erased.
* testsuite/tr1/6_containers/unordered/hashtable/24054.cc: New.
2005-10-01 Kenny Simpson <theonetruekenny@yahoo.com> 2005-10-01 Kenny Simpson <theonetruekenny@yahoo.com>
* include/tr1/tuple_iterate.h (tuple::operator=(const std::pair<>&)): * include/tr1/tuple_iterate.h (tuple::operator=(const std::pair<>&)):
......
...@@ -1628,6 +1628,7 @@ namespace tr1 ...@@ -1628,6 +1628,7 @@ namespace tr1
{ {
typename hashtable::hash_code_t code = this->m_hash_code (k); typename hashtable::hash_code_t code = this->m_hash_code (k);
size_type n = this->bucket_index(k, code, m_bucket_count); size_type n = this->bucket_index(k, code, m_bucket_count);
size_type result = 0;
node** slot = m_buckets + n; node** slot = m_buckets + n;
while (*slot && ! this->compare (k, code, *slot)) while (*slot && ! this->compare (k, code, *slot))
...@@ -1639,7 +1640,10 @@ namespace tr1 ...@@ -1639,7 +1640,10 @@ namespace tr1
*slot = n->m_next; *slot = n->m_next;
m_deallocate_node (n); m_deallocate_node (n);
--m_element_count; --m_element_count;
++result;
} }
return result;
} }
// ??? This could be optimized by taking advantage of the bucket // ??? This could be optimized by taking advantage of the bucket
......
// Copyright (C) 2005 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// 6.3 Unordered associative containers
#include <tr1/unordered_set>
#include <string>
#include <testsuite_hooks.h>
// libstdc++/24054
void test01()
{
bool test __attribute__((unused)) = true;
typedef std::tr1::unordered_multiset<std::string> Set;
Set s;
s.insert("etaoin");
s.insert("etaoin");
s.insert("etaoin");
s.insert("shrdlu");
VERIFY( s.erase("") == 0 );
VERIFY( s.size() == 4 );
VERIFY( s.erase("etaoin") == 3 );
VERIFY( s.size() == 1 );
VERIFY( s.erase("shrdlu") == 1 );
VERIFY( s.size() == 0 );
}
int main()
{
test01();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment