]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
unordered_map (unordered_multimap<>::erase): Fix to erase all elements associated...
authorFrançois Dumont <francois.cppdevs@free.fr>
Sat, 27 Nov 2010 13:09:47 +0000 (14:09 +0100)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Sat, 27 Nov 2010 13:09:47 +0000 (13:09 +0000)
2010-11-27  François Dumont  <francois.cppdevs@free.fr>

        * include/debug/unordered_map (unordered_multimap<>::erase): Fix to
        erase all elements associated to the key.
        * include/debug/unordered_set (unordered_multiset<>::erase): Likewise.
        * testsuite/23_containers/unordered_multimap/erase/1.cc: Modify to
        check for multiple erase.
        * testsuite/23_containers/unordered_multiset/erase/1.cc: Likewise.

From-SVN: r167199

libstdc++-v3/ChangeLog
libstdc++-v3/include/debug/unordered_map
libstdc++-v3/include/debug/unordered_set
libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/1.cc
libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/1.cc

index 2e5663d4ce04340d5d1fe1f5f1e8492cd26b3df3..54e31c2a15c2c62420abcbeecec9989081e40ccf 100644 (file)
@@ -1,3 +1,12 @@
+2010-11-27  François Dumont  <francois.cppdevs@free.fr>
+
+       * include/debug/unordered_map (unordered_multimap<>::erase): Fix to
+       erase all elements associated to the key.
+       * include/debug/unordered_set (unordered_multiset<>::erase): Likewise.
+       * testsuite/23_containers/unordered_multimap/erase/1.cc: Modify to
+       check for multiple erase.
+       * testsuite/23_containers/unordered_multiset/erase/1.cc: Likewise.
+
 2010-11-27  François Dumont  <francois.cppdevs@free.fr>
 
        * include/debug/unordered_map, unordered_set (unordered_map<>::insert,
index d7b139388b0b72cacef882ef8e4cd3d1e42b3a86..5ea35acfac12ccdfd89f908cf73ef30927f407a4 100644 (file)
@@ -538,12 +538,13 @@ namespace __debug
       erase(const key_type& __key)
       {
        size_type __ret(0);
-       _Base_iterator __victim(_Base::find(__key));
-       if (__victim != _Base::end())
+       std::pair<_Base_iterator, _Base_iterator> __pair =
+         _Base::equal_range(__key);
+       for (_Base_iterator __victim = __pair.first; __victim != __pair.second;)
          {
            this->_M_invalidate_if(_Equal(__victim));
-           _Base::erase(__victim);
-           __ret = 1;
+           _Base::erase(__victim++);
+           ++__ret;
          }
        return __ret;
       }
index e39cfa8f9a10fee06a0f316b83ebb7ce63b83e1b..3e771a86dafbf2039eec7a79c133fa28c47bf47f 100644 (file)
@@ -519,12 +519,13 @@ namespace __debug
       erase(const key_type& __key)
       {
        size_type __ret(0);
-       _Base_iterator __victim(_Base::find(__key));
-       if (__victim != _Base::end())
+       std::pair<_Base_iterator, _Base_iterator> __pair =
+         _Base::equal_range(__key);
+       for (_Base_iterator __victim = __pair.first; __victim != __pair.second;)
          {
            this->_M_invalidate_if(_Equal(__victim));
-           _Base::erase(__victim);
-           __ret = 1;
+           _Base::erase(__victim++);
+           ++__ret;
          }
        return __ret;
       }
index 0aa1a071871ffa60864afa134ebe2c6ee9e34e5c..09515726598ed3ba073222763e34ce574a7a6bec 100644 (file)
@@ -44,15 +44,16 @@ void test01()
   mm1.insert(value_type("umbra/penumbra", 8));
   mm1.insert(value_type("belonging (no longer mix)", 9));
   mm1.insert(value_type("one line behind", 10));
-  VERIFY( mm1.size() == 10 );
+  mm1.insert(value_type("because to why", 11));
+  VERIFY( mm1.size() == 11 );
 
   VERIFY( mm1.erase("eeilo") == 1 );
-  VERIFY( mm1.size() == 9 );
+  VERIFY( mm1.size() == 10 );
   iterator it1 = mm1.find("eeilo");
   VERIFY( it1 == mm1.end() );
 
   VERIFY( mm1.erase("tillsammans") == 1 );
-  VERIFY( mm1.size() == 8 );
+  VERIFY( mm1.size() == 9 );
   iterator it2 = mm1.find("tillsammans");
   VERIFY( it2 == mm1.end() );
 
@@ -60,17 +61,17 @@ void test01()
   iterator it3 = mm1.find("belonging (no longer mix)");
   VERIFY( it3 != mm1.end() );
   VERIFY( mm1.erase(it3->first) == 1 );
-  VERIFY( mm1.size() == 7 );
+  VERIFY( mm1.size() == 8 );
   it3 = mm1.find("belonging (no longer mix)");
   VERIFY( it3 == mm1.end() );
 
   VERIFY( !mm1.erase("abra") );
-  VERIFY( mm1.size() == 7 );
+  VERIFY( mm1.size() == 8 );
 
   VERIFY( !mm1.erase("eeilo") );
-  VERIFY( mm1.size() == 7 );
+  VERIFY( mm1.size() == 8 );
 
-  VERIFY( mm1.erase("because to why") == 1 );
+  VERIFY( mm1.erase("because to why") == 2 );
   VERIFY( mm1.size() == 6 );
   iterator it4 = mm1.find("because to why");
   VERIFY( it4 == mm1.end() );
index 9951838e9de72f1be20e0c2547f9603858a53aad..327dc4bd0b22442f976ed48890c30d3083a5980b 100644 (file)
@@ -43,15 +43,16 @@ void test01()
   ms1.insert("umbra/penumbra");
   ms1.insert("belonging (no longer mix)");
   ms1.insert("one line behind");
-  VERIFY( ms1.size() == 10 );
+  ms1.insert("because to why");
+  VERIFY( ms1.size() == 11 );
 
   VERIFY( ms1.erase("eeilo") == 1 );
-  VERIFY( ms1.size() == 9 );
+  VERIFY( ms1.size() == 10 );
   iterator it1 = ms1.find("eeilo");
   VERIFY( it1 == ms1.end() );
 
   VERIFY( ms1.erase("tillsammans") == 1 );
-  VERIFY( ms1.size() == 8 );
+  VERIFY( ms1.size() == 9 );
   iterator it2 = ms1.find("tillsammans");
   VERIFY( it2 == ms1.end() );
 
@@ -59,17 +60,17 @@ void test01()
   iterator it3 = ms1.find("belonging (no longer mix)");
   VERIFY( it3 != ms1.end() );
   VERIFY( ms1.erase(*it3) == 1 );
-  VERIFY( ms1.size() == 7 );
+  VERIFY( ms1.size() == 8 );
   it3 = ms1.find("belonging (no longer mix)");
   VERIFY( it3 == ms1.end() );
 
   VERIFY( !ms1.erase("abra") );
-  VERIFY( ms1.size() == 7 );
+  VERIFY( ms1.size() == 8 );
 
   VERIFY( !ms1.erase("eeilo") );
-  VERIFY( ms1.size() == 7 );
+  VERIFY( ms1.size() == 8 );
 
-  VERIFY( ms1.erase("because to why") == 1 );
+  VERIFY( ms1.erase("because to why") == 2 );
   VERIFY( ms1.size() == 6 );
   iterator it4 = ms1.find("because to why");
   VERIFY( it4 == ms1.end() );