Commit 6b81511f by Paolo Carlini Committed by Paolo Carlini

hashtable_policy.h (__lower_bound): Add.

2007-12-25  Paolo Carlini  <pcarlini@suse.de>

	* include/tr1_impl/hashtable_policy.h (__lower_bound): Add.
	(_Prime_rehash_policy::_M_next_bkt, _M_bkt_for_elements,
	_M_need_rehash): Use __lower_bound.
	* include/std/unordered_map: Do not include the whole <algorithm>,
	include <bits/stl_algobase.h>.
	* include/std/unordered_set: Likewise.
	* include/tr1/unordered_map: Likewise.
	* include/tr1/unordered_set: Likewise.

From-SVN: r131170
parent 1283ab12
2007-12-25 Paolo Carlini <pcarlini@suse.de>
* include/tr1_impl/hashtable_policy.h (__lower_bound): Add.
(_Prime_rehash_policy::_M_next_bkt, _M_bkt_for_elements,
_M_need_rehash): Use __lower_bound.
* include/std/unordered_map: Do not include the whole <algorithm>,
include <bits/stl_algobase.h>.
* include/std/unordered_set: Likewise.
* include/tr1/unordered_map: Likewise.
* include/tr1/unordered_set: Likewise.
2007-12-24 Paolo Carlini <pcarlini@suse.de>
* testsuite/20_util/tuple/cons/big_tuples.cc: New.
......
......@@ -45,8 +45,8 @@
#endif
#include <utility>
#include <algorithm> // lower_bound
#include <type_traits>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <bits/stringfwd.h>
......
......@@ -45,8 +45,8 @@
#endif
#include <utility>
#include <algorithm> // lower_bound
#include <type_traits>
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <bits/stringfwd.h>
......
......@@ -41,7 +41,7 @@
#endif
#include <utility>
#include <algorithm> // lower_bound
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <bits/stringfwd.h>
......
......@@ -41,7 +41,7 @@
#endif
#include <utility>
#include <algorithm> // lower_bound
#include <bits/stl_algobase.h>
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <bits/stringfwd.h>
......
......@@ -60,6 +60,28 @@ namespace __detail
return __distance_fw(__first, __last, _Tag());
}
template<typename _RAIter, typename _Tp>
_RAIter
__lower_bound(_RAIter __first, _RAIter __last, const _Tp& __val)
{
typedef typename std::iterator_traits<_RAIter>::difference_type _DType;
_DType __len = __last - __first;
while (__len > 0)
{
_DType __half = __len >> 1;
_RAIter __middle = __first + __half;
if (*__middle < __val)
{
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else
__len = __half;
}
return __first;
}
// Auxiliary types used for all instantiations of _Hashtable: nodes
// and iterators.
......@@ -423,7 +445,7 @@ namespace __detail
_Prime_rehash_policy::
_M_next_bkt(std::size_t __n) const
{
const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
const unsigned long* __p = __lower_bound(__prime_list, __prime_list
+ _S_n_primes, __n);
_M_next_resize =
static_cast<std::size_t>(__builtin_ceil(*__p * _M_max_load_factor));
......@@ -437,7 +459,7 @@ namespace __detail
_M_bkt_for_elements(std::size_t __n) const
{
const float __min_bkts = __n / _M_max_load_factor;
const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
const unsigned long* __p = __lower_bound(__prime_list, __prime_list
+ _S_n_primes, __min_bkts);
_M_next_resize =
static_cast<std::size_t>(__builtin_ceil(*__p * _M_max_load_factor));
......@@ -466,7 +488,7 @@ namespace __detail
{
__min_bkts = std::max(__min_bkts, _M_growth_factor * __n_bkt);
const unsigned long* __p =
std::lower_bound(__prime_list, __prime_list + _S_n_primes,
__lower_bound(__prime_list, __prime_list + _S_n_primes,
__min_bkts);
_M_next_resize = static_cast<std::size_t>
(__builtin_ceil(*__p * _M_max_load_factor));
......
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