27 #ifndef _STLP_INTERNAL_SLIST_H 28 #define _STLP_INTERNAL_SLIST_H 30 #ifndef _STLP_INTERNAL_ALGOBASE_H 34 #ifndef _STLP_INTERNAL_ALLOC_H 38 #ifndef _STLP_INTERNAL_ITERATOR_H 42 #ifndef _STLP_INTERNAL_CONSTRUCT_H 46 #ifndef _STLP_INTERNAL_FUNCTION_BASE_H 50 #ifndef _STLP_INTERNAL_SLIST_BASE_H 79 template <
class _Tp,
class _Traits>
124 #if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 126 template <
class _Tp,
class _Traits>
137 #if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES) 139 template <
class _Tp,
class _Traits>
147 template <
class _Tp,
class _Alloc>
164 #if !defined (_STLP_NO_MOVE_SEMANTIC) 189 #if defined (_STLP_USE_PTR_SPECIALIZATIONS) 190 # define slist _STLP_PTR_IMPL_NAME(slist) 191 #elif defined (_STLP_DEBUG) 192 # define slist _STLP_NON_DBG_NAME(slist) 197 template <
class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) >
205 template <
class _Tp,
class _Alloc,
class _BinaryPredicate>
208 template <
class _Tp,
class _Alloc,
class _StrictWeakOrdering>
210 _StrictWeakOrdering __comp);
212 template <
class _Tp,
class _Alloc,
class _StrictWeakOrdering>
219 template <
class _Tp,
class _Alloc>
221 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (slist) 249 #if !defined(_STLP_DONT_SUP_DFLT_PARAM) 254 _Node* __node = this->_M_head.allocate(1);
263 #if defined(_STLP_DONT_SUP_DFLT_PARAM) 265 _Node* __node = this->_M_head.allocate(1);
279 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 288 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 303 #if defined (_STLP_MEMBER_TEMPLATES) 306 template <
class _InputIterator>
307 slist(_InputIterator __first, _InputIterator
__last,
311 # if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 313 template <
class _InputIterator>
314 slist(_InputIterator __first, _InputIterator
__last)
333 #if !defined (_STLP_NO_MOVE_SEMANTIC) 353 #if defined (_STLP_MEMBER_TEMPLATES) 355 template <
class _InputIterator>
356 void assign(_InputIterator __first, _InputIterator
__last) {
358 _M_assign_dispatch(__first,
__last, _Integral());
362 template <
class _Integer>
363 void _M_assign_dispatch(_Integer
__n, _Integer
__val,
368 template <
class _InputIter>
369 void _M_assign_dispatch(_InputIter __first, _InputIter
__last,
375 _Node_base* __node = this->_M_head._M_data._M_next;
376 while (__node != 0 && __first !=
__last) {
379 __node = __node->_M_next;
385 this->_M_erase_after(__prev, 0);
390 _Node_base* __node = this->_M_head._M_data._M_next;
391 while (__node != 0 && __first !=
__last) {
394 __node = __node->_M_next;
400 this->_M_erase_after(__prev, 0);
428 bool empty()
const {
return this->_M_head._M_data._M_next == 0; }
431 { this->_M_head.swap(__x._M_head); }
432 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 433 void _M_swap_workaround(
_Self& __x) {
swap(__x); }
439 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 444 _STLP_PRIV __slist_make_link(&this->_M_head._M_data, _M_create_node(__x)); 447 #if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 453 this->_M_head._M_data._M_next = __node->_M_next;
455 this->_M_head.deallocate(__node, 1);
468 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 476 #if defined (_STLP_DONT_SUP_DFLT_PARAM) 488 #if defined (_STLP_MEMBER_TEMPLATES) 490 template <
class _InIter>
492 _InIter __first, _InIter
__last) {
497 template <
class _Integer>
503 template <
class _InIter>
505 _InIter __first, _InIter
__last,
511 while (__first !=
__last) {
519 while (__first !=
__last) {
525 #if defined (_STLP_MEMBER_TEMPLATES) 527 template <
class _InIter>
529 _InIter __first, _InIter
__last) {
534 template <
class _Integer>
540 template <
class _InIter>
542 _InIter __first, _InIter
__last,
548 while (__first !=
__last) {
561 #if defined (_STLP_MEMBER_TEMPLATES) 563 template <
class _InIter>
565 _InIter __first, _InIter
__last) {
570 template <
class _Integer>
577 template <
class _InIter>
579 _InIter __first, _InIter
__last,
585 while (__first !=
__last) {
600 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 608 #if defined (_STLP_DONT_SUP_DFLT_PARAM) 618 #if defined (_STLP_MEMBER_TEMPLATES) 621 template <
class _InIter>
634 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 643 #if defined (_STLP_DONT_SUP_DFLT_PARAM) 654 #if defined (_STLP_MEMBER_TEMPLATES) 657 template <
class _InIter>
672 {
return iterator(this->_M_erase_after(__pos._M_node)); }
674 {
return iterator(this->_M_erase_after(__before_first._M_node,
__last._M_node)); }
681 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 687 #if defined (_STLP_DONT_SUP_DFLT_PARAM) 692 { this->_M_erase_after(&this->_M_head._M_data, 0); }
699 if (__before_first != __before_last) {
702 __before_first._M_node, __before_last._M_node);
716 __prev._M_node, __prev._M_node->_M_next);
738 if (__x._M_head._M_data._M_next) {
741 &__x._M_head._M_data,
782 if (this->_M_head._M_data._M_next)
792 #if defined (_STLP_MEMBER_TEMPLATES) 793 template <
class _Predicate>
796 while (__cur->_M_next) {
798 this->_M_erase_after(__cur);
800 __cur = __cur->_M_next;
804 template <
class _BinaryPredicate>
808 template <
class _StrictWeakOrdering>
809 void merge(
_Self& __x, _StrictWeakOrdering __comp)
812 template <
class _StrictWeakOrdering>
813 void sort(_StrictWeakOrdering __comp)
825 #if !defined (_STLP_LINK_TIME_INSTANTIATION) 829 #if defined (_STLP_USE_PTR_SPECIALIZATIONS) 833 #if defined (_STLP_DEBUG) 839 template <
class _Tp,
class _Alloc>
848 while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) {
852 return __i1 == __end1 && __i2 == __end2;
855 #define _STLP_EQUAL_OPERATOR_SPECIALIZED 856 #define _STLP_TEMPLATE_HEADER template <class _Tp, class _Alloc> 857 #define _STLP_TEMPLATE_CONTAINER slist<_Tp, _Alloc> 859 #undef _STLP_TEMPLATE_CONTAINER 860 #undef _STLP_TEMPLATE_HEADER 861 #undef _STLP_EQUAL_OPERATOR_SPECIALIZED 863 #if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 864 # if !defined (_STLP_NO_MOVE_SEMANTIC) 865 template <
class _Tp,
class _Alloc>
874 template <
class _Tp,
class _Alloc>
878 _Container* _M_container;
889 : _M_container(&__x) {
890 if (__i == __x.begin())
891 _M_iter = __x.before_begin();
893 _M_iter = __x.previous(__i);
#define _STLP_CONVERT_ALLOCATOR(__a, _Tp)
void insert(iterator __pos, size_type __n, const value_type &__x)
_Slist_iterator< _Tp, _Traits > _Self
forward_iterator_tag _Iterator_category
iterator insert_after(iterator __pos, const value_type &__x=_Tp())
_Traits::value_type value_type
iterator erase(iterator __pos)
void insert_after(iterator __pos, const value_type *__first, const value_type *__last)
_Slist_node_base * _M_erase_after(_Slist_node_base *__pos)
allocator_type get_allocator() const
complex< _Tp > _STLP_CALL operator *(const _Tp &__x, const complex< _Tp > &__z)
ptrdiff_t difference_type
_Slist_base< _Tp, _Alloc > _Self
void _M_splice_range(_Node_base *__pos, const_iterator __first, const_iterator __last)
_STLP_DEFINE_ARROW_OPERATOR _Self & operator++()
GLsizei const GLvoid * pointer
__bool2type< pod >::_Ret is_POD_type
_Slist_iterator< _Tp, _NonConstTraits > iterator
_Slist_iterator(const iterator &__x)
const value_type * const_pointer
_STLP_END_NAMESPACE _STLP_BEGIN_NAMESPACE bool _STLP_CALL operator==(const slist< _Tp, _Alloc > &_SL1, const slist< _Tp, _Alloc > &_SL2)
#define __STATIC_CAST(__x, __y)
static _Slist_node_base *_STLP_CALL __previous(_Slist_node_base *__head, const _Slist_node_base *__node)
_STLP_INLINE_LOOP _InputIter _Predicate __pred
_Slist_node_base * _M_next
_Slist_iterator< _Tp, _ConstTraits > const_iterator
_Traits::_NonConstTraits _NonConstTraits
slist(const allocator_type &__a=allocator_type())
_Alloc_traits< _Node, _Alloc >::allocator_type _M_node_allocator_type
void assign(size_type __n, const _Tp &__val)
void splice_after(iterator __pos, _Self &__x, iterator __prev)
_STLP_PRIV _Slist_base< _Tp, _Alloc > _Base
_STLP_PRIV _Slist_iterator< _Tp, _Const_traits< _Tp > > const_iterator
slist(__move_source< _Self > src)
const_reference front() const
#define _STLP_MOVE_TO_PRIV_NAMESPACE
static _Slist_node_base *_STLP_CALL __reverse(_Slist_node_base *__node)
void _M_splice_after_range(_Node_base *__pos, const_iterator __first, const_iterator __last)
void _M_insert_after_range(_Node_base *__pos, const value_type *__first, const value_type *__last)
_Slist_node< value_type > _Node
slist(size_type __n, const value_type &__x=_STLP_DEFAULT_CONSTRUCTED(_Tp), const allocator_type &__a=allocator_type())
void resize(size_type new_size, const value_type &__x=_Tp())
void _Slist_sort(slist< _Tp, _Alloc > &__that, _StrictWeakOrdering __comp)
#define _STLP_DEFAULT_CONSTRUCTED(_TTp)
void _Slist_merge(slist< _Tp, _Alloc > &__that, slist< _Tp, _Alloc > &__x, _StrictWeakOrdering __comp)
slist(const_iterator __first, const_iterator __last, const allocator_type &__a=allocator_type())
iterator previous(const_iterator __pos)
#define _STLP_UNWIND(action)
_Base::allocator_type allocator_type
void _M_splice_after_range(_Node_base *__pos, const value_type *__first, const value_type *__last)
_STLP_INLINE_LOOP _InputIter __last
const_iterator previous(const_iterator __pos) const
_Self & operator=(const _Self &__x)
const_iterator begin() const
reference operator *() const
_STLP_alloc_proxy< _Slist_node_base, _Node, _M_node_allocator_type > _AllocProxy
const value_type & const_reference
_STLP_PRIV _Slist_node_base _Node_base
void insert_after(iterator __pos, const_iterator __first, const_iterator __last)
ptrdiff_t difference_type
#define _STLP_MOVE_TO_STD_NAMESPACE
void remove(const _Tp &__val)
void get(int argc, const char *argv[])
void _Copy_Construct(_Tp *__p, const _Tp &__val)
iterator erase(iterator __first, iterator __last)
forward_iterator_tag iterator_category
_STLP_PRIV _Slist_node< value_type > _Node
#define _STLP_ALLOCATOR_TYPE_DFL
_STLP_INLINE_LOOP _InputIter const _Tp & __val
slist< _Tp, _Alloc > _Self
iterator erase_after(iterator __pos)
_Slist_iterator_base(_Slist_node_base *__x)
__bool2type< trivial_constructor >::_Ret has_trivial_default_constructor
void insert_after(iterator __pos, size_type __n, const value_type &__x)
static size_t _STLP_CALL size(_Slist_node_base *__node)
void splice_after(iterator __pos, _Self &__x)
_STLP_INLINE_LOOP _ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred)
void assign(const_pointer __first, const_pointer __last)
bool operator==(const_iterator __y) const
const_iterator before_begin() const
void _M_insert_after_range(_Node_base *__pos, const_iterator __first, const_iterator __last)
_Traits::reference reference
void _Destroy(_Tp *__pointer)
_Node * _M_insert_after(_Node_base *__pos, const value_type &__x=_Tp())
_Rebind_type::other allocator_type
slist(const value_type *__first, const value_type *__last, const allocator_type &__a=allocator_type())
static void _STLP_CALL __splice_after(_Slist_node_base *__pos, _Slist_node_base *__before_first, _Slist_node_base *__before_last)
WDF_CHILD_LIST_ITERATOR iterator
iterator insert(iterator __pos, const value_type &__x=_Tp())
void assign(const_iterator __first, const_iterator __last)
_STLP_PRIV _Slist_iterator< _Tp, _Nonconst_traits< _Tp > > iterator
void _Construct(_T1 *__p)
_Slist_iterator(_Slist_node_base *__x)
_STLP_MOVE_TO_PRIV_NAMESPACE void _Slist_unique(slist< _Tp, _Alloc > &__that, _BinaryPredicate __binary_pred)
allocator_type get_allocator() const
ptrdiff_t difference_type
void insert(iterator __pos, const value_type *__first, const value_type *__last)
_Slist_node_base * __slist_make_link(_Slist_node_base *__prev_node, _Slist_node_base *__new_node)
void splice(iterator __pos, _Self &__x, iterator __first, iterator __last)
void _M_insert_after_fill(_Node_base *__pos, size_type __n, const value_type &__x)
void splice(iterator __pos, _Self &__x)
#define __CONST_CAST(__x, __y)
__bool2type< trivial_assign >::_Ret has_trivial_assignment_operator
#define _STLP_END_NAMESPACE
__bool2type< trivial_copy >::_Ret has_trivial_copy_constructor
void insert(iterator __pos, const_iterator __first, const_iterator __last)
__kernel_ptrdiff_t ptrdiff_t
bool operator!=(const_iterator __y) const
#define _STLP_DEFINE_ARROW_OPERATOR
_Slist_node_base * _M_node
void splice_after(iterator __pos, _Self &__x, iterator __before_first, iterator __before_last)
size_type max_size() const
void push_front(const value_type &__x=_Tp())
#define _STLP_BEGIN_NAMESPACE
void splice(iterator __pos, _Self &__x, iterator __i)
_Node * _M_create_node(const value_type &__x=_Tp())
void _M_fill_assign(size_type __n, const _Tp &__val)
forward_iterator_tag iterator_category
iterator erase_after(iterator __before_first, iterator __last)
__bool2type< trivial_destructor >::_Ret has_trivial_destructor
void _M_splice_range(_Node_base *__pos, const value_type *__first, const value_type *__last)
#define __TRIVIAL_STUFF(__type)
const_iterator end() const
_Slist_base(__move_source< _Self > src)
#define _STLP_FORCE_ALLOCATORS(a, y)
_Traits::_ConstTraits _ConstTraits