OSDN Git Service

2011-01-30 Benjamin Kosnik <bkoz@redhat.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / include / parallel / algo.h
index 7f32036..89b7f6d 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C++ -*-
 
-// Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the terms
@@ -58,7 +58,7 @@
 #include <parallel/unique_copy.h>
 #include <parallel/set_operations.h>
 
-namespace std
+namespace std _GLIBCXX_VISIBILITY(default)
 {
 namespace __parallel
 {
@@ -67,7 +67,7 @@ namespace __parallel
     inline _Function
     for_each(_IIter __begin, _IIter __end, _Function __f, 
              __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::for_each(__begin, __end, __f); }
+    { return _GLIBCXX_STD_A::for_each(__begin, __end, __f); }
 
 
   // Sequential fallback for input iterator case
@@ -94,9 +94,10 @@ namespace __parallel
     __gnu_parallel::__for_each_selector<_RAIter> __functionality;
 
           return __gnu_parallel::
-            __for_each_template_random_access(__begin, __end, __f, __functionality,
-                                            __gnu_parallel::_DummyReduct(),
-                                            true, __dummy, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __f, __functionality,
+              __gnu_parallel::_DummyReduct(), true, __dummy, -1,
+              __parallelism_tag);
         }
       else
         return for_each(__begin, __end, __f, __gnu_parallel::sequential_tag());
@@ -129,14 +130,14 @@ namespace __parallel
     inline _IIter
     find(_IIter __begin, _IIter __end, const _Tp& __val, 
          __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::find(__begin, __end, __val); }
+    { return _GLIBCXX_STD_A::find(__begin, __end, __val); }
 
   // Sequential fallback for input iterator case
   template<typename _IIter, typename _Tp, typename _IteratorTag>
     inline _IIter
     __find_switch(_IIter __begin, _IIter __end, const _Tp& __val,
                 _IteratorTag)
-    { return _GLIBCXX_STD_P::find(__begin, __end, __val); }
+    { return _GLIBCXX_STD_A::find(__begin, __end, __val); }
 
   // Parallel find for random access iterators
   template<typename _RAIter, typename _Tp>
@@ -149,14 +150,14 @@ namespace __parallel
 
       if (_GLIBCXX_PARALLEL_CONDITION(true))
         {
-          binder2nd<__gnu_parallel::equal_to<_ValueType, const _Tp&> >
-            __comp(__gnu_parallel::equal_to<_ValueType, const _Tp&>(), __val);
-          return __gnu_parallel::__find_template(__begin, __end, __begin, __comp,
-                                               __gnu_parallel::
-                                               __find_if_selector()).first;
+         std::binder2nd<__gnu_parallel::_EqualTo<_ValueType, const _Tp&> >
+            __comp(__gnu_parallel::_EqualTo<_ValueType, const _Tp&>(), __val);
+          return __gnu_parallel::__find_template(
+                   __begin, __end, __begin, __comp,
+                   __gnu_parallel::__find_if_selector()).first;
         }
       else
-        return _GLIBCXX_STD_P::find(__begin, __end, __val);
+        return _GLIBCXX_STD_A::find(__begin, __end, __val);
     }
 
   // Public interface
@@ -174,14 +175,14 @@ namespace __parallel
     inline _IIter
     find_if(_IIter __begin, _IIter __end, _Predicate __pred, 
             __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::find_if(__begin, __end, __pred); }
+    { return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
 
   // Sequential fallback for input iterator case
   template<typename _IIter, typename _Predicate, typename _IteratorTag>
     inline _IIter
     __find_if_switch(_IIter __begin, _IIter __end, _Predicate __pred, 
                    _IteratorTag)
-    { return _GLIBCXX_STD_P::find_if(__begin, __end, __pred); }
+    { return _GLIBCXX_STD_A::find_if(__begin, __end, __pred); }
 
   // Parallel find_if for random access iterators
   template<typename _RAIter, typename _Predicate>
@@ -190,11 +191,11 @@ namespace __parallel
                    _Predicate __pred, random_access_iterator_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(true))
-        return __gnu_parallel::__find_template(__begin, __end, __begin, __pred, 
+        return __gnu_parallel::__find_template(__begin, __end, __begin, __pred,
                                              __gnu_parallel::
                                              __find_if_selector()).first;
       else
-        return _GLIBCXX_STD_P::find_if(__begin, __end, __pred);
+        return _GLIBCXX_STD_A::find_if(__begin, __end, __pred);
     }
 
   // Public interface
@@ -208,69 +209,71 @@ namespace __parallel
     }
 
   // Sequential fallback
-  template<typename _IIter, typename _ForwardIterator>
+  template<typename _IIter, typename _FIterator>
     inline _IIter
     find_first_of(_IIter __begin1, _IIter __end1, 
-                  _ForwardIterator __begin2, _ForwardIterator __end2, 
+                  _FIterator __begin2, _FIterator __end2, 
                   __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::find_first_of(__begin1, __end1, __begin2, __end2); }
+    { return _GLIBCXX_STD_A::find_first_of(__begin1, __end1, __begin2, __end2);
+      }
 
   // Sequential fallback
-  template<typename _IIter, typename _ForwardIterator,
+  template<typename _IIter, typename _FIterator,
            typename _BinaryPredicate>
     inline _IIter
     find_first_of(_IIter __begin1, _IIter __end1,
-                  _ForwardIterator __begin2, _ForwardIterator __end2,
+                  _FIterator __begin2, _FIterator __end2,
                   _BinaryPredicate __comp, __gnu_parallel::sequential_tag)
-  { return _GLIBCXX_STD_P::find_first_of(__begin1, __end1, __begin2, __end2, __comp); }
+  { return _GLIBCXX_STD_A::find_first_of(
+             __begin1, __end1, __begin2, __end2, __comp); }
 
-  // Sequential fallback for input iterator _Self
-  template<typename _IIter, typename _ForwardIterator,
+  // Sequential fallback for input iterator type
+  template<typename _IIter, typename _FIterator,
            typename _IteratorTag1, typename _IteratorTag2>
     inline _IIter
     __find_first_of_switch(_IIter __begin1, _IIter __end1,
-                         _ForwardIterator __begin2, _ForwardIterator __end2, 
+                         _FIterator __begin2, _FIterator __end2, 
                          _IteratorTag1, _IteratorTag2)
     { return find_first_of(__begin1, __end1, __begin2, __end2, 
                            __gnu_parallel::sequential_tag()); }
 
   // Parallel algorithm for random access iterators
-  template<typename _RAIter, typename _ForwardIterator,
+  template<typename _RAIter, typename _FIterator,
            typename _BinaryPredicate, typename _IteratorTag>
     inline _RAIter
     __find_first_of_switch(_RAIter __begin1,
                          _RAIter __end1,
-                         _ForwardIterator __begin2, _ForwardIterator __end2, 
+                         _FIterator __begin2, _FIterator __end2, 
                          _BinaryPredicate __comp, random_access_iterator_tag, 
                          _IteratorTag)
     {
       return __gnu_parallel::
         __find_template(__begin1, __end1, __begin1, __comp,
                       __gnu_parallel::__find_first_of_selector
-                      <_ForwardIterator>(__begin2, __end2)).first;
+                      <_FIterator>(__begin2, __end2)).first;
     }
 
-  // Sequential fallback for input iterator _Self
-  template<typename _IIter, typename _ForwardIterator,
+  // Sequential fallback for input iterator type
+  template<typename _IIter, typename _FIterator,
            typename _BinaryPredicate, typename _IteratorTag1,
            typename _IteratorTag2>
     inline _IIter
     __find_first_of_switch(_IIter __begin1, _IIter __end1,
-                         _ForwardIterator __begin2, _ForwardIterator __end2, 
+                         _FIterator __begin2, _FIterator __end2, 
                          _BinaryPredicate __comp, _IteratorTag1, _IteratorTag2)
     { return find_first_of(__begin1, __end1, __begin2, __end2, __comp, 
                            __gnu_parallel::sequential_tag()); }
 
   // Public interface
-  template<typename _IIter, typename _ForwardIterator,
+  template<typename _IIter, typename _FIterator,
            typename _BinaryPredicate>
     inline _IIter
     find_first_of(_IIter __begin1, _IIter __end1,
-                  _ForwardIterator __begin2, _ForwardIterator __end2, 
+                  _FIterator __begin2, _FIterator __end2, 
                   _BinaryPredicate __comp)
     {
       typedef std::iterator_traits<_IIter> _IIterTraits;
-      typedef std::iterator_traits<_ForwardIterator> iteratorf_traits;
+      typedef std::iterator_traits<_FIterator> iteratorf_traits;
       typedef typename _IIterTraits::iterator_category _IIteratorCategory;
       typedef typename iteratorf_traits::iterator_category iteratorf_category;
 
@@ -279,18 +282,18 @@ namespace __parallel
     }
 
   // Public interface, insert default comparator
-  template<typename _IIter, typename _ForwardIterator>
+  template<typename _IIter, typename _FIterator>
     inline _IIter
     find_first_of(_IIter __begin1, _IIter __end1, 
-                  _ForwardIterator __begin2, _ForwardIterator __end2)
+                  _FIterator __begin2, _FIterator __end2)
     {
       typedef std::iterator_traits<_IIter> _IIterTraits;
-      typedef std::iterator_traits<_ForwardIterator> iteratorf_traits;
+      typedef std::iterator_traits<_FIterator> iteratorf_traits;
       typedef typename _IIterTraits::value_type _IValueType;
       typedef typename iteratorf_traits::value_type _FValueType;
 
-      return find_first_of(__begin1, __end1, __begin2, __end2, __gnu_parallel::
-                           equal_to<_IValueType, _FValueType>());
+      return __gnu_parallel::find_first_of(__begin1, __end1, __begin2, __end2,
+                         __gnu_parallel::_EqualTo<_IValueType, _FValueType>());
     }
 
   // Sequential fallback
@@ -298,7 +301,7 @@ namespace __parallel
     inline _OutputIterator
     unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
                 __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::unique_copy(__begin1, __end1, __out); }
+    { return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out); }
 
   // Sequential fallback
   template<typename _IIter, typename _OutputIterator,
@@ -306,7 +309,7 @@ namespace __parallel
     inline _OutputIterator
     unique_copy(_IIter __begin1, _IIter __end1, _OutputIterator __out,
                 _Predicate __pred, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::unique_copy(__begin1, __end1, __out, __pred); }
+    { return _GLIBCXX_STD_A::unique_copy(__begin1, __end1, __out, __pred); }
 
   // Sequential fallback for input iterator case
   template<typename _IIter, typename _OutputIterator,
@@ -315,7 +318,7 @@ namespace __parallel
     __unique_copy_switch(_IIter __begin, _IIter __last, 
                        _OutputIterator __out, _Predicate __pred, 
                        _IteratorTag1, _IteratorTag2)
-    { return _GLIBCXX_STD_P::unique_copy(__begin, __last, __out, __pred); }
+    { return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred); }
 
   // Parallel unique_copy for random access iterators
   template<typename _RAIter, typename RandomAccessOutputIterator,
@@ -328,9 +331,10 @@ namespace __parallel
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__last - __begin)
             > __gnu_parallel::_Settings::get().unique_copy_minimal_n))
-        return __gnu_parallel::__parallel_unique_copy(__begin, __last, __out, __pred);
+        return __gnu_parallel::__parallel_unique_copy(
+                 __begin, __last, __out, __pred);
       else
-        return _GLIBCXX_STD_P::unique_copy(__begin, __last, __out, __pred);
+        return _GLIBCXX_STD_A::unique_copy(__begin, __last, __out, __pred);
     }
 
   // Public interface
@@ -344,8 +348,9 @@ namespace __parallel
       typedef typename _IIterTraits::value_type _ValueType;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __unique_copy_switch(__begin1, __end1, __out, equal_to<_ValueType>(),
-                                _IIteratorCategory(), _OIterCategory());
+      return __unique_copy_switch(
+               __begin1, __end1, __out, equal_to<_ValueType>(),
+               _IIteratorCategory(), _OIterCategory());
     }
 
   // Public interface
@@ -359,8 +364,9 @@ namespace __parallel
       typedef typename _IIterTraits::iterator_category _IIteratorCategory;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __unique_copy_switch(__begin1, __end1, __out, __pred, _IIteratorCategory(), 
-                                _OIterCategory());
+      return __unique_copy_switch(
+               __begin1, __end1, __out, __pred,
+               _IIteratorCategory(), _OIterCategory());
     }
 
   // Sequential fallback
@@ -370,7 +376,8 @@ namespace __parallel
     set_union(_IIter1 __begin1, _IIter1 __end1,
               _IIter2 __begin2, _IIter2 __end2,
               _OutputIterator __out, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_union(__begin1, __end1, __begin2, __end2, __out); }
+    { return _GLIBCXX_STD_A::set_union(
+               __begin1, __end1, __begin2, __end2, __out); }
 
   // Sequential fallback
   template<typename _IIter1, typename _IIter2,
@@ -380,19 +387,19 @@ namespace __parallel
               _IIter2 __begin2, _IIter2 __end2,
               _OutputIterator __out, _Predicate __pred,
               __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_union(__begin1, __end1,
+    { return _GLIBCXX_STD_A::set_union(__begin1, __end1,
                                        __begin2, __end2, __out, __pred); }
 
   // Sequential fallback for input iterator case
-  template<typename _IIter1, typename _IIter2,
-           typename _Predicate, typename _OutputIterator,
-           typename _IteratorTag1, typename _IteratorTag2, typename _IteratorTag3>
+  template<typename _IIter1, typename _IIter2, typename _Predicate,
+           typename _OutputIterator, typename _IteratorTag1,
+           typename _IteratorTag2, typename _IteratorTag3>
     inline _OutputIterator
-    __set_union_switch(_IIter1 __begin1, _IIter1 __end1, 
-                     _IIter2 __begin2, _IIter2 __end2, 
-                     _OutputIterator __result, _Predicate __pred, _IteratorTag1,
-                     _IteratorTag2, _IteratorTag3)
-    { return _GLIBCXX_STD_P::set_union(__begin1, __end1,
+    __set_union_switch(
+      _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
+      _OutputIterator __result, _Predicate __pred,
+      _IteratorTag1, _IteratorTag2, _IteratorTag3)
+    { return _GLIBCXX_STD_A::set_union(__begin1, __end1,
                                        __begin2, __end2, __result, __pred); }
 
   // Parallel set_union for random access iterators
@@ -410,10 +417,10 @@ namespace __parallel
             >= __gnu_parallel::_Settings::get().set_union_minimal_n
             || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
             >= __gnu_parallel::_Settings::get().set_union_minimal_n))
-        return __gnu_parallel::__parallel_set_union(__begin1, __end1,
-                                                  __begin2, __end2, __result, __pred);
+        return __gnu_parallel::__parallel_set_union(
+                 __begin1, __end1, __begin2, __end2, __result, __pred);
       else
-        return _GLIBCXX_STD_P::set_union(__begin1, __end1,
+        return _GLIBCXX_STD_A::set_union(__begin1, __end1,
                                          __begin2, __end2, __result, __pred);
     }
 
@@ -435,10 +442,10 @@ namespace __parallel
       typedef typename _IIterTraits1::value_type _ValueType1;
       typedef typename _IIterTraits2::value_type _ValueType2;
 
-      return __set_union_switch(__begin1, __end1, __begin2, __end2, __out, 
-                              __gnu_parallel::_Less<_ValueType1, _ValueType2>(),
-                              _IIterCategory1(), _IIterCategory2(),
-                              _OIterCategory());
+      return __set_union_switch(
+               __begin1, __end1, __begin2, __end2, __out,
+               __gnu_parallel::_Less<_ValueType1, _ValueType2>(),
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Public interface
@@ -458,9 +465,9 @@ namespace __parallel
         _IIterCategory2;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __set_union_switch(__begin1, __end1, __begin2, __end2, __out, __pred,
-                              _IIterCategory1(), _IIterCategory2(),
-                              _OIterCategory());
+      return __set_union_switch(
+               __begin1, __end1, __begin2, __end2, __out, __pred,
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Sequential fallback.
@@ -470,7 +477,7 @@ namespace __parallel
     set_intersection(_IIter1 __begin1, _IIter1 __end1,
                      _IIter2 __begin2, _IIter2 __end2,
                      _OutputIterator __out, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_intersection(__begin1, __end1,
+    { return _GLIBCXX_STD_A::set_intersection(__begin1, __end1,
                                               __begin2, __end2, __out); }
 
   // Sequential fallback.
@@ -481,8 +488,8 @@ namespace __parallel
                      _IIter2 __begin2, _IIter2 __end2,
                      _OutputIterator __out, _Predicate __pred, 
                      __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_intersection(__begin1, __end1, __begin2, __end2, 
-                                              __out, __pred); }
+    { return _GLIBCXX_STD_A::set_intersection(
+               __begin1, __end1, __begin2, __end2, __out, __pred); }
 
   // Sequential fallback for input iterator case
   template<typename _IIter1, typename _IIter2,
@@ -490,11 +497,11 @@ namespace __parallel
            typename _IteratorTag1, typename _IteratorTag2,
            typename _IteratorTag3>
     inline _OutputIterator 
-    __set_intersection_switch(_IIter1 __begin1, _IIter1 __end1, 
-                            _IIter2 __begin2, _IIter2 __end2, 
-                            _OutputIterator __result, _Predicate __pred, 
-                            _IteratorTag1, _IteratorTag2, _IteratorTag3)
-    { return _GLIBCXX_STD_P::set_intersection(__begin1, __end1, __begin2, 
+    __set_intersection_switch(_IIter1 __begin1, _IIter1 __end1,
+                              _IIter2 __begin2, _IIter2 __end2,
+                              _OutputIterator __result, _Predicate __pred,
+                              _IteratorTag1, _IteratorTag2, _IteratorTag3)
+    { return _GLIBCXX_STD_A::set_intersection(__begin1, __end1, __begin2,
                                               __end2, __result, __pred); }
 
   // Parallel set_intersection for random access iterators
@@ -516,11 +523,11 @@ namespace __parallel
             >= __gnu_parallel::_Settings::get().set_union_minimal_n
             || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
             >= __gnu_parallel::_Settings::get().set_union_minimal_n))
-        return __gnu_parallel::__parallel_set_intersection(__begin1, __end1, __begin2, 
-                                                         __end2, __result, __pred);
+        return __gnu_parallel::__parallel_set_intersection(
+                 __begin1, __end1, __begin2, __end2, __result, __pred);
       else
-        return _GLIBCXX_STD_P::set_intersection(__begin1, __end1, __begin2, 
-                                                __end2, __result, __pred);
+        return _GLIBCXX_STD_A::set_intersection(
+                 __begin1, __end1, __begin2, __end2, __result, __pred);
     }
 
   // Public interface
@@ -542,12 +549,10 @@ namespace __parallel
       typedef typename _IIterTraits1::value_type _ValueType1;
       typedef typename _IIterTraits2::value_type _ValueType2;
 
-      return __set_intersection_switch(__begin1, __end1, __begin2, __end2, __out,
-                                     __gnu_parallel::
-                                     _Less<_ValueType1, _ValueType2>(),
-                                     _IIterCategory1(),
-                                     _IIterCategory2(), 
-                                     _OIterCategory());
+      return __set_intersection_switch(
+               __begin1, __end1, __begin2, __end2, __out,
+               __gnu_parallel::_Less<_ValueType1, _ValueType2>(),
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   template<typename _IIter1, typename _IIter2,
@@ -566,10 +571,9 @@ namespace __parallel
         _IIterCategory2;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __set_intersection_switch(__begin1, __end1, __begin2, __end2, __out, __pred,
-                                     _IIterCategory1(),
-                                     _IIterCategory2(),
-                                     _OIterCategory());
+      return __set_intersection_switch(
+               __begin1, __end1, __begin2, __end2, __out, __pred,
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Sequential fallback
@@ -580,8 +584,8 @@ namespace __parallel
                              _IIter2 __begin2, _IIter2 __end2,
                              _OutputIterator __out,
                              __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_symmetric_difference(__begin1,__end1,
-                                                      __begin2, __end2, __out); }
+    { return _GLIBCXX_STD_A::set_symmetric_difference(
+               __begin1, __end1, __begin2, __end2, __out); }
 
   // Sequential fallback
   template<typename _IIter1, typename _IIter2,
@@ -591,8 +595,8 @@ namespace __parallel
                              _IIter2 __begin2, _IIter2 __end2,
                              _OutputIterator __out, _Predicate __pred,
                              __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_symmetric_difference(__begin1, __end1, __begin2,
-                                                      __end2, __out, __pred); }
+    { return _GLIBCXX_STD_A::set_symmetric_difference(
+               __begin1, __end1, __begin2, __end2, __out, __pred); }
 
   // Sequential fallback for input iterator case
   template<typename _IIter1, typename _IIter2,
@@ -600,15 +604,12 @@ namespace __parallel
            typename _IteratorTag1, typename _IteratorTag2,
            typename _IteratorTag3>
     inline _OutputIterator 
-    __set_symmetric_difference_switch(_IIter1 __begin1,
-                                    _IIter1 __end1,
-                                    _IIter2 __begin2,
-                                    _IIter2 __end2,
-                                    _OutputIterator __result, _Predicate __pred,
-                                    _IteratorTag1, _IteratorTag2, _IteratorTag3)
-    { return _GLIBCXX_STD_P::set_symmetric_difference(__begin1, __end1,
-                                                      __begin2, __end2,
-                                                      __result, __pred); }
+    __set_symmetric_difference_switch(
+      _IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, _IIter2 __end2,
+      _OutputIterator __result, _Predicate __pred,
+      _IteratorTag1, _IteratorTag2, _IteratorTag3)
+    { return _GLIBCXX_STD_A::set_symmetric_difference(
+               __begin1, __end1, __begin2, __end2, __result, __pred); }
 
   // Parallel set_symmetric_difference for random access iterators
   template<typename _RAIter1, typename _RAIter2,
@@ -629,13 +630,11 @@ namespace __parallel
       >= __gnu_parallel::_Settings::get().set_symmetric_difference_minimal_n
       || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
       >= __gnu_parallel::_Settings::get().set_symmetric_difference_minimal_n))
-  return __gnu_parallel::__parallel_set_symmetric_difference(__begin1, __end1,
-                                                                 __begin2, __end2,
-                                                                 __result, __pred);
+  return __gnu_parallel::__parallel_set_symmetric_difference(
+           __begin1, __end1, __begin2, __end2, __result, __pred);
       else
-        return _GLIBCXX_STD_P::set_symmetric_difference(__begin1, __end1,
-                                                        __begin2, __end2,
-                                                        __result, __pred);
+        return _GLIBCXX_STD_A::set_symmetric_difference(
+                 __begin1, __end1, __begin2, __end2, __result, __pred);
     }
 
   // Public interface.
