diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-20 16:43:28 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-20 16:43:28 +0000 |
commit | 11824985de2dd921a45fbfe5460df22d2dc6bea0 (patch) | |
tree | fed959c0e6d060f3059bb81789ff1e54dee307be /libstdc++-v3 | |
parent | b1230278fdc4407fff338f07b878253008bd906e (diff) | |
download | gcc-11824985de2dd921a45fbfe5460df22d2dc6bea0.tar.gz |
2008-10-20 Paolo Carlini <paolo.carlini@oracle.com>
* include/tr1_impl/hashtable_policy.h (_Hash_node<>::_Hash_node<>
(_Args&&...)): Add in C++0x mode.
* include/tr1_impl/hashtable (_Hashtable<>::_M_allocate_node,
_Hashtable<>::_M_deallocate_node): Use _M_get_Node_allocator in
C++0x mode.
* include/tr1_impl/hashtable (_Hashtable<>::max_size): Use
Node_allocator for improved accuracy.
* testsuite/tr1/6_containers/unordered_multimap/capacity/
29134-multimap.cc: Adjust.
* testsuite/tr1/6_containers/unordered_multimap/capacity/
29134-map.cc: Likewise.
* testsuite/tr1/6_containers/unordered_multimap/capacity/
29134-multiset.cc: Adjust.
* testsuite/tr1/6_containers/unordered_multimap/capacity/
29134-set.cc: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141242 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
7 files changed, 54 insertions, 9 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 10f226d04bc..4531127d7ec 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2008-10-20 Paolo Carlini <paolo.carlini@oracle.com> + + * include/tr1_impl/hashtable_policy.h (_Hash_node<>::_Hash_node<> + (_Args&&...)): Add in C++0x mode. + * include/tr1_impl/hashtable (_Hashtable<>::_M_allocate_node, + _Hashtable<>::_M_deallocate_node): Use _M_get_Node_allocator in + C++0x mode. + + * include/tr1_impl/hashtable (_Hashtable<>::max_size): Use + Node_allocator for improved accuracy. + * testsuite/tr1/6_containers/unordered_multimap/capacity/ + 29134-multimap.cc: Adjust. + * testsuite/tr1/6_containers/unordered_multimap/capacity/ + 29134-map.cc: Likewise. + * testsuite/tr1/6_containers/unordered_multimap/capacity/ + 29134-multiset.cc: Adjust. + * testsuite/tr1/6_containers/unordered_multimap/capacity/ + 29134-set.cc: Likewise. + 2008-10-19 Paolo Carlini <paolo.carlini@oracle.com> * include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<> diff --git a/libstdc++-v3/include/tr1_impl/hashtable b/libstdc++-v3/include/tr1_impl/hashtable index c76deb06ca7..c6f1ac7aff6 100644 --- a/libstdc++-v3/include/tr1_impl/hashtable +++ b/libstdc++-v3/include/tr1_impl/hashtable @@ -296,7 +296,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 size_type max_size() const - { return _M_get_Value_allocator().max_size(); } + { return _M_node_allocator.max_size(); } // Observers key_equal @@ -484,7 +484,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 _Node* __n = _M_node_allocator.allocate(1); try { +#ifdef _GLIBCXX_INCLUDE_AS_CXX0X + _M_node_allocator.construct(__n, __v); +#else _M_get_Value_allocator().construct(&__n->_M_v, __v); +#endif __n->_M_next = 0; return __n; } @@ -504,7 +508,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: _M_deallocate_node(_Node* __n) { +#ifdef _GLIBCXX_INCLUDE_AS_CXX0X + _M_node_allocator.destroy(__n); +#else _M_get_Value_allocator().destroy(&__n->_M_v); +#endif _M_node_allocator.deallocate(__n, 1); } diff --git a/libstdc++-v3/include/tr1_impl/hashtable_policy.h b/libstdc++-v3/include/tr1_impl/hashtable_policy.h index 6677a72d8d2..1468ee8e989 100644 --- a/libstdc++-v3/include/tr1_impl/hashtable_policy.h +++ b/libstdc++-v3/include/tr1_impl/hashtable_policy.h @@ -99,6 +99,13 @@ namespace __detail _Value _M_v; std::size_t _M_hash_code; _Hash_node* _M_next; + +#ifdef _GLIBCXX_INCLUDE_AS_CXX0X + template<typename... _Args> + _Hash_node(_Args&&... __args) + : _M_v(std::forward<_Args>(__args)...), + _M_hash_code(), _M_next() { } +#endif }; template<typename _Value> @@ -106,6 +113,13 @@ namespace __detail { _Value _M_v; _Hash_node* _M_next; + +#ifdef _GLIBCXX_INCLUDE_AS_CXX0X + template<typename... _Args> + _Hash_node(_Args&&... __args) + : _M_v(std::forward<_Args>(__args)...), + _M_next() { } +#endif }; // Local iterators, used to iterate within a bucket but not between diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc index 459ace41a88..24d51ef508e 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006, 2007, 2008 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 @@ -28,7 +28,8 @@ void test01() std::tr1::unordered_map<int, int> um; - VERIFY( um.max_size() == um.get_allocator().max_size() ); + VERIFY( (um.max_size() == std::allocator<std::tr1::__detail::_Hash_node< + std::pair<const int, int>, false> >().max_size())); } int main() diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc index af41fa154d6..dc1db508811 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006, 2007, 2008 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 @@ -28,7 +28,8 @@ void test01() std::tr1::unordered_multimap<int, int> umm; - VERIFY( umm.max_size() == umm.get_allocator().max_size() ); + VERIFY( (umm.max_size() == std::allocator<std::tr1::__detail::_Hash_node< + std::pair<const int, int>, false> >().max_size()) ); } int main() diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc index 923af9be118..f4e2f6a1c25 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006, 2007, 2008 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 @@ -28,7 +28,8 @@ void test01() std::tr1::unordered_multiset<int> ums; - VERIFY( ums.max_size() == ums.get_allocator().max_size() ); + VERIFY( (ums.max_size() == std::allocator<std::tr1::__detail::_Hash_node< + int, false> >().max_size()) ); } int main() diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc index 5822341c85e..ca8333e42f6 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2006 Free Software Foundation, Inc. +// Copyright (C) 2006, 2007, 2008 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 @@ -28,7 +28,8 @@ void test01() std::tr1::unordered_set<int> us; - VERIFY( us.max_size() == us.get_allocator().max_size() ); + VERIFY( (us.max_size() == std::allocator<std::tr1::__detail::_Hash_node< + int, false> >().max_size()) ); } int main() |