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_UNINITIALIZED_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_UNINITIALIZED_H 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CSTRING 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cstring.h> 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALGOBASE_H 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_algobase.h> 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CONSTRUCT_H 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_construct.h> 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// uninitialized_copy 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy(_InputIter __first, _InputIter __last, 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, _Distance*) { 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __cur = __result; 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first, ++__cur) 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Param_Construct(&*__cur, *__first); 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __cur; 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __cur)) 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_RET_AFTER_THROW(__cur) 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy(_InputIter __first, _InputIter __last, 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const input_iterator_tag &, _Distance* __d) 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy(__first, __last, __result, __d); } 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy(_InputIter __first, _InputIter __last, 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const forward_iterator_tag &, _Distance* __d) 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy(__first, __last, __result, __d); } 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter, class _Distance> 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy(_InputIter __first, _InputIter __last, 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const bidirectional_iterator_tag &, _Distance* __d) 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy(__first, __last, __result, __d); } 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIter, class _OutputIter, class _Distance> 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy(_RandomAccessIter __first, _RandomAccessIter __last, 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __result, const random_access_iterator_tag &, _Distance*) { 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _OutputIter __cur = __result; 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (_Distance __n = __last - __first; __n > 0; --__n) { 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Param_Construct(&*__cur, *__first); 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first; 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__cur; 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __cur; 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __cur)) 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_RET_AFTER_THROW(__cur) 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Used internaly 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIter, class _OutputIter> 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy(_RandomAccessIter __first, _RandomAccessIter __last, _OutputIter __result) 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy(__first, __last, __result, random_access_iterator_tag(), (ptrdiff_t*)0); } 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void* 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__ucopy_trivial(const void* __first, const void* __last, void* __result) { 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //dums: this version can use memcpy (__copy_trivial can't) 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__last == __first) ? __result : 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ((char*)memcpy(__result, __first, ((const char*)__last - (const char*)__first))) + 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ((const char*)__last - (const char*)__first); 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy_ptrs(_InputIter __first, _InputIter __last, _OutputIter __result, 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*TrivialUCopy*/) 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy(__first, __last, __result, random_access_iterator_tag(), (ptrdiff_t*)0); } 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy_ptrs(_InputIter __first, _InputIter __last, _OutputIter __result, 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*TrivialUCopy*/) { 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // we know they all pointers, so this cast is OK 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // return (_OutputIter)__copy_trivial(&(*__first), &(*__last), &(*__result)); 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (_OutputIter)__ucopy_trivial(__first, __last, __result); 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy_aux(_InputIter __first, _InputIter __last, _OutputIter __result, 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*BothPtrType*/) { 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __ucopy_ptrs(__first, __last, __result, 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _UseTrivialUCopy(_STLP_VALUE_TYPE(__first, _InputIter), 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_VALUE_TYPE(__result, _OutputIter))._Answer()); 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _OutputIter> 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _OutputIter __ucopy_aux(_InputIter __first, _InputIter __last, _OutputIter __result, 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*BothPtrType*/) { 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __ucopy(__first, __last, __result, 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ITERATOR_CATEGORY(__first, _InputIter), 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DISTANCE_TYPE(__first, _InputIter)); 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _ForwardIter> 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockuninitialized_copy(_InputIter __first, _InputIter __last, _ForwardIter __result) 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __ucopy_aux(__first, __last, __result, _BothPtrType< _InputIter, _ForwardIter>::_Answer()); } 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline char* 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockuninitialized_copy(const char* __first, const char* __last, char* __result) 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (char*)_STLP_PRIV __ucopy_trivial(__first, __last, __result); } 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_HAS_WCHAR_T) // dwa 8/15/97 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline wchar_t* 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockuninitialized_copy(const wchar_t* __first, const wchar_t* __last, wchar_t* __result) 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (wchar_t*)_STLP_PRIV __ucopy_trivial (__first, __last, __result); } 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// uninitialized_copy_n (not part of the C++ standard) 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _ForwardIter> 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpair<_InputIter, _ForwardIter> 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__ucopy_n(_InputIter __first, _Size __count, _ForwardIter __result, 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __cur = __result; 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __count > 0 ; --__count, ++__first, ++__cur) 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Param_Construct(&*__cur, *__first); 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return pair<_InputIter, _ForwardIter>(__first, __cur); 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __cur)) 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_RET_AFTER_THROW((pair<_InputIter, _ForwardIter>(__first, __cur))) 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _ForwardIterator> 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pair<_InputIter, _ForwardIterator> 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__ucopy_n(_InputIter __first, _Size __count, 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __result, 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy_n(__first, __count, __result, input_iterator_tag()); } 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _ForwardIterator> 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pair<_InputIter, _ForwardIterator> 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__ucopy_n(_InputIter __first, _Size __count, 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __result, 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bidirectional_iterator_tag &) 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy_n(__first, __count, __result, input_iterator_tag()); } 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _RandomAccessIter, class _Size, class _ForwardIter> 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pair<_RandomAccessIter, _ForwardIter> 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__ucopy_n(_RandomAccessIter __first, _Size __count, _ForwardIter __result, 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const random_access_iterator_tag &) { 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _RandomAccessIter __last = __first + __count; 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return pair<_RandomAccessIter, _ForwardIter>(__last, uninitialized_copy(__first, __last, __result)); 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This is used internally in <rope> , which is extension itself. 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _ForwardIter> 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pair<_InputIter, _ForwardIter> 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__ucopy_n(_InputIter __first, _Size __count, _ForwardIter __result) 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __ucopy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter)); } 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_EXTENSIONS) 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _Size, class _ForwardIter> 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline pair<_InputIter, _ForwardIter> 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockuninitialized_copy_n(_InputIter __first, _Size __count, _ForwardIter __result) 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return _STLP_PRIV __ucopy_n(__first, __count, __result); } 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _Distance> 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __ufill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x, _Distance*) { 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __cur = __first; 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __cur != __last; ++__cur) 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Param_Construct(&*__cur, __x); 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first, __cur)) 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _Distance> 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __ufill(_ForwardIter __first, _ForwardIter __last, 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __x, const input_iterator_tag &, _Distance* __d) 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ __ufill(__first, __last, __x, __d); } 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _Distance> 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __ufill(_ForwardIter __first, _ForwardIter __last, 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __x, const forward_iterator_tag &, _Distance* __d) 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ __ufill(__first, __last, __x, __d); } 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _Distance> 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __ufill(_ForwardIter __first, _ForwardIter __last, 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __x, const bidirectional_iterator_tag &, _Distance* __d) 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ __ufill(__first, __last, __x, __d); } 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _Distance> 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void __ufill(_ForwardIter __first, _ForwardIter __last, 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __x, const random_access_iterator_tag &, _Distance*) { 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __cur = __first; 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (_Distance __n = __last - __first; __n > 0; --__n, ++__cur) 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Param_Construct(&*__cur, __x); 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first, __cur)) 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp> 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void uninitialized_fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x) { 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ufill(__first, __last, __x, 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ITERATOR_CATEGORY(__first, _ForwardIter), 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DISTANCE_TYPE(__first, _ForwardIter)); 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Specialization: for one-byte types we can use memset. 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void uninitialized_fill(unsigned char* __first, unsigned char* __last, 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const unsigned char& __val) { 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block unsigned char __tmp = __val; 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__first, __tmp, __last - __first); 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_SIGNED_BUILTINS) 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void uninitialized_fill(signed char* __first, signed char* __last, 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const signed char& __val) { 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block signed char __tmp = __val; 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first); 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void uninitialized_fill(char* __first, char* __last, const char& __val) { 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char __tmp = __val; 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first); 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x) { 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __cur = __first; 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __n > 0; --__n, ++__cur) 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Param_Construct(&*__cur, __x); 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first, __cur)) 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __cur; 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ufill_n(__first, __n, __x); } 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG) 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ufill_n(__first, __n, __x); } 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bidirectional_iterator_tag &) 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ufill_n(__first, __n, __x); } 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x) { 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __last = __first + __n; 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __ufill(__first, __last, __x, random_access_iterator_tag(), (ptrdiff_t*)0); 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __last; 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const random_access_iterator_tag &) 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __uninitialized_fill_n(__first, __n, __x); } 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* __uninitialized_init is an internal algo to init a range with a value 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * built using default constructor. It is only called with pointer as 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * iterator. 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __uinit_aux_aux(_ForwardIter __first, _Size __n, const _Tp& __val, 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_HasDefaultZero*/) 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __uninitialized_fill_n(__first, __n, __val); } 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline _ForwardIter __uinit_aux_aux(_ForwardIter __first, _Size __n, const _Tp& /* __val */, 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_HasDefaultZero*/) { 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block memset((unsigned char*)__first, 0, __n * sizeof(_Tp)); 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first + __n; 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __uinit_aux(_ForwardIter __first, _Size __n, const _Tp&, 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_TrivialInit*/) 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __first + __n; } 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __uinit_aux(_ForwardIter __first, _Size __n, const _Tp& __val, 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_TrivialInit*/) 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __uinit_aux_aux(__first, __n, __val, _HasDefaultZeroValue(__first)._Answer()); } 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter __uninitialized_init(_ForwardIter __first, _Size __n, const _Tp& __val) 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __uinit_aux(__first, __n, __val, _UseTrivialInit(__first)._Answer()); } 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Size, class _Tp> 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockuninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x) 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ _STLP_PRIV __ufill_n(__first, __n, __x, _STLP_ITERATOR_CATEGORY(__first, _ForwardIter)); } 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Extensions: __uninitialized_copy_copy, __uninitialized_copy_fill, 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// __uninitialized_fill_copy. 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// __uninitialized_copy_copy 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Copies [first1, last1) into [result, result + (last1 - first1)), and 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// copies [first2, last2) into 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// [result + (last1 - first1), result + (last1 - first1) + (last2 - first2)). 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter1, class _InputIter2, class _ForwardIter> 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1, 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter2 __first2, _InputIter2 __last2, 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _ForwardIter __result) { 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _ForwardIter __new_result = uninitialized_copy(__first1, __last1, __result); 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_TRY { 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return uninitialized_copy(__first2, __last2, __new_result); 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __new_result)) 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_RET_AFTER_THROW(__result) 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// __uninitialized_fill_copy 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Fills [result, mid) with x, and copies [first, last) into 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// [mid, mid + (last - first)). 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _ForwardIter, class _Tp, class _InputIter> 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid, const _Tp& __x, 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter __first, _InputIter __last) { 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(__result, __mid, __x); 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return uninitialized_copy(__first, __last, __mid); 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __mid)) 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_RET_AFTER_THROW(__result) 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// __uninitialized_copy_fill 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Copies [first1, last1) into [first2, first2 + (last1 - first1)), and 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fills [first2 + (last1 - first1), last2) with x. 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iter, class _Tp> 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__uninitialized_copy_fill(_Iter __first1, _Iter __last1, _Iter __first2, _Iter __last2, 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Tp& __x) { 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Iter __mid2 = uninitialized_copy(__first1, __last1, __first2); 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(__mid2, __last2, __x); 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first2, __mid2)) 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* __uninitialized_move: 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This function is used internaly and only with pointers as iterators. 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _ForwardIter, class _TrivialUCpy> 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _ForwardIter 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__uninitialized_move(_InputIter __first, _InputIter __last, _ForwardIter __result, 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _TrivialUCpy __trivial_ucpy, const __false_type& /*_Movable*/) 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __ucopy_ptrs(__first, __last, __result, __trivial_ucpy); } 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _InputIter, class _ForwardIter, class _TrivialUCpy> 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_ForwardIter 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__uninitialized_move(_InputIter __first, _InputIter __last, _ForwardIter __result, 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _TrivialUCpy , const __true_type& /*_Movable*/) { 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Move constructor should not throw so we do not need to take care of exceptions here. 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (ptrdiff_t __n = __last - __first ; __n > 0; --__n) { 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Move_Construct(&*__result, *__first); 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__first; ++__result; 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_UNINITIALIZED_H */ 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 444