177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1994
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Hewlett-Packard Company
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1996,1997
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Moscow Center for SPARC Technology
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* NOTE: This is an internal header file, included by other STL headers.
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *   You should not attempt to use it directly.
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ALGO_H
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_ALGO_H
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ALGOBASE_H
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_algobase.h>
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_HEAP_H
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_heap.h>
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ITERATOR_H
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_iterator.h>
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_FUNCTION_BASE_H
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_function_base.h>
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__SUNPRO_CC) && !defined (_STLP_INTERNAL_CSTDIO)
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// remove() conflict
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_cstdio.h>
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// for_each.  Apply a function to every element of a range.
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Function>
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _Function
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerfor_each(_InputIter __first, _InputIter __last, _Function __f) {
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    __f(*__first);
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __f;
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// count_if
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Predicate>
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_InputIter)
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercount_if(_InputIter __first, _InputIter __last, _Predicate __pred) {
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DIFFERENCE_TYPE(_InputIter) __n = 0;
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first) {
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__pred(*__first))
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      ++__n;
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __n;
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// adjacent_find.
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _BinaryPredicate>
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _ForwardIter
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneradjacent_find(_ForwardIter __first, _ForwardIter __last,
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _BinaryPredicate __binary_pred) {
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  if (__first == __last)
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return __last;
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _ForwardIter __next = __first;
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  while(++__next != __last) {
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__binary_pred(*__first, *__next))
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      return __first;
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    __first = __next;
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __last;
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter>
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _ForwardIter
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneradjacent_find(_ForwardIter __first, _ForwardIter __last) {
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return adjacent_find(__first, __last,
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                       _STLP_PRIV __equal_to(_STLP_VALUE_TYPE(__first, _ForwardIter)));
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_ANACHRONISMS)
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Tp, class _Size>
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercount(_InputIter __first, _InputIter __last, const _Tp& __val, _Size& __n) {
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    for ( ; __first != __last; ++__first)
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      if (*__first == __val)
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        ++__n;
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Predicate, class _Size>
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercount_if(_InputIter __first, _InputIter __last, _Predicate __pred, _Size& __n) {
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__pred(*__first))
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      ++__n;
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2>
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     _ForwardIter2 __first2, _ForwardIter2 __last2);
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// search_n.  Search for __count consecutive copies of __val.
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Integer, class _Tp>
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _Integer __count, const _Tp& __val);
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Integer, class _Tp, class _BinaryPred>
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _Integer __count, const _Tp& __val, _BinaryPred __binary_pred);
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _ForwardIter>
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _InputIter find_first_of(_InputIter __first1, _InputIter __last1,
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                _ForwardIter __first2, _ForwardIter __last2) {
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __find_first_of(__first1, __last1, __first2, __last2);
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _ForwardIter, class _BinaryPredicate>
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _InputIter
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerfind_first_of(_InputIter __first1, _InputIter __last1,
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _ForwardIter __first2, _ForwardIter __last2, _BinaryPredicate __comp) {
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __find_first_of(__first1, __last1, __first2, __last2, __comp);
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2>
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter1
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerfind_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner         _ForwardIter2 __first2, _ForwardIter2 __last2);
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// swap_ranges
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2>
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _ForwardIter2
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerswap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2) {
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first1 != __last1; ++__first1, ++__first2)
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    iter_swap(__first1, __first2);
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __first2;
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// transform
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _UnaryOperation>
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _OutputIter
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertransform(_InputIter __first, _InputIter __last, _OutputIter __result, _UnaryOperation __opr) {
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first, ++__result)
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = __opr(*__first);
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter, class _BinaryOperation>
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _OutputIter
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertransform(_InputIter1 __first1, _InputIter1 __last1,
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          _InputIter2 __first2, _OutputIter __result,_BinaryOperation __binary_op) {
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = __binary_op(*__first1, *__first2);
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// replace_if, replace_copy, replace_copy_if
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Predicate, class _Tp>
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerreplace_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred, const _Tp& __new_value) {
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__pred(*__first))
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      *__first = __new_value;
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _Tp>
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP  _OutputIter
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerreplace_copy(_InputIter __first, _InputIter __last,_OutputIter __result,
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner             const _Tp& __old_value, const _Tp& __new_value) {
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first, ++__result)
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__first == __old_value ? __new_value : *__first;
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator, class _OutputIter, class _Predicate, class _Tp>
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _OutputIter
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerreplace_copy_if(_Iterator __first, _Iterator __last,
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                _OutputIter __result,
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                _Predicate __pred, const _Tp& __new_value) {
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first, ++__result)
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = __pred(*__first) ? __new_value : *__first;
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// generate and generate_n
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Generator>
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnergenerate(_ForwardIter __first, _ForwardIter __last, _Generator __gen) {
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__first = __gen();
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _OutputIter, class _Size, class _Generator>
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnergenerate_n(_OutputIter __first, _Size __n, _Generator __gen) {
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __n > 0; --__n, ++__first)
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__first = __gen();
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// remove, remove_if, remove_copy, remove_copy_if
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _Tp>
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _OutputIter
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerremove_copy(_InputIter __first, _InputIter __last,_OutputIter __result, const _Tp& __val) {
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first) {
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (!(*__first == __val)) {
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      *__result = *__first;
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      ++__result;
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _Predicate>
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _OutputIter
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerremove_copy_if(_InputIter __first, _InputIter __last, _OutputIter __result, _Predicate __pred) {
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first) {
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (!__pred(*__first)) {
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      *__result = *__first;
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      ++__result;
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _ForwardIter
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerremove(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __first = find(__first, __last, __val);
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  if (__first == __last)
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return __first;
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  else {
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _ForwardIter __next = __first;
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return remove_copy(++__next, __last, __first, __val);
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Predicate>
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _ForwardIter
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerremove_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred) {
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __first = find_if(__first, __last, __pred);
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  if ( __first == __last )
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return __first;
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  else {
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _ForwardIter __next = __first;
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return remove_copy_if(++__next, __last, __first, __pred);
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// unique and unique_copy
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter unique_copy(_InputIter __first, _InputIter __last, _OutputIter __result);
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _BinaryPredicate>
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter unique_copy(_InputIter __first, _InputIter __last,_OutputIter __result,
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                        _BinaryPredicate __binary_pred);
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter>
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _ForwardIter unique(_ForwardIter __first, _ForwardIter __last) {
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __first = adjacent_find(__first, __last);
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return unique_copy(__first, __last, __first);
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _BinaryPredicate>
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _ForwardIter unique(_ForwardIter __first, _ForwardIter __last,
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _BinaryPredicate __binary_pred) {
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __first = adjacent_find(__first, __last, __binary_pred);
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return unique_copy(__first, __last, __first, __binary_pred);
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// reverse and reverse_copy, and their auxiliary functions
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter>
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__reverse(_BidirectionalIter __first, _BidirectionalIter __last, const bidirectional_iterator_tag &) {
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (; __first != __last && __first != --__last; ++__first)
31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD::iter_swap(__first,__last);
31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__reverse(_RandomAccessIter __first, _RandomAccessIter __last, const random_access_iterator_tag &) {
32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (; __first < __last; ++__first)
32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD::iter_swap(__first, --__last);
32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter>
33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void
33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerreverse(_BidirectionalIter __first, _BidirectionalIter __last) {
33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __reverse(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _BidirectionalIter));
33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter, class _OutputIter>
33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter reverse_copy(_BidirectionalIter __first,
34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _BidirectionalIter __last,
34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _OutputIter __result) {
34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  while (__first != __last) {
34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    --__last;
34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__last;
34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__result;
34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter>
35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid rotate(_ForwardIter __first, _ForwardIter __middle, _ForwardIter __last);
35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _OutputIter>
35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter rotate_copy(_ForwardIter __first, _ForwardIter __middle,
35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               _ForwardIter __last, _OutputIter __result) {
35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_STD::copy(__first, __middle, copy(__middle, __last, __result));
35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// random_shuffle
36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last);
36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _RandomNumberGenerator>
36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last,
36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                    _RandomNumberGenerator& __rand);
36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_EXTENSIONS)
37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// random_sample and random_sample_n (extensions, not part of the standard).
37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _OutputIter, class _Distance>
37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            _OutputIter __out_ite, const _Distance __n);
37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _OutputIter, class _Distance,
37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _RandomNumberGenerator>
37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            _OutputIter __out_ite, const _Distance __n,
38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            _RandomNumberGenerator& __rand);
38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _RandomAccessIter>
38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_RandomAccessIter
38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerrandom_sample(_InputIter __first, _InputIter __last,
38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _RandomAccessIter __out_first, _RandomAccessIter __out_last);
38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _RandomAccessIter,
38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _RandomNumberGenerator>
38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_RandomAccessIter
39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerrandom_sample(_InputIter __first, _InputIter __last,
39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _RandomAccessIter __out_first, _RandomAccessIter __out_last,
39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _RandomNumberGenerator& __rand);
39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_NO_EXTENSIONS */
39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// partition, stable_partition, and their auxiliary functions
39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Predicate>
39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter partition(_ForwardIter __first, _ForwardIter __last, _Predicate   __pred);
40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Predicate>
40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter
40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstable_partition(_ForwardIter __first, _ForwardIter __last, _Predicate __pred);
40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// sort() and its auxiliary functions.
40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Size>
40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Size __lg(_Size __n) {
41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Size __k;
41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (__k = 0; __n != 1; __n >>= 1) ++__k;
41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __k;
41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid sort(_RandomAccessIter __first, _RandomAccessIter __last);
41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _Compare>
42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid sort(_RandomAccessIter __first, _RandomAccessIter __last, _Compare __comp);
42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// stable_sort() and its auxiliary functions.
42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid stable_sort(_RandomAccessIter __first,
42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 _RandomAccessIter __last);
42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _Compare>
42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid stable_sort(_RandomAccessIter __first,
42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 _RandomAccessIter __last, _Compare __comp);
43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// partial_sort, partial_sort_copy, and auxiliary functions.
43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _RandomAccessIter __last);
43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _Compare>
43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid partial_sort(_RandomAccessIter __first,_RandomAccessIter __middle,
43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _RandomAccessIter __last, _Compare __comp);
44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _RandomAccessIter>
44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_RandomAccessIter
44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpartial_sort_copy(_InputIter __first, _InputIter __last,
44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _RandomAccessIter __result_first, _RandomAccessIter __result_last);
44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _RandomAccessIter, class _Compare>
44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_RandomAccessIter
44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpartial_sort_copy(_InputIter __first, _InputIter __last,
44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _RandomAccessIter __result_first,
45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _RandomAccessIter __result_last, _Compare __comp);
45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// nth_element() and its auxiliary functions.
45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 _RandomAccessIter __last);
45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _Compare>
45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 _RandomAccessIter __last, _Compare __comp);
46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// auxiliary class for lower_bound, etc.
46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _T1, class _T2>
46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct __less_2 {
46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool operator() (const _T1& __x, const _T2& __y) const { return __x < __y ; }
46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _T1, class _T2>
47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__less_2<_T1,_T2> __less2(_T1*, _T2* ) { return __less_2<_T1, _T2>(); }
47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_FUNCTION_PARTIAL_ORDER)
47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerless<_Tp> __less2(_Tp*, _Tp* ) { return less<_Tp>(); }
47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Binary search (lower_bound, upper_bound, equal_range, binary_search).
48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   const _Tp& __val) {
48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __lower_bound(__first, __last, __val,
48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_PRIV __less2(_STLP_VALUE_TYPE(__first, _ForwardIter), (_Tp*)0),
48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_PRIV __less2((_Tp*)0, _STLP_VALUE_TYPE(__first, _ForwardIter)),
48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_DISTANCE_TYPE(__first, _ForwardIter));
48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare>
49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                const _Tp& __val, _Compare __comp) {
49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __lower_bound(__first, __last, __val, __comp, __comp,
49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_DISTANCE_TYPE(__first, _ForwardIter));
49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare1, class _Compare2, class _Distance>
50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _Compare1 __comp1, _Compare2 __comp2, _Distance*);
50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                const _Tp& __val) {
50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __upper_bound(__first, __last, __val,
51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_PRIV __less2(_STLP_VALUE_TYPE(__first, _ForwardIter), (_Tp*)0),
51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_PRIV __less2((_Tp*)0, _STLP_VALUE_TYPE(__first, _ForwardIter)),
51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_DISTANCE_TYPE(__first, _ForwardIter));
51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare>
51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                const _Tp& __val, _Compare __comp) {
51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __upper_bound(__first, __last, __val, __comp, __comp,
52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_DISTANCE_TYPE(__first, _ForwardIter));
52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare1, class _Compare2, class _Distance>
52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpair<_ForwardIter, _ForwardIter>
52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _Compare1 __comp1, _Compare2 __comp2, _Distance*);
53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline pair<_ForwardIter, _ForwardIter>
53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerequal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {
53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __equal_range(__first, __last, __val,
53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_PRIV __less2(_STLP_VALUE_TYPE(__first, _ForwardIter), (_Tp*)0),
53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_PRIV __less2((_Tp*)0, _STLP_VALUE_TYPE(__first, _ForwardIter)),
54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_DISTANCE_TYPE(__first, _ForwardIter));
54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare>
54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline pair<_ForwardIter, _ForwardIter>
54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerequal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner            _Compare __comp) {
54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __equal_range(__first, __last, __val, __comp, __comp,
54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                  _STLP_DISTANCE_TYPE(__first, _ForwardIter));
55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool binary_search(_ForwardIter __first, _ForwardIter __last,
55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   const _Tp& __val) {
55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _ForwardIter __i = _STLP_PRIV __lower_bound(__first, __last, __val,
55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                              _STLP_PRIV __less2(_STLP_VALUE_TYPE(__first, _ForwardIter), (_Tp*)0),
55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                              _STLP_PRIV __less2((_Tp*)0, _STLP_VALUE_TYPE(__first, _ForwardIter)),
55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                              _STLP_DISTANCE_TYPE(__first, _ForwardIter));
56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __i != __last && !(__val < *__i);
56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare>
56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool binary_search(_ForwardIter __first, _ForwardIter __last,
56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                          const _Tp& __val,
56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                          _Compare __comp) {
56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _ForwardIter __i = _STLP_PRIV __lower_bound(__first, __last, __val, __comp, __comp,
56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                              _STLP_DISTANCE_TYPE(__first, _ForwardIter));
57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __i != __last && !__comp(__val, *__i);
57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// merge, with and without an explicitly supplied comparison function.
57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter>
57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _InputIter2 __first2, _InputIter2 __last2,
57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _OutputIter __result);
57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter,
58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Compare>
58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _InputIter2 __first2, _InputIter2 __last2,
58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                  _OutputIter __result, _Compare __comp);
58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// inplace_merge and its auxiliary functions.
58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter>
59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid inplace_merge(_BidirectionalIter __first,
59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   _BidirectionalIter __middle,
59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   _BidirectionalIter __last) ;
59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter, class _Compare>
59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid inplace_merge(_BidirectionalIter __first,
59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   _BidirectionalIter __middle,
59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   _BidirectionalIter __last, _Compare __comp);
59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Set algorithms: includes, set_union, set_intersection, set_difference,
60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// set_symmetric_difference.  All of these algorithms have the precondition
60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// that their input ranges are sorted and the postcondition that their output
60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// ranges are sorted.
60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2>
60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool includes(_InputIter1 __first1, _InputIter1 __last1,
60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _InputIter2 __first2, _InputIter2 __last2);
60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _Compare>
61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool includes(_InputIter1 __first1, _InputIter1 __last1,
61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              _InputIter2 __first2, _InputIter2 __last2, _Compare __comp);
61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter>
61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _InputIter2 __first2, _InputIter2 __last2,
61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _OutputIter __result);
61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter,
61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Compare>
62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _InputIter2 __first2, _InputIter2 __last2,
62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _OutputIter __result, _Compare __comp);
62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter>
62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _InputIter2 __first2, _InputIter2 __last2,
62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _OutputIter __result);
62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter,
63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Compare>
63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _InputIter2 __first2, _InputIter2 __last2,
63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _OutputIter __result, _Compare __comp);
63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter>
63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _InputIter2 __first2, _InputIter2 __last2,
64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _OutputIter __result);
64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter,
64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Compare>
64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _InputIter2 __first2, _InputIter2 __last2,
64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _OutputIter __result, _Compare __comp);
64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter>
64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter
65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerset_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _InputIter2 __first2, _InputIter2 __last2,
65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _OutputIter __result);
65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _OutputIter,
65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Compare>
65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter
65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerset_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _InputIter2 __first2, _InputIter2 __last2,
66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _OutputIter __result,
66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                         _Compare __comp);
66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// min_element and max_element, with and without an explicitly supplied
66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// comparison function.
66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter>
66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last);
66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Compare>
67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last,
67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            _Compare __comp);
67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter>
67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last);
67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Compare>
67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last,
67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            _Compare __comp);
67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// next_permutation and prev_permutation, with and without an explicitly
68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// supplied comparison function.
68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter>
68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last);
68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter, class _Compare>
68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _Compare __comp);
68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter>
69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last);
69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter, class _Compare>
69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _Compare __comp);
69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_EXTENSIONS)
70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// is_heap, a predicate testing whether or not a range is
70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// a heap.  This function is an extension, not part of the C++
70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// standard.
70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter>
70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool is_heap(_RandomAccessIter __first, _RandomAccessIter __last);
70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _StrictWeakOrdering>
70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool is_heap(_RandomAccessIter __first, _RandomAccessIter __last,
70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner             _StrictWeakOrdering __comp);
71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// is_sorted, a predicated testing whether a range is sorted in
71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// nondescending order.  This is an extension, not part of the C++
71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// standard.
71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _StrictWeakOrdering>
71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool __is_sorted(_ForwardIter __first, _ForwardIter __last,
71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 _StrictWeakOrdering __comp);
71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter>
72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool is_sorted(_ForwardIter __first, _ForwardIter __last) {
72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __is_sorted(__first, __last,
72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                _STLP_PRIV __less(_STLP_VALUE_TYPE(__first, _ForwardIter)));
72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _StrictWeakOrdering>
72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool is_sorted(_ForwardIter __first, _ForwardIter __last,
72977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      _StrictWeakOrdering __comp) {
73077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __is_sorted(__first, __last, __comp);
73177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
73277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
73377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
73477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
73577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
73677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_LINK_TIME_INSTANTIATION)
73777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_algo.c>
73877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
73977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
74077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_ALGO_H */
74177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
74277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
74377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
74477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
74577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
746