📄 _slist.h
字号:
void insert(iterator __pos, const_iterator __first, const_iterator __last) { _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); } void insert(iterator __pos, const value_type* __first, const value_type* __last) { _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) _M_non_dbg_impl.insert(__pos._M_iterator, __first, __last); }#endif#if !defined (_STLP_DONT_SUP_DFLT_PARAM) iterator insert(iterator __pos, const value_type& __x = _Tp()) {#else iterator insert(iterator __pos, const value_type& __x) {#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) return iterator(&_M_iter_list, _M_non_dbg_impl.insert(__pos._M_iterator, __x)); }#if defined (_STLP_DONT_SUP_DFLT_PARAM) iterator insert(iterator __pos) { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ void insert(iterator __pos, size_type __n, const value_type& __x) { _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) _M_non_dbg_impl.insert(__pos._M_iterator, __n, __x); }public: iterator erase_after(iterator __pos) { _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) iterator __tmp = __pos; ++__tmp; _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__tmp)) _Invalidate_iterator(__tmp); return iterator(&_M_iter_list, _M_non_dbg_impl.erase_after(__pos._M_iterator)); } iterator erase_after(iterator __before_first, iterator __last) { _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__before_first)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__before_first, __last, begin(), end())) iterator __tmp = __before_first; ++__tmp; _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__tmp)) _Invalidate_iterators(__tmp, __last); return iterator(&_M_iter_list, _M_non_dbg_impl.erase_after(__before_first._M_iterator, __last._M_iterator)); } iterator erase(iterator __pos) { _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) _STLP_VERBOSE_ASSERT(__pos._M_iterator != _M_non_dbg_impl.before_begin(), _StlMsg_INVALID_ARGUMENT) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) _Invalidate_iterator(__pos); return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__pos._M_iterator)); } iterator erase(iterator __first, iterator __last) { _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end())) _Invalidate_iterators(__first, __last); return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator)); }#if !defined(_STLP_DONT_SUP_DFLT_PARAM) void resize(size_type __new_size, const value_type& __x = _Tp()) {#else void resize(size_type __new_size, const value_type& __x) {#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ _M_non_dbg_impl.resize(__new_size, __x); }#if defined(_STLP_DONT_SUP_DFLT_PARAM) void resize(size_type __new_size) { resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ void clear() { _Invalidate_iterators(begin(), end()); _M_non_dbg_impl.clear(); }public: // Removes all of the elements from the list __x to *this, inserting // them immediately after __pos. __x must not be *this. Complexity: // linear in __x.size(). void splice_after(iterator __pos, _Self& __x) { _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) _STLP_VERBOSE_ASSERT(!(&__x == this), _StlMsg_INVALID_ARGUMENT) _M_non_dbg_impl.splice_after(__pos._M_iterator, __x._M_non_dbg_impl); if (get_allocator() == __x.get_allocator()) { __x._M_iter_list._Set_owner(_M_iter_list); } else { __x._Invalidate_iterators(__x.begin(), __x.end()); } } // Moves the element that follows __prev to *this, inserting it immediately // after __pos. This is constant time. void splice_after(iterator __pos, _Self& __x, iterator __prev) { _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__prev)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&__x._M_iter_list, __prev)) iterator __elem = __prev; ++__elem; _M_non_dbg_impl.splice_after(__pos._M_iterator, __x._M_non_dbg_impl, __prev._M_iterator); if (get_allocator() == __x.get_allocator()) { _STLP_PRIV __change_ite_owner(__elem, &_M_iter_list); } else { __x._Invalidate_iterator(__elem); } } // Moves the range [__before_first + 1, __before_last + 1) to *this, // inserting it immediately after __pos. This is constant time. void splice_after(iterator __pos, _Self& __x, iterator __before_first, iterator __before_last) { _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__before_first, __before_last)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&__x._M_iter_list, __before_first)) _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__before_first)) _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__before_last)) iterator __first = __before_first; ++__first; iterator __last = __before_last; ++__last; if (get_allocator() == __x.get_allocator()) { _STLP_PRIV __change_range_owner(__first, __last, &_M_iter_list); } else { __x._Invalidate_iterators(__first, __last); } _M_non_dbg_impl.splice_after(__pos._M_iterator, __x._M_non_dbg_impl, __before_first._M_iterator, __before_last._M_iterator); } // Linear in distance(begin(), __pos), and linear in __x.size(). void splice(iterator __pos, _Self& __x) { _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) _STLP_VERBOSE_ASSERT(!(&__x == this), _StlMsg_INVALID_ARGUMENT) _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl); if (get_allocator() == __x.get_allocator()) { __x._M_iter_list._Set_owner(_M_iter_list); } else { __x._Invalidate_iterators(__x.begin(), __x.end()); } } // Linear in distance(begin(), __pos), and in distance(__x.begin(), __i). void splice(iterator __pos, _Self& __x, iterator __i) { //__pos should be owned by *this and not be the before_begin iterator _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) //__i should be dereferenceable, not before_begin and be owned by __x _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__i)) _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&__x._M_iter_list ,__i)) _STLP_VERBOSE_ASSERT(!(__i == __x.before_begin()), _StlMsg_INVALID_ARGUMENT) if (get_allocator() == __x.get_allocator()) { _STLP_PRIV __change_ite_owner(__i, &_M_iter_list); } else { __x._Invalidate_iterator(__i); } _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __i._M_iterator); } // Linear in distance(begin(), __pos), in distance(__x.begin(), __first), // and in distance(__first, __last). void splice(iterator __pos, _Self& __x, iterator __first, iterator __last) { _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) _STLP_VERBOSE_ASSERT(!(__pos._M_iterator == _M_non_dbg_impl.before_begin()), _StlMsg_INVALID_ARGUMENT) //_STLP_VERBOSE_ASSERT(&__x != this, _StlMsg_INVALID_ARGUMENT) _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, __x.begin(), __x.end())) if (get_allocator() == __x.get_allocator()) { _STLP_PRIV __change_range_owner(__first, __last, &_M_iter_list); } else { __x._Invalidate_iterators(__first, __last); } _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __first._M_iterator, __last._M_iterator); } void reverse() { _M_non_dbg_impl.reverse(); } void remove(const value_type& __val) { _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); while (__first != __last) { _Base_iterator __next = __first; ++__next; if (__val == *__first) { _Invalidate_iterator(iterator(&_M_iter_list, __first)); _M_non_dbg_impl.erase(__first); } __first = __next; } } void unique() { _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); if (__first == __last) return; _Base_iterator __next = __first; while (++__next != __last) { if (*__first == *__next) { _Invalidate_iterator(iterator(&_M_iter_list, __next)); _M_non_dbg_impl.erase(__next); } else __first = __next; __next = __first; } } void merge(_Self& __x) { _STLP_VERBOSE_ASSERT(&__x != this, _StlMsg_INVALID_ARGUMENT)#if !defined (_STLP_NO_EXTENSIONS) /* comments below due to bug in GCC compilers: ones eat all memory and die if see * something like namespace_name::func_name() - ptr */ _STLP_DEBUG_CHECK( /* _STLP_STD:: */ is_sorted(_M_non_dbg_impl.begin(), _M_non_dbg_impl.end())) _STLP_DEBUG_CHECK( /* _STLP_STD:: */ is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator))#endif _M_non_dbg_impl.merge(__x._M_non_dbg_impl); if (get_allocator() == __x.get_allocator()) { __x._M_iter_list._Set_owner(_M_iter_list); } else { __x._Invalidate_iterators(__x.begin(), __x.end()); } } void sort() { _M_non_dbg_impl.sort(); }#if defined (_STLP_MEMBER_TEMPLATES) template <class _Predicate> void remove_if(_Predicate __pred) { _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); while (__first != __last) { _Base_iterator __next = __first; ++__next; if (__pred(*__first)) { _Invalidate_iterator(iterator(&_M_iter_list, __first)); _M_non_dbg_impl.erase(__first); } __first = __next; } } template <class _BinaryPredicate> void unique(_BinaryPredicate __pred) { _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); if (__first == __last) return; _Base_iterator __next = __first; while (++__next != __last) { if (__binary_pred(*__first, *__next)) { _Invalidate_iterator(iterator(&_M_iter_list, __next)); _M_non_dbg_impl.erase(__next); } else __first = __next; __next = __first; } } template <class _StrictWeakOrdering> void merge(_Self& __x, _StrictWeakOrdering __ord) { _STLP_VERBOSE_ASSERT(&__x != this, _StlMsg_INVALID_ARGUMENT)#if !defined (_STLP_NO_EXTENSIONS) /* comments below due to bug in GCC compilers: ones eat all memory and die if see * something like namespace_name::func_name() - ptr */ _STLP_DEBUG_CHECK( /* _STLP_STD:: */ is_sorted(_M_non_dbg_impl.begin(), _M_non_dbg_impl.end(), __ord)) _STLP_DEBUG_CHECK( /* _STLP_STD:: */ is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator, __ord))#endif _M_non_dbg_impl.merge(__x._M_non_dbg_impl, __ord); if (get_allocator() == __x.get_allocator()) { __x._M_iter_list._Set_owner(_M_iter_list); } else { __x._Invalidate_iterators(__x.begin(), __x.end()); } } template <class _StrictWeakOrdering> void sort(_StrictWeakOrdering __comp) { _M_non_dbg_impl.sort(__comp); }#endif};_STLP_END_NAMESPACE#undef _STLP_NON_DBG_SLIST#endif /* _STLP_INTERNAL_DBG_SLIST_H */// Local Variables:// mode:C++// End:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -