summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2008-10-20 16:43:28 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2008-10-20 16:43:28 +0000
commit11824985de2dd921a45fbfe5460df22d2dc6bea0 (patch)
treefed959c0e6d060f3059bb81789ff1e54dee307be /libstdc++-v3
parentb1230278fdc4407fff338f07b878253008bd906e (diff)
downloadgcc-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')
-rw-r--r--libstdc++-v3/ChangeLog19
-rw-r--r--libstdc++-v3/include/tr1_impl/hashtable10
-rw-r--r--libstdc++-v3/include/tr1_impl/hashtable_policy.h14
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc5
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc5
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc5
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc5
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()