diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-30 16:54:54 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-30 16:54:54 +0000 |
commit | 22970dbf0df08cbfdf0e0739702f22d1432be2c6 (patch) | |
tree | 2afd02faea4c25b8ce5c56a9f37319cfdc94457f /libstdc++-v3 | |
parent | 9886f3d11a982141862bc137082edc6f041aa947 (diff) | |
download | gcc-22970dbf0df08cbfdf0e0739702f22d1432be2c6.tar.gz |
2005-09-30 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/24064
* include/tr1/hashtable (hash_code_base<>::store_code): Add.
(hashtable<>::insert(const value_type&)): Use it.
* testsuite/tr1/6_containers/unordered/hashtable/24064.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104823 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/hashtable | 14 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/tr1/6_containers/unordered/hashtable/24064.cc | 46 |
3 files changed, 67 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 87782611e6e..b9db59ea588 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2005-09-30 Paolo Carlini <pcarlini@suse.de> + PR libstdc++/24064 + * include/tr1/hashtable (hash_code_base<>::store_code): Add. + (hashtable<>::insert(const value_type&)): Use it. + * testsuite/tr1/6_containers/unordered/hashtable/24064.cc: New. + +2005-09-30 Paolo Carlini <pcarlini@suse.de> + PR libstdc++/23953 * include/bits/locale_facets.tcc (__numpunct_cache<>::_M_cache, __moneypunct_cache<>::_M_cache): Check that grouping()[0] > 0. diff --git a/libstdc++-v3/include/tr1/hashtable b/libstdc++-v3/include/tr1/hashtable index 790e7e30427..619709433d0 100644 --- a/libstdc++-v3/include/tr1/hashtable +++ b/libstdc++-v3/include/tr1/hashtable @@ -627,6 +627,10 @@ namespace Internal { return m_eq (k, m_extract(n->m_v)); } void + store_code(hash_node<Value, false>*, hash_code_t) const + { } + + void copy_code(hash_node<Value, false>*, const hash_node<Value, false>*) const { } @@ -699,6 +703,10 @@ namespace Internal { return m_eq (k, m_extract(n->m_v)); } void + store_code(hash_node<Value, false>*, hash_code_t) const + { } + + void copy_code(hash_node<Value, false>*, const hash_node<Value, false>*) const { } @@ -757,6 +765,10 @@ namespace Internal { return c == n->hash_code && m_eq(k, m_extract(n->m_v)); } void + store_code(hash_node<Value, true>* n, hash_code_t c) const + { n->hash_code = c; } + + void copy_code(hash_node<Value, true>* to, const hash_node<Value, true>* from) const { to->hash_code = from->hash_code; } @@ -1508,6 +1520,7 @@ namespace tr1 } new_node->m_next = m_buckets[n]; + this->store_code(new_node, code); m_buckets[n] = new_node; ++m_element_count; return std::make_pair(iterator(new_node, m_buckets + n), true); @@ -1549,6 +1562,7 @@ namespace tr1 new_node->m_next = m_buckets[n]; m_buckets[n] = new_node; } + this->store_code(new_node, code); ++m_element_count; return iterator(new_node, m_buckets + n); diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered/hashtable/24064.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered/hashtable/24064.cc new file mode 100644 index 00000000000..74eabbf53f9 --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered/hashtable/24064.cc @@ -0,0 +1,46 @@ +// 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_map> +#include <testsuite_hooks.h> + +// libstdc++/24064 +void test01() +{ + bool test __attribute__((unused)) = true; + + using namespace std; + using namespace tr1; + + unordered_map<int, char, hash<int>, equal_to<int>, + allocator<pair<const int, char> >, true> m; + + for (int i = 0; i < 1000; ++i) + m[i] = '0' + i % 9; + + for (int i = 0; i < 1000; ++i) + VERIFY( ++m.find(i)->second == '1' + i % 9 ); +} + +int main() +{ + test01(); + return 0; +} |