+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<>
size_type
max_size() const
- { return _M_get_Value_allocator().max_size(); }
+ { return _M_node_allocator.max_size(); }
// Observers
key_equal
_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;
}
_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);
}
_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>
{
_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
-// 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
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()
-// 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
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()
-// 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
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()
-// 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
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()