19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996,1997 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers. 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * You should not attempt to use it directly. 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALGOBASE_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_ALGOBASE_H 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTDDEF 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstddef.h> 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTRING 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstring.h> 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_CLIMITS 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <climits> 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTDLIB 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstdlib.h> 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_PAIR_H 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_pair.h> 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ITERATOR_BASE_H 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_iterator_base.h> 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_TYPE_TRAITS_H 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/type_traits.h> 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __swap_aux(_Tp& __a, _Tp& __b, const __true_type& /*SwapImplemented*/) { 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __a._M_swap_workaround(__b); 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __swap_aux(_Tp& __a, _Tp& __b, const __false_type& /*SwapImplemented*/) { 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp __tmp = __a; 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __a = __b; 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __b = __tmp; 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// swap and iter_swap 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void swap(_Tp& __a, _Tp& __b) { 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined(__BORLANDC__) 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _SwapImplemented<_Tp>::_Ret _Implemented; 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block enum { _Is = _SwapImplemented<_Tp>::_Is }; 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename __bool2type<_Is>::_Ret _Implemented; 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __swap_aux(__a, __b, _Implemented()); 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp __tmp = __a; 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __a = __b; 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __b = __tmp; 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter1, class _ForwardIter2, class _Value> 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __iter_swap_aux_aux(_ForwardIter1& __i1, _ForwardIter2& __i2, _Value *) { 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Value tmp = *__i1; 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__i1 = *__i2; 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__i2 = tmp; 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter1, class _ForwardIter2> 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __iter_swap_aux(_ForwardIter1& __i1, _ForwardIter2& __i2, const __true_type& /*OKToSwap*/) { 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* namespace specification breaks access to the right swap template overload (at least for gcc) */ 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /*_STLP_STD::*/ swap(*__i1, *__i2); 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter1, class _ForwardIter2> 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __iter_swap_aux(_ForwardIter1& __i1, _ForwardIter2& __i2, const __false_type& /*OKToSwap*/) { 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __iter_swap_aux_aux( __i1, __i2, _STLP_VALUE_TYPE(__i1,_ForwardIter1) ); 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter1, class _ForwardIter2> 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void iter_swap(_ForwardIter1 __i1, _ForwardIter2 __i2) { 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __iter_swap_aux( __i1, __i2, _IsOKToSwap(_STLP_VALUE_TYPE(__i1, _ForwardIter1), _STLP_VALUE_TYPE(__i2, _ForwardIter2), 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_IS_REF_TYPE_REAL_REF(__i1, _ForwardIter1), 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_IS_REF_TYPE_REAL_REF(__i2, _ForwardIter2))._Answer()); 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// min and max 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (__BORLANDC__) || defined (_STLP_USE_OWN_NAMESPACE) 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if (defined (__BORLANDC__) && (__BORLANDC__ < 0x580)) && !defined (__STDC__) 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//In not ANSI mode Borland import min/max in global namespace which conflict 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//with STLport min/max when user does a 'using namespace std' in its code 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//(see test/unit/alg_test.cpp). To avoid this clash we simply import Borland min/max 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//in STLport namespace. 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_STD::min; 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockusing _STLP_VENDOR_STD::max; 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const _Tp& (min)(const _Tp& __a, const _Tp& __b) { return __b < __a ? __b : __a; } 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const _Tp& (max)(const _Tp& __a, const _Tp& __b) { return __a < __b ? __b : __a; } 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (__BORLANDC__) && defined (_STLP_USE_OWN_NAMESPACE) 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline unsigned long (min) (unsigned long __a, unsigned long __b) { return __b < __a ? __b : __a; } 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline unsigned long (max) (unsigned long __a, unsigned long __b) { return __a < __b ? __b : __a; } 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (__BORLANDC__) || (__BORLANDC__ < 0x590) 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Compare> 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const _Tp& (min)(const _Tp& __a, const _Tp& __b, _Compare __comp) { 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __comp(__b, __a) ? __b : __a; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Compare> 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline const _Tp& (max)(const _Tp& __a, const _Tp& __b, _Compare __comp) { 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __comp(__a, __b) ? __b : __a; 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp, class _Compare> 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline const _Tp (min)(const _Tp __a, const _Tp __b, _Compare __comp) { 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __comp(__b, __a) ? __b : __a; 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp, class _Compare> 167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline const _Tp (max)(const _Tp __a, const _Tp __b, _Compare __comp) { 168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __comp(__a, __b) ? __b : __a; 169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// copy 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// All of these auxiliary functions serve two purposes. (1) Replace 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// calls to copy with memmove whenever possible. (Memmove, not memcpy, 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// because the input and output ranges are permitted to overlap.) 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// (2) If we're using random access iterators, then write the loop as 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// a for loop with an explicit count. 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy(_InputIter __first, _InputIter __last, 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const input_iterator_tag &, _Distance*) { 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__result, ++__first) 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__result = *__first; 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy(_InputIter __first, _InputIter __last, 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const forward_iterator_tag &, _Distance* ) { 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__result, ++__first) 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__result = *__first; 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy(_InputIter __first, _InputIter __last, 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const bidirectional_iterator_tag &, _Distance* ) { 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__result, ++__first) 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__result = *__first; 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIter, class _OutputIter, class _Distance> 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__copy(_RandomAccessIter __first, _RandomAccessIter __last, 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const random_access_iterator_tag &, _Distance*) { 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (_Distance __n = __last - __first; __n > 0; --__n) { 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__result = *__first; 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first; 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__result; 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void* 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__copy_trivial(const void* __first, const void* __last, void* __result) { 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t __n = (const char*)__last - (const char*)__first; 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __n ? (void *)((char*)memmove(__result, __first, __n) + __n) : __result; 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// copy_backward auxiliary functions 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _BidirectionalIter1, class _BidirectionalIter2, 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _Distance> 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _BidirectionalIter2 __copy_backward(_BidirectionalIter1 __first, 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BidirectionalIter1 __last, 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BidirectionalIter2 __result, 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bidirectional_iterator_tag &, 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Distance*) { 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__first != __last) 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *--__result = *--__last; 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIter, class _BidirectionalIter, class _Distance> 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _BidirectionalIter __copy_backward(_RandomAccessIter __first, 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _RandomAccessIter __last, 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BidirectionalIter __result, 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const random_access_iterator_tag &, 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Distance*) { 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (_Distance __n = __last - __first; __n > 0; --__n) 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *--__result = *--__last; 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void* 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__copy_trivial_backward(const void* __first, const void* __last, void* __result) { 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const ptrdiff_t _Num = (const char*)__last - (const char*)__first; 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (_Num > 0) ? memmove((char*)__result - _Num, __first, _Num) : __result ; 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_ptrs(_InputIter __first, _InputIter __last, _OutputIter __result, 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*IsOKToMemCpy*/) { 262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV __copy(__first, __last, __result, random_access_iterator_tag(), (ptrdiff_t*)0); 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_ptrs(_InputIter __first, _InputIter __last, _OutputIter __result, 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*IsOKToMemCpy*/) { 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // we know they all pointers, so this cast is OK 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // return (_OutputIter)__copy_trivial(&(*__first), &(*__last), &(*__result)); 269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (_OutputIter)_STLP_PRIV __copy_trivial(__first, __last, __result); 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_aux(_InputIter __first, _InputIter __last, _OutputIter __result, 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*BothPtrType*/) { 275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV __copy_ptrs(__first, __last, __result, 276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _UseTrivialCopy(_STLP_VALUE_TYPE(__first, _InputIter), 277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_VALUE_TYPE(__result, _OutputIter))._Answer()); 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_aux(_InputIter __first, _InputIter __last, _OutputIter __result, 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*BothPtrType*/) { 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV __copy(__first, __last, __result, 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_ITERATOR_CATEGORY(__first, _InputIter), 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_DISTANCE_TYPE(__first, _InputIter)); 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter copy(_InputIter __first, _InputIter __last, _OutputIter __result) { 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __copy_aux(__first, __last, __result, _BothPtrType< _InputIter, _OutputIter>::_Answer()); 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_backward_ptrs(_InputIter __first, _InputIter __last, 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const __false_type& /*TrivialAssignment*/) { 301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV __copy_backward(__first, __last, __result, 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_ITERATOR_CATEGORY(__first, _InputIter), 303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_DISTANCE_TYPE(__first, _InputIter)); 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_backward_ptrs(_InputIter __first, _InputIter __last, 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const __true_type& /*TrivialAssignment*/) { 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (_OutputIter)_STLP_PRIV __copy_trivial_backward(__first, __last, __result); 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_backward_aux(_InputIter __first, _InputIter __last, _OutputIter __result, const __false_type&) { 313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV __copy_backward(__first, __last, __result, 314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_ITERATOR_CATEGORY(__first,_InputIter), 315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_DISTANCE_TYPE(__first, _InputIter)); 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __copy_backward_aux(_InputIter __first, _InputIter __last, _OutputIter __result, const __true_type&) { 320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_PRIV __copy_backward_ptrs(__first, __last, __result, 321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _UseTrivialCopy(_STLP_VALUE_TYPE(__first, _InputIter), 322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_VALUE_TYPE(__result, _OutputIter))._Answer()); 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter copy_backward(_InputIter __first, _InputIter __last, _OutputIter __result) { 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __copy_backward_aux(__first, __last, __result, _BothPtrType< _InputIter, _OutputIter>::_Answer() ); 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_DECLARE_COPY_TRIVIAL(_Tp) \ 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) \ 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (_Tp*)_STLP_PRIV __copy_trivial(__first, __last, __result); } \ 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* copy_backward(const _Tp* __first, const _Tp* __last, _Tp* __result) \ 338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return (_Tp*)_STLP_PRIV __copy_trivial_backward(__first, __last, __result); } 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NO_BOOL) 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_DECLARE_COPY_TRIVIAL(bool) 342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(char) 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_SIGNED_BUILTINS) 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(signed char) 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(unsigned char) 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(short) 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(unsigned short) 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(int) 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(unsigned int) 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(long) 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(unsigned long) 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined(_STLP_NO_WCHAR_T) && !defined (_STLP_WCHAR_T_IS_USHORT) 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(wchar_t) 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_LONG_LONG) 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(_STLP_LONG_LONG) 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(unsigned _STLP_LONG_LONG) 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(float) 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(double) 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_LONG_DOUBLE) 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_DECLARE_COPY_TRIVIAL(long double) 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef _STLP_DECLARE_COPY_TRIVIAL 367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// copy_n (not part of the C++ standard) 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_EXTENSIONS) 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _OutputIter> 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_INLINE_LOOP _STLP_STD::pair<_InputIter, _OutputIter> 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__copy_n(_InputIter __first, _Size __count, _OutputIter __result, 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __count > 0; --__count) { 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__result = *__first; 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first; 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__result; 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_STD::pair<_InputIter, _OutputIter>(__first, __result); 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RAIter, class _Size, class _OutputIter> 388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _STLP_STD::pair<_RAIter, _OutputIter> 389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__copy_n(_RAIter __first, _Size __count, _OutputIter __result, 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const random_access_iterator_tag &) { 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _RAIter __last = __first + __count; 392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_STD::pair<_RAIter, _OutputIter>(__last, _STLP_STD::copy(__first, __last, __result)); 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _OutputIter> 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pair<_InputIter, _OutputIter> 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockcopy_n(_InputIter __first, _Size __count, _OutputIter __result) { 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _STLP_PRIV __copy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter)); 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fill and fill_n 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_MOVE_TO_PRIV_NAMESPACE 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp> 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid __fill_fwd(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) { 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first) 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__first = __val; 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _ForwardIter, class _Tp, class _Distance> 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val, 418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const input_iterator_tag &, _Distance*) { 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __fill_fwd(__first, __last, __val); 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _ForwardIter, class _Tp, class _Distance> 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val, 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const forward_iterator_tag &, _Distance*) { 427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __fill_fwd(__first, __last, __val); 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _ForwardIter, class _Tp, class _Distance> 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_INLINE_LOOP 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val, 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const bidirectional_iterator_tag &, _Distance*) { 434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __fill_fwd(__first, __last, __val); 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _RandomAccessIter, class _Tp, class _Distance> 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_INLINE_LOOP 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid __fill(_RandomAccessIter __first, _RandomAccessIter __last, const _Tp& __val, 441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const random_access_iterator_tag &, _Distance*) { 442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for (_Distance __n = __last - __first ; __n > 0; ++__first, --__n) 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__first = __val; 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _ForwardIter, class _Tp> 449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) { 450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __fill(__first, __last, __val, 452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_ITERATOR_CATEGORY(__first, _ForwardIter), 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_DISTANCE_TYPE(__first, _ForwardIter)); 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Specialization: for one-byte types we can use memset. 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void fill(unsigned char* __first, unsigned char* __last, 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char& __val) { 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block unsigned char __tmp = __val; 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__first, __tmp, __last - __first); 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_SIGNED_BUILTINS) 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void fill(signed char* __first, signed char* __last, 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const signed char& __val) { 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block signed char __tmp = __val; 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first); 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void fill(char* __first, char* __last, const char& __val) { 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char __tmp = __val; 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first); 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _OutputIter, class _Size, class _Tp> 477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_INLINE_LOOP 478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_OutputIter __fill_n(_OutputIter __first, _Size __n, const _Tp& __val) { 479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_FIX_LITERAL_BUG(__first) 480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott for ( ; __n > 0; --__n, ++__first) 481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott *__first = __val; 482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __first; 483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Size> 4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline unsigned char* __fill_n(unsigned char* __first, _Size __n, 488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const unsigned char& __val) { 489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::fill(__first, __first + __n, __val); 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first + __n; 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_SIGNED_BUILTINS) 4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Size> 494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline signed char* __fill_n(signed char* __first, _Size __n, 495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const signed char& __val) { 496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::fill(__first, __first + __n, __val); 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first + __n; 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Size> 501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline char* __fill_n(char* __first, _Size __n, 502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const char& __val) { 503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::fill(__first, __first + __n, __val); 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first + __n; 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _OutputIter, class _Size, class _Tp> 511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline void fill_n(_OutputIter __first, _Size __n, const _Tp& __val) { 512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_FIX_LITERAL_BUG(__first) 513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __fill_n(__first, __n, __val); 514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// equal and mismatch 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2> 5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_STD::pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1, 523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIter1 __last1, 524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIter2 __first2) { 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first2) 5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1)) 5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__first1 != __last1 && *__first1 == *__first2) { 5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first1; 5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first2; 5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_STD::pair<_InputIter1, _InputIter2>(__first1, __first2); 5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2, class _BinaryPredicate> 5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_STD::pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1, 537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIter1 __last1, 538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIter2 __first2, 539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _BinaryPredicate __binary_pred) { 5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first2) 5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1)) 5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) { 5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first1; 5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first2; 5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _STLP_STD::pair<_InputIter1, _InputIter2>(__first1, __first2); 5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2> 5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool equal(_InputIter1 __first1, _InputIter1 __last1, 552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIter2 __first2) { 5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first1) _STLP_FIX_LITERAL_BUG(__last1) _STLP_FIX_LITERAL_BUG(__first2) 5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1)) 5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first1 != __last1; ++__first1, ++__first2) 5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!(*__first1 == *__first2)) 5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return true; 5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2, class _BinaryPredicate> 5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool equal(_InputIter1 __first1, _InputIter1 __last1, 564e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _InputIter2 __first2, _BinaryPredicate __binary_pred) { 5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first2) 5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1)) 5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first1 != __last1; ++__first1, ++__first2) 5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__binary_pred(*__first1, *__first2)) 5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return true; 5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//-------------------------------------------------- 5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// lexicographical_compare and lexicographical_compare_3way. 5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// (the latter is not part of the C++ standard.) 5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2> 5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1, 5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter2 __first2, _InputIter2 __last2); 5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2, class _Compare> 5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1, 5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter2 __first2, _InputIter2 __last2, 5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Compare __comp); 5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocklexicographical_compare(const unsigned char* __first1, 5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char* __last1, 5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char* __first2, 5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char* __last2) { 5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const size_t __len1 = __last1 - __first1; 5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const size_t __len2 = __last2 - __first2; 5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1)) 5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2)) 5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const int __result = memcmp(__first1, __first2, (min) (__len1, __len2)); 5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result != 0 ? (__result < 0) : (__len1 < __len2); 5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !(CHAR_MAX == SCHAR_MAX) 6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool lexicographical_compare(const char* __first1, const char* __last1, 6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const char* __first2, const char* __last2) { 6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1)) 6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2)) 6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return lexicographical_compare((const unsigned char*) __first1, 6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (const unsigned char*) __last1, 6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (const unsigned char*) __first2, 6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (const unsigned char*) __last2); 6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* CHAR_MAX == SCHAR_MAX */ 6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2> 6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockint __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1, 6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter2 __first2, _InputIter2 __last2); 6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline int 6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__lexicographical_compare_3way(const unsigned char* __first1, 6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char* __last1, 6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char* __first2, 6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char* __last2) { 6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const ptrdiff_t __len1 = __last1 - __first1; 6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const ptrdiff_t __len2 = __last2 - __first2; 6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const int __result = memcmp(__first1, __first2, (min) (__len1, __len2)); 6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result != 0 ? __result 6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1)); 6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !(CHAR_MAX == SCHAR_MAX) 6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline int 6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__lexicographical_compare_3way(const char* __first1, const char* __last1, 6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const char* __first2, const char* __last2) { 6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __lexicographical_compare_3way((const unsigned char*) __first1, 6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (const unsigned char*) __last1, 6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (const unsigned char*) __first2, 6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (const unsigned char*) __last2); 6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_EXTENSIONS) 6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2> 6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockint lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1, 6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter2 __first2, _InputIter2 __last2); 6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 651e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// count 6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Tp> 6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_InputIter) 6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockcount(_InputIter __first, _InputIter __last, const _Tp& __val) { 6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DIFFERENCE_TYPE(_InputIter) __n = 0; 6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first) 6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (*__first == __val) 6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__n; 6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __n; 6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// find and find_if. Note find may be expressed in terms of find_if if appropriate binder was available. 6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Tp> 6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter find(_InputIter __first, _InputIter __last, const _Tp& __val); 6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Predicate> 6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter find_if(_InputIter __first, _InputIter __last, _Predicate __pred); 6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// search. 6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter1, class _ForwardIter2, class _BinaryPred> 6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1, 6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPred __predicate); 6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// find_first_of 680e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _InputIter, class _ForwardIter> 681e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_InputIter __find_first_of(_InputIter __first1, _InputIter __last1, 682e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _ForwardIter __first2, _ForwardIter __last2); 683e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _ForwardIter, class _BinaryPredicate> 6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_InputIter __find_first_of(_InputIter __first1, _InputIter __last1, 6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __first2, _ForwardIter __last2, 6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BinaryPredicate __comp); 6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter1, class _ForwardIter2, 6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class _BinaryPredicate> 6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_ForwardIter1 6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockfind_end(_ForwardIter1 __first1, _ForwardIter1 __last1, 6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter2 __first2, _ForwardIter2 __last2, 6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _BinaryPredicate __comp); 6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// replace 6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp> 7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP void 7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockreplace(_ForwardIter __first, _ForwardIter __last, 7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __old_value, const _Tp& __new_value) { 7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first) 7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (*__first == __old_value) 7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__first = __new_value; 7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _Compare1, class _Compare2, class _Distance> 7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last, 7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __val, _Compare1 __comp1, _Compare2 __comp2, _Distance*); 7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_LINK_TIME_INSTANTIATION) 7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_algobase.c> 7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_ALGOBASE_H */ 7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 729