Commit d090f47a by Paolo Carlini Committed by Paolo Carlini

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.

From-SVN: r141242
parent c02c7cb1
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> 2008-10-19 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<> * include/bits/stl_tree.h (_Rb_tree_node<>::_Rb_tree_node<>
......
...@@ -296,7 +296,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 ...@@ -296,7 +296,7 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
size_type size_type
max_size() const max_size() const
{ return _M_get_Value_allocator().max_size(); } { return _M_node_allocator.max_size(); }
// Observers // Observers
key_equal key_equal
...@@ -484,7 +484,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 ...@@ -484,7 +484,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
_Node* __n = _M_node_allocator.allocate(1); _Node* __n = _M_node_allocator.allocate(1);
try try
{ {
#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
_M_node_allocator.construct(__n, __v);
#else
_M_get_Value_allocator().construct(&__n->_M_v, __v); _M_get_Value_allocator().construct(&__n->_M_v, __v);
#endif
__n->_M_next = 0; __n->_M_next = 0;
return __n; return __n;
} }
...@@ -504,7 +508,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1 ...@@ -504,7 +508,11 @@ _GLIBCXX_BEGIN_NAMESPACE_TR1
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
_M_deallocate_node(_Node* __n) _M_deallocate_node(_Node* __n)
{ {
#ifdef _GLIBCXX_INCLUDE_AS_CXX0X
_M_node_allocator.destroy(__n);
#else
_M_get_Value_allocator().destroy(&__n->_M_v); _M_get_Value_allocator().destroy(&__n->_M_v);
#endif
_M_node_allocator.deallocate(__n, 1); _M_node_allocator.deallocate(__n, 1);
} }
......
...@@ -99,6 +99,13 @@ namespace __detail ...@@ -99,6 +99,13 @@ namespace __detail
_Value _M_v; _Value _M_v;
std::size_t _M_hash_code; std::size_t _M_hash_code;
_Hash_node* _M_next; _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> template<typename _Value>
...@@ -106,6 +113,13 @@ namespace __detail ...@@ -106,6 +113,13 @@ namespace __detail
{ {
_Value _M_v; _Value _M_v;
_Hash_node* _M_next; _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 // Local iterators, used to iterate within a bucket but not between
......
// 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -28,7 +28,8 @@ void test01() ...@@ -28,7 +28,8 @@ void test01()
std::tr1::unordered_map<int, int> um; 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() int main()
......
// 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -28,7 +28,8 @@ void test01() ...@@ -28,7 +28,8 @@ void test01()
std::tr1::unordered_multimap<int, int> umm; 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() int main()
......
// 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -28,7 +28,8 @@ void test01() ...@@ -28,7 +28,8 @@ void test01()
std::tr1::unordered_multiset<int> ums; 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() int main()
......
// 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 // 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 // software; you can redistribute it and/or modify it under the
...@@ -28,7 +28,8 @@ void test01() ...@@ -28,7 +28,8 @@ void test01()
std::tr1::unordered_set<int> us; 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() int main()
......
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