30 #ifndef _STLP_INTERNAL_ALGO_H 31 #define _STLP_INTERNAL_ALGO_H 33 #ifndef _STLP_INTERNAL_ALGOBASE_H 37 #ifndef _STLP_INTERNAL_HEAP_H 41 #ifndef _STLP_INTERNAL_ITERATOR_H 45 #ifndef _STLP_INTERNAL_FUNCTION_BASE_H 49 #if defined (__SUNPRO_CC) && !defined (_STLP_INTERNAL_CSTDIO) 57 template <
class _InputIter,
class _Function>
60 for ( ; __first !=
__last; ++__first)
66 template <
class _InputIter,
class _Predicate>
71 for ( ; __first !=
__last; ++__first) {
80 template <
class _ForwardIter,
class _BinaryPredicate>
83 _BinaryPredicate __binary_pred) {
87 _ForwardIter __next = __first;
88 while(++__next !=
__last) {
89 if (__binary_pred(*__first, *__next))
96 template <
class _ForwardIter>
103 #if !defined (_STLP_NO_ANACHRONISMS) 104 template <
class _InputIter,
class _Tp,
class _Size>
108 for ( ; __first !=
__last; ++__first)
109 if (*__first ==
__val)
113 template <
class _InputIter,
class _Predicate,
class _Size>
117 for ( ; __first !=
__last; ++__first)
123 template <
class _ForwardIter1,
class _ForwardIter2>
124 _ForwardIter1
search(_ForwardIter1 __first1, _ForwardIter1 __last1,
125 _ForwardIter2 __first2, _ForwardIter2 __last2);
128 template <
class _ForwardIter,
class _Integer,
class _Tp>
130 _Integer __count,
const _Tp&
__val);
131 template <
class _ForwardIter,
class _Integer,
class _Tp,
class _BinaryPred>
133 _Integer __count,
const _Tp&
__val, _BinaryPred __binary_pred);
135 template <
class _InputIter,
class _ForwardIter>
137 _ForwardIter __first2, _ForwardIter __last2) {
143 template <
class _InputIter,
class _ForwardIter,
class _BinaryPredicate>
146 _ForwardIter __first2, _ForwardIter __last2, _BinaryPredicate __comp) {
152 template <
class _ForwardIter1,
class _ForwardIter2>
154 find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
155 _ForwardIter2 __first2, _ForwardIter2 __last2);
158 template <
class _ForwardIter1,
class _ForwardIter2>
160 swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2) {
162 for ( ; __first1 != __last1; ++__first1, ++__first2)
168 template <
class _InputIter,
class _OutputIter,
class _UnaryOperation>
170 transform(_InputIter __first, _InputIter
__last, _OutputIter __result, _UnaryOperation __opr) {
172 for ( ; __first !=
__last; ++__first, ++__result)
173 *__result = __opr(*__first);
176 template <
class _InputIter1,
class _InputIter2,
class _OutputIter,
class _BinaryOperation>
179 _InputIter2 __first2, _OutputIter __result,_BinaryOperation __binary_op) {
181 for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
182 *__result = __binary_op(*__first1, *__first2);
188 template <
class _ForwardIter,
class _Predicate,
class _Tp>
192 for ( ; __first !=
__last; ++__first)
194 *__first = __new_value;
197 template <
class _InputIter,
class _OutputIter,
class _Tp>
200 const _Tp& __old_value,
const _Tp& __new_value) {
202 for ( ; __first !=
__last; ++__first, ++__result)
203 *__result = *__first == __old_value ? __new_value : *__first;
207 template <
class _Iterator,
class _OutputIter,
class _Predicate,
class _Tp>
210 _OutputIter __result,
211 _Predicate
__pred,
const _Tp& __new_value) {
213 for ( ; __first !=
__last; ++__first, ++__result)
214 *__result =
__pred(*__first) ? __new_value : *__first;
220 template <
class _ForwardIter,
class _Generator>
224 for ( ; __first !=
__last; ++__first)
228 template <
class _OutputIter,
class _Size,
class _Generator>
231 for ( ;
__n > 0; --
__n, ++__first)
237 template <
class _InputIter,
class _OutputIter,
class _Tp>
241 for ( ; __first !=
__last; ++__first) {
242 if (!(*__first ==
__val)) {
243 *__result = *__first;
250 template <
class _InputIter,
class _OutputIter,
class _Predicate>
254 for ( ; __first !=
__last; ++__first) {
256 *__result = *__first;
263 template <
class _ForwardIter,
class _Tp>
271 _ForwardIter __next = __first;
276 template <
class _ForwardIter,
class _Predicate>
284 _ForwardIter __next = __first;
290 template <
class _InputIter,
class _OutputIter>
291 _OutputIter
unique_copy(_InputIter __first, _InputIter
__last, _OutputIter __result);
293 template <
class _InputIter,
class _OutputIter,
class _BinaryPredicate>
294 _OutputIter
unique_copy(_InputIter __first, _InputIter
__last,_OutputIter __result,
295 _BinaryPredicate __binary_pred);
297 template <
class _ForwardIter>
298 inline _ForwardIter
unique(_ForwardIter __first, _ForwardIter
__last) {
303 template <
class _ForwardIter,
class _BinaryPredicate>
305 _BinaryPredicate __binary_pred) {
314 template <
class _B
idirectionalIter>
317 for (; __first !=
__last && __first != --
__last; ++__first)
321 template <
class _RandomAccessIter>
324 for (; __first <
__last; ++__first)
330 template <
class _B
idirectionalIter>
337 template <
class _B
idirectionalIter,
class _OutputIter>
340 _BidirectionalIter
__last,
341 _OutputIter __result) {
343 while (__first !=
__last) {
351 template <
class _ForwardIter>
352 void rotate(_ForwardIter __first, _ForwardIter __middle, _ForwardIter
__last);
354 template <
class _ForwardIter,
class _OutputIter>
355 inline _OutputIter
rotate_copy(_ForwardIter __first, _ForwardIter __middle,
356 _ForwardIter
__last, _OutputIter __result) {
362 template <
class _RandomAccessIter>
365 template <
class _RandomAccessIter,
class _RandomNumberGenerator>
367 _RandomNumberGenerator& __rand);
369 #if !defined (_STLP_NO_EXTENSIONS) 372 template <
class _ForwardIter,
class _OutputIter,
class _Distance>
374 _OutputIter __out_ite,
const _Distance
__n);
376 template <
class _ForwardIter,
class _OutputIter,
class _Distance,
377 class _RandomNumberGenerator>
379 _OutputIter __out_ite,
const _Distance
__n,
380 _RandomNumberGenerator& __rand);
382 template <
class _InputIter,
class _RandomAccessIter>
385 _RandomAccessIter __out_first, _RandomAccessIter __out_last);
387 template <
class _InputIter,
class _RandomAccessIter,
388 class _RandomNumberGenerator>
391 _RandomAccessIter __out_first, _RandomAccessIter __out_last,
392 _RandomNumberGenerator& __rand);
398 template <
class _ForwardIter,
class _Predicate>
401 template <
class _ForwardIter,
class _Predicate>
408 template <
class _Size>
411 for (__k = 0;
__n != 1;
__n >>= 1) ++__k;
417 template <
class _RandomAccessIter>
418 void sort(_RandomAccessIter __first, _RandomAccessIter
__last);
419 template <
class _RandomAccessIter,
class _Compare>
420 void sort(_RandomAccessIter __first, _RandomAccessIter
__last, _Compare __comp);
423 template <
class _RandomAccessIter>
425 _RandomAccessIter
__last);
427 template <
class _RandomAccessIter,
class _Compare>
429 _RandomAccessIter
__last, _Compare __comp);
433 template <
class _RandomAccessIter>
434 void partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
435 _RandomAccessIter
__last);
437 template <
class _RandomAccessIter,
class _Compare>
438 void partial_sort(_RandomAccessIter __first,_RandomAccessIter __middle,
439 _RandomAccessIter
__last, _Compare __comp);
441 template <
class _InputIter,
class _RandomAccessIter>
444 _RandomAccessIter __result_first, _RandomAccessIter __result_last);
446 template <
class _InputIter,
class _RandomAccessIter,
class _Compare>
449 _RandomAccessIter __result_first,
450 _RandomAccessIter __result_last, _Compare __comp);
453 template <
class _RandomAccessIter>
454 void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
455 _RandomAccessIter
__last);
457 template <
class _RandomAccessIter,
class _Compare>
458 void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
459 _RandomAccessIter
__last, _Compare __comp);
464 template <
class _T1,
class _T2>
466 bool operator() (
const _T1& __x,
const _T2& __y)
const {
return __x < __y ; }
469 template <
class _T1,
class _T2>
472 #if defined (_STLP_FUNCTION_PARTIAL_ORDER) 480 template <
class _ForwardIter,
class _Tp>
490 template <
class _ForwardIter,
class _Tp,
class _Compare>
492 const _Tp&
__val, _Compare __comp) {
500 template <
class _ForwardIter,
class _Tp,
class _Compare1,
class _Compare2,
class _Distance>
502 _Compare1 __comp1, _Compare2 __comp2, _Distance*);
506 template <
class _ForwardIter,
class _Tp>
516 template <
class _ForwardIter,
class _Tp,
class _Compare>
518 const _Tp&
__val, _Compare __comp) {
526 template <
class _ForwardIter,
class _Tp,
class _Compare1,
class _Compare2,
class _Distance>
529 _Compare1 __comp1, _Compare2 __comp2, _Distance*);
533 template <
class _ForwardIter,
class _Tp>
543 template <
class _ForwardIter,
class _Tp,
class _Compare>
552 template <
class _ForwardIter,
class _Tp>
563 template <
class _ForwardIter,
class _Tp,
class _Compare>
575 template <
class _InputIter1,
class _InputIter2,
class _OutputIter>
576 _OutputIter
merge(_InputIter1 __first1, _InputIter1 __last1,
577 _InputIter2 __first2, _InputIter2 __last2,
578 _OutputIter __result);
580 template <
class _InputIter1,
class _InputIter2,
class _OutputIter,
582 _OutputIter
merge(_InputIter1 __first1, _InputIter1 __last1,
583 _InputIter2 __first2, _InputIter2 __last2,
584 _OutputIter __result, _Compare __comp);
590 template <
class _B
idirectionalIter>
592 _BidirectionalIter __middle,
593 _BidirectionalIter
__last) ;
595 template <
class _B
idirectionalIter,
class _Compare>
597 _BidirectionalIter __middle,
598 _BidirectionalIter
__last, _Compare __comp);
605 template <
class _InputIter1,
class _InputIter2>
606 bool includes(_InputIter1 __first1, _InputIter1 __last1,
607 _InputIter2 __first2, _InputIter2 __last2);
609 template <
class _InputIter1,
class _InputIter2,
class _Compare>
610 bool includes(_InputIter1 __first1, _InputIter1 __last1,
611 _InputIter2 __first2, _InputIter2 __last2, _Compare __comp);
613 template <
class _InputIter1,
class _InputIter2,
class _OutputIter>
614 _OutputIter
set_union(_InputIter1 __first1, _InputIter1 __last1,
615 _InputIter2 __first2, _InputIter2 __last2,
616 _OutputIter __result);
618 template <
class _InputIter1,
class _InputIter2,
class _OutputIter,
620 _OutputIter
set_union(_InputIter1 __first1, _InputIter1 __last1,
621 _InputIter2 __first2, _InputIter2 __last2,
622 _OutputIter __result, _Compare __comp);
624 template <
class _InputIter1,
class _InputIter2,
class _OutputIter>
626 _InputIter2 __first2, _InputIter2 __last2,
627 _OutputIter __result);
629 template <
class _InputIter1,
class _InputIter2,
class _OutputIter,
632 _InputIter2 __first2, _InputIter2 __last2,
633 _OutputIter __result, _Compare __comp);
637 template <
class _InputIter1,
class _InputIter2,
class _OutputIter>
638 _OutputIter
set_difference(_InputIter1 __first1, _InputIter1 __last1,
639 _InputIter2 __first2, _InputIter2 __last2,
640 _OutputIter __result);
642 template <
class _InputIter1,
class _InputIter2,
class _OutputIter,
644 _OutputIter
set_difference(_InputIter1 __first1, _InputIter1 __last1,
645 _InputIter2 __first2, _InputIter2 __last2,
646 _OutputIter __result, _Compare __comp);
648 template <
class _InputIter1,
class _InputIter2,
class _OutputIter>
651 _InputIter2 __first2, _InputIter2 __last2,
652 _OutputIter __result);
655 template <
class _InputIter1,
class _InputIter2,
class _OutputIter,
659 _InputIter2 __first2, _InputIter2 __last2,
660 _OutputIter __result,
667 template <
class _ForwardIter>
669 template <
class _ForwardIter,
class _Compare>
673 template <
class _ForwardIter>
676 template <
class _ForwardIter,
class _Compare>
683 template <
class _B
idirectionalIter>
686 template <
class _B
idirectionalIter,
class _Compare>
691 template <
class _B
idirectionalIter>
695 template <
class _B
idirectionalIter,
class _Compare>
699 #if !defined (_STLP_NO_EXTENSIONS) 704 template <
class _RandomAccessIter>
705 bool is_heap(_RandomAccessIter __first, _RandomAccessIter
__last);
707 template <
class _RandomAccessIter,
class _StrictWeakOrdering>
708 bool is_heap(_RandomAccessIter __first, _RandomAccessIter
__last,
709 _StrictWeakOrdering __comp);
716 template <
class _ForwardIter,
class _StrictWeakOrdering>
718 _StrictWeakOrdering __comp);
721 template <
class _ForwardIter>
727 template <
class _ForwardIter,
class _StrictWeakOrdering>
729 _StrictWeakOrdering __comp) {
736 #if !defined (_STLP_LINK_TIME_INSTANTIATION) void partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle, _RandomAccessIter __last)
_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _OutputIter __result)
_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _OutputIter __result)
_STLP_MOVE_TO_PRIV_NAMESPACE pair< _ForwardIter, _ForwardIter > __equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp &__val, _Compare1 __comp1, _Compare2 __comp2, _Distance *)
equal_to< _Tp > __equal_to(_Tp *)
_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_InputIter) count_if(_InputIter __first
_STLP_MOVE_TO_PRIV_NAMESPACE _ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last, const _Tp &__val, _Compare1 __comp1, _Compare2 __comp2, _Distance *)
_STLP_INLINE_LOOP _OutputIter replace_copy_if(_Iterator __first, _Iterator __last, _OutputIter __result, _Predicate __pred, const _Tp &__new_value)
_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last, _Integer __count, const _Tp &__val)
_ForwardIter1 find_end(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2)
void inplace_merge(_BidirectionalIter __first, _BidirectionalIter __middle, _BidirectionalIter __last)
_STLP_INLINE_LOOP void count_if(_InputIter __first, _InputIter __last, _Predicate __pred, _Size &__n)
_STLP_INLINE_LOOP _OutputIter replace_copy(_InputIter __first, _InputIter __last, _OutputIter __result, const _Tp &__old_value, const _Tp &__new_value)
_STLP_INLINE_LOOP _InputIter _Predicate __pred
bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
bool operator()(const _T1 &__x, const _T2 &__y) const
_STLP_MOVE_TO_PRIV_NAMESPACE less< _Tp > __less(_Tp *)
_InputIter __find_first_of(_InputIter __first1, _InputIter __last1, _ForwardIter __first2, _ForwardIter __last2)
#define _STLP_ITERATOR_CATEGORY(_It, _Tp)
_STLP_MOVE_TO_STD_NAMESPACE _InputIter find_if(_InputIter __first, _InputIter __last, _Predicate __pred)
_InputIter find_first_of(_InputIter __first1, _InputIter __last1, _ForwardIter __first2, _ForwardIter __last2)
bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last)
_STLP_MOVE_TO_PRIV_NAMESPACE _ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last, const _Tp &__val, _Compare1 __comp1, _Compare2 __comp2, _Distance *)
_STLP_MOVE_TO_STD_NAMESPACE void reverse(_BidirectionalIter __first, _BidirectionalIter __last)
#define _STLP_MOVE_TO_PRIV_NAMESPACE
_STLP_INLINE_LOOP _ForwardIter2 swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2)
bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
_RandomAccessIter partial_sort_copy(_InputIter __first, _InputIter __last, _RandomAccessIter __result_first, _RandomAccessIter __result_last)
void rotate(_ForwardIter __first, _ForwardIter __middle, _ForwardIter __last)
_STLP_MOVE_TO_PRIV_NAMESPACE bool __is_sorted(_ForwardIter __first, _ForwardIter __last, _StrictWeakOrdering __comp)
_ForwardIter partition(_ForwardIter __first, _ForwardIter __last, _Predicate __pred)
_STLP_MOVE_TO_PRIV_NAMESPACE _STLP_INLINE_LOOP void __reverse(_BidirectionalIter __first, _BidirectionalIter __last, const bidirectional_iterator_tag &)
_STLP_MOVE_TO_STD_NAMESPACE _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
_STLP_INLINE_LOOP _ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last, _BinaryPredicate __binary_pred)
_STLP_INLINE_LOOP _InputIter __last
_OutputIter set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _OutputIter __result)
_STLP_INLINE_LOOP void replace_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred, const _Tp &__new_value)
_STLP_INLINE_LOOP _OutputIter transform(_InputIter __first, _InputIter __last, _OutputIter __result, _UnaryOperation __opr)
#define _STLP_MOVE_TO_STD_NAMESPACE
_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _OutputIter __result)
_STLP_INLINE_LOOP _OutputIter remove_copy(_InputIter __first, _InputIter __last, _OutputIter __result, const _Tp &__val)
_STLP_MOVE_TO_STD_NAMESPACE bool is_sorted(_ForwardIter __first, _ForwardIter __last)
_STLP_INLINE_LOOP void generate_n(_OutputIter __first, _Size __n, _Generator __gen)
_STLP_INLINE_LOOP _InputIter const _Tp & __val
_STLP_MOVE_TO_STD_NAMESPACE void sort(_RandomAccessIter __first, _RandomAccessIter __last)
_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last, _OutputIter __out_ite, const _Distance __n)
_STLP_BEGIN_NAMESPACE _STLP_INLINE_LOOP _Function for_each(_InputIter __first, _InputIter __last, _Function __f)
_STLP_INLINE_LOOP void count(_InputIter __first, _InputIter __last, const _Tp &__val, _Size &__n)
_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last)
_STLP_INLINE_LOOP _ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred)
#define _STLP_INLINE_LOOP
#define _STLP_VALUE_TYPE(_It, _Tp)
_STLP_MOVE_TO_STD_NAMESPACE pair< _ForwardIter, _ForwardIter > equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
_STLP_INLINE_LOOP _ForwardIter remove(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
#define _STLP_DEBUG_CHECK(expr)
void random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last)
_STLP_MOVE_TO_STD_NAMESPACE _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)
_STLP_MOVE_TO_PRIV_NAMESPACE _Size __lg(_Size __n)
_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last)
_ForwardIter stable_partition(_ForwardIter __first, _ForwardIter __last, _Predicate __pred)
__less_2< _T1, _T2 > __less2(_T1 *, _T2 *)
_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2)
_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _OutputIter __result)
#define _STLP_END_NAMESPACE
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
void stable_sort(_RandomAccessIter __first, _RandomAccessIter __last)
_STLP_MOVE_TO_STD_NAMESPACE void iter_swap(_ForwardIter1 __i1, _ForwardIter2 __i2)
_STLP_INLINE_LOOP _OutputIter reverse_copy(_BidirectionalIter __first, _BidirectionalIter __last, _OutputIter __result)
_Check_return_ _Ret_maybenull_ _In_ size_t _In_ size_t _Size
_OutputIter unique_copy(_InputIter __first, _InputIter __last, _OutputIter __result)
_ForwardIter unique(_ForwardIter __first, _ForwardIter __last)
_OutputIter rotate_copy(_ForwardIter __first, _ForwardIter __middle, _ForwardIter __last, _OutputIter __result)
_RandomAccessIter random_sample(_InputIter __first, _InputIter __last, _RandomAccessIter __out_first, _RandomAccessIter __out_last)
#define _STLP_BEGIN_NAMESPACE
_STLP_INLINE_LOOP void generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen)
void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth, _RandomAccessIter __last)
#define _STLP_DISTANCE_TYPE(_It, _Tp)
_STLP_INLINE_LOOP _OutputIter remove_copy_if(_InputIter __first, _InputIter __last, _OutputIter __result, _Predicate __pred)
bool includes(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2)
bool binary_search(_ForwardIter __first, _ForwardIter __last, const _Tp &__val)