Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. // <parallel/algorithm> Forward declarations -*- C++ -*-
  2.  
  3. // Copyright (C) 2007-2013 Free Software Foundation, Inc.
  4. //
  5. // This file is part of the GNU ISO C++ Library.  This library is free
  6. // software; you can redistribute it and/or modify it under the terms
  7. // of the GNU General Public License as published by the Free Software
  8. // Foundation; either version 3, or (at your option) any later
  9. // version.
  10.  
  11. // This library is distributed in the hope that it will be useful, but
  12. // WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14. // General Public License for more details.
  15.  
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. /** @file parallel/algorithmfwd.h
  26.  *  This file is a GNU parallel extension to the Standard C++ Library.
  27.  */
  28.  
  29. #ifndef _GLIBCXX_PARALLEL_ALGORITHMFWD_H
  30. #define _GLIBCXX_PARALLEL_ALGORITHMFWD_H 1
  31.  
  32. #pragma GCC system_header
  33.  
  34. #include <parallel/tags.h>
  35. #include <parallel/settings.h>
  36.  
  37. namespace std _GLIBCXX_VISIBILITY(default)
  38. {
  39. namespace __parallel
  40. {
  41.   template<typename _FIter>
  42.     _FIter
  43.     adjacent_find(_FIter, _FIter);
  44.  
  45.   template<typename _FIter>
  46.     _FIter
  47.     adjacent_find(_FIter, _FIter, __gnu_parallel::sequential_tag);
  48.  
  49.   template<typename _FIter, typename _IterTag>
  50.     _FIter
  51.     __adjacent_find_switch(_FIter, _FIter, _IterTag);
  52.  
  53.   template<typename _RAIter>
  54.     _RAIter
  55.     __adjacent_find_switch(_RAIter, _RAIter, random_access_iterator_tag);
  56.  
  57.  
  58.   template<typename _FIter, typename _BiPredicate>
  59.     _FIter
  60.     adjacent_find(_FIter, _FIter, _BiPredicate);
  61.  
  62.   template<typename _FIter, typename _BiPredicate>
  63.     _FIter
  64.     adjacent_find(_FIter, _FIter, _BiPredicate,
  65.                   __gnu_parallel::sequential_tag);
  66.  
  67.   template<typename _FIter, typename _BiPredicate, typename _IterTag>
  68.     _FIter
  69.     __adjacent_find_switch(_FIter, _FIter, _BiPredicate, _IterTag);
  70.  
  71.   template<typename _RAIter, typename _BiPredicate>
  72.     _RAIter
  73.     __adjacent_find_switch(_RAIter, _RAIter, _BiPredicate,
  74.                          random_access_iterator_tag);
  75.  
  76.  
  77.   template<typename _IIter, typename _Tp>
  78.     typename iterator_traits<_IIter>::difference_type
  79.     count(_IIter, _IIter, const _Tp&);
  80.  
  81.   template<typename _IIter, typename _Tp>
  82.     typename iterator_traits<_IIter>::difference_type
  83.     count(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
  84.  
  85.   template<typename _IIter, typename _Tp>
  86.     typename iterator_traits<_IIter>::difference_type
  87.     count(_IIter, _IIter, const _Tp&, __gnu_parallel::_Parallelism);
  88.  
  89.   template<typename _IIter, typename _Tp, typename _IterTag>
  90.     typename iterator_traits<_IIter>::difference_type
  91.     __count_switch(_IIter, _IIter, const _Tp&, _IterTag);
  92.  
  93.   template<typename _RAIter, typename _Tp>
  94.     typename iterator_traits<_RAIter>::difference_type
  95.     __count_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag,
  96.                  __gnu_parallel::_Parallelism __parallelism
  97.                  = __gnu_parallel::parallel_unbalanced);
  98.  
  99.  
  100.   template<typename _IIter, typename _Predicate>
  101.     typename iterator_traits<_IIter>::difference_type
  102.     count_if(_IIter, _IIter, _Predicate);
  103.  
  104.   template<typename _IIter, typename _Predicate>
  105.     typename iterator_traits<_IIter>::difference_type
  106.     count_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
  107.  
  108.   template<typename _IIter, typename _Predicate>
  109.     typename iterator_traits<_IIter>::difference_type
  110.     count_if(_IIter, _IIter, _Predicate, __gnu_parallel::_Parallelism);
  111.  
  112.   template<typename _IIter, typename _Predicate, typename _IterTag>
  113.     typename iterator_traits<_IIter>::difference_type
  114.     __count_if_switch(_IIter, _IIter, _Predicate, _IterTag);
  115.  
  116.   template<typename _RAIter, typename _Predicate>
  117.     typename iterator_traits<_RAIter>::difference_type
  118.     __count_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag,
  119.                     __gnu_parallel::_Parallelism __parallelism
  120.                     = __gnu_parallel::parallel_unbalanced);
  121.  
  122.   // algobase.h
  123.   template<typename _IIter1, typename _IIter2>
  124.     bool
  125.     equal(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
  126.  
  127.   template<typename _IIter1, typename _IIter2, typename _Predicate>
  128.     bool
  129.     equal(_IIter1, _IIter1, _IIter2, _Predicate,
  130.           __gnu_parallel::sequential_tag);
  131.  
  132.   template<typename _IIter1, typename _IIter2>
  133.     bool
  134.     equal(_IIter1, _IIter1, _IIter2);
  135.  
  136.   template<typename _IIter1, typename _IIter2, typename _Predicate>
  137.     bool
  138.     equal(_IIter1, _IIter1, _IIter2, _Predicate);
  139.  
  140.   template<typename _IIter, typename _Tp>
  141.     _IIter
  142.     find(_IIter, _IIter, const _Tp&, __gnu_parallel::sequential_tag);
  143.  
  144.   template<typename _IIter, typename _Tp>
  145.     _IIter
  146.     find(_IIter, _IIter, const _Tp& __val);
  147.  
  148.   template<typename _IIter, typename _Tp, typename _IterTag>
  149.     _IIter
  150.     __find_switch(_IIter, _IIter, const _Tp&, _IterTag);
  151.  
  152.   template<typename _RAIter, typename _Tp>
  153.     _RAIter
  154.     __find_switch(_RAIter, _RAIter, const _Tp&, random_access_iterator_tag);
  155.  
  156.   template<typename _IIter, typename _Predicate>
  157.     _IIter
  158.     find_if(_IIter, _IIter, _Predicate, __gnu_parallel::sequential_tag);
  159.  
  160.   template<typename _IIter, typename _Predicate>
  161.     _IIter
  162.     find_if(_IIter, _IIter, _Predicate);
  163.  
  164.   template<typename _IIter, typename _Predicate, typename _IterTag>
  165.     _IIter
  166.     __find_if_switch(_IIter, _IIter, _Predicate, _IterTag);
  167.  
  168.   template<typename _RAIter, typename _Predicate>
  169.     _RAIter
  170.     __find_if_switch(_RAIter, _RAIter, _Predicate, random_access_iterator_tag);
  171.  
  172.   template<typename _IIter, typename _FIter>
  173.     _IIter
  174.     find_first_of(_IIter, _IIter, _FIter, _FIter,
  175.                   __gnu_parallel::sequential_tag);
  176.  
  177.   template<typename _IIter, typename _FIter, typename _BiPredicate>
  178.     _IIter
  179.     find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
  180.                   __gnu_parallel::sequential_tag);
  181.  
  182.   template<typename _IIter, typename _FIter, typename _BiPredicate>
  183.     _IIter
  184.     find_first_of(_IIter, _IIter, _FIter, _FIter, _BiPredicate);
  185.  
  186.   template<typename _IIter, typename _FIter>
  187.     _IIter
  188.     find_first_of(_IIter, _IIter, _FIter, _FIter);
  189.  
  190.   template<typename _IIter, typename _FIter,
  191.            typename _IterTag1, typename _IterTag2>
  192.     _IIter
  193.     __find_first_of_switch(
  194.       _IIter, _IIter, _FIter, _FIter, _IterTag1, _IterTag2);
  195.  
  196.   template<typename _RAIter, typename _FIter, typename _BiPredicate,
  197.            typename _IterTag>
  198.     _RAIter
  199.     __find_first_of_switch(_RAIter, _RAIter, _FIter, _FIter, _BiPredicate,
  200.                          random_access_iterator_tag, _IterTag);
  201.  
  202.   template<typename _IIter, typename _FIter, typename _BiPredicate,
  203.            typename _IterTag1, typename _IterTag2>
  204.     _IIter
  205.     __find_first_of_switch(_IIter, _IIter, _FIter, _FIter, _BiPredicate,
  206.                          _IterTag1, _IterTag2);
  207.  
  208.  
  209.   template<typename _IIter, typename _Function>
  210.     _Function
  211.     for_each(_IIter, _IIter, _Function);
  212.  
  213.   template<typename _IIter, typename _Function>
  214.     _Function
  215.     for_each(_IIter, _IIter, _Function, __gnu_parallel::sequential_tag);
  216.  
  217.   template<typename _Iterator, typename _Function>
  218.     _Function
  219.     for_each(_Iterator, _Iterator, _Function, __gnu_parallel::_Parallelism);
  220.  
  221.   template<typename _IIter, typename _Function, typename _IterTag>
  222.     _Function
  223.     __for_each_switch(_IIter, _IIter, _Function, _IterTag);
  224.  
  225.   template<typename _RAIter, typename _Function>
  226.     _Function
  227.     __for_each_switch(_RAIter, _RAIter, _Function, random_access_iterator_tag,
  228.                     __gnu_parallel::_Parallelism  __parallelism
  229.                     = __gnu_parallel::parallel_balanced);
  230.  
  231.  
  232.   template<typename _FIter, typename _Generator>
  233.     void
  234.     generate(_FIter, _FIter, _Generator);
  235.  
  236.   template<typename _FIter, typename _Generator>
  237.     void
  238.     generate(_FIter, _FIter, _Generator, __gnu_parallel::sequential_tag);
  239.  
  240.   template<typename _FIter, typename _Generator>
  241.     void
  242.     generate(_FIter, _FIter, _Generator, __gnu_parallel::_Parallelism);
  243.  
  244.   template<typename _FIter, typename _Generator, typename _IterTag>
  245.     void
  246.     __generate_switch(_FIter, _FIter, _Generator, _IterTag);
  247.  
  248.   template<typename _RAIter, typename _Generator>
  249.     void
  250.     __generate_switch(_RAIter, _RAIter, _Generator, random_access_iterator_tag,
  251.                     __gnu_parallel::_Parallelism __parallelism
  252.                     = __gnu_parallel::parallel_balanced);
  253.  
  254.   template<typename _OIter, typename _Size, typename _Generator>
  255.     _OIter
  256.     generate_n(_OIter, _Size, _Generator);
  257.  
  258.   template<typename _OIter, typename _Size, typename _Generator>
  259.     _OIter
  260.     generate_n(_OIter, _Size, _Generator, __gnu_parallel::sequential_tag);
  261.  
  262.   template<typename _OIter, typename _Size, typename _Generator>
  263.     _OIter
  264.     generate_n(_OIter, _Size, _Generator, __gnu_parallel::_Parallelism);
  265.  
  266.   template<typename _OIter, typename _Size, typename _Generator,
  267.            typename _IterTag>
  268.     _OIter
  269.     __generate_n_switch(_OIter, _Size, _Generator, _IterTag);
  270.  
  271.   template<typename _RAIter, typename _Size, typename _Generator>
  272.     _RAIter
  273.     __generate_n_switch(_RAIter, _Size, _Generator, random_access_iterator_tag,
  274.                       __gnu_parallel::_Parallelism __parallelism
  275.                       = __gnu_parallel::parallel_balanced);
  276.  
  277.   template<typename _IIter1, typename _IIter2>
  278.     bool
  279.     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2,
  280.                             __gnu_parallel::sequential_tag);
  281.  
  282.   template<typename _IIter1, typename _IIter2, typename _Predicate>
  283.     bool
  284.     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate,
  285.                             __gnu_parallel::sequential_tag);
  286.  
  287.   template<typename _IIter1, typename _IIter2>
  288.     bool
  289.     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
  290.  
  291.   template<typename _IIter1, typename _IIter2, typename _Predicate>
  292.     bool
  293.     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Predicate);
  294.  
  295.   template<typename _IIter1, typename _IIter2,
  296.            typename _Predicate, typename _IterTag1, typename _IterTag2>
  297.     bool
  298.     __lexicographical_compare_switch(_IIter1, _IIter1, _IIter2, _IIter2,
  299.                                    _Predicate, _IterTag1, _IterTag2);
  300.  
  301.   template<typename _RAIter1, typename _RAIter2, typename _Predicate>
  302.     bool
  303.     __lexicographical_compare_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  304.                                    _Predicate, random_access_iterator_tag,
  305.                                    random_access_iterator_tag);
  306.  
  307.   // algo.h
  308.   template<typename _IIter1, typename _IIter2>
  309.     pair<_IIter1, _IIter2>
  310.     mismatch(_IIter1, _IIter1, _IIter2, __gnu_parallel::sequential_tag);
  311.  
  312.   template<typename _IIter1, typename _IIter2, typename _Predicate>
  313.     pair<_IIter1, _IIter2>
  314.     mismatch(_IIter1, _IIter1, _IIter2, _Predicate,
  315.              __gnu_parallel::sequential_tag);
  316.  
  317.   template<typename _IIter1, typename _IIter2>
  318.     pair<_IIter1, _IIter2>
  319.     mismatch(_IIter1, _IIter1, _IIter2);
  320.  
  321.   template<typename _IIter1, typename _IIter2, typename _Predicate>
  322.     pair<_IIter1, _IIter2>
  323.     mismatch(_IIter1, _IIter1, _IIter2, _Predicate);
  324.  
  325.   template<typename _IIter1, typename _IIter2, typename _Predicate,
  326.            typename _IterTag1, typename _IterTag2>
  327.     pair<_IIter1, _IIter2>
  328.     __mismatch_switch(_IIter1, _IIter1, _IIter2, _Predicate,
  329.                     _IterTag1, _IterTag2);
  330.  
  331.   template<typename _RAIter1, typename _RAIter2, typename _Predicate>
  332.     pair<_RAIter1, _RAIter2>
  333.     __mismatch_switch(_RAIter1, _RAIter1, _RAIter2, _Predicate,
  334.                     random_access_iterator_tag, random_access_iterator_tag);
  335.  
  336.   template<typename _FIter1, typename _FIter2>
  337.     _FIter1
  338.     search(_FIter1, _FIter1, _FIter2, _FIter2, __gnu_parallel::sequential_tag);
  339.  
  340.   template<typename _FIter1, typename _FIter2>
  341.     _FIter1
  342.     search(_FIter1, _FIter1, _FIter2, _FIter2);
  343.  
  344.   template<typename _FIter1, typename _FIter2, typename _BiPredicate>
  345.     _FIter1
  346.     search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
  347.            __gnu_parallel::sequential_tag);
  348.  
  349.   template<typename _FIter1, typename _FIter2, typename _BiPredicate>
  350.     _FIter1
  351.     search(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate);
  352.  
  353.   template<typename _RAIter1, typename _RAIter2>
  354.     _RAIter1
  355.     __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  356.                   random_access_iterator_tag, random_access_iterator_tag);
  357.  
  358.   template<typename _FIter1, typename _FIter2, typename _IterTag1,
  359.            typename _IterTag2>
  360.     _FIter1
  361.     __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _IterTag1, _IterTag2);
  362.  
  363.   template<typename _RAIter1, typename _RAIter2, typename _BiPredicate>
  364.     _RAIter1
  365.     __search_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _BiPredicate,
  366.                   random_access_iterator_tag, random_access_iterator_tag);
  367.  
  368.   template<typename _FIter1, typename _FIter2, typename _BiPredicate,
  369.            typename _IterTag1, typename _IterTag2>
  370.     _FIter1
  371.     __search_switch(_FIter1, _FIter1, _FIter2, _FIter2, _BiPredicate,
  372.                   _IterTag1, _IterTag2);
  373.  
  374.   template<typename _FIter, typename _Integer, typename _Tp>
  375.     _FIter
  376.     search_n(_FIter, _FIter, _Integer, const _Tp&,
  377.              __gnu_parallel::sequential_tag);
  378.  
  379.   template<typename _FIter, typename _Integer, typename _Tp,
  380.            typename _BiPredicate>
  381.     _FIter
  382.     search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate,
  383.              __gnu_parallel::sequential_tag);
  384.    
  385.   template<typename _FIter, typename _Integer, typename _Tp>
  386.     _FIter
  387.     search_n(_FIter, _FIter, _Integer, const _Tp&);
  388.  
  389.   template<typename _FIter, typename _Integer, typename _Tp,
  390.            typename _BiPredicate>
  391.     _FIter
  392.     search_n(_FIter, _FIter, _Integer, const _Tp&, _BiPredicate);
  393.  
  394.   template<typename _RAIter, typename _Integer, typename _Tp,
  395.            typename _BiPredicate>
  396.     _RAIter
  397.     __search_n_switch(_RAIter, _RAIter, _Integer, const _Tp&,
  398.                     _BiPredicate, random_access_iterator_tag);
  399.  
  400.   template<typename _FIter, typename _Integer, typename _Tp,
  401.            typename _BiPredicate, typename _IterTag>
  402.     _FIter
  403.     __search_n_switch(_FIter, _FIter, _Integer, const _Tp&,
  404.                     _BiPredicate, _IterTag);
  405.  
  406.  
  407.   template<typename _IIter, typename _OIter, typename _UnaryOperation>
  408.     _OIter
  409.     transform(_IIter, _IIter, _OIter, _UnaryOperation);
  410.  
  411.   template<typename _IIter, typename _OIter, typename _UnaryOperation>
  412.     _OIter
  413.     transform(_IIter, _IIter, _OIter, _UnaryOperation,
  414.               __gnu_parallel::sequential_tag);
  415.  
  416.   template<typename _IIter, typename _OIter, typename _UnaryOperation>
  417.     _OIter
  418.     transform(_IIter, _IIter, _OIter, _UnaryOperation,
  419.               __gnu_parallel::_Parallelism);
  420.  
  421.   template<typename _IIter, typename _OIter, typename _UnaryOperation,
  422.            typename _IterTag1, typename _IterTag2>
  423.     _OIter
  424.     __transform1_switch(_IIter, _IIter, _OIter, _UnaryOperation,
  425.                       _IterTag1, _IterTag2);
  426.    
  427.  
  428.   template<typename _RAIIter, typename _RAOIter, typename _UnaryOperation>
  429.     _RAOIter
  430.     __transform1_switch(_RAIIter, _RAIIter, _RAOIter, _UnaryOperation,
  431.                       random_access_iterator_tag, random_access_iterator_tag,
  432.                       __gnu_parallel::_Parallelism __parallelism
  433.                       = __gnu_parallel::parallel_balanced);
  434.  
  435.  
  436.   template<typename _IIter1, typename _IIter2, typename _OIter,
  437.            typename _BiOperation>
  438.     _OIter
  439.     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation);
  440.  
  441.   template<typename _IIter1, typename _IIter2, typename _OIter,
  442.            typename _BiOperation>
  443.     _OIter
  444.     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
  445.               __gnu_parallel::sequential_tag);
  446.  
  447.   template<typename _IIter1, typename _IIter2, typename _OIter,
  448.            typename _BiOperation>
  449.     _OIter
  450.     transform(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
  451.               __gnu_parallel::_Parallelism);
  452.  
  453.   template<typename _RAIter1, typename _RAIter2, typename _RAIter3,
  454.            typename _BiOperation>
  455.     _RAIter3
  456.     __transform2_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter3, _BiOperation,
  457.                       random_access_iterator_tag, random_access_iterator_tag,
  458.                       random_access_iterator_tag,
  459.                       __gnu_parallel::_Parallelism __parallelism
  460.                       = __gnu_parallel::parallel_balanced);
  461.  
  462.   template<typename _IIter1, typename _IIter2, typename _OIter,
  463.            typename _BiOperation, typename _Tag1,
  464.            typename _Tag2, typename _Tag3>
  465.     _OIter
  466.     __transform2_switch(_IIter1, _IIter1, _IIter2, _OIter, _BiOperation,
  467.                       _Tag1, _Tag2, _Tag3);
  468.  
  469.  
  470.   template<typename _FIter, typename _Tp>
  471.     void
  472.     replace(_FIter, _FIter, const _Tp&, const _Tp&);
  473.  
  474.   template<typename _FIter, typename _Tp>
  475.     void
  476.     replace(_FIter, _FIter, const _Tp&, const _Tp&,
  477.             __gnu_parallel::sequential_tag);
  478.  
  479.   template<typename _FIter, typename _Tp>
  480.     void
  481.     replace(_FIter, _FIter, const _Tp&, const _Tp&,
  482.             __gnu_parallel::_Parallelism);
  483.  
  484.   template<typename _FIter, typename _Tp, typename _IterTag>
  485.     void
  486.     __replace_switch(_FIter, _FIter, const _Tp&, const _Tp&, _IterTag);
  487.  
  488.   template<typename _RAIter, typename _Tp>
  489.     void
  490.     __replace_switch(_RAIter, _RAIter, const _Tp&, const _Tp&,
  491.                    random_access_iterator_tag, __gnu_parallel::_Parallelism);
  492.  
  493.  
  494.   template<typename _FIter, typename _Predicate, typename _Tp>
  495.     void
  496.     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
  497.  
  498.   template<typename _FIter, typename _Predicate, typename _Tp>
  499.     void
  500.     replace_if(_FIter, _FIter, _Predicate, const _Tp&,
  501.                __gnu_parallel::sequential_tag);
  502.  
  503.   template<typename _FIter, typename _Predicate, typename _Tp>
  504.     void
  505.     replace_if(_FIter, _FIter, _Predicate, const _Tp&,
  506.                __gnu_parallel::_Parallelism);
  507.  
  508.   template<typename _FIter, typename _Predicate, typename _Tp,
  509.            typename _IterTag>
  510.     void
  511.     __replace_if_switch(_FIter, _FIter, _Predicate, const _Tp&, _IterTag);
  512.  
  513.   template<typename _RAIter, typename _Predicate, typename _Tp>
  514.     void
  515.     __replace_if_switch(_RAIter, _RAIter, _Predicate, const _Tp&,
  516.                       random_access_iterator_tag,
  517.                       __gnu_parallel::_Parallelism);
  518.  
  519.  
  520.   template<typename _FIter>
  521.     _FIter
  522.     max_element(_FIter, _FIter);
  523.  
  524.   template<typename _FIter>
  525.     _FIter
  526.     max_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
  527.  
  528.   template<typename _FIter>
  529.     _FIter
  530.     max_element(_FIter, _FIter, __gnu_parallel::_Parallelism);
  531.  
  532.   template<typename _FIter, typename _Compare>
  533.     _FIter
  534.     max_element(_FIter, _FIter, _Compare);
  535.  
  536.   template<typename _FIter, typename _Compare>
  537.     _FIter
  538.     max_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
  539.  
  540.   template<typename _FIter, typename _Compare>
  541.     _FIter
  542.     max_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
  543.  
  544.   template<typename _FIter, typename _Compare, typename _IterTag>
  545.     _FIter
  546.     __max_element_switch(_FIter, _FIter, _Compare, _IterTag);
  547.  
  548.   template<typename _RAIter, typename _Compare>
  549.     _RAIter
  550.     __max_element_switch(
  551.       _RAIter, _RAIter, _Compare, random_access_iterator_tag,
  552.       __gnu_parallel::_Parallelism __parallelism
  553.       = __gnu_parallel::parallel_balanced);
  554.  
  555.  
  556.   template<typename _IIter1, typename _IIter2, typename _OIter>
  557.     _OIter
  558.     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  559.           __gnu_parallel::sequential_tag);
  560.  
  561.   template<typename _IIter1, typename _IIter2, typename _OIter,
  562.            typename _Compare>
  563.     _OIter
  564.     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
  565.           __gnu_parallel::sequential_tag);
  566.  
  567.   template<typename _IIter1, typename _IIter2, typename _OIter,
  568.            typename _Compare>
  569.     _OIter
  570.     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
  571.  
  572.   template<typename _IIter1, typename _IIter2, typename _OIter>
  573.     _OIter
  574.     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  575.  
  576.   template<typename _IIter1, typename _IIter2, typename _OIter,
  577.            typename _Compare, typename _IterTag1, typename _IterTag2,
  578.            typename _IterTag3>
  579.     _OIter
  580.     __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
  581.                  _IterTag1, _IterTag2, _IterTag3);
  582.  
  583.   template<typename _IIter1, typename _IIter2, typename _OIter,
  584.            typename _Compare>
  585.     _OIter
  586.     __merge_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare,
  587.                  random_access_iterator_tag, random_access_iterator_tag,
  588.                  random_access_iterator_tag);
  589.  
  590.  
  591.   template<typename _FIter>
  592.     _FIter
  593.     min_element(_FIter, _FIter);
  594.  
  595.   template<typename _FIter>
  596.     _FIter
  597.     min_element(_FIter, _FIter, __gnu_parallel::sequential_tag);
  598.  
  599.   template<typename _FIter>
  600.     _FIter
  601.     min_element(_FIter, _FIter,
  602.                 __gnu_parallel::_Parallelism __parallelism_tag);
  603.  
  604.   template<typename _FIter, typename _Compare>
  605.     _FIter
  606.     min_element(_FIter, _FIter, _Compare);
  607.  
  608.   template<typename _FIter, typename _Compare>
  609.     _FIter
  610.     min_element(_FIter, _FIter, _Compare, __gnu_parallel::sequential_tag);
  611.  
  612.   template<typename _FIter, typename _Compare>
  613.     _FIter
  614.     min_element(_FIter, _FIter, _Compare, __gnu_parallel::_Parallelism);
  615.  
  616.   template<typename _FIter, typename _Compare, typename _IterTag>
  617.     _FIter
  618.     __min_element_switch(_FIter, _FIter, _Compare, _IterTag);
  619.  
  620.   template<typename _RAIter, typename _Compare>
  621.     _RAIter
  622.     __min_element_switch(
  623.       _RAIter, _RAIter, _Compare, random_access_iterator_tag,
  624.       __gnu_parallel::_Parallelism __parallelism
  625.       = __gnu_parallel::parallel_balanced);
  626.  
  627.   template<typename _RAIter>
  628.     void
  629.     nth_element(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
  630.  
  631.   template<typename _RAIter, typename _Compare>
  632.     void
  633.     nth_element(_RAIter, _RAIter, _RAIter, _Compare,
  634.                 __gnu_parallel::sequential_tag);
  635.  
  636.   template<typename _RAIter, typename _Compare>
  637.     void
  638.     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
  639.  
  640.   template<typename _RAIter>
  641.     void
  642.     nth_element(_RAIter, _RAIter, _RAIter);
  643.  
  644.   template<typename _RAIter, typename _Compare>
  645.     void
  646.     partial_sort(_RAIter, _RAIter, _RAIter, _Compare,
  647.                  __gnu_parallel::sequential_tag);
  648.  
  649.   template<typename _RAIter>
  650.     void
  651.     partial_sort(_RAIter, _RAIter, _RAIter, __gnu_parallel::sequential_tag);
  652.  
  653.   template<typename _RAIter, typename _Compare>
  654.     void
  655.     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
  656.  
  657.   template<typename _RAIter>
  658.     void
  659.     partial_sort(_RAIter, _RAIter, _RAIter);
  660.  
  661.   template<typename _FIter, typename _Predicate>
  662.     _FIter
  663.     partition(_FIter, _FIter, _Predicate, __gnu_parallel::sequential_tag);
  664.    
  665.   template<typename _FIter, typename _Predicate>
  666.     _FIter
  667.     partition(_FIter, _FIter, _Predicate);
  668.  
  669.   template<typename _FIter, typename _Predicate, typename _IterTag>
  670.     _FIter
  671.     __partition_switch(_FIter, _FIter, _Predicate, _IterTag);
  672.    
  673.   template<typename _RAIter, typename _Predicate>
  674.     _RAIter
  675.     __partition_switch(
  676.       _RAIter, _RAIter, _Predicate, random_access_iterator_tag);
  677.  
  678.   template<typename _RAIter>
  679.     void
  680.     random_shuffle(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
  681.  
  682.   template<typename _RAIter, typename _RandomNumberGenerator>
  683.     void
  684.     random_shuffle(_RAIter, _RAIter, _RandomNumberGenerator&,
  685.                    __gnu_parallel::sequential_tag);
  686.  
  687.   template<typename _RAIter>
  688.     void
  689.     random_shuffle(_RAIter, _RAIter);
  690.  
  691.   template<typename _RAIter, typename _RandomNumberGenerator>
  692.     void
  693.     random_shuffle(_RAIter, _RAIter,
  694. #if __cplusplus >= 201103L
  695.                    _RandomNumberGenerator&&);
  696. #else
  697.                    _RandomNumberGenerator&);
  698. #endif
  699.  
  700.   template<typename _IIter1, typename _IIter2, typename _OIter>
  701.     _OIter
  702.     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  703.             __gnu_parallel::sequential_tag);
  704.  
  705.   template<typename _IIter1, typename _IIter2, typename _OIter,
  706.            typename _Predicate>
  707.     _OIter
  708.     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
  709.               __gnu_parallel::sequential_tag);
  710.  
  711.   template<typename _IIter1, typename _IIter2, typename _OIter>
  712.     _OIter
  713.     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  714.  
  715.   template<typename _IIter1, typename _IIter2, typename _OIter,
  716.            typename _Predicate>
  717.     _OIter
  718.     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
  719.  
  720.   template<typename _IIter1, typename _IIter2, typename _Predicate,
  721.            typename _OIter, typename _IterTag1, typename _IterTag2,
  722.            typename _IterTag3>
  723.     _OIter
  724.     __set_union_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  725.                      _Predicate, _IterTag1, _IterTag2, _IterTag3);
  726.  
  727.   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  728.            typename _Predicate>
  729.     _Output_RAIter
  730.     __set_union_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2, _Output_RAIter,
  731.                      _Predicate, random_access_iterator_tag,
  732.                      random_access_iterator_tag, random_access_iterator_tag);
  733.  
  734.   template<typename _IIter1, typename _IIter2, typename _OIter>
  735.     _OIter
  736.     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  737.                      __gnu_parallel::sequential_tag);
  738.  
  739.   template<typename _IIter1, typename _IIter2, typename _OIter,
  740.            typename _Predicate>
  741.     _OIter
  742.     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
  743.                      __gnu_parallel::sequential_tag);
  744.  
  745.   template<typename _IIter1, typename _IIter2, typename _OIter>
  746.     _OIter
  747.     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  748.  
  749.   template<typename _IIter1, typename _IIter2, typename _OIter,
  750.            typename _Predicate>
  751.     _OIter
  752.     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
  753.  
  754.   template<typename _IIter1, typename _IIter2, typename _Predicate,
  755.            typename _OIter, typename _IterTag1, typename _IterTag2,
  756.            typename _IterTag3>
  757.     _OIter
  758.     __set_intersection_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  759.                             _Predicate, _IterTag1, _IterTag2, _IterTag3);
  760.  
  761.   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  762.            typename _Predicate>
  763.     _Output_RAIter
  764.     __set_intersection_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  765.                             _Output_RAIter, _Predicate,
  766.                             random_access_iterator_tag,
  767.                             random_access_iterator_tag,
  768.                             random_access_iterator_tag);
  769.  
  770.   template<typename _IIter1, typename _IIter2, typename _OIter>
  771.     _OIter
  772.     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  773.                              __gnu_parallel::sequential_tag);
  774.  
  775.   template<typename _IIter1, typename _IIter2, typename _OIter,
  776.            typename _Predicate>
  777.     _OIter
  778.     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  779.                              _Predicate, __gnu_parallel::sequential_tag);
  780.  
  781.   template<typename _IIter1, typename _IIter2, typename _OIter>
  782.     _OIter
  783.     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  784.  
  785.   template<typename _IIter1, typename _IIter2, typename _OIter,
  786.            typename _Predicate>
  787.     _OIter
  788.     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  789.                              _Predicate);
  790.  
  791.   template<typename _IIter1, typename _IIter2, typename _Predicate,
  792.            typename _OIter, typename _IterTag1, typename _IterTag2,
  793.            typename _IterTag3>
  794.     _OIter
  795.     __set_symmetric_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2,
  796.                                     _OIter, _Predicate, _IterTag1, _IterTag2,
  797.                                     _IterTag3);
  798.  
  799.   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  800.            typename _Predicate>
  801.     _Output_RAIter
  802.     __set_symmetric_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  803.                                     _Output_RAIter, _Predicate,
  804.                                     random_access_iterator_tag,
  805.                                     random_access_iterator_tag,
  806.                                     random_access_iterator_tag);
  807.  
  808.  
  809.   template<typename _IIter1, typename _IIter2, typename _OIter>
  810.     _OIter
  811.     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  812.                    __gnu_parallel::sequential_tag);
  813.  
  814.   template<typename _IIter1, typename _IIter2, typename _OIter,
  815.            typename _Predicate>
  816.     _OIter
  817.     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate,
  818.                    __gnu_parallel::sequential_tag);
  819.  
  820.   template<typename _IIter1, typename _IIter2, typename _OIter>
  821.     _OIter
  822.     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
  823.  
  824.   template<typename _IIter1, typename _IIter2, typename _OIter,
  825.            typename _Predicate>
  826.     _OIter
  827.     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Predicate);
  828.  
  829.   template<typename _IIter1, typename _IIter2, typename _Predicate,
  830.            typename _OIter, typename _IterTag1, typename _IterTag2,
  831.            typename _IterTag3>
  832.     _OIter
  833.     __set_difference_switch(_IIter1, _IIter1, _IIter2, _IIter2, _OIter,
  834.                           _Predicate, _IterTag1, _IterTag2, _IterTag3);
  835.  
  836.   template<typename _RAIter1, typename _RAIter2, typename _Output_RAIter,
  837.            typename _Predicate>
  838.     _Output_RAIter
  839.     __set_difference_switch(_RAIter1, _RAIter1, _RAIter2, _RAIter2,
  840.                           _Output_RAIter, _Predicate,
  841.                           random_access_iterator_tag,
  842.                           random_access_iterator_tag,
  843.                           random_access_iterator_tag);
  844.  
  845.  
  846.   template<typename _RAIter>
  847.     void
  848.     sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
  849.  
  850.   template<typename _RAIter, typename _Compare>
  851.     void
  852.     sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
  853.  
  854.   template<typename _RAIter>
  855.     void
  856.     sort(_RAIter, _RAIter);
  857.  
  858.   template<typename _RAIter, typename _Compare>
  859.     void
  860.     sort(_RAIter, _RAIter, _Compare);
  861.  
  862.   template<typename _RAIter>
  863.     void
  864.     stable_sort(_RAIter, _RAIter, __gnu_parallel::sequential_tag);
  865.  
  866.   template<typename _RAIter, typename _Compare>
  867.     void
  868.     stable_sort(_RAIter, _RAIter, _Compare, __gnu_parallel::sequential_tag);
  869.  
  870.   template<typename _RAIter>
  871.     void
  872.     stable_sort(_RAIter, _RAIter);
  873.  
  874.   template<typename _RAIter, typename _Compare>
  875.     void
  876.     stable_sort(_RAIter, _RAIter, _Compare);
  877.  
  878.   template<typename _IIter, typename _OIter>
  879.     _OIter
  880.     unique_copy(_IIter, _IIter, _OIter, __gnu_parallel::sequential_tag);
  881.  
  882.   template<typename _IIter, typename _OIter, typename _Predicate>
  883.     _OIter
  884.     unique_copy(_IIter, _IIter, _OIter, _Predicate,
  885.                 __gnu_parallel::sequential_tag);
  886.  
  887.   template<typename _IIter, typename _OIter>
  888.     _OIter
  889.     unique_copy(_IIter, _IIter, _OIter);
  890.  
  891.   template<typename _IIter, typename _OIter, typename _Predicate>
  892.     _OIter
  893.     unique_copy(_IIter, _IIter, _OIter, _Predicate);
  894.  
  895.   template<typename _IIter, typename _OIter, typename _Predicate,
  896.            typename _IterTag1, typename _IterTag2>
  897.     _OIter
  898.     __unique_copy_switch(_IIter, _IIter, _OIter, _Predicate,
  899.                        _IterTag1, _IterTag2);
  900.  
  901.   template<typename _RAIter, typename _RandomAccess_OIter, typename _Predicate>
  902.     _RandomAccess_OIter
  903.     __unique_copy_switch(_RAIter, _RAIter, _RandomAccess_OIter, _Predicate,
  904.                        random_access_iterator_tag, random_access_iterator_tag);
  905. } // end namespace __parallel
  906. } // end namespace std
  907.  
  908. #endif /* _GLIBCXX_PARALLEL_ALGORITHMFWD_H */
  909.