@@ -657,12 +656,10 @@ namespace __parallel
       typedef typename _IIterTraits1::value_type _ValueType1;
       typedef typename _IIterTraits2::value_type _ValueType2;
 
-      return __set_symmetric_difference_switch(__begin1, __end1, __begin2, __end2, __out,
-                                             __gnu_parallel::
-                                             _Less<_ValueType1, _ValueType2>(),
-                                             _IIterCategory1(),
-                                             _IIterCategory2(),
-                                             _OIterCategory());
+      return __set_symmetric_difference_switch(
+               __begin1, __end1, __begin2, __end2, __out,
+               __gnu_parallel::_Less<_ValueType1, _ValueType2>(),
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Public interface.
@@ -682,10 +679,9 @@ namespace __parallel
         _IIterCategory2;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __set_symmetric_difference_switch(__begin1, __end1, __begin2, __end2, __out,
-                                             __pred, _IIterCategory1(),
-                                             _IIterCategory2(),
-                                             _OIterCategory());
+      return __set_symmetric_difference_switch(
+               __begin1, __end1, __begin2, __end2, __out, __pred,
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Sequential fallback.
@@ -695,7 +691,8 @@ namespace __parallel
     set_difference(_IIter1 __begin1, _IIter1 __end1, 
                    _IIter2 __begin2, _IIter2 __end2, 
                    _OutputIterator __out, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_difference(__begin1,__end1, __begin2, __end2, __out); }
+    { return _GLIBCXX_STD_A::set_difference(
+               __begin1,__end1, __begin2, __end2, __out); }
 
   // Sequential fallback.
   template<typename _IIter1, typename _IIter2,
@@ -705,20 +702,20 @@ namespace __parallel
                    _IIter2 __begin2, _IIter2 __end2, 
                    _OutputIterator __out, _Predicate __pred, 
                    __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::set_difference(__begin1, __end1,
+    { return _GLIBCXX_STD_A::set_difference(__begin1, __end1,
                                             __begin2, __end2, __out, __pred); }
 
   // Sequential fallback for input iterator case.
-  template<typename _IIter1, typename _IIter2,
-           typename _Predicate, typename _OutputIterator,
-           typename _IteratorTag1, typename _IteratorTag2, typename _IteratorTag3>
+  template<typename _IIter1, typename _IIter2, typename _Predicate,
+           typename _OutputIterator, typename _IteratorTag1,
+           typename _IteratorTag2, typename _IteratorTag3>
     inline _OutputIterator
     __set_difference_switch(_IIter1 __begin1, _IIter1 __end1, 
                           _IIter2 __begin2, _IIter2 __end2, 
                           _OutputIterator __result, _Predicate __pred, 
                           _IteratorTag1, _IteratorTag2, _IteratorTag3)
-    { return _GLIBCXX_STD_P::set_difference(__begin1, __end1,
-                                            __begin2, __end2, __result, __pred); }
+    { return _GLIBCXX_STD_A::set_difference(
+               __begin1, __end1, __begin2, __end2, __result, __pred); }
 
   // Parallel set_difference for random access iterators
   template<typename _RAIter1, typename _RAIter2,
@@ -738,12 +735,11 @@ namespace __parallel
             >= __gnu_parallel::_Settings::get().set_difference_minimal_n
             || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
             >= __gnu_parallel::_Settings::get().set_difference_minimal_n))
-        return __gnu_parallel::__parallel_set_difference(__begin1, __end1,
-                                                       __begin2, __end2,
-                                                       __result, __pred);
+        return __gnu_parallel::__parallel_set_difference(
+                 __begin1, __end1, __begin2, __end2, __result, __pred);
       else
-        return _GLIBCXX_STD_P::set_difference(__begin1, __end1,
-                                              __begin2, __end2, __result, __pred);
+        return _GLIBCXX_STD_A::set_difference(
+                 __begin1, __end1, __begin2, __end2, __result, __pred);
     }
 
   // Public interface
@@ -765,12 +761,10 @@ namespace __parallel
       typedef typename _IIterTraits1::value_type _ValueType1;
       typedef typename _IIterTraits2::value_type _ValueType2;
 
-      return __set_difference_switch(__begin1, __end1, __begin2, __end2, __out,
-                                   __gnu_parallel::
-                                   _Less<_ValueType1, _ValueType2>(), 
-                                   _IIterCategory1(),
-                                   _IIterCategory2(), 
-                                   _OIterCategory());
+      return __set_difference_switch(
+               __begin1, __end1, __begin2, __end2, __out,
+               __gnu_parallel::_Less<_ValueType1, _ValueType2>(),
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Public interface
@@ -790,25 +784,25 @@ namespace __parallel
         _IIterCategory2;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __set_difference_switch(__begin1, __end1, __begin2, __end2, __out, __pred,
-                                   _IIterCategory1(),
-                                   _IIterCategory2(), 
-                                   _OIterCategory());
+      return __set_difference_switch(
+               __begin1, __end1, __begin2, __end2, __out, __pred,
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Sequential fallback
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    adjacent_find(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator>
+    inline _FIterator
+    adjacent_find(_FIterator __begin, _FIterator __end, 
                   __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::adjacent_find(__begin, __end); }
+    { return _GLIBCXX_STD_A::adjacent_find(__begin, __end); }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _BinaryPredicate>
-    inline _ForwardIterator
-    adjacent_find(_ForwardIterator __begin, _ForwardIterator __end, 
-                  _BinaryPredicate __binary_pred, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::adjacent_find(__begin, __end, __binary_pred); }
+  template<typename _FIterator, typename _BinaryPredicate>
+    inline _FIterator
+    adjacent_find(_FIterator __begin, _FIterator __end, 
+                  _BinaryPredicate __binary_pred,
+                  __gnu_parallel::sequential_tag)
+    { return _GLIBCXX_STD_A::adjacent_find(__begin, __end, __binary_pred); }
 
   // Parallel algorithm for random access iterators
   template<typename _RAIter>
@@ -821,40 +815,42 @@ namespace __parallel
 
       if (_GLIBCXX_PARALLEL_CONDITION(true))
         {
-          _RAIter spot = __gnu_parallel::
-            __find_template(__begin, __end - 1, __begin, equal_to<_ValueType>(),
-                          __gnu_parallel::__adjacent_find_selector()).first;
-          if (spot == (__end - 1))
+          _RAIter __spot = __gnu_parallel::
+              __find_template(
+                __begin, __end - 1, __begin, equal_to<_ValueType>(),
+                __gnu_parallel::__adjacent_find_selector())
+            .first;
+          if (__spot == (__end - 1))
             return __end;
           else
-            return spot;
+            return __spot;
         }
       else
         return adjacent_find(__begin, __end, __gnu_parallel::sequential_tag());
     }
 
   // Sequential fallback for input iterator case
-  template<typename _ForwardIterator, typename _IteratorTag>
-    inline _ForwardIterator
-    __adjacent_find_switch(_ForwardIterator __begin, _ForwardIterator __end,
+  template<typename _FIterator, typename _IteratorTag>
+    inline _FIterator
+    __adjacent_find_switch(_FIterator __begin, _FIterator __end,
                          _IteratorTag)
     { return adjacent_find(__begin, __end, __gnu_parallel::sequential_tag()); }
 
   // Public interface
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    adjacent_find(_ForwardIterator __begin, _ForwardIterator __end)
+  template<typename _FIterator>
+    inline _FIterator
+    adjacent_find(_FIterator __begin, _FIterator __end)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
       return __adjacent_find_switch(__begin, __end, _IteratorCategory());
     }
 
   // Sequential fallback for input iterator case
-  template<typename _ForwardIterator, typename _BinaryPredicate,
+  template<typename _FIterator, typename _BinaryPredicate,
            typename _IteratorTag>
-    inline _ForwardIterator
-    __adjacent_find_switch(_ForwardIterator __begin, _ForwardIterator __end, 
+    inline _FIterator
+    __adjacent_find_switch(_FIterator __begin, _FIterator __end, 
                          _BinaryPredicate __pred, _IteratorTag)
     { return adjacent_find(__begin, __end, __pred,
                            __gnu_parallel::sequential_tag()); }
@@ -866,7 +862,7 @@ namespace __parallel
                          _BinaryPredicate __pred, random_access_iterator_tag)
     {
       if (_GLIBCXX_PARALLEL_CONDITION(true))
-        return __gnu_parallel::__find_template(__begin, __end, __begin, __pred, 
+        return __gnu_parallel::__find_template(__begin, __end, __begin, __pred,
                                              __gnu_parallel::
                                              __adjacent_find_selector()).first;
       else
@@ -875,14 +871,15 @@ namespace __parallel
     }
 
   // Public interface
-  template<typename _ForwardIterator, typename _BinaryPredicate>
-    inline _ForwardIterator
-    adjacent_find(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator, typename _BinaryPredicate>
+    inline _FIterator
+    adjacent_find(_FIterator __begin, _FIterator __end, 
                   _BinaryPredicate __pred)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
-      return __adjacent_find_switch(__begin, __end, __pred, _IteratorCategory());
+      return __adjacent_find_switch(__begin, __end, __pred,
+                                    _IteratorCategory());
     }
 
   // Sequential fallback
@@ -890,7 +887,7 @@ namespace __parallel
     inline typename iterator_traits<_IIter>::difference_type
     count(_IIter __begin, _IIter __end, const _Tp& __value, 
           __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::count(__begin, __end, __value); }
+    { return _GLIBCXX_STD_A::count(__begin, __end, __value); }
 
   // Parallel code for random access iterators
   template<typename _RAIter, typename _Tp>
@@ -914,14 +911,15 @@ namespace __parallel
             __functionality;
           _DifferenceType __res = 0;
           __gnu_parallel::
-            __for_each_template_random_access(__begin, __end, __value,
-                                            __functionality,
-                                            std::plus<_SequenceIndex>(),
-                                            __res, __res, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __value, __functionality,
+              std::plus<_SequenceIndex>(), __res, __res, -1,
+              __parallelism_tag);
           return __res;
         }
       else
-        return count(__begin, __end, __value, __gnu_parallel::sequential_tag());
+        return count(__begin, __end, __value,
+                     __gnu_parallel::sequential_tag());
     }
 
   // Sequential fallback for input iterator case.
@@ -929,7 +927,8 @@ namespace __parallel
     inline typename iterator_traits<_IIter>::difference_type
     __count_switch(_IIter __begin, _IIter __end, const _Tp& __value, 
                  _IteratorTag)
-    { return count(__begin, __end, __value, __gnu_parallel::sequential_tag()); }
+    { return count(__begin, __end, __value, __gnu_parallel::sequential_tag());
+      }
 
   // Public interface.
   template<typename _IIter, typename _Tp>
@@ -939,8 +938,8 @@ namespace __parallel
     {
       typedef iterator_traits<_IIter> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
-      return __count_switch(__begin, __end, __value, _IteratorCategory(), 
-                          __parallelism_tag);
+      return __count_switch(__begin, __end, __value, _IteratorCategory(),
+                            __parallelism_tag);
     }
 
   template<typename _IIter, typename _Tp>
@@ -958,13 +957,13 @@ namespace __parallel
     inline typename iterator_traits<_IIter>::difference_type
     count_if(_IIter __begin, _IIter __end, _Predicate __pred, 
              __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::count_if(__begin, __end, __pred); }
+    { return _GLIBCXX_STD_A::count_if(__begin, __end, __pred); }
 
   // Parallel count_if for random access iterators
   template<typename _RAIter, typename _Predicate>
     typename iterator_traits<_RAIter>::difference_type
     __count_if_switch(_RAIter __begin, _RAIter __end, 
-                    _Predicate __pred, random_access_iterator_tag, 
+                    _Predicate __pred, random_access_iterator_tag,
                     __gnu_parallel::_Parallelism __parallelism_tag
                     = __gnu_parallel::parallel_unbalanced)
     {
@@ -983,14 +982,15 @@ namespace __parallel
             __count_if_selector<_RAIter, _DifferenceType>
             __functionality;
           __gnu_parallel::
-            __for_each_template_random_access(__begin, __end, __pred,
-                                            __functionality,
-                                            std::plus<_SequenceIndex>(),
-                                            __res, __res, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __pred, __functionality,
+              std::plus<_SequenceIndex>(), __res, __res, -1,
+              __parallelism_tag);
           return __res;
         }
       else
-        return count_if(__begin, __end, __pred, __gnu_parallel::sequential_tag());
+        return count_if(__begin, __end, __pred,
+                        __gnu_parallel::sequential_tag());
     }
 
   // Sequential fallback for input iterator case.
