[multiple changes]
authorPaolo Carlini <paolo@gcc.gnu.org>
Sun, 7 Oct 2007 11:14:11 +0000 (11:14 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 7 Oct 2007 11:14:11 +0000 (11:14 +0000)
2007-10-07  Paolo Carlini  <pcarlini@suse.de>

* include/bits/stl_algobase.h (_GLIBCXX_MOVE): Add.
(swap, __iter_swap): Use it.
* testsuite/25_algorithms/rotate/moveable.cc: Remove dg-require-rvalref.
* testsuite/25_algorithms/remove/moveable.cc: Likewise.
* testsuite/25_algorithms/partition/moveable.cc: Likewise.
* testsuite/25_algorithms/swap_ranges/moveable.cc: Likewise.
* testsuite/25_algorithms/reverse/moveable.cc: Likewise.
* testsuite/25_algorithms/unique/moveable.cc: Likewise.
* testsuite/25_algorithms/remove_if/moveable.cc: Likewise.

* include/bits/stl_algobase.h (lexicographical_compare):
Clean up.

2007-10-07  Chris Jefferson  <chris@bubblescope.net>
    Paolo Carlini  <pcarlini@suse.de>

* include/bits/stl_algo.h (remove, remove_if, unique,
__rotate(_RandomAccessIterator, _RandomAccessIterator,
_RandomAccessIterator, random_access_iterator_tag)): Use _GLIBCXX_MOVE.
(__rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator,
forward_iterator_tag), __rotate(_BidirectionalIterator,
_BidirectionalIterator, _BidirectionalIterator,
bidirectional_iterator_tag), __partition(_ForwardIterator,
_ForwardIterator, _Predicate, forward_iterator_tag)): Use iter_swap.

From-SVN: r129068

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_algo.h
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
libstdc++-v3/testsuite/25_algorithms/remove/moveable.cc
libstdc++-v3/testsuite/25_algorithms/remove_if/moveable.cc
libstdc++-v3/testsuite/25_algorithms/reverse/moveable.cc
libstdc++-v3/testsuite/25_algorithms/rotate/moveable.cc
libstdc++-v3/testsuite/25_algorithms/swap_ranges/moveable.cc
libstdc++-v3/testsuite/25_algorithms/unique/moveable.cc

index d7e2694f5d8dad6636e0f4754570061904f5a8f3..6bc671155e2e66a8ec922465533a037a210d4319 100644 (file)
@@ -1,3 +1,30 @@
+2007-10-07  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/bits/stl_algobase.h (_GLIBCXX_MOVE): Add.
+       (swap, __iter_swap): Use it.
+       * testsuite/25_algorithms/rotate/moveable.cc: Remove dg-require-rvalref.
+       * testsuite/25_algorithms/remove/moveable.cc: Likewise.
+       * testsuite/25_algorithms/partition/moveable.cc: Likewise. 
+       * testsuite/25_algorithms/swap_ranges/moveable.cc: Likewise.
+       * testsuite/25_algorithms/reverse/moveable.cc: Likewise. 
+       * testsuite/25_algorithms/unique/moveable.cc: Likewise. 
+       * testsuite/25_algorithms/remove_if/moveable.cc: Likewise. 
+
+       * include/bits/stl_algobase.h (lexicographical_compare):
+       Clean up.
+
+2007-10-07  Chris Jefferson  <chris@bubblescope.net>
+           Paolo Carlini  <pcarlini@suse.de>
+
+       * include/bits/stl_algo.h (remove, remove_if, unique,
+       __rotate(_RandomAccessIterator, _RandomAccessIterator,
+       _RandomAccessIterator, random_access_iterator_tag)): Use _GLIBCXX_MOVE.
+       (__rotate(_ForwardIterator, _ForwardIterator, _ForwardIterator,
+       forward_iterator_tag), __rotate(_BidirectionalIterator,
+       _BidirectionalIterator, _BidirectionalIterator,
+       bidirectional_iterator_tag), __partition(_ForwardIterator,
+       _ForwardIterator, _Predicate, forward_iterator_tag)): Use iter_swap.
+
 2007-10-06  Benjamin Kosnik  <bkoz@redhat.com>
 
        PR libstdc++/33678      
