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
This commit is contained in:
Paolo Carlini 2008-10-20 16:43:28 +00:00 committed by Paolo Carlini
parent c02c7cb1e3
commit d090f47ae0
7 changed files with 54 additions and 9 deletions

View File

@ -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<>

View File

@ -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);
}

View File

@ -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

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()