_uninitialized.h
来自「stl的源码」· C头文件 代码 · 共 444 行 · 第 1/2 页
H
444 行
} _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first, __cur))}template <class _ForwardIter, class _Tp, class _Distance>inline void __ufill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x, const input_iterator_tag &, _Distance* __d){ __ufill(__first, __last, __x, __d); }#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)template <class _ForwardIter, class _Tp, class _Distance>inline void __ufill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x, const forward_iterator_tag &, _Distance* __d){ __ufill(__first, __last, __x, __d); }template <class _ForwardIter, class _Tp, class _Distance>inline void __ufill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x, const bidirectional_iterator_tag &, _Distance* __d){ __ufill(__first, __last, __x, __d); }#endiftemplate <class _ForwardIter, class _Tp, class _Distance>inline void __ufill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x, const random_access_iterator_tag &, _Distance*) { _ForwardIter __cur = __first; _STLP_TRY { for (_Distance __n = __last - __first; __n > 0; --__n, ++__cur) _Param_Construct(&*__cur, __x); } _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first, __cur))}_STLP_MOVE_TO_STD_NAMESPACEtemplate <class _ForwardIter, class _Tp>inline void uninitialized_fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __x) { _STLP_PRIV __ufill(__first, __last, __x, _STLP_ITERATOR_CATEGORY(__first, _ForwardIter), _STLP_DISTANCE_TYPE(__first, _ForwardIter));}// Specialization: for one-byte types we can use memset.inline void uninitialized_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 uninitialized_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 uninitialized_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 _ForwardIter, class _Size, class _Tp>inline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x) { _ForwardIter __cur = __first; _STLP_TRY { for ( ; __n > 0; --__n, ++__cur) _Param_Construct(&*__cur, __x); } _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first, __cur)) return __cur;}template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, const input_iterator_tag &){ return __ufill_n(__first, __n, __x); }#if defined (_STLP_NONTEMPL_BASE_MATCH_BUG)template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, const forward_iterator_tag &){ return __ufill_n(__first, __n, __x); }template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, const bidirectional_iterator_tag &){ return __ufill_n(__first, __n, __x); }#endiftemplate <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x) { _ForwardIter __last = __first + __n; __ufill(__first, __last, __x, random_access_iterator_tag(), (ptrdiff_t*)0); return __last;}template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __ufill_n(_ForwardIter __first, _Size __n, const _Tp& __x, const random_access_iterator_tag &){ return __uninitialized_fill_n(__first, __n, __x); }/* __uninitialized_init is an internal algo to init a range with a value * built using default constructor. It is only called with pointer as * iterator. */template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __uinit_aux_aux(_ForwardIter __first, _Size __n, const _Tp& __val, const __false_type& /*_HasDefaultZero*/){ return __uninitialized_fill_n(__first, __n, __val); }template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __uinit_aux_aux(_ForwardIter __first, _Size __n, const _Tp& /* __val */, const __true_type& /*_HasDefaultZero*/) { memset((unsigned char*)__first, 0, __n * sizeof(_Tp)); return __first + __n;}template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __uinit_aux(_ForwardIter __first, _Size __n, const _Tp&, const __true_type& /*_TrivialInit*/){ return __first + __n; }template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __uinit_aux(_ForwardIter __first, _Size __n, const _Tp& __val, const __false_type& /*_TrivialInit*/){ return __uinit_aux_aux(__first, __n, __val, _HasDefaultZeroValue(__first)._Answer()); }template <class _ForwardIter, class _Size, class _Tp>inline _ForwardIter __uninitialized_init(_ForwardIter __first, _Size __n, const _Tp& __val){ return __uinit_aux(__first, __n, __val, _UseTrivialInit(__first)._Answer()); }_STLP_MOVE_TO_STD_NAMESPACEtemplate <class _ForwardIter, class _Size, class _Tp>inline voiduninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x){ _STLP_PRIV __ufill_n(__first, __n, __x, _STLP_ITERATOR_CATEGORY(__first, _ForwardIter)); }// Extensions: __uninitialized_copy_copy, __uninitialized_copy_fill,// __uninitialized_fill_copy.// __uninitialized_copy_copy// Copies [first1, last1) into [result, result + (last1 - first1)), and// copies [first2, last2) into// [result + (last1 - first1), result + (last1 - first1) + (last2 - first2))._STLP_MOVE_TO_PRIV_NAMESPACEtemplate <class _InputIter1, class _InputIter2, class _ForwardIter>inline _ForwardIter__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, _InputIter2 __last2, _ForwardIter __result) { _ForwardIter __new_result = uninitialized_copy(__first1, __last1, __result); _STLP_TRY { return uninitialized_copy(__first2, __last2, __new_result); } _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __new_result)) _STLP_RET_AFTER_THROW(__result)}// __uninitialized_fill_copy// Fills [result, mid) with x, and copies [first, last) into// [mid, mid + (last - first)).template <class _ForwardIter, class _Tp, class _InputIter>inline _ForwardIter__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid, const _Tp& __x, _InputIter __first, _InputIter __last) { uninitialized_fill(__result, __mid, __x); _STLP_TRY { return uninitialized_copy(__first, __last, __mid); } _STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __mid)) _STLP_RET_AFTER_THROW(__result)}// __uninitialized_copy_fill// Copies [first1, last1) into [first2, first2 + (last1 - first1)), and// fills [first2 + (last1 - first1), last2) with x.template <class _Iter, class _Tp>inline void__uninitialized_copy_fill(_Iter __first1, _Iter __last1, _Iter __first2, _Iter __last2, const _Tp& __x) { _Iter __mid2 = uninitialized_copy(__first1, __last1, __first2); _STLP_TRY { uninitialized_fill(__mid2, __last2, __x); } _STLP_UNWIND(_STLP_STD::_Destroy_Range(__first2, __mid2))}/* __uninitialized_move: * This function is used internaly and only with pointers as iterators. */template <class _InputIter, class _ForwardIter, class _TrivialUCpy>inline _ForwardIter__uninitialized_move(_InputIter __first, _InputIter __last, _ForwardIter __result, _TrivialUCpy __trivial_ucpy, const __false_type& /*_Movable*/){ return __ucopy_ptrs(__first, __last, __result, __trivial_ucpy); }template <class _InputIter, class _ForwardIter, class _TrivialUCpy>_STLP_INLINE_LOOP_ForwardIter__uninitialized_move(_InputIter __first, _InputIter __last, _ForwardIter __result, _TrivialUCpy , const __true_type& /*_Movable*/) { //Move constructor should not throw so we do not need to take care of exceptions here. for (ptrdiff_t __n = __last - __first ; __n > 0; --__n) { _Move_Construct(&*__result, *__first); ++__first; ++__result; } return __result;}_STLP_MOVE_TO_STD_NAMESPACE_STLP_END_NAMESPACE#endif /* _STLP_INTERNAL_UNINITIALIZED_H */// Local Variables:// mode:C++// End:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?