This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]