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_ALGOBASE_H
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_ALGOBASE_H
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_CSTDDEF
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_cstddef.h>
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_CSTRING
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_cstring.h>
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_CLIMITS
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <climits>
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_CSTDLIB
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_cstdlib.h>
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_PAIR_H
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_pair.h>
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ITERATOR_BASE_H
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_iterator_base.h>
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_TYPE_TRAITS_H
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/type_traits.h>
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void __swap_aux(_Tp& __a, _Tp& __b, const __true_type& /*SwapImplemented*/) {
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __a._M_swap_workaround(__b);
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void __swap_aux(_Tp& __a, _Tp& __b, const __false_type& /*SwapImplemented*/) {
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Tp __tmp = __a;
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __a = __b;
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __b = __tmp;
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// swap and iter_swap
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void swap(_Tp& __a, _Tp& __b) {
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined(__BORLANDC__)
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _SwapImplemented<_Tp>::_Ret _Implemented;
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  enum { _Is = _SwapImplemented<_Tp>::_Is };
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename __bool2type<_Is>::_Ret _Implemented;
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __swap_aux(__a, __b, _Implemented());
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Tp __tmp = __a;
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __a = __b;
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __b = __tmp;
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2, class _Value>
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void __iter_swap_aux_aux(_ForwardIter1& __i1, _ForwardIter2& __i2, _Value *) {
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Value tmp = *__i1;
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  *__i1 = *__i2;
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  *__i2 = tmp;
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2>
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void __iter_swap_aux(_ForwardIter1& __i1, _ForwardIter2& __i2, const __true_type& /*OKToSwap*/) {
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  /* namespace specification breaks access to the right swap template overload (at least for gcc) */
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  /*_STLP_STD::*/ swap(*__i1, *__i2);
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2>
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void __iter_swap_aux(_ForwardIter1& __i1, _ForwardIter2& __i2, const __false_type& /*OKToSwap*/) {
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __iter_swap_aux_aux( __i1, __i2, _STLP_VALUE_TYPE(__i1,_ForwardIter1) );
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2>
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void iter_swap(_ForwardIter1 __i1, _ForwardIter2 __i2) {
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __iter_swap_aux( __i1, __i2, _IsOKToSwap(_STLP_VALUE_TYPE(__i1, _ForwardIter1), _STLP_VALUE_TYPE(__i2, _ForwardIter2),
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                      _STLP_IS_REF_TYPE_REAL_REF(__i1, _ForwardIter1),
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                      _STLP_IS_REF_TYPE_REAL_REF(__i2, _ForwardIter2))._Answer());
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// min and max
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (__BORLANDC__) || defined (_STLP_USE_OWN_NAMESPACE)
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if (defined (__BORLANDC__) && (__BORLANDC__ < 0x580)) && !defined (__STDC__)
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//In not ANSI mode Borland import min/max in global namespace which conflict
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//with STLport min/max when user does a 'using namespace std' in its code
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//(see test/unit/alg_test.cpp). To avoid this clash we simply import Borland min/max
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//in STLport namespace.
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_STD::min;
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerusing _STLP_VENDOR_STD::max;
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline const _Tp& (min)(const _Tp& __a, const _Tp& __b) { return __b < __a ? __b : __a; }
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp>
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline const _Tp& (max)(const _Tp& __a, const _Tp& __b) {  return  __a < __b ? __b : __a; }
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (__BORLANDC__) && defined (_STLP_USE_OWN_NAMESPACE)
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline unsigned long (min) (unsigned long __a, unsigned long __b) { return __b < __a ? __b : __a; }
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline unsigned long (max) (unsigned long __a, unsigned long __b) {  return  __a < __b ? __b : __a; }
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (__BORLANDC__) || (__BORLANDC__ < 0x590)
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _Compare>
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline const _Tp& (min)(const _Tp& __a, const _Tp& __b, _Compare __comp) {
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __comp(__b, __a) ? __b : __a;
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _Compare>
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline const _Tp& (max)(const _Tp& __a, const _Tp& __b, _Compare __comp) {
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __comp(__a, __b) ? __b : __a;
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _Compare>
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline const _Tp (min)(const _Tp __a, const _Tp __b, _Compare __comp) {
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __comp(__b, __a) ? __b : __a;
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _Compare>
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline const _Tp (max)(const _Tp __a, const _Tp __b, _Compare __comp) {
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __comp(__a, __b) ? __b : __a;
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// copy
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// All of these auxiliary functions serve two purposes.  (1) Replace
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// calls to copy with memmove whenever possible.  (Memmove, not memcpy,
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// because the input and output ranges are permitted to overlap.)
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// (2) If we're using random access iterators, then write the loop as
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// a for loop with an explicit count.
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _Distance>
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy(_InputIter __first, _InputIter __last,
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                          _OutputIter __result, const input_iterator_tag &, _Distance*) {
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__result, ++__first)
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__first;
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _Distance>
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy(_InputIter __first, _InputIter __last,
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                          _OutputIter __result, const forward_iterator_tag &, _Distance* ) {
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__result, ++__first)
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__first;
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter, class _Distance>
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy(_InputIter __first, _InputIter __last,
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                          _OutputIter __result, const bidirectional_iterator_tag &, _Distance* ) {
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__result, ++__first)
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__first;
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _OutputIter, class _Distance>
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__copy(_RandomAccessIter __first, _RandomAccessIter __last,
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner       _OutputIter __result, const random_access_iterator_tag &, _Distance*) {
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (_Distance __n = __last - __first; __n > 0; --__n) {
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__first;
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__first;
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__result;
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void*
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__copy_trivial(const void* __first, const void* __last, void* __result) {
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t __n = (const char*)__last - (const char*)__first;
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __n ? (void *)((char*)memmove(__result, __first, __n) + __n) : __result;
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// copy_backward auxiliary functions
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _BidirectionalIter1, class _BidirectionalIter2,
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Distance>
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _BidirectionalIter2 __copy_backward(_BidirectionalIter1 __first,
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                           _BidirectionalIter1 __last,
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                           _BidirectionalIter2 __result,
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                           const bidirectional_iterator_tag &,
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                           _Distance*) {
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  while (__first != __last)
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *--__result = *--__last;
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _BidirectionalIter, class _Distance>
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _BidirectionalIter __copy_backward(_RandomAccessIter __first,
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                          _RandomAccessIter __last,
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                          _BidirectionalIter __result,
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                          const random_access_iterator_tag &,
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                          _Distance*) {
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (_Distance __n = __last - __first; __n > 0; --__n)
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *--__result = *--__last;
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result;
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void*
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__copy_trivial_backward(const void* __first, const void* __last, void* __result) {
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const ptrdiff_t _Num = (const char*)__last - (const char*)__first;
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return (_Num > 0) ? memmove((char*)__result - _Num, __first, _Num) : __result ;
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_ptrs(_InputIter __first, _InputIter __last, _OutputIter __result,
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const __false_type& /*IsOKToMemCpy*/) {
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy(__first, __last, __result, random_access_iterator_tag(), (ptrdiff_t*)0);
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_ptrs(_InputIter __first, _InputIter __last, _OutputIter __result,
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const __true_type& /*IsOKToMemCpy*/) {
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // we know they all pointers, so this cast is OK
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  //  return (_OutputIter)__copy_trivial(&(*__first), &(*__last), &(*__result));
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return (_OutputIter)_STLP_PRIV __copy_trivial(__first, __last, __result);
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_aux(_InputIter __first, _InputIter __last, _OutputIter __result,
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const __true_type& /*BothPtrType*/) {
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_ptrs(__first, __last, __result,
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                _UseTrivialCopy(_STLP_VALUE_TYPE(__first, _InputIter),
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                _STLP_VALUE_TYPE(__result, _OutputIter))._Answer());
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_aux(_InputIter __first, _InputIter __last, _OutputIter __result,
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                              const __false_type& /*BothPtrType*/) {
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy(__first, __last, __result,
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _STLP_ITERATOR_CATEGORY(__first, _InputIter),
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _STLP_DISTANCE_TYPE(__first, _InputIter));
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter copy(_InputIter __first, _InputIter __last, _OutputIter __result) {
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_aux(__first, __last, __result, _BothPtrType< _InputIter, _OutputIter>::_Answer());
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_backward_ptrs(_InputIter __first, _InputIter __last,
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                        _OutputIter __result, const __false_type& /*TrivialAssignment*/) {
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_backward(__first, __last, __result,
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    _STLP_ITERATOR_CATEGORY(__first, _InputIter),
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    _STLP_DISTANCE_TYPE(__first, _InputIter));
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_backward_ptrs(_InputIter __first, _InputIter __last,
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                        _OutputIter __result, const __true_type& /*TrivialAssignment*/) {
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return (_OutputIter)_STLP_PRIV __copy_trivial_backward(__first, __last, __result);
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_backward_aux(_InputIter __first, _InputIter __last, _OutputIter __result, const __false_type&) {
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_backward(__first, __last, __result,
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    _STLP_ITERATOR_CATEGORY(__first,_InputIter),
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    _STLP_DISTANCE_TYPE(__first, _InputIter));
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter __copy_backward_aux(_InputIter __first, _InputIter __last, _OutputIter __result, const __true_type&) {
32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_backward_ptrs(__first, __last, __result,
32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                         _UseTrivialCopy(_STLP_VALUE_TYPE(__first, _InputIter),
32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                         _STLP_VALUE_TYPE(__result, _OutputIter))._Answer());
32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _OutputIter>
32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _OutputIter copy_backward(_InputIter __first, _InputIter __last, _OutputIter __result) {
32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_backward_aux(__first, __last, __result, _BothPtrType< _InputIter, _OutputIter>::_Answer() );
33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)
33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  define _STLP_DECLARE_COPY_TRIVIAL(_Tp)                                       \
33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result)          \
33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (_Tp*)_STLP_PRIV __copy_trivial(__first, __last, __result); }          \
33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Tp* copy_backward(const _Tp* __first, const _Tp* __last, _Tp* __result) \
33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (_Tp*)_STLP_PRIV __copy_trivial_backward(__first, __last, __result); }
33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (_STLP_NO_BOOL)
34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(bool)
34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(char)
34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (_STLP_NO_SIGNED_BUILTINS)
34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(signed char)
34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(unsigned char)
34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(short)
34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(unsigned short)
35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(int)
35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(unsigned int)
35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(long)
35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(unsigned long)
35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined(_STLP_NO_WCHAR_T) && !defined (_STLP_WCHAR_T_IS_USHORT)
35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(wchar_t)
35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_LONG_LONG)
35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(_STLP_LONG_LONG)
35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(unsigned _STLP_LONG_LONG)
36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(float)
36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(double)
36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if !defined (_STLP_NO_LONG_DOUBLE)
36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_DECLARE_COPY_TRIVIAL(long double)
36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  undef _STLP_DECLARE_COPY_TRIVIAL
36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// copy_n (not part of the C++ standard)
37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_EXTENSIONS)
37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Size, class _OutputIter>
37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _STLP_STD::pair<_InputIter, _OutputIter>
37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__copy_n(_InputIter __first, _Size __count, _OutputIter __result,
37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner         const input_iterator_tag &) {
37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __count > 0; --__count) {
38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__result = *__first;
38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__first;
38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__result;
38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_STD::pair<_InputIter, _OutputIter>(__first, __result);
38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RAIter, class _Size, class _OutputIter>
38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _STLP_STD::pair<_RAIter, _OutputIter>
38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__copy_n(_RAIter __first, _Size __count, _OutputIter __result,
39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner         const random_access_iterator_tag &) {
39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _RAIter __last = __first + __count;
39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_STD::pair<_RAIter, _OutputIter>(__last, _STLP_STD::copy(__first, __last, __result));
39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Size, class _OutputIter>
39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline pair<_InputIter, _OutputIter>
39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercopy_n(_InputIter __first, _Size __count, _OutputIter __result) {
40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first)
40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_PRIV __copy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter));
40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// fill and fill_n
40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid __fill_fwd(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {
41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__first = __val;
41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Distance>
41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   const input_iterator_tag &, _Distance*) {
41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __fill_fwd(__first, __last, __val);
42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)
42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Distance>
42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner            const forward_iterator_tag &, _Distance*) {
42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __fill_fwd(__first, __last, __val);
42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Distance>
43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner            const bidirectional_iterator_tag &, _Distance*) {
43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __fill_fwd(__first, __last, __val);
43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _RandomAccessIter, class _Tp, class _Distance>
43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid __fill(_RandomAccessIter __first, _RandomAccessIter __last, const _Tp& __val,
44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner            const random_access_iterator_tag &, _Distance*) {
44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for (_Distance __n = __last - __first ; __n > 0; ++__first, --__n)
44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__first = __val;
44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {
45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __fill(__first, __last, __val,
45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                    _STLP_ITERATOR_CATEGORY(__first, _ForwardIter),
45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                    _STLP_DISTANCE_TYPE(__first, _ForwardIter));
45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Specialization: for one-byte types we can use memset.
45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void fill(unsigned char* __first, unsigned char* __last,
45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 const unsigned char& __val) {
45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  unsigned char __tmp = __val;
46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  memset(__first, __tmp, __last - __first);
46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_SIGNED_BUILTINS)
46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void fill(signed char* __first, signed char* __last,
46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 const signed char& __val) {
46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  signed char __tmp = __val;
46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first);
46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void fill(char* __first, char* __last, const char& __val) {
47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  char __tmp = __val;
47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first);
47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _OutputIter, class _Size, class _Tp>
47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_OutputIter __fill_n(_OutputIter __first, _Size __n, const _Tp& __val) {
47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first)
48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __n > 0; --__n, ++__first)
48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    *__first = __val;
48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __first;
48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Size>
48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline unsigned char* __fill_n(unsigned char* __first, _Size __n,
48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const unsigned char& __val) {
48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_STD::fill(__first, __first + __n, __val);
49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __first + __n;
49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_SIGNED_BUILTINS)
49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Size>
49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline signed char* __fill_n(signed char* __first, _Size __n,
49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             const signed char& __val) {
49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_STD::fill(__first, __first + __n, __val);
49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __first + __n;
49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Size>
50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline char* __fill_n(char* __first, _Size __n,
50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                      const char& __val) {
50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_STD::fill(__first, __first + __n, __val);
50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __first + __n;
50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _OutputIter, class _Size, class _Tp>
51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline void fill_n(_OutputIter __first, _Size __n, const _Tp& __val) {
51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first)
51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __fill_n(__first, __n, __val);
51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// equal and mismatch
51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2>
52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_STD::pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                   _InputIter1 __last1,
52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                   _InputIter2 __first2) {
52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first2)
52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  while (__first1 != __last1 && *__first1 == *__first2) {
52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__first1;
52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__first2;
53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_STD::pair<_InputIter1, _InputIter2>(__first1, __first2);
53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _BinaryPredicate>
53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_STD::pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                   _InputIter1 __last1,
53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                   _InputIter2 __first2,
53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                   _BinaryPredicate __binary_pred) {
54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first2)
54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {
54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__first1;
54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    ++__first2;
54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return _STLP_STD::pair<_InputIter1, _InputIter2>(__first1, __first2);
54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2>
55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool equal(_InputIter1 __first1, _InputIter1 __last1,
55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner           _InputIter2 __first2) {
55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first1) _STLP_FIX_LITERAL_BUG(__last1)  _STLP_FIX_LITERAL_BUG(__first2)
55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first1 != __last1; ++__first1, ++__first2)
55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (!(*__first1 == *__first2))
55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      return false;
55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return true;
55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _BinaryPredicate>
56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP
56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool equal(_InputIter1 __first1, _InputIter1 __last1,
56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner           _InputIter2 __first2, _BinaryPredicate __binary_pred) {
56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_FIX_LITERAL_BUG(__first2)
56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first1 != __last1; ++__first1, ++__first2)
56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (!__binary_pred(*__first1, *__first2))
56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      return false;
57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return true;
57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//--------------------------------------------------
57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// lexicographical_compare and lexicographical_compare_3way.
57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// (the latter is not part of the C++ standard.)
57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2>
57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _InputIter2 __first2, _InputIter2 __last2);
58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2, class _Compare>
58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _InputIter2 __first2, _InputIter2 __last2,
58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _Compare __comp);
58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool
58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerlexicographical_compare(const unsigned char* __first1,
58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                        const unsigned char* __last1,
58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                        const unsigned char* __first2,
59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                        const unsigned char* __last2) {
59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const size_t __len1 = __last1 - __first1;
59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const size_t __len2 = __last2 - __first2;
59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))
59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const int __result = memcmp(__first1, __first2, (min) (__len1, __len2));
59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result != 0 ? (__result < 0) : (__len1 < __len2);
59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !(CHAR_MAX == SCHAR_MAX)
60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool lexicographical_compare(const char* __first1, const char* __last1,
60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    const char* __first2, const char* __last2) {
60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))
60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))
60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return lexicographical_compare((const unsigned char*) __first1,
60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                 (const unsigned char*) __last1,
60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                 (const unsigned char*) __first2,
61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                 (const unsigned char*) __last2);
61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* CHAR_MAX == SCHAR_MAX */
61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2>
61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   _InputIter2 __first2, _InputIter2 __last2);
61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline int
62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__lexicographical_compare_3way(const unsigned char* __first1,
62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const unsigned char* __last1,
62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const unsigned char* __first2,
62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const unsigned char* __last2) {
62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const ptrdiff_t __len1 = __last1 - __first1;
62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const ptrdiff_t __len2 = __last2 - __first2;
62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const int __result = memcmp(__first1, __first2, (min) (__len1, __len2));
62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __result != 0 ? __result
62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                       : (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1));
63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !(CHAR_MAX == SCHAR_MAX)
63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline int
63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__lexicographical_compare_3way(const char* __first1, const char* __last1,
63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                               const char* __first2, const char* __last2) {
63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __lexicographical_compare_3way((const unsigned char*) __first1,
63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                        (const unsigned char*) __last1,
63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                        (const unsigned char*) __first2,
64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                        (const unsigned char*) __last2);
64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_EXTENSIONS)
64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter1, class _InputIter2>
64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerint lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                 _InputIter2 __first2, _InputIter2 __last2);
65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// count
65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Tp>
65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_InputIter)
65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnercount(_InputIter __first, _InputIter __last, const _Tp& __val) {
65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DIFFERENCE_TYPE(_InputIter) __n = 0;
65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (*__first == __val)
66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      ++__n;
66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __n;
66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// find and find_if. Note find may be expressed in terms of find_if if appropriate binder was available.
66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Tp>
66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_InputIter find(_InputIter __first, _InputIter __last, const _Tp& __val);
66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _Predicate>
67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_InputIter find_if(_InputIter __first, _InputIter __last, _Predicate __pred);
67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// search.
67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2, class _BinaryPred>
67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPred  __predicate);
67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// find_first_of
68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _ForwardIter>
68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_InputIter __find_first_of(_InputIter __first1, _InputIter __last1,
68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _ForwardIter __first2, _ForwardIter __last2);
68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _InputIter, class _ForwardIter, class _BinaryPredicate>
68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_InputIter __find_first_of(_InputIter __first1, _InputIter __last1,
68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _ForwardIter __first2, _ForwardIter __last2,
68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _BinaryPredicate __comp);
68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter1, class _ForwardIter2,
69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _BinaryPredicate>
69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter1
69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerfind_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner         _ForwardIter2 __first2, _ForwardIter2 __last2,
69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner         _BinaryPredicate __comp);
69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// replace
69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp>
70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_INLINE_LOOP void
70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerreplace(_ForwardIter __first, _ForwardIter __last,
70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        const _Tp& __old_value, const _Tp& __new_value) {
70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  for ( ; __first != __last; ++__first)
70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (*__first == __old_value)
70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      *__first = __new_value;
70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _ForwardIter, class _Tp, class _Compare1, class _Compare2, class _Distance>
71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           const _Tp& __val, _Compare1 __comp1, _Compare2 __comp2, _Distance*);
71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_LINK_TIME_INSTANTIATION)
72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_algobase.c>
72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_ALGOBASE_H */
72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
729