25#ifndef _STLP_ALGOBASE_C
26#define _STLP_ALGOBASE_C
28#ifndef _STLP_INTERNAL_ALGOBASE_H
32#ifndef _STLP_INTERNAL_FUNCTION_BASE_H
38template <
class _InputIter1,
class _InputIter2>
40 _InputIter2 __first2, _InputIter2 __last2) {
43 for ( ; __first1 != __last1 && __first2 != __last2
44 ; ++__first1, ++__first2) {
45 if (*__first1 < *__first2) {
49 if (*__first2 < *__first1)
52 return __first1 == __last1 && __first2 != __last2;
55template <
class _InputIter1,
class _InputIter2,
class _Compare>
57 _InputIter2 __first2, _InputIter2 __last2,
61 for ( ; __first1 != __last1 && __first2 != __last2
62 ; ++__first1, ++__first2) {
63 if (__comp(*__first1, *__first2)) {
65 _StlMsg_INVALID_STRICT_WEAK_PREDICATE)
68 if (__comp(*__first2, *__first1))
71 return __first1 == __last1 && __first2 != __last2;
74#if !defined (_STLP_NO_EXTENSIONS)
77template <
class _InputIter1,
class _InputIter2>
79 _InputIter2 __first2, _InputIter2 __last2) {
80 while (__first1 != __last1 && __first2 != __last2) {
81 if (*__first1 < *__first2) {
85 if (*__first2 < *__first1)
90 if (__first2 == __last2) {
91 return !(__first1 == __last1);
100template <
class _InputIter1,
class _InputIter2>
102 _InputIter2 __first2, _InputIter2 __last2) {
111template <
class _RandomAccessIter,
class _Tp>
117 for ( ; __trip_count > 0 ; --__trip_count) {
118 if (*__first ==
__val)
return __first;
121 if (*__first ==
__val)
return __first;
124 if (*__first ==
__val)
return __first;
127 if (*__first ==
__val)
return __first;
131 switch (
__last - __first) {
133 if (*__first ==
__val)
return __first;
136 if (*__first ==
__val)
return __first;
139 if (*__first ==
__val)
return __first;
158template <
class _RandomAccessIter,
class _Predicate>
164 for ( ; __trip_count > 0 ; --__trip_count) {
165 if (
__pred(*__first))
return __first;
168 if (
__pred(*__first))
return __first;
171 if (
__pred(*__first))
return __first;
174 if (
__pred(*__first))
return __first;
178 switch(
__last - __first) {
180 if (
__pred(*__first))
return __first;
183 if (
__pred(*__first))
return __first;
186 if (
__pred(*__first))
return __first;
194template <
class _InputIter,
class _Tp>
198 while (__first !=
__last && !(*__first ==
__val)) ++__first;
202template <
class _InputIter,
class _Predicate>
213template <
class _InputIter,
class _Predicate>
220template <
class _InputIter,
class _Tp>
226template <
class _ForwardIter1,
class _ForwardIter2,
class _BinaryPred>
227_ForwardIter1
search(_ForwardIter1 __first1, _ForwardIter1 __last1,
228 _ForwardIter2 __first2, _ForwardIter2 __last2,
233 if (__first1 == __last1 || __first2 == __last2)
237 _ForwardIter2 __p1(__first2);
239 if ( ++__p1 == __last2 ) {
240 while (__first1 != __last1 && !
__pred(*__first1, *__first2)) {
249 while (__first1 != __last1 && !
__pred(*__first1, *__first2)) {
252 if (__first1 == __last1) {
255 _ForwardIter2 __p = __p1;
256 _ForwardIter1 __current = __first1;
257 if (++__current == __last1)
return __last1;
259 while (
__pred(*__current, *__p)) {
260 if (++__p == __last2)
262 if (++__current == __last1)
281# ifndef _STLP_NO_SIGNED_BUILTINS
286template <
class _Tp1,
class _Tp2>
288{
return __val1 == __val2; }
290#if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
296template <
class _InputIter,
class _ForwardIter,
class _Tp2,
class _Predicate>
298 _ForwardIter __first2, _ForwardIter __last2,
302 memset(__hints, 0,
sizeof(__hints) /
sizeof(
unsigned char));
303 for (; __first2 != __last2; ++__first2) {
304 unsigned char __tmp = (
unsigned char)*__first2;
308 for (; __first1 != __last1; ++__first1) {
309 _Tp2 __tmp = (_Tp2)*__first1;
317template <
class _InputIter,
class _ForwardIter,
class _Tp2,
class _Predicate>
319 _ForwardIter __first2, _ForwardIter __last2,
326template <
class _InputIter,
class _ForwardIter,
class _Tp1,
class _Tp2>
328 _ForwardIter __first2, _ForwardIter __last2,
329 _Tp1* __pt1, _Tp2* __pt2) {
332 typedef _STLP_TYPENAME _STLP_STD::_Land2<_IsIntegral, _IsCharLike>::_Ret _UseStrcspnLikeAlgo;
338template <
class _InputIter,
class _ForwardIter>
340 _ForwardIter __first2, _ForwardIter __last2) {
347template <
class _InputIter,
class _ForwardIter,
class _BinaryPredicate>
349 _ForwardIter __first2, _ForwardIter __last2,
350 _BinaryPredicate __comp) {
351 for ( ; __first1 != __last1; ++__first1) {
352 for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter) {
353 if (__comp(*__first1, *__iter)) {
367template <
class _ForwardIter1,
class _ForwardIter2,
368 class _BinaryPredicate>
369_ForwardIter1
__find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
370 _ForwardIter2 __first2, _ForwardIter2 __last2,
372 _BinaryPredicate __comp) {
373 if (__first2 == __last2)
376 _ForwardIter1 __result = __last1;
378 _ForwardIter1 __new_result = _STLP_STD::search(__first1, __last1, __first2, __last2, __comp);
379 if (__new_result == __last1)
382 __result = __new_result;
383 __first1 = __new_result;
393#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
395# ifndef _STLP_INTERNAL_ITERATOR_H
403template <
class _BidirectionalIter1,
class _BidirectionalIter2,
404 class _BinaryPredicate>
406__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
407 _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
409 _BinaryPredicate __comp) {
410 typedef _STLP_STD::reverse_iterator<_BidirectionalIter1> _RevIter1;
411 typedef _STLP_STD::reverse_iterator<_BidirectionalIter2> _RevIter2;
413 _RevIter1 __rlast1(__first1);
414 _RevIter2 __rlast2(__first2);
415 _RevIter1 __rresult = _STLP_STD::search(_RevIter1(__last1), __rlast1,
416 _RevIter2(__last2), __rlast2,
419 if (__rresult == __rlast1)
422 _BidirectionalIter1 __result = __rresult.base();
423 _STLP_STD::advance(__result, -_STLP_STD::distance(__first2, __last2));
431template <
class _ForwardIter1,
class _ForwardIter2,
432 class _BinaryPredicate>
434find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
435 _ForwardIter2 __first2, _ForwardIter2 __last2,
436 _BinaryPredicate __comp) {
452template <
class _ForwardIter,
class _Tp,
class _Compare1,
class _Compare2,
class _Distance>
454 _Compare1 __comp1, _Compare2 __comp2, _Distance*) {
455 _Distance __len = _STLP_STD::distance(__first,
__last);
457 _ForwardIter __middle;
462 _STLP_STD::advance(__middle, __half);
463 if (__comp1(*__middle,
__val)) {
467 __len = __len - __half - 1;
_STLP_INLINE_LOOP _InputIter __last
_STLP_INLINE_LOOP _InputIter _Predicate __pred
_InputIter __find_first_of(_InputIter __first1, _InputIter __last1, _ForwardIter __first2, _ForwardIter __last2)
bool __stlp_eq(_Tp1 __val1, _Tp2 __val2)
_STLP_INLINE_LOOP _RandomAccessIter __find_if(_RandomAccessIter __first, _RandomAccessIter __last, _Predicate __pred, const random_access_iterator_tag &)
_STLP_MOVE_TO_STD_NAMESPACE int lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2)
_STLP_BEGIN_NAMESPACE bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2)
_InputIter __find_first_of_aux2(_InputIter __first1, _InputIter __last1, _ForwardIter __first2, _ForwardIter __last2, _Tp2 *, _Predicate __pred, const __true_type &)
_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPred __pred)
_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2, const forward_iterator_tag &, const forward_iterator_tag &, _BinaryPredicate __comp)
_InputIter __find_first_of_aux1(_InputIter __first1, _InputIter __last1, _ForwardIter __first2, _ForwardIter __last2, _Tp1 *__pt1, _Tp2 *__pt2)
_STLP_MOVE_TO_STD_NAMESPACE _ForwardIter1 find_end(_ForwardIter1 __first1, _ForwardIter1 __last1, _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPredicate __comp)
_STLP_MOVE_TO_PRIV_NAMESPACE _STLP_INLINE_LOOP _RandomAccessIter __find(_RandomAccessIter __first, _RandomAccessIter __last, const _Tp &__val, const random_access_iterator_tag &)
_STLP_MOVE_TO_PRIV_NAMESPACE int __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2)
_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 _InputIter find_if(_InputIter __first, _InputIter __last, _Predicate __pred)
_STLP_INLINE_LOOP _InputIter const _Tp & __val
#define _STLP_DEBUG_CHECK(expr)
#define _STLP_VERBOSE_ASSERT(expr, diagnostic)
equal_to< _Tp > __equal_to(_Tp *)
#define _STLP_DIFFERENCE_TYPE(_Iterator)
#define _STLP_VALUE_TYPE(_It, _Tp)
#define _STLP_ITERATOR_CATEGORY(_It, _Tp)
#define _STLP_TEMPLATE_NULL
#define _STLP_CLASS_PARTIAL_SPECIALIZATION
#define _STLP_INLINE_LOOP
#define _STLP_MOVE_TO_STD_NAMESPACE
#define __STATIC_CAST(__x, __y)
#define _STLP_BEGIN_NAMESPACE
#define _STLP_END_NAMESPACE
#define _STLP_MOVE_TO_PRIV_NAMESPACE
static unsigned(__cdecl *hash_bstr)(bstr_t s)