index cd14190d740461e656afb16025a0ffc6dda8c121..a5b99c5a0763a1f1814f69b32a9aaaec0178e75a 100644 (file)
@@ -788,9 +788,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       __glibcxx_requires_valid_range(__first, __last);
 
       __first = _GLIBCXX_STD_P::find(__first, __last, __value);
-      _ForwardIterator __i = __first;
-      return __first == __last ? __first
-                       : std::remove_copy(++__i, __last, __first, __value);
+      if(__first == __last)
+        return __first;
+      _ForwardIterator __result = __first;
+      ++__first;
+      for(; __first != __last; ++__first)
+        if(!(*__first == __value))
+          {
+            *__result = _GLIBCXX_MOVE(*__first);
+            ++__result;
+          }
+      return __result;
     }
 
   /**
@@ -822,10 +830,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       __glibcxx_requires_valid_range(__first, __last);
 
       __first = _GLIBCXX_STD_P::find_if(__first, __last, __pred);
-      _ForwardIterator __i = __first;
-      return __first == __last ? __first
-                              : std::remove_copy_if(++__i, __last,
-                                                    __first, __pred);
+      if(__first == __last)
+        return __first;
+      _ForwardIterator __result = __first;
+      ++__first;
+      for(; __first != __last; ++__first)
+        if(!__pred(*__first))
+          {
+            *__result = _GLIBCXX_MOVE(*__first);
+            ++__result;
+          }
+      return __result;
     }
 
   /**
@@ -862,7 +877,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       ++__first;
       while (++__first != __last)
        if (!(*__dest == *__first))
-         *++__dest = *__first;
+         *++__dest = _GLIBCXX_MOVE(*__first);
       return ++__dest;
     }
 
@@ -903,7 +918,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       ++__first;
       while (++__first != __last)
        if (!bool(__binary_pred(*__dest, *__first)))
-         *++__dest = *__first;
+         *++__dest = _GLIBCXX_MOVE(*__first);
       return ++__dest;
     }
 
@@ -1207,7 +1222,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       _ForwardIterator __first2 = __middle;
       do
        {
-         swap(*__first, *__first2);
+         std::iter_swap(__first, __first2);
          ++__first;
          ++__first2;
          if (__first == __middle)
@@ -1219,7 +1234,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
       while (__first2 != __last)
        {
-         swap(*__first, *__first2);
+         std::iter_swap(__first, __first2);
          ++__first;
          ++__first2;
          if (__first == __middle)
@@ -1253,7 +1268,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
       while (__first != __middle && __middle != __last)
        {
-         swap(*__first, *--__last);
+         std::iter_swap(__first, --__last);
          ++__first;
        }
 
@@ -1301,7 +1316,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
 
       for (_Distance __i = 0; __i < __d; __i++)
        {
-         _ValueType __tmp = *__first;
+         _ValueType __tmp = _GLIBCXX_MOVE(*__first);
          _RandomAccessIterator __p = __first;
 
          if (__k < __l)
@@ -1310,11 +1325,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
                {
                  if (__p > __first + __l)
                    {
-                     *__p = *(__p - __l);
+                     *__p = _GLIBCXX_MOVE(*(__p - __l));
                      __p -= __l;
                    }
 
-                 *__p = *(__p + __k);
+                 *__p = _GLIBCXX_MOVE(*(__p + __k));
                  __p += __k;
                }
            }
@@ -1324,15 +1339,15 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
                {
                  if (__p < __last - __k)
                    {
-                     *__p = *(__p + __k);
+                     *__p = _GLIBCXX_MOVE(*(__p + __k));
                      __p += __k;
                    }
-                 *__p = * (__p - __l);
+                 *__p = _GLIBCXX_MOVE(*(__p - __l));
                  __p -= __l;
                }
            }
 
-         *__p = __tmp;
+         *__p = _GLIBCXX_MOVE(__tmp);
          ++__first;
        }
     }
@@ -1412,8 +1427,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template<typename _ForwardIterator, typename _Predicate>
     _ForwardIterator
     __partition(_ForwardIterator __first, _ForwardIterator __last,
-               _Predicate __pred,
-               forward_iterator_tag)
+               _Predicate __pred, forward_iterator_tag)
     {
       if (__first == __last)
        return __first;
@@ -1427,7 +1441,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       while (++__next != __last)
        if (__pred(*__next))
          {
-           swap(*__first, *__next);
+           std::iter_swap(__first, __next);
            ++__first;
          }
 
@@ -1442,8 +1456,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template<typename _BidirectionalIterator, typename _Predicate>
     _BidirectionalIterator
     __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
-               _Predicate __pred,
-               bidirectional_iterator_tag)
+               _Predicate __pred, bidirectional_iterator_tag)
     {
       while (true)
        {
index c6648b43b9d69d12d11554fb271a7b7cb9f82e22..e0e285088d6ed3244ec108507ca21d21850b6b8f 100644 (file)
 #include <bits/concept_check.h>
 #include <debug/debug.h>
 
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+# include <utility>
+# define _GLIBCXX_MOVE(_Tp) std::move(_Tp)
+#else
+# define _GLIBCXX_MOVE(_Tp) _Tp
+#endif
+
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
   /**
@@ -92,9 +99,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
       // concept requirements
       __glibcxx_function_requires(_SGIAssignableConcept<_Tp>)
 
-      _Tp __tmp = __a;
-      __a = __b;
-      __b = __tmp;
+      _Tp __tmp = _GLIBCXX_MOVE(__a);
+      __a = _GLIBCXX_MOVE(__b);
+      __b = _GLIBCXX_MOVE(__tmp);
     }
 
   // See http://gcc.gnu.org/ml/libstdc++/2004-08/msg00167.html: in a
@@ -109,9 +116,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
         {
           typedef typename iterator_traits<_ForwardIterator1>::value_type
             _ValueType1;
-          _ValueType1 __tmp = *__a;
-          *__a = *__b;
-          *__b = __tmp; 
+          _ValueType1 __tmp = _GLIBCXX_MOVE(*__a);
+          *__a = _GLIBCXX_MOVE(*__b);
+          *__b = _GLIBCXX_MOVE(__tmp);
        }
     };
 
@@ -879,6 +886,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
     {
       typedef typename iterator_traits<_II1>::iterator_category _Category1;
       typedef typename iterator_traits<_II2>::iterator_category _Category2;
+      typedef __lc_rai<_Category1, _Category2>         __rai_type;
 
       // concept requirements
       typedef typename iterator_traits<_II1>::value_type _ValueType1;
@@ -890,12 +898,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
       __glibcxx_requires_valid_range(__first1, __last1);
       __glibcxx_requires_valid_range(__first2, __last2);
 
-      __last1 = __lc_rai<_Category1, _Category2>::__newlast1(__first1,
-                                                            __last1,
-                                                            __first2,
-                                                            __last2);
-      for (; __first1 != __last1
-            && __lc_rai<_Category1, _Category2>::__cnd2(__first2, __last2);
+      __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
+      for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
           ++__first1, ++__first2)
        {
          if (*__first1 < *__first2)
index 49a20d72cb4243c5b31ef1595c08c71141cad5e1..a31e5277bfa06863207963ba5fde0e6c3e082cd2 100644 (file)
@@ -1,4 +1,3 @@
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.
index 122d503be05f6b63aade5d5d96a76862139922ef..5a0e77e2e89af6c916eb0d735a21c52783ca43fd 100644 (file)
@@ -1,4 +1,3 @@
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.
index 15b9ab679d81d8ecd7f25152dcac899d75e99161..db49433452f1752a81406f73ea42097bdee78c11 100644 (file)
@@ -1,4 +1,3 @@
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.
index 10577fc631b8615a7b87365903063c80c0195707..c01bf71339e24844e3438eb8e9bb5d9af81740f7 100644 (file)
@@ -1,5 +1,4 @@
 // { dg-do compile }
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.
index febf758f146f887fceeaf7eb50db4184f3ad0aa2..6d132cf02bc3bf97c445c6c4470b28fc6791507a 100644 (file)
@@ -1,4 +1,3 @@
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.
index 57876d8edfc6e82cd01893166b746d889a8308f7..f1d842441a9c6876d9578f283ce529e2edff9617 100644 (file)
@@ -1,5 +1,4 @@
 // { dg-do compile }
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.
index 839d6e4c039a3618f5335a0e0c0731ee34cf8d9e..13bcc1b22fd5411392e905710378652c2cc08e91 100644 (file)
@@ -1,4 +1,3 @@
-// { dg-require-rvalref "" }
 // { dg-options "-std=gnu++0x" }
 
 // Copyright (C) 2005, 2007 Free Software Foundation, Inc.