_algobase.h

来自「stl的源码」· C头文件 代码 · 共 729 行 · 第 1/2 页

H
729
字号
#  undef _STLP_DECLARE_COPY_TRIVIAL#endif//--------------------------------------------------// copy_n (not part of the C++ standard)#if !defined (_STLP_NO_EXTENSIONS)_STLP_MOVE_TO_PRIV_NAMESPACEtemplate <class _InputIter, class _Size, class _OutputIter>_STLP_INLINE_LOOP _STLP_STD::pair<_InputIter, _OutputIter>__copy_n(_InputIter __first, _Size __count, _OutputIter __result,         const input_iterator_tag &) {  for ( ; __count > 0; --__count) {    *__result = *__first;    ++__first;    ++__result;  }  return _STLP_STD::pair<_InputIter, _OutputIter>(__first, __result);}template <class _RAIter, class _Size, class _OutputIter>inline _STLP_STD::pair<_RAIter, _OutputIter>__copy_n(_RAIter __first, _Size __count, _OutputIter __result,         const random_access_iterator_tag &) {  _RAIter __last = __first + __count;  return _STLP_STD::pair<_RAIter, _OutputIter>(__last, _STLP_STD::copy(__first, __last, __result));}_STLP_MOVE_TO_STD_NAMESPACEtemplate <class _InputIter, class _Size, class _OutputIter>inline pair<_InputIter, _OutputIter>copy_n(_InputIter __first, _Size __count, _OutputIter __result) {  _STLP_FIX_LITERAL_BUG(__first)  return _STLP_PRIV __copy_n(__first, __count, __result, _STLP_ITERATOR_CATEGORY(__first, _InputIter));}#endif//--------------------------------------------------// fill and fill_n_STLP_MOVE_TO_PRIV_NAMESPACEtemplate <class _ForwardIter, class _Tp>_STLP_INLINE_LOOPvoid __fill_fwd(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {  for ( ; __first != __last; ++__first)    *__first = __val;}template <class _ForwardIter, class _Tp, class _Distance>inline void __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,                   const input_iterator_tag &, _Distance*) {  _STLP_PRIV __fill_fwd(__first, __last, __val);}#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)template <class _ForwardIter, class _Tp, class _Distance>_STLP_INLINE_LOOPvoid __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,            const forward_iterator_tag &, _Distance*) {  _STLP_PRIV __fill_fwd(__first, __last, __val);}template <class _ForwardIter, class _Tp, class _Distance>_STLP_INLINE_LOOPvoid __fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,            const bidirectional_iterator_tag &, _Distance*) {  _STLP_PRIV __fill_fwd(__first, __last, __val);}#endiftemplate <class _RandomAccessIter, class _Tp, class _Distance>_STLP_INLINE_LOOPvoid __fill(_RandomAccessIter __first, _RandomAccessIter __last, const _Tp& __val,            const random_access_iterator_tag &, _Distance*) {  for (_Distance __n = __last - __first ; __n > 0; ++__first, --__n)    *__first = __val;}_STLP_MOVE_TO_STD_NAMESPACEtemplate <class _ForwardIter, class _Tp>inline void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))  _STLP_PRIV __fill(__first, __last, __val,                    _STLP_ITERATOR_CATEGORY(__first, _ForwardIter),                    _STLP_DISTANCE_TYPE(__first, _ForwardIter));}// Specialization: for one-byte types we can use memset.inline void fill(unsigned char* __first, unsigned char* __last,                 const unsigned char& __val) {  unsigned char __tmp = __val;  memset(__first, __tmp, __last - __first);}#if !defined (_STLP_NO_SIGNED_BUILTINS)inline void fill(signed char* __first, signed char* __last,                 const signed char& __val) {  signed char __tmp = __val;  memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first);}#endifinline void fill(char* __first, char* __last, const char& __val) {  char __tmp = __val;  memset(__first, __STATIC_CAST(unsigned char,__tmp), __last - __first);}_STLP_MOVE_TO_PRIV_NAMESPACEtemplate <class _OutputIter, class _Size, class _Tp>_STLP_INLINE_LOOP_OutputIter __fill_n(_OutputIter __first, _Size __n, const _Tp& __val) {  _STLP_FIX_LITERAL_BUG(__first)  for ( ; __n > 0; --__n, ++__first)    *__first = __val;  return __first;}#if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)template <class _Size>inline unsigned char* __fill_n(unsigned char* __first, _Size __n,                               const unsigned char& __val) {  _STLP_STD::fill(__first, __first + __n, __val);  return __first + __n;}#if !defined (_STLP_NO_SIGNED_BUILTINS)template <class _Size>inline signed char* __fill_n(signed char* __first, _Size __n,                             const signed char& __val) {  _STLP_STD::fill(__first, __first + __n, __val);  return __first + __n;}#endiftemplate <class _Size>inline char* __fill_n(char* __first, _Size __n,                      const char& __val) {  _STLP_STD::fill(__first, __first + __n, __val);  return __first + __n;}#endif_STLP_MOVE_TO_STD_NAMESPACEtemplate <class _OutputIter, class _Size, class _Tp>inline void fill_n(_OutputIter __first, _Size __n, const _Tp& __val) {  _STLP_FIX_LITERAL_BUG(__first)  _STLP_PRIV __fill_n(__first, __n, __val);}//--------------------------------------------------// equal and mismatchtemplate <class _InputIter1, class _InputIter2>_STLP_INLINE_LOOP_STLP_STD::pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,                                                   _InputIter1 __last1,                                                   _InputIter2 __first2) {  _STLP_FIX_LITERAL_BUG(__first2)  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  while (__first1 != __last1 && *__first1 == *__first2) {    ++__first1;    ++__first2;  }  return _STLP_STD::pair<_InputIter1, _InputIter2>(__first1, __first2);}template <class _InputIter1, class _InputIter2, class _BinaryPredicate>_STLP_INLINE_LOOP_STLP_STD::pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,                                                   _InputIter1 __last1,                                                   _InputIter2 __first2,                                                   _BinaryPredicate __binary_pred) {  _STLP_FIX_LITERAL_BUG(__first2)  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {    ++__first1;    ++__first2;  }  return _STLP_STD::pair<_InputIter1, _InputIter2>(__first1, __first2);}template <class _InputIter1, class _InputIter2>_STLP_INLINE_LOOPbool equal(_InputIter1 __first1, _InputIter1 __last1,           _InputIter2 __first2) {  _STLP_FIX_LITERAL_BUG(__first1) _STLP_FIX_LITERAL_BUG(__last1)  _STLP_FIX_LITERAL_BUG(__first2)  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  for ( ; __first1 != __last1; ++__first1, ++__first2)    if (!(*__first1 == *__first2))      return false;  return true;}template <class _InputIter1, class _InputIter2, class _BinaryPredicate>_STLP_INLINE_LOOPbool equal(_InputIter1 __first1, _InputIter1 __last1,           _InputIter2 __first2, _BinaryPredicate __binary_pred) {  _STLP_FIX_LITERAL_BUG(__first2)  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  for ( ; __first1 != __last1; ++__first1, ++__first2)    if (!__binary_pred(*__first1, *__first2))      return false;  return true;}//--------------------------------------------------// lexicographical_compare and lexicographical_compare_3way.// (the latter is not part of the C++ standard.)template <class _InputIter1, class _InputIter2>bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,                             _InputIter2 __first2, _InputIter2 __last2);template <class _InputIter1, class _InputIter2, class _Compare>bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,                             _InputIter2 __first2, _InputIter2 __last2,                             _Compare __comp);inline boollexicographical_compare(const unsigned char* __first1,                        const unsigned char* __last1,                        const unsigned char* __first2,                        const unsigned char* __last2) {  const size_t __len1 = __last1 - __first1;  const size_t __len2 = __last2 - __first2;  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))  const int __result = memcmp(__first1, __first2, (min) (__len1, __len2));  return __result != 0 ? (__result < 0) : (__len1 < __len2);}#if !(CHAR_MAX == SCHAR_MAX)inline bool lexicographical_compare(const char* __first1, const char* __last1,                                    const char* __first2, const char* __last2) {  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first1, __last1))  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first2, __last2))  return lexicographical_compare((const unsigned char*) __first1,                                 (const unsigned char*) __last1,                                 (const unsigned char*) __first2,                                 (const unsigned char*) __last2);}#endif /* CHAR_MAX == SCHAR_MAX */_STLP_MOVE_TO_PRIV_NAMESPACEtemplate <class _InputIter1, class _InputIter2>int __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,                                   _InputIter2 __first2, _InputIter2 __last2);inline int__lexicographical_compare_3way(const unsigned char* __first1,                               const unsigned char* __last1,                               const unsigned char* __first2,                               const unsigned char* __last2) {  const ptrdiff_t __len1 = __last1 - __first1;  const ptrdiff_t __len2 = __last2 - __first2;  const int __result = memcmp(__first1, __first2, (min) (__len1, __len2));  return __result != 0 ? __result                       : (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1));}#if !(CHAR_MAX == SCHAR_MAX)inline int__lexicographical_compare_3way(const char* __first1, const char* __last1,                               const char* __first2, const char* __last2) {  return __lexicographical_compare_3way((const unsigned char*) __first1,                                        (const unsigned char*) __last1,                                        (const unsigned char*) __first2,                                        (const unsigned char*) __last2);}#endif_STLP_MOVE_TO_STD_NAMESPACE#if !defined (_STLP_NO_EXTENSIONS)template <class _InputIter1, class _InputIter2>int lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,                                 _InputIter2 __first2, _InputIter2 __last2);#endif// counttemplate <class _InputIter, class _Tp>_STLP_INLINE_LOOP _STLP_DIFFERENCE_TYPE(_InputIter)count(_InputIter __first, _InputIter __last, const _Tp& __val) {  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))  _STLP_DIFFERENCE_TYPE(_InputIter) __n = 0;  for ( ; __first != __last; ++__first)    if (*__first == __val)      ++__n;  return __n;}// find and find_if. Note find may be expressed in terms of find_if if appropriate binder was available.template <class _InputIter, class _Tp>_InputIter find(_InputIter __first, _InputIter __last, const _Tp& __val);template <class _InputIter, class _Predicate>_InputIter find_if(_InputIter __first, _InputIter __last, _Predicate __pred);// search.template <class _ForwardIter1, class _ForwardIter2, class _BinaryPred>_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,                     _ForwardIter2 __first2, _ForwardIter2 __last2, _BinaryPred  __predicate);_STLP_MOVE_TO_PRIV_NAMESPACE// find_first_oftemplate <class _InputIter, class _ForwardIter>_InputIter __find_first_of(_InputIter __first1, _InputIter __last1,                           _ForwardIter __first2, _ForwardIter __last2);template <class _InputIter, class _ForwardIter, class _BinaryPredicate>_InputIter __find_first_of(_InputIter __first1, _InputIter __last1,                           _ForwardIter __first2, _ForwardIter __last2,                           _BinaryPredicate __comp);_STLP_MOVE_TO_STD_NAMESPACEtemplate <class _ForwardIter1, class _ForwardIter2,          class _BinaryPredicate>_ForwardIter1find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,         _ForwardIter2 __first2, _ForwardIter2 __last2,         _BinaryPredicate __comp);// replacetemplate <class _ForwardIter, class _Tp>_STLP_INLINE_LOOP voidreplace(_ForwardIter __first, _ForwardIter __last,        const _Tp& __old_value, const _Tp& __new_value) {  _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))  for ( ; __first != __last; ++__first)    if (*__first == __old_value)      *__first = __new_value;}_STLP_MOVE_TO_PRIV_NAMESPACEtemplate <class _ForwardIter, class _Tp, class _Compare1, class _Compare2, class _Distance>_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,                           const _Tp& __val, _Compare1 __comp1, _Compare2 __comp2, _Distance*);_STLP_MOVE_TO_STD_NAMESPACE_STLP_END_NAMESPACE#if !defined (_STLP_LINK_TIME_INSTANTIATION)#  include <stl/_algobase.c>#endif#endif /* _STLP_INTERNAL_ALGOBASE_H */// Local Variables:// mode:C++// End:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?