OSDN Git Service

2007-12-25 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Dec 2007 13:49:54 +0000 (13:49 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Dec 2007 13:49:54 +0000 (13:49 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131170 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/unordered_map
libstdc++-v3/include/std/unordered_set
libstdc++-v3/include/tr1/unordered_map
libstdc++-v3/include/tr1/unordered_set
libstdc++-v3/include/tr1_impl/hashtable_policy.h

index f88476a..b870e82 100644 (file)
@@ -1,3 +1,14 @@
+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.
index 4ce8051..5fb714d 100644 (file)
@@ -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 3cc6937..1e59984 100644 (file)
@@ -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 041eb94..5ab2940 100644 (file)
@@ -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 1618168..8811d4a 100644 (file)
@@ -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 b74531c..f23f8c6 100644 (file)
@@ -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,8 +445,8 @@ namespace __detail
   _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 @@ 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
-                                               + _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 @@ 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,
-                              __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);