@@ -998,7 +998,8 @@ namespace __parallel
     inline typename iterator_traits<_IIter>::difference_type
     __count_if_switch(_IIter __begin, _IIter __end, _Predicate __pred, 
                     _IteratorTag)
-    { return count_if(__begin, __end, __pred, __gnu_parallel::sequential_tag()); }
+    { return count_if(__begin, __end, __pred,
+                      __gnu_parallel::sequential_tag()); }
 
   // Public interface.
   template<typename _IIter, typename _Predicate>
@@ -1023,12 +1024,12 @@ namespace __parallel
 
 
   // Sequential fallback.
-  template<typename ForwardIterator1, typename ForwardIterator2>
-    inline ForwardIterator1
-    search(ForwardIterator1 __begin1, ForwardIterator1 __end1,
-           ForwardIterator2 __begin2, ForwardIterator2 __end2,
+  template<typename _FIterator1, typename _FIterator2>
+    inline _FIterator1
+    search(_FIterator1 __begin1, _FIterator1 __end1,
+           _FIterator2 __begin2, _FIterator2 __end2,
            __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::search(__begin1, __end1, __begin2, __end2); }
+    { return _GLIBCXX_STD_A::search(__begin1, __end1, __begin2, __end2); }
 
   // Parallel algorithm for random access iterator
   template<typename _RAIter1, typename _RAIter2>
@@ -1037,53 +1038,57 @@ namespace __parallel
                   _RAIter2 __begin2, _RAIter2 __end2,
                   random_access_iterator_tag, random_access_iterator_tag)
     {
-      typedef std::iterator_traits<_RAIter1> iterator1_traits;
-      typedef typename iterator1_traits::value_type _ValueType1;
-      typedef std::iterator_traits<_RAIter2> iterator2_traits;
-      typedef typename iterator2_traits::value_type _ValueType2;
+      typedef std::iterator_traits<_RAIter1> _Iterator1Traits;
+      typedef typename _Iterator1Traits::value_type _ValueType1;
+      typedef std::iterator_traits<_RAIter2> _Iterator2Traits;
+      typedef typename _Iterator2Traits::value_type _ValueType2;
 
-      if (_GLIBCXX_PARALLEL_CONDITION(true))
+      if (_GLIBCXX_PARALLEL_CONDITION(
+                static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
+            >= __gnu_parallel::_Settings::get().search_minimal_n))
         return __gnu_parallel::
-          __search_template(__begin1, __end1, __begin2, __end2, __gnu_parallel::
-                          equal_to<_ValueType1, _ValueType2>());
+          __search_template(
+            __begin1, __end1, __begin2, __end2,
+            __gnu_parallel::_EqualTo<_ValueType1, _ValueType2>());
       else
         return search(__begin1, __end1, __begin2, __end2,
                       __gnu_parallel::sequential_tag());
     }
 
   // Sequential fallback for input iterator case
-  template<typename ForwardIterator1, typename ForwardIterator2,
+  template<typename _FIterator1, typename _FIterator2,
            typename _IteratorTag1, typename _IteratorTag2>
-    inline ForwardIterator1
-    __search_switch(ForwardIterator1 __begin1, ForwardIterator1 __end1,
-                  ForwardIterator2 __begin2, ForwardIterator2 __end2,
+    inline _FIterator1
+    __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
+                  _FIterator2 __begin2, _FIterator2 __end2,
                   _IteratorTag1, _IteratorTag2)
     { return search(__begin1, __end1, __begin2, __end2,
                     __gnu_parallel::sequential_tag()); }
 
   // Public interface.
-  template<typename ForwardIterator1, typename ForwardIterator2>
-    inline ForwardIterator1
-    search(ForwardIterator1 __begin1, ForwardIterator1 __end1,
-           ForwardIterator2 __begin2, ForwardIterator2 __end2)
+  template<typename _FIterator1, typename _FIterator2>
+    inline _FIterator1
+    search(_FIterator1 __begin1, _FIterator1 __end1,
+           _FIterator2 __begin2, _FIterator2 __end2)
     {
-      typedef std::iterator_traits<ForwardIterator1> iterator1_traits;
-      typedef typename iterator1_traits::iterator_category _IteratorCategory1;
-      typedef std::iterator_traits<ForwardIterator2> iterator2_traits;
-      typedef typename iterator2_traits::iterator_category _IteratorCategory2;
+      typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
+      typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
+      typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
+      typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
 
       return __search_switch(__begin1, __end1, __begin2, __end2,
                            _IteratorCategory1(), _IteratorCategory2());
     }
 
   // Public interface.
-  template<typename ForwardIterator1, typename ForwardIterator2,
+  template<typename _FIterator1, typename _FIterator2,
            typename _BinaryPredicate>
-    inline ForwardIterator1
-    search(ForwardIterator1 __begin1, ForwardIterator1 __end1,
-           ForwardIterator2 __begin2, ForwardIterator2 __end2,
+    inline _FIterator1
+    search(_FIterator1 __begin1, _FIterator1 __end1,
+           _FIterator2 __begin2, _FIterator2 __end2,
            _BinaryPredicate __pred, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::search(__begin1, __end1, __begin2, __end2, __pred); }
+    { return _GLIBCXX_STD_A::search(
+                               __begin1, __end1, __begin2, __end2, __pred); }
 
   // Parallel algorithm for random access iterator.
   template<typename _RAIter1, typename _RAIter2,
@@ -1094,7 +1099,9 @@ namespace __parallel
                   _BinaryPredicate __pred,
                   random_access_iterator_tag, random_access_iterator_tag)
     {
-      if (_GLIBCXX_PARALLEL_CONDITION(true))
+      if (_GLIBCXX_PARALLEL_CONDITION(
+                static_cast<__gnu_parallel::_SequenceIndex>(__end1 - __begin1)
+            >= __gnu_parallel::_Settings::get().search_minimal_n))
         return __gnu_parallel::__search_template(__begin1, __end1,
                                                __begin2, __end2, __pred);
       else
@@ -1103,95 +1110,100 @@ namespace __parallel
     }
 
   // Sequential fallback for input iterator case
-  template<typename ForwardIterator1, typename ForwardIterator2,
+  template<typename _FIterator1, typename _FIterator2,
            typename _BinaryPredicate, typename _IteratorTag1,
            typename _IteratorTag2>
-    inline ForwardIterator1
-    __search_switch(ForwardIterator1 __begin1, ForwardIterator1 __end1,
-                  ForwardIterator2 __begin2, ForwardIterator2 __end2,
+    inline _FIterator1
+    __search_switch(_FIterator1 __begin1, _FIterator1 __end1,
+                  _FIterator2 __begin2, _FIterator2 __end2,
                   _BinaryPredicate __pred, _IteratorTag1, _IteratorTag2)
     { return search(__begin1, __end1, __begin2, __end2, __pred,
                     __gnu_parallel::sequential_tag()); }
 
   // Public interface
-  template<typename ForwardIterator1, typename ForwardIterator2,
+  template<typename _FIterator1, typename _FIterator2,
            typename _BinaryPredicate>
-    inline ForwardIterator1
-    search(ForwardIterator1 __begin1, ForwardIterator1 __end1,
-           ForwardIterator2 __begin2, ForwardIterator2 __end2,
+    inline _FIterator1
+    search(_FIterator1 __begin1, _FIterator1 __end1,
+           _FIterator2 __begin2, _FIterator2 __end2,
            _BinaryPredicate  __pred)
     {
-      typedef std::iterator_traits<ForwardIterator1> iterator1_traits;
-      typedef typename iterator1_traits::iterator_category _IteratorCategory1;
-      typedef std::iterator_traits<ForwardIterator2> iterator2_traits;
-      typedef typename iterator2_traits::iterator_category _IteratorCategory2;
+      typedef std::iterator_traits<_FIterator1> _Iterator1Traits;
+      typedef typename _Iterator1Traits::iterator_category _IteratorCategory1;
+      typedef std::iterator_traits<_FIterator2> _Iterator2Traits;
+      typedef typename _Iterator2Traits::iterator_category _IteratorCategory2;
       return __search_switch(__begin1, __end1, __begin2, __end2, __pred,
                            _IteratorCategory1(), _IteratorCategory2());
     }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _Integer, typename _Tp>
-    inline _ForwardIterator
-    search_n(_ForwardIterator __begin, _ForwardIterator __end, _Integer count,
+  template<typename _FIterator, typename _Integer, typename _Tp>
+    inline _FIterator
+    search_n(_FIterator __begin, _FIterator __end, _Integer __count,
              const _Tp& __val, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::search_n(__begin, __end, count, __val); }
+    { return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val); }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _Integer, typename _Tp,
+  template<typename _FIterator, typename _Integer, typename _Tp,
            typename _BinaryPredicate>
-    inline _ForwardIterator
-    search_n(_ForwardIterator __begin, _ForwardIterator __end, _Integer count,
+    inline _FIterator
+    search_n(_FIterator __begin, _FIterator __end, _Integer __count,
              const _Tp& __val, _BinaryPredicate __binary_pred,
              __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::search_n(__begin, __end, count, __val, __binary_pred); }
+    { return _GLIBCXX_STD_A::search_n(
+               __begin, __end, __count, __val, __binary_pred); }
 
   // Public interface.
-  template<typename _ForwardIterator, typename _Integer, typename _Tp>
-    inline _ForwardIterator
-    search_n(_ForwardIterator __begin, _ForwardIterator __end, _Integer count,
+  template<typename _FIterator, typename _Integer, typename _Tp>
+    inline _FIterator
+    search_n(_FIterator __begin, _FIterator __end, _Integer __count,
              const _Tp& __val)
     {
-      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
-      return search_n(__begin, __end, count, __val,
-                      __gnu_parallel::equal_to<_ValueType, _Tp>());
+      typedef typename iterator_traits<_FIterator>::value_type _ValueType;
+      return __gnu_parallel::search_n(__begin, __end, __count, __val,
+                      __gnu_parallel::_EqualTo<_ValueType, _Tp>());
     }
 
   // Parallel algorithm for random access iterators.
   template<typename _RAIter, typename _Integer,
            typename _Tp, typename _BinaryPredicate>
     _RAIter
-    __search_n_switch(_RAIter __begin, _RAIter __end,
-                    _Integer count, const _Tp& __val, _BinaryPredicate __binary_pred,
-                    random_access_iterator_tag)
+    __search_n_switch(_RAIter __begin, _RAIter __end, _Integer __count,
+                      const _Tp& __val, _BinaryPredicate __binary_pred,
+                      random_access_iterator_tag)
     {
-      if (_GLIBCXX_PARALLEL_CONDITION(true))
+      if (_GLIBCXX_PARALLEL_CONDITION(
+                static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
+            >= __gnu_parallel::_Settings::get().search_minimal_n))
         {
-          __gnu_parallel::_PseudoSequence<_Tp, _Integer> __ps(__val, count);
-          return __gnu_parallel::__search_template(__begin, __end, __ps.begin(),
-                                                 __ps.end(), __binary_pred);
+          __gnu_parallel::_PseudoSequence<_Tp, _Integer> __ps(__val, __count);
+          return __gnu_parallel::__search_template(
+                   __begin, __end, __ps.begin(), __ps.end(), __binary_pred);
         }
       else
-        return std::__search_n(__begin, __end, count, __val,
-                               __binary_pred, random_access_iterator_tag());
+        return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
+                                        __binary_pred);
     }
 
   // Sequential fallback for input iterator case.
-  template<typename _ForwardIterator, typename _Integer, typename _Tp,
+  template<typename _FIterator, typename _Integer, typename _Tp,
            typename _BinaryPredicate, typename _IteratorTag>
-    inline _ForwardIterator
-    __search_n_switch(_ForwardIterator __begin, _ForwardIterator __end, _Integer count,
-                    const _Tp& __val, _BinaryPredicate __binary_pred, _IteratorTag)
-    { return __search_n(__begin, __end, count, __val, __binary_pred, _IteratorTag()); }
+    inline _FIterator
+    __search_n_switch(_FIterator __begin, _FIterator __end, _Integer __count,
+                      const _Tp& __val, _BinaryPredicate __binary_pred,
+                      _IteratorTag)
+    { return _GLIBCXX_STD_A::search_n(__begin, __end, __count, __val,
+                                      __binary_pred); }
 
   // Public interface.
-  template<typename _ForwardIterator, typename _Integer, typename _Tp,
+  template<typename _FIterator, typename _Integer, typename _Tp,
            typename _BinaryPredicate>
-    inline _ForwardIterator
-    search_n(_ForwardIterator __begin, _ForwardIterator __end, _Integer count,
+    inline _FIterator
+    search_n(_FIterator __begin, _FIterator __end, _Integer __count,
              const _Tp& __val, _BinaryPredicate __binary_pred)
     {
-      return __search_n_switch(__begin, __end, count, __val, __binary_pred,
-                             typename std::iterator_traits<_ForwardIterator>::
+      return __search_n_switch(__begin, __end, __count, __val, __binary_pred,
+                             typename std::iterator_traits<_FIterator>::
                              iterator_category());
     }
 
@@ -1201,15 +1213,15 @@ namespace __parallel
            typename _UnaryOperation>
     inline _OutputIterator
     transform(_IIter __begin, _IIter __end, _OutputIterator __result, 
-              _UnaryOperation unary_op, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::transform(__begin, __end, __result, unary_op); }
+              _UnaryOperation __unary_op, __gnu_parallel::sequential_tag)
+    { return _GLIBCXX_STD_A::transform(__begin, __end, __result, __unary_op); }
 
   // Parallel unary transform for random access iterators.
   template<typename _RAIter1, typename _RAIter2,
            typename _UnaryOperation>
     _RAIter2
     __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
-                      _RAIter2 __result, _UnaryOperation unary_op,
+                      _RAIter2 __result, _UnaryOperation __unary_op,
                       random_access_iterator_tag, random_access_iterator_tag,
                       __gnu_parallel::_Parallelism __parallelism_tag
                       = __gnu_parallel::parallel_balanced)
@@ -1222,17 +1234,18 @@ namespace __parallel
           bool __dummy = true;
           typedef __gnu_parallel::_IteratorPair<_RAIter1,
             _RAIter2, random_access_iterator_tag> _ItTrip;
-          _ItTrip begin_pair(__begin, __result), end_pair(__end, __result + (__end - __begin));
+          _ItTrip __begin_pair(__begin, __result),
+                  __end_pair(__end, __result + (__end - __begin));
           __gnu_parallel::__transform1_selector<_ItTrip> __functionality;
           __gnu_parallel::
-            __for_each_template_random_access(begin_pair, end_pair,
-                                            unary_op, __functionality,
-                                            __gnu_parallel::_DummyReduct(),
-                                            __dummy, __dummy, -1, __parallelism_tag);
-          return __functionality.finish_iterator;
+            __for_each_template_random_access(
+              __begin_pair, __end_pair, __unary_op, __functionality,
+              __gnu_parallel::_DummyReduct(),
+              __dummy, __dummy, -1, __parallelism_tag);
+          return __functionality._M_finish_iterator;
         }
       else
-        return transform(__begin, __end, __result, unary_op, 
+        return transform(__begin, __end, __result, __unary_op, 
                          __gnu_parallel::sequential_tag());
     }
 
@@ -1242,9 +1255,9 @@ namespace __parallel
            typename _IteratorTag2>
     inline _RAIter2
     __transform1_switch(_RAIter1 __begin, _RAIter1 __end,
-                      _RAIter2 __result, _UnaryOperation unary_op,
+                      _RAIter2 __result, _UnaryOperation __unary_op,
                       _IteratorTag1, _IteratorTag2)
-    { return transform(__begin, __end, __result, unary_op, 
+    { return transform(__begin, __end, __result, __unary_op, 
                        __gnu_parallel::sequential_tag()); }
 
   // Public interface.
@@ -1252,7 +1265,7 @@ namespace __parallel
            typename _UnaryOperation>
     inline _OutputIterator
     transform(_IIter __begin, _IIter __end, _OutputIterator __result,
-              _UnaryOperation unary_op, 
+              _UnaryOperation __unary_op, 
               __gnu_parallel::_Parallelism __parallelism_tag)
     {
       typedef std::iterator_traits<_IIter> _IIterTraits;
@@ -1260,7 +1273,7 @@ namespace __parallel
       typedef typename _IIterTraits::iterator_category _IIteratorCategory;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __transform1_switch(__begin, __end, __result, unary_op,
+      return __transform1_switch(__begin, __end, __result, __unary_op,
                                _IIteratorCategory(), _OIterCategory(), 
                                __parallelism_tag);
     }
@@ -1269,14 +1282,14 @@ namespace __parallel
            typename _UnaryOperation>
     inline _OutputIterator
     transform(_IIter __begin, _IIter __end, _OutputIterator __result,
-              _UnaryOperation unary_op)
+              _UnaryOperation __unary_op)
     {
       typedef std::iterator_traits<_IIter> _IIterTraits;
       typedef std::iterator_traits<_OutputIterator> _OIterTraits;
       typedef typename _IIterTraits::iterator_category _IIteratorCategory;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __transform1_switch(__begin, __end, __result, unary_op,
+      return __transform1_switch(__begin, __end, __result, __unary_op,
                                _IIteratorCategory(), _OIterCategory());
     }
 
@@ -1288,7 +1301,7 @@ namespace __parallel
     transform(_IIter1 __begin1, _IIter1 __end1,
               _IIter2 __begin2, _OutputIterator __result,
               _BinaryOperation __binary_op, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::transform(__begin1, __end1,
+    { return _GLIBCXX_STD_A::transform(__begin1, __end1,
                                        __begin2, __result, __binary_op); }
 
   // Parallel binary transform for random access iterators.
@@ -1322,7 +1335,7 @@ namespace __parallel
                                             __gnu_parallel::_DummyReduct(),
                                             __dummy, __dummy, -1,
                                             __parallelism_tag);
-          return __functionality.finish_iterator;
+          return __functionality._M_finish_iterator;
         }
       else
         return transform(__begin1, __end1, __begin2, __result, __binary_op, 
@@ -1358,9 +1371,10 @@ namespace __parallel
       typedef std::iterator_traits<_OutputIterator> _OIterTraits;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __transform2_switch(__begin1, __end1, __begin2, __result, __binary_op,
-                               _IIterCategory1(), _IIterCategory2(), 
-                               _OIterCategory(), __parallelism_tag);
+      return __transform2_switch(
+               __begin1, __end1, __begin2, __result, __binary_op,
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory(),
+               __parallelism_tag);
     }
 
   template<typename _IIter1, typename _IIter2,
@@ -1379,23 +1393,24 @@ namespace __parallel
       typedef std::iterator_traits<_OutputIterator> _OIterTraits;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __transform2_switch(__begin1, __end1, __begin2, __result, __binary_op,
-                               _IIterCategory1(), _IIterCategory2(),
-                               _OIterCategory());
+      return __transform2_switch(
+               __begin1, __end1, __begin2, __result, __binary_op,
+               _IIterCategory1(), _IIterCategory2(), _OIterCategory());
     }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _Tp>
+  template<typename _FIterator, typename _Tp>
     inline void
-    replace(_ForwardIterator __begin, _ForwardIterator __end, const _Tp& __old_value, 
+    replace(_FIterator __begin, _FIterator __end, const _Tp& __old_value, 
             const _Tp& __new_value, __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::replace(__begin, __end, __old_value, __new_value); }
+    { _GLIBCXX_STD_A::replace(__begin, __end, __old_value, __new_value); }
 
   // Sequential fallback for input iterator case
-  template<typename _ForwardIterator, typename _Tp, typename _IteratorTag>
+  template<typename _FIterator, typename _Tp, typename _IteratorTag>
     inline void
-    __replace_switch(_ForwardIterator __begin, _ForwardIterator __end, 
-                   const _Tp& __old_value, const _Tp& __new_value, _IteratorTag)
+    __replace_switch(_FIterator __begin, _FIterator __end, 
+                     const _Tp& __old_value, const _Tp& __new_value,
+                     _IteratorTag)
     { replace(__begin, __end, __old_value, __new_value, 
               __gnu_parallel::sequential_tag()); }
 
@@ -1414,40 +1429,43 @@ namespace __parallel
     }
 
   // Public interface
-  template<typename _ForwardIterator, typename _Tp>
+  template<typename _FIterator, typename _Tp>
     inline void
-    replace(_ForwardIterator __begin, _ForwardIterator __end, const _Tp& __old_value, 
-            const _Tp& __new_value, __gnu_parallel::_Parallelism __parallelism_tag)
+    replace(_FIterator __begin, _FIterator __end, const _Tp& __old_value, 
+            const _Tp& __new_value,
+            __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
-      __replace_switch(__begin, __end, __old_value, __new_value, _IteratorCategory(), 
+      __replace_switch(__begin, __end, __old_value, __new_value,
+                       _IteratorCategory(),
                      __parallelism_tag);
     }
 
-  template<typename _ForwardIterator, typename _Tp>
+  template<typename _FIterator, typename _Tp>
     inline void
-    replace(_ForwardIterator __begin, _ForwardIterator __end, const _Tp& __old_value, 
+    replace(_FIterator __begin, _FIterator __end, const _Tp& __old_value, 
             const _Tp& __new_value)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
-      __replace_switch(__begin, __end, __old_value, __new_value, _IteratorCategory());
+      __replace_switch(__begin, __end, __old_value, __new_value,
+                       _IteratorCategory());
     }
 
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _Predicate, typename _Tp>
+  template<typename _FIterator, typename _Predicate, typename _Tp>
     inline void
-    replace_if(_ForwardIterator __begin, _ForwardIterator __end, _Predicate __pred, 
+    replace_if(_FIterator __begin, _FIterator __end, _Predicate __pred, 
                const _Tp& __new_value, __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::replace_if(__begin, __end, __pred, __new_value); }
+    { _GLIBCXX_STD_A::replace_if(__begin, __end, __pred, __new_value); }
 
   // Sequential fallback for input iterator case
-  template<typename _ForwardIterator, typename _Predicate, typename _Tp,
+  template<typename _FIterator, typename _Predicate, typename _Tp,
            typename _IteratorTag>
     inline void
-    __replace_if_switch(_ForwardIterator __begin, _ForwardIterator __end,
+    __replace_if_switch(_FIterator __begin, _FIterator __end,
                       _Predicate __pred, const _Tp& __new_value, _IteratorTag)
     { replace_if(__begin, __end, __pred, __new_value,
                  __gnu_parallel::sequential_tag()); }
@@ -1471,10 +1489,10 @@ namespace __parallel
             __replace_if_selector<_RAIter, _Predicate, _Tp>
             __functionality(__new_value);
           __gnu_parallel::
-            __for_each_template_random_access(__begin, __end, __pred,
-                                            __functionality,
-                                            __gnu_parallel::_DummyReduct(),
-                                            true, __dummy, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __pred, __functionality,
+              __gnu_parallel::_DummyReduct(),
+              true, __dummy, -1, __parallelism_tag);
         }
       else
         replace_if(__begin, __end, __pred, __new_value, 
@@ -1482,47 +1500,48 @@ namespace __parallel
     }
 
   // Public interface.
-  template<typename _ForwardIterator, typename _Predicate, typename _Tp>
+  template<typename _FIterator, typename _Predicate, typename _Tp>
     inline void
-    replace_if(_ForwardIterator __begin, _ForwardIterator __end,
+    replace_if(_FIterator __begin, _FIterator __end,
                _Predicate __pred, const _Tp& __new_value, 
                __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef std::iterator_traits<_ForwardIterator> _IteratorTraits;
+      typedef std::iterator_traits<_FIterator> _IteratorTraits;
       typedef typename _IteratorTraits::iterator_category _IteratorCategory;
-      __replace_if_switch(__begin, __end, __pred, __new_value, _IteratorCategory(), 
-                        __parallelism_tag);
+      __replace_if_switch(__begin, __end, __pred, __new_value,
+                          _IteratorCategory(), __parallelism_tag);
     }
 
-  template<typename _ForwardIterator, typename _Predicate, typename _Tp>
+  template<typename _FIterator, typename _Predicate, typename _Tp>
     inline void
-    replace_if(_ForwardIterator __begin, _ForwardIterator __end,
+    replace_if(_FIterator __begin, _FIterator __end,
                _Predicate __pred, const _Tp& __new_value)
     {
-      typedef std::iterator_traits<_ForwardIterator> _IteratorTraits;
+      typedef std::iterator_traits<_FIterator> _IteratorTraits;
       typedef typename _IteratorTraits::iterator_category _IteratorCategory;
-      __replace_if_switch(__begin, __end, __pred, __new_value, _IteratorCategory());
+      __replace_if_switch(__begin, __end, __pred, __new_value,
+                          _IteratorCategory());
     }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename Generator>
+  template<typename _FIterator, typename _Generator>
     inline void
-    generate(_ForwardIterator __begin, _ForwardIterator __end, Generator __gen, 
+    generate(_FIterator __begin, _FIterator __end, _Generator __gen, 
              __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::generate(__begin, __end, __gen); }
+    { _GLIBCXX_STD_A::generate(__begin, __end, __gen); }
 
   // Sequential fallback for input iterator case.
-  template<typename _ForwardIterator, typename Generator, typename _IteratorTag>
+  template<typename _FIterator, typename _Generator, typename _IteratorTag>
     inline void
-    __generate_switch(_ForwardIterator __begin, _ForwardIterator __end, Generator __gen, 
+    __generate_switch(_FIterator __begin, _FIterator __end, _Generator __gen,
                     _IteratorTag)
     { generate(__begin, __end, __gen, __gnu_parallel::sequential_tag()); }
 
   // Parallel algorithm for random access iterators.
-  template<typename _RAIter, typename Generator>
+  template<typename _RAIter, typename _Generator>
     void
     __generate_switch(_RAIter __begin, _RAIter __end,
-                    Generator __gen, random_access_iterator_tag, 
+                    _Generator __gen, random_access_iterator_tag, 
                     __gnu_parallel::_Parallelism __parallelism_tag
                     = __gnu_parallel::parallel_balanced)
     {
@@ -1535,65 +1554,69 @@ namespace __parallel
           __gnu_parallel::__generate_selector<_RAIter>
             __functionality;
           __gnu_parallel::
-            __for_each_template_random_access(__begin, __end, __gen, __functionality,
-                                            __gnu_parallel::_DummyReduct(),
-                                            true, __dummy, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __gen, __functionality,
+              __gnu_parallel::_DummyReduct(),
+              true, __dummy, -1, __parallelism_tag);
         }
       else
         generate(__begin, __end, __gen, __gnu_parallel::sequential_tag());
     }
 
   // Public interface.
-  template<typename _ForwardIterator, typename Generator>
+  template<typename _FIterator, typename _Generator>
     inline void
-    generate(_ForwardIterator __begin, _ForwardIterator __end,
-             Generator __gen, __gnu_parallel::_Parallelism __parallelism_tag)
+    generate(_FIterator __begin, _FIterator __end,
+             _Generator __gen, __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef std::iterator_traits<_ForwardIterator> _IteratorTraits;
+      typedef std::iterator_traits<_FIterator> _IteratorTraits;
       typedef typename _IteratorTraits::iterator_category _IteratorCategory;
-      __generate_switch(__begin, __end, __gen, _IteratorCategory(), __parallelism_tag);
+      __generate_switch(__begin, __end, __gen, _IteratorCategory(),
+                        __parallelism_tag);
     }
 
-  template<typename _ForwardIterator, typename Generator>
+  template<typename _FIterator, typename _Generator>
     inline void
-    generate(_ForwardIterator __begin, _ForwardIterator __end, Generator __gen)
+    generate(_FIterator __begin, _FIterator __end, _Generator __gen)
     {
-      typedef std::iterator_traits<_ForwardIterator> _IteratorTraits;
+      typedef std::iterator_traits<_FIterator> _IteratorTraits;
       typedef typename _IteratorTraits::iterator_category _IteratorCategory;
       __generate_switch(__begin, __end, __gen, _IteratorCategory());
     }
 
 
   // Sequential fallback.
-  template<typename _OutputIterator, typename _Size, typename Generator>
+  template<typename _OutputIterator, typename _Size, typename _Generator>
     inline _OutputIterator
-    generate_n(_OutputIterator __begin, _Size __n, Generator __gen, 
+    generate_n(_OutputIterator __begin, _Size __n, _Generator __gen, 
                __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::generate_n(__begin, __n, __gen); }
+    { return _GLIBCXX_STD_A::generate_n(__begin, __n, __gen); }
 
   // Sequential fallback for input iterator case.
-  template<typename _OutputIterator, typename _Size, typename Generator,
+  template<typename _OutputIterator, typename _Size, typename _Generator,
            typename _IteratorTag>
     inline _OutputIterator
-    __generate_n_switch(_OutputIterator __begin, _Size __n, Generator __gen, _IteratorTag)
-    { return generate_n(__begin, __n, __gen, __gnu_parallel::sequential_tag()); }
+    __generate_n_switch(_OutputIterator __begin, _Size __n, _Generator __gen,
+                        _IteratorTag)
+    { return generate_n(__begin, __n, __gen,
+                        __gnu_parallel::sequential_tag()); }
 
   // Parallel algorithm for random access iterators.
-  template<typename _RAIter, typename _Size, typename Generator>
+  template<typename _RAIter, typename _Size, typename _Generator>
     inline _RAIter
-    __generate_n_switch(_RAIter __begin, _Size __n, Generator __gen, 
+    __generate_n_switch(_RAIter __begin, _Size __n, _Generator __gen, 
                       random_access_iterator_tag, 
                       __gnu_parallel::_Parallelism __parallelism_tag
                       = __gnu_parallel::parallel_balanced)
     {
       // XXX parallel version is where?
-      return generate_n(__begin, __n, __gen, __gnu_parallel::sequential_tag()); 
+      return generate_n(__begin, __n, __gen, __gnu_parallel::sequential_tag());
     }
 
   // Public interface.
-  template<typename _OutputIterator, typename _Size, typename Generator>
+  template<typename _OutputIterator, typename _Size, typename _Generator>
     inline _OutputIterator
-    generate_n(_OutputIterator __begin, _Size __n, Generator __gen, 
+    generate_n(_OutputIterator __begin, _Size __n, _Generator __gen, 
                __gnu_parallel::_Parallelism __parallelism_tag)
     {
       typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
@@ -1602,9 +1625,9 @@ namespace __parallel
                                __parallelism_tag); 
     }
 
-  template<typename _OutputIterator, typename _Size, typename Generator>
+  template<typename _OutputIterator, typename _Size, typename _Generator>
     inline _OutputIterator
-    generate_n(_OutputIterator __begin, _Size __n, Generator __gen)
+    generate_n(_OutputIterator __begin, _Size __n, _Generator __gen)
     {
       typedef std::iterator_traits<_OutputIterator> _IteratorTraits;
       typedef typename _IteratorTraits::iterator_category _IteratorCategory;
@@ -1617,19 +1640,20 @@ namespace __parallel
     inline void
     random_shuffle(_RAIter __begin, _RAIter __end, 
                    __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::random_shuffle(__begin, __end); }
+    { _GLIBCXX_STD_A::random_shuffle(__begin, __end); }
 
   // Sequential fallback.
-  template<typename _RAIter, typename RandomNumberGenerator>
+  template<typename _RAIter, typename _RandomNumberGenerator>
     inline void
-    random_shuffle(_RAIter __begin, _RAIter __end, 
-                   RandomNumberGenerator& __rand, __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::random_shuffle(__begin, __end, __rand); }
+    random_shuffle(_RAIter __begin, _RAIter __end,
+                   _RandomNumberGenerator& __rand,
+                   __gnu_parallel::sequential_tag)
+    { _GLIBCXX_STD_A::random_shuffle(__begin, __end, __rand); }
 
 
   /** @brief Functor wrapper for std::rand(). */
   template<typename _MustBeInt = int>
-    struct c_rand_number
+    struct _CRandNumber
     {
       int
       operator()(int __limit)
@@ -1641,16 +1665,20 @@ namespace __parallel
     inline void
     random_shuffle(_RAIter __begin, _RAIter __end)
     {
-      c_rand_number<> __r;
+      _CRandNumber<> __r;
       // Parallelization still possible.
       __gnu_parallel::random_shuffle(__begin, __end, __r);
     }
 
   // Parallel algorithm for random access iterators.
-  template<typename _RAIter, typename RandomNumberGenerator>
+  template<typename _RAIter, typename _RandomNumberGenerator>
     void
-    random_shuffle(_RAIter __begin, _RAIter __end, 
-                   RandomNumberGenerator& __rand)
+    random_shuffle(_RAIter __begin, _RAIter __end,
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+                   _RandomNumberGenerator&& __rand)
+#else
+                   _RandomNumberGenerator& __rand)
+#endif
     {
       if (__begin == __end)
         return;
@@ -1663,18 +1691,19 @@ namespace __parallel
     }
 
   // Sequential fallback.
-  template<typename _ForwardIterator, typename _Predicate>
-    inline _ForwardIterator
-    partition(_ForwardIterator __begin, _ForwardIterator __end,
+  template<typename _FIterator, typename _Predicate>
+    inline _FIterator
+    partition(_FIterator __begin, _FIterator __end,
               _Predicate __pred, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::partition(__begin, __end, __pred); }
+    { return _GLIBCXX_STD_A::partition(__begin, __end, __pred); }
 
   // Sequential fallback for input iterator case.
-  template<typename _ForwardIterator, typename _Predicate, typename _IteratorTag>
-    inline _ForwardIterator
-    __partition_switch(_ForwardIterator __begin, _ForwardIterator __end,
+  template<typename _FIterator, typename _Predicate, typename _IteratorTag>
+    inline _FIterator
+    __partition_switch(_FIterator __begin, _FIterator __end,
                      _Predicate __pred, _IteratorTag)
-    { return partition(__begin, __end, __pred, __gnu_parallel::sequential_tag()); }
+    { return partition(__begin, __end, __pred,
+                       __gnu_parallel::sequential_tag()); }
 
   // Parallel algorithm for random access iterators.
   template<typename _RAIter, typename _Predicate>
@@ -1694,15 +1723,16 @@ namespace __parallel
           return __begin + __middle;
         }
       else
-        return partition(__begin, __end, __pred, __gnu_parallel::sequential_tag());
+        return partition(__begin, __end, __pred,
+                         __gnu_parallel::sequential_tag());
     }
 
   // Public interface.
-  template<typename _ForwardIterator, typename _Predicate>
-    inline _ForwardIterator
-    partition(_ForwardIterator __begin, _ForwardIterator __end, _Predicate __pred)
+  template<typename _FIterator, typename _Predicate>
+    inline _FIterator
+    partition(_FIterator __begin, _FIterator __end, _Predicate __pred)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
       return __partition_switch(__begin, __end, __pred, _IteratorCategory());
     }
@@ -1714,14 +1744,14 @@ namespace __parallel
     inline void
     sort(_RAIter __begin, _RAIter __end, 
          __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::sort(__begin, __end); }
+    { _GLIBCXX_STD_A::sort(__begin, __end); }
 
   // Sequential fallback
   template<typename _RAIter, typename _Compare>
     inline void
     sort(_RAIter __begin, _RAIter __end, _Compare __comp,
          __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::sort<_RAIter, _Compare>(__begin, __end,
+    { _GLIBCXX_STD_A::sort<_RAIter, _Compare>(__begin, __end,
                                                              __comp); }
 
   // Public interface
@@ -1739,7 +1769,8 @@ namespace __parallel
         if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
               __gnu_parallel::_Settings::get().sort_minimal_n))
-          __gnu_parallel::parallel_sort<false>(__begin, __end, __comp, __parallelism);
+          __gnu_parallel::__parallel_sort<false>(
+                            __begin, __end, __comp, __parallelism);
         else
           sort(__begin, __end, __comp, __gnu_parallel::sequential_tag());
       }
@@ -1852,14 +1883,14 @@ namespace __parallel
   inline void
   stable_sort(_RAIter __begin, _RAIter __end,
        __gnu_parallel::sequential_tag)
-  { _GLIBCXX_STD_P::stable_sort(__begin, __end); }
+  { _GLIBCXX_STD_A::stable_sort(__begin, __end); }
 
   // Sequential fallback
   template<typename _RAIter, typename _Compare>
   inline void
   stable_sort(_RAIter __begin, _RAIter __end,
               _Compare __comp, __gnu_parallel::sequential_tag)
-  { _GLIBCXX_STD_P::stable_sort<_RAIter, _Compare>(
+  { _GLIBCXX_STD_A::stable_sort<_RAIter, _Compare>(
       __begin, __end, __comp); }
 
   // Public interface
@@ -1877,9 +1908,11 @@ namespace __parallel
         if (_GLIBCXX_PARALLEL_CONDITION(
               static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
               __gnu_parallel::_Settings::get().sort_minimal_n))
-          __gnu_parallel::parallel_sort<true>(__begin, __end, __comp, __parallelism);
+          __gnu_parallel::__parallel_sort<true>(
+                            __begin, __end, __comp, __parallelism);
         else
-          stable_sort(__begin, __end, __comp, __gnu_parallel::sequential_tag());
+          stable_sort(__begin, __end, __comp,
+                      __gnu_parallel::sequential_tag());
       }
   }
 
@@ -1957,51 +1990,10 @@ namespace __parallel
   {
     typedef iterator_traits<_RAIter> _TraitsType;
     typedef typename _TraitsType::value_type _ValueType;
-    stable_sort(__begin, __end, __comp, __gnu_parallel::default_parallel_tag());
+    stable_sort(
+      __begin, __end, __comp, __gnu_parallel::default_parallel_tag());
   }
 
-
-//   // Sequential fallback
-//   template<typename _RAIter>
-//   inline void
-//   stable_sort(_RAIter __begin, _RAIter __end, 
-//            __gnu_parallel::sequential_tag)
-//   { return _GLIBCXX_STD_P::stable_sort(__begin, __end); }
-// 
-//   // Sequential fallback
-//   template<typename _RAIter, typename _Compare>
-//   inline void
-//   stable_sort(_RAIter __begin, _RAIter __end, 
-//            _Compare __comp, __gnu_parallel::sequential_tag)
-//   { return _GLIBCXX_STD_P::stable_sort(__begin, __end, __comp); }
-// 
-//   template<typename _RAIter>
-//   void
-//   stable_sort(_RAIter __begin, _RAIter __end)
-//   {
-//     typedef iterator_traits<_RAIter> _TraitsType;
-//     typedef typename _TraitsType::value_type _ValueType;
-//     stable_sort(__begin, __end, std::less<_ValueType>());
-//   }
-// 
-//   // Parallel algorithm for random access iterators
-//   template<typename _RAIter, typename _Compare>
-//   void
-//   stable_sort(_RAIter __begin, _RAIter __end, 
-//            _Compare __comp)
-//   {
-//     if (__begin != __end)
-//       {
-//      if (_GLIBCXX_PARALLEL_CONDITION(
-//            static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin) >=
-//                __gnu_parallel::_Settings::get().sort_minimal_n))
-//        __gnu_parallel::parallel_sort(__begin, __end, __comp,
-//                                      __gnu_parallel::parallel_tag());
-//      else
-//        stable_sort(__begin, __end, __comp, __gnu_parallel::sequential_tag());
-//       }
-//   }
-
   // Sequential fallback
   template<typename _IIter1, typename _IIter2,
            typename _OutputIterator>
@@ -2009,7 +2001,8 @@ namespace __parallel
     merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, 
           _IIter2 __end2, _OutputIterator __result,
           __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::merge(__begin1, __end1, __begin2, __end2, __result); }
+    { return _GLIBCXX_STD_A::merge(
+               __begin1, __end1, __begin2, __end2, __result); }
 
   // Sequential fallback
   template<typename _IIter1, typename _IIter2,
@@ -2018,18 +2011,19 @@ namespace __parallel
     merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2,
           _IIter2 __end2, _OutputIterator __result, _Compare __comp,
           __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::merge(__begin1, __end1, __begin2, __end2, __result, __comp); }
+    { return _GLIBCXX_STD_A::merge(
+                __begin1, __end1, __begin2, __end2, __result, __comp); }
 
   // Sequential fallback for input iterator case
-  template<typename _IIter1, typename _IIter2,
-           typename _OutputIterator, typename _Compare,
-           typename _IteratorTag1, typename _IteratorTag2, typename _IteratorTag3>
+  template<typename _IIter1, typename _IIter2, typename _OutputIterator,
+           typename _Compare, typename _IteratorTag1,
+           typename _IteratorTag2, typename _IteratorTag3>
     inline _OutputIterator
     __merge_switch(_IIter1 __begin1, _IIter1 __end1,
                  _IIter2 __begin2, _IIter2 __end2,
                  _OutputIterator __result, _Compare __comp,
                  _IteratorTag1, _IteratorTag2, _IteratorTag3)
-     { return _GLIBCXX_STD_P::merge(__begin1, __end1, __begin2, __end2,
+     { return _GLIBCXX_STD_A::merge(__begin1, __end1, __begin2, __end2,
                                     __result, __comp); }
 
   // Parallel algorithm for random access iterators
@@ -2047,14 +2041,13 @@ namespace __parallel
              >= __gnu_parallel::_Settings::get().merge_minimal_n
              || static_cast<__gnu_parallel::_SequenceIndex>(__end2 - __begin2)
              >= __gnu_parallel::_Settings::get().merge_minimal_n)))
-        return __gnu_parallel::__parallel_merge_advance(__begin1, __end1,
-                                                      __begin2, __end2,
-                                                      __result, (__end1 - __begin1)
-                                                      + (__end2 - __begin2), __comp);
+        return __gnu_parallel::__parallel_merge_advance(
+                 __begin1, __end1, __begin2, __end2, __result,
+                 (__end1 - __begin1) + (__end2 - __begin2), __comp);
       else
-        return __gnu_parallel::__merge_advance(__begin1, __end1, __begin2, __end2,
-                                             __result, (__end1 - __begin1)
-                                             + (__end2 - __begin2), __comp);
+        return __gnu_parallel::__merge_advance(
+                 __begin1, __end1, __begin2, __end2, __result,
+                 (__end1 - __begin1) + (__end2 - __begin2), __comp);
   }
 
   // Public interface
@@ -2075,9 +2068,9 @@ namespace __parallel
         _IIterCategory2;
       typedef typename _OIterTraits::iterator_category _OIterCategory;
 
-      return __merge_switch(__begin1, __end1, __begin2, __end2, __result, __comp, 
-                          _IIterCategory1(), _IIterCategory2(), 
-                          _OIterCategory());
+      return __merge_switch(
+              __begin1, __end1, __begin2, __end2, __result, __comp,
+              _IIterCategory1(), _IIterCategory2(), _OIterCategory());
   }
 
 
@@ -2088,13 +2081,13 @@ namespace __parallel
     merge(_IIter1 __begin1, _IIter1 __end1, _IIter2 __begin2, 
           _IIter2 __end2, _OutputIterator __result)
     {
-      typedef std::iterator_traits<_IIter1> iterator1_traits;
-      typedef std::iterator_traits<_IIter2> iterator2_traits;
-      typedef typename iterator1_traits::value_type _ValueType1;
-      typedef typename iterator2_traits::value_type _ValueType2;
+      typedef std::iterator_traits<_IIter1> _Iterator1Traits;
+      typedef std::iterator_traits<_IIter2> _Iterator2Traits;
+      typedef typename _Iterator1Traits::value_type _ValueType1;
+      typedef typename _Iterator2Traits::value_type _ValueType2;
 
-      return merge(__begin1, __end1, __begin2, __end2, __result, 
-                   __gnu_parallel::_Less<_ValueType1, _ValueType2>());
+      return __gnu_parallel::merge(__begin1, __end1, __begin2, __end2,
+                  __result, __gnu_parallel::_Less<_ValueType1, _ValueType2>());
     }
 
   // Sequential fallback
@@ -2102,7 +2095,7 @@ namespace __parallel
     inline void
     nth_element(_RAIter __begin, _RAIter __nth, 
                 _RAIter __end, __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::nth_element(__begin, __nth, __end); }
+    { return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end); }
 
   // Sequential fallback
   template<typename _RAIter, typename _Compare>
@@ -2110,7 +2103,7 @@ namespace __parallel
     nth_element(_RAIter __begin, _RAIter __nth, 
                 _RAIter __end, _Compare __comp, 
               __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::nth_element(__begin, __nth, __end, __comp); }
+    { return _GLIBCXX_STD_A::nth_element(__begin, __nth, __end, __comp); }
 
   // Public interface
   template<typename _RAIter, typename _Compare>
@@ -2121,9 +2114,10 @@ namespace __parallel
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
             >= __gnu_parallel::_Settings::get().nth_element_minimal_n))
-        __gnu_parallel::parallel_nth_element(__begin, __nth, __end, __comp);
+        __gnu_parallel::__parallel_nth_element(__begin, __nth, __end, __comp);
       else
-        nth_element(__begin, __nth, __end, __comp, __gnu_parallel::sequential_tag());
+        nth_element(__begin, __nth, __end, __comp,
+                    __gnu_parallel::sequential_tag());
     }
 
   // Public interface, insert default comparator
@@ -2134,7 +2128,8 @@ namespace __parallel
     {
       typedef iterator_traits<_RAIter> _TraitsType;
       typedef typename _TraitsType::value_type _ValueType;
-      nth_element(__begin, __nth, __end, std::less<_ValueType>());
+      __gnu_parallel::nth_element(__begin, __nth, __end,
+                                  std::less<_ValueType>());
     }
 
   // Sequential fallback
@@ -2143,14 +2138,14 @@ namespace __parallel
     partial_sort(_RAIter __begin, _RAIter __middle, 
                  _RAIter __end, _Compare __comp,
                  __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::partial_sort(__begin, __middle, __end, __comp); }
+    { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end, __comp); }
 
   // Sequential fallback
   template<typename _RAIter>
     inline void
     partial_sort(_RAIter __begin, _RAIter __middle, 
                  _RAIter __end, __gnu_parallel::sequential_tag)
-    { _GLIBCXX_STD_P::partial_sort(__begin, __middle, __end); }
+    { _GLIBCXX_STD_A::partial_sort(__begin, __middle, __end); }
 
   // Public interface, parallel algorithm for random access iterators
   template<typename _RAIter, typename _Compare>
@@ -2161,7 +2156,8 @@ namespace __parallel
       if (_GLIBCXX_PARALLEL_CONDITION(
             static_cast<__gnu_parallel::_SequenceIndex>(__end - __begin)
             >= __gnu_parallel::_Settings::get().partial_sort_minimal_n))
-        __gnu_parallel::parallel_partial_sort(__begin, __middle, __end, __comp);
+        __gnu_parallel::
+          __parallel_partial_sort(__begin, __middle, __end, __comp);
       else
         partial_sort(__begin, __middle, __end, __comp,
                      __gnu_parallel::sequential_tag());
@@ -2175,29 +2171,31 @@ namespace __parallel
     {
       typedef iterator_traits<_RAIter> _TraitsType;
       typedef typename _TraitsType::value_type _ValueType;
-      partial_sort(__begin, __middle, __end, std::less<_ValueType>());
+      __gnu_parallel::partial_sort(__begin, __middle, __end,
+                                   std::less<_ValueType>());
     }
 
   // Sequential fallback
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    max_element(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator>
+    inline _FIterator
+    max_element(_FIterator __begin, _FIterator __end, 
                 __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::max_element(__begin, __end); }
+    { return _GLIBCXX_STD_A::max_element(__begin, __end); }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _Compare>
-    inline _ForwardIterator
-    max_element(_ForwardIterator __begin, _ForwardIterator __end, _Compare __comp, 
+  template<typename _FIterator, typename _Compare>
+    inline _FIterator
+    max_element(_FIterator __begin, _FIterator __end, _Compare __comp, 
                 __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::max_element(__begin, __end, __comp); }
+    { return _GLIBCXX_STD_A::max_element(__begin, __end, __comp); }
 
   // Sequential fallback for input iterator case
-  template<typename _ForwardIterator, typename _Compare, typename _IteratorTag>
-    inline _ForwardIterator
-    __max_element_switch(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator, typename _Compare, typename _IteratorTag>
+    inline _FIterator
+    __max_element_switch(_FIterator __begin, _FIterator __end, 
                        _Compare __comp, _IteratorTag)
-    { return max_element(__begin, __end, __comp, __gnu_parallel::sequential_tag()); }
+    { return max_element(__begin, __end, __comp,
+                         __gnu_parallel::sequential_tag()); }
 
   // Parallel algorithm for random access iterators
   template<typename _RAIter, typename _Compare>
@@ -2216,79 +2214,80 @@ namespace __parallel
           __gnu_parallel::__identity_selector<_RAIter>
             __functionality;
           __gnu_parallel::
-            __for_each_template_random_access(__begin, __end,
-                                            __gnu_parallel::_Nothing(),
-                                            __functionality,
-                                            __gnu_parallel::
-                                            __max_element_reduct<_Compare,
-                                            _RAIter>(__comp),
-                                            __res, __res, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __gnu_parallel::_Nothing(), __functionality,
+              __gnu_parallel::__max_element_reduct<_Compare, _RAIter>(__comp),
+              __res, __res, -1, __parallelism_tag);
           return __res;
         }
       else
-        return max_element(__begin, __end, __comp, __gnu_parallel::sequential_tag());
+        return max_element(__begin, __end, __comp,
+                           __gnu_parallel::sequential_tag());
     }
 
   // Public interface, insert default comparator
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    max_element(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator>
+    inline _FIterator
+    max_element(_FIterator __begin, _FIterator __end, 
                 __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
-      return max_element(__begin, __end, std::less<_ValueType>(), __parallelism_tag);
+      typedef typename iterator_traits<_FIterator>::value_type _ValueType;
+      return max_element(__begin, __end, std::less<_ValueType>(),
+                         __parallelism_tag);
     }
 
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    max_element(_ForwardIterator __begin, _ForwardIterator __end)
+  template<typename _FIterator>
+    inline _FIterator
+    max_element(_FIterator __begin, _FIterator __end)
     {
-      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
-      return max_element(__begin, __end, std::less<_ValueType>());
+      typedef typename iterator_traits<_FIterator>::value_type _ValueType;
+      return __gnu_parallel::max_element(__begin, __end,
+                                         std::less<_ValueType>());
     }
 
   // Public interface
-  template<typename _ForwardIterator, typename _Compare>
-    inline _ForwardIterator
-    max_element(_ForwardIterator __begin, _ForwardIterator __end, _Compare __comp,
+  template<typename _FIterator, typename _Compare>
+    inline _FIterator
+    max_element(_FIterator __begin, _FIterator __end, _Compare __comp,
                 __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
       return __max_element_switch(__begin, __end, __comp, _IteratorCategory(), 
-                                __parallelism_tag);
+                                  __parallelism_tag);
     }
 
-  template<typename _ForwardIterator, typename _Compare>
-    inline _ForwardIterator
-    max_element(_ForwardIterator __begin, _ForwardIterator __end, _Compare __comp)
+  template<typename _FIterator, typename _Compare>
+    inline _FIterator
+    max_element(_FIterator __begin, _FIterator __end, _Compare __comp)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
       return __max_element_switch(__begin, __end, __comp, _IteratorCategory());
     }
 
 
   // Sequential fallback
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    min_element(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator>
+    inline _FIterator
+    min_element(_FIterator __begin, _FIterator __end, 
                 __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::min_element(__begin, __end); }
+    { return _GLIBCXX_STD_A::min_element(__begin, __end); }
 
   // Sequential fallback
-  template<typename _ForwardIterator, typename _Compare>
-    inline _ForwardIterator
-    min_element(_ForwardIterator __begin, _ForwardIterator __end, _Compare __comp, 
+  template<typename _FIterator, typename _Compare>
+    inline _FIterator
+    min_element(_FIterator __begin, _FIterator __end, _Compare __comp, 
                 __gnu_parallel::sequential_tag)
-    { return _GLIBCXX_STD_P::min_element(__begin, __end, __comp); }
+    { return _GLIBCXX_STD_A::min_element(__begin, __end, __comp); }
 
   // Sequential fallback for input iterator case
-  template<typename _ForwardIterator, typename _Compare, typename _IteratorTag>
-    inline _ForwardIterator
-    __min_element_switch(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator, typename _Compare, typename _IteratorTag>
+    inline _FIterator
+    __min_element_switch(_FIterator __begin, _FIterator __end, 
                        _Compare __comp, _IteratorTag)
-    { return min_element(__begin, __end, __comp, __gnu_parallel::sequential_tag()); }
+    { return min_element(__begin, __end, __comp,
+                         __gnu_parallel::sequential_tag()); }
 
   // Parallel algorithm for random access iterators
   template<typename _RAIter, typename _Compare>
@@ -2307,54 +2306,54 @@ namespace __parallel
           __gnu_parallel::__identity_selector<_RAIter>
             __functionality;
           __gnu_parallel::
-            __for_each_template_random_access(__begin, __end,
-                                            __gnu_parallel::_Nothing(),
-                                            __functionality,
-                                            __gnu_parallel::
-                                            __min_element_reduct<_Compare,
-                                            _RAIter>(__comp),
-                                            __res, __res, -1, __parallelism_tag);
+            __for_each_template_random_access(
+              __begin, __end, __gnu_parallel::_Nothing(), __functionality,
+              __gnu_parallel::__min_element_reduct<_Compare, _RAIter>(__comp),
+              __res, __res, -1, __parallelism_tag);
           return __res;
         }
       else
-        return min_element(__begin, __end, __comp, __gnu_parallel::sequential_tag());
+        return min_element(__begin, __end, __comp,
+                           __gnu_parallel::sequential_tag());
     }
 
   // Public interface, insert default comparator
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    min_element(_ForwardIterator __begin, _ForwardIterator __end, 
+  template<typename _FIterator>
+    inline _FIterator
+    min_element(_FIterator __begin, _FIterator __end, 
                 __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
-      return min_element(__begin, __end, std::less<_ValueType>(), __parallelism_tag);
+      typedef typename iterator_traits<_FIterator>::value_type _ValueType;
+      return min_element(__begin, __end, std::less<_ValueType>(),
+                         __parallelism_tag);
     }
 
-  template<typename _ForwardIterator>
-    inline _ForwardIterator
-    min_element(_ForwardIterator __begin, _ForwardIterator __end)
+  template<typename _FIterator>
+    inline _FIterator
+    min_element(_FIterator __begin, _FIterator __end)
     {
-      typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
-      return min_element(__begin, __end, std::less<_ValueType>());
+      typedef typename iterator_traits<_FIterator>::value_type _ValueType;
+      return __gnu_parallel::min_element(__begin, __end,
+                                         std::less<_ValueType>());
     }
 
   // Public interface
-  template<typename _ForwardIterator, typename _Compare>
-    inline _ForwardIterator
-    min_element(_ForwardIterator __begin, _ForwardIterator __end, _Compare __comp,
+  template<typename _FIterator, typename _Compare>
+    inline _FIterator
+    min_element(_FIterator __begin, _FIterator __end, _Compare __comp,
                 __gnu_parallel::_Parallelism __parallelism_tag)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
       return __min_element_switch(__begin, __end, __comp, _IteratorCategory(), 
                                 __parallelism_tag);
     }
 
-  template<typename _ForwardIterator, typename _Compare>
-    inline _ForwardIterator
-    min_element(_ForwardIterator __begin, _ForwardIterator __end, _Compare __comp)
+  template<typename _FIterator, typename _Compare>
+    inline _FIterator
+    min_element(_FIterator __begin, _FIterator __end, _Compare __comp)
     {
-      typedef iterator_traits<_ForwardIterator> _TraitsType;
+      typedef iterator_traits<_FIterator> _TraitsType;
       typedef typename _TraitsType::iterator_category _IteratorCategory;
       return __min_element_switch(__begin, __end, __comp, _IteratorCategory());
     }