]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
bitset (_Base_bitset<>::_M_are_all_aux): Remove.
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 2 Sep 2011 13:30:32 +0000 (13:30 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 2 Sep 2011 13:30:32 +0000 (13:30 +0000)
2011-09-02  Paolo Carlini  <paolo.carlini@oracle.com>
    Marc Glisse  <marc.glisse@normalesup.org>

* include/std/bitset (_Base_bitset<>::_M_are_all_aux): Remove.
(_Base_bitset<>::_M_are_all): Add.
(bitset<>::all): Use the latter, improve implementation.

Co-Authored-By: Marc Glisse <marc.glisse@normalesup.org>
From-SVN: r178473

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/bitset

index bd9850cd43b9f52a1e2ec6d2cd9d7ed8cee66fc2..cb8361a3347cc351d6e45ca96beecef11c78ecd1 100644 (file)
@@ -1,3 +1,10 @@
+2011-09-02  Paolo Carlini  <paolo.carlini@oracle.com>
+           Marc Glisse  <marc.glisse@normalesup.org>
+
+       * include/std/bitset (_Base_bitset<>::_M_are_all_aux): Remove.
+       (_Base_bitset<>::_M_are_all): Add.
+       (bitset<>::all): Use the latter, improve implementation.
+
 2011-09-02  Paolo Carlini  <paolo.carlini@oracle.com>
            Marc Glisse  <marc.glisse@normalesup.org>
 
index 648d7ab5fe8edb4ddeb0679d6a6874540dfcf231..f771bfc0e016e8171974be1b7862a5e0791ba763 100644 (file)
@@ -185,15 +185,17 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
        return true;
       }
 
-      size_t
-      _M_are_all_aux() const _GLIBCXX_NOEXCEPT
-      {
-       for (size_t __i = 0; __i < _Nw - 1; __i++)
-         if (_M_w[__i] != ~static_cast<_WordT>(0))
-           return 0;
-       return ((_Nw - 1) * _GLIBCXX_BITSET_BITS_PER_WORD
-               + __builtin_popcountl(_M_hiword()));
-      }
+      template<size_t _Nb>
+        bool
+        _M_are_all() const _GLIBCXX_NOEXCEPT
+        {
+         for (size_t __i = 0; __i < _Nw - 1; __i++)
+           if (_M_w[__i] != ~static_cast<_WordT>(0))
+             return false;
+         return _M_hiword() == (~static_cast<_WordT>(0)
+                                >> (_Nw * _GLIBCXX_BITSET_BITS_PER_WORD
+                                    - _Nb));
+       }
 
       bool
       _M_is_any() const _GLIBCXX_NOEXCEPT
@@ -460,9 +462,11 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       _M_is_equal(const _Base_bitset<1>& __x) const _GLIBCXX_NOEXCEPT
       { return _M_w == __x._M_w; }
 
-      size_t
-      _M_are_all_aux() const _GLIBCXX_NOEXCEPT
-      { return __builtin_popcountl(_M_w); }
+      template<size_t _Nb>
+        bool
+        _M_are_all() const _GLIBCXX_NOEXCEPT
+        { return _M_w == (~static_cast<_WordT>(0)
+                         >> (_GLIBCXX_BITSET_BITS_PER_WORD - _Nb)); }
 
       bool
       _M_is_any() const _GLIBCXX_NOEXCEPT
@@ -605,9 +609,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       _M_is_equal(const _Base_bitset<0>&) const _GLIBCXX_NOEXCEPT
       { return true; }
 
-      size_t
-      _M_are_all_aux() const _GLIBCXX_NOEXCEPT
-      { return 0; }
+      template<size_t _Nb>
+        bool
+        _M_are_all() const _GLIBCXX_NOEXCEPT
+        { return true; }
 
       bool
       _M_is_any() const _GLIBCXX_NOEXCEPT
@@ -1312,7 +1317,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
        */
       bool
       all() const _GLIBCXX_NOEXCEPT
-      { return this->_M_are_all_aux() == _Nb; }
+      { return this->template _M_are_all<_Nb>(); }
 
       /**
        *  @brief Tests whether any of the bits are on.