This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[v3] Trim unordered_* includes (2)
- From: Paolo Carlini <pcarlini at suse dot de>
- To: Gcc Patch List <gcc-patches at gcc dot gnu dot org>
- Cc: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Tue, 25 Dec 2007 14:52:27 +0100
- Subject: [v3] Trim unordered_* includes (2)
Hi,
cut in half the size of the pre-processed headers by not including the
whole <algorithm>. Tested x86_64-linux, committed to mainline.
Paolo.
//////////////////
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.
Index: include/tr1_impl/hashtable_policy.h
===================================================================
--- include/tr1_impl/hashtable_policy.h (revision 131159)
+++ include/tr1_impl/hashtable_policy.h (working copy)
@@ -60,6 +60,28 @@
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,8 +445,8 @@
_Prime_rehash_policy::
_M_next_bkt(std::size_t __n) const
{
- const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
- + _S_n_primes, __n);
+ 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));
return *__p;
@@ -437,8 +459,8 @@
_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
- + _S_n_primes, __min_bkts);
+ 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));
return *__p;
@@ -466,8 +488,8 @@
{
__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,
- __min_bkts);
+ __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));
return std::make_pair(true, *__p);
Index: include/std/unordered_map
===================================================================
--- include/std/unordered_map (revision 131159)
+++ include/std/unordered_map (working copy)
@@ -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>
Index: include/std/unordered_set
===================================================================
--- include/std/unordered_set (revision 131159)
+++ include/std/unordered_set (working copy)
@@ -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>
Index: include/tr1/unordered_map
===================================================================
--- include/tr1/unordered_map (revision 131159)
+++ include/tr1/unordered_map (working copy)
@@ -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>
Index: include/tr1/unordered_set
===================================================================
--- include/tr1/unordered_set (revision 131159)
+++ include/tr1/unordered_set (working copy)
@@ -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>