30 #ifndef _STLP_INTERNAL_LIST_IMPL_H 31 #define _STLP_INTERNAL_LIST_IMPL_H 33 #ifndef _STLP_INTERNAL_ALGOBASE_H 37 #ifndef _STLP_INTERNAL_ALLOC_H 41 #ifndef _STLP_INTERNAL_ITERATOR_H 45 #ifndef _STLP_INTERNAL_CONSTRUCT_H 49 #ifndef _STLP_INTERNAL_FUNCTION_BASE_H 62 template <
class _Dummy>
70 #if defined (_STLP_USE_TEMPLATE_EXPORT) 96 template<
class _Tp,
class _Traits>
148 #if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 150 template <
class _Tp,
class _Traits>
161 #if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES) 163 template <
class _Tp,
class _Traits>
173 template <
class _Tp,
class _Alloc>
191 #if !defined (_STLP_NO_MOVE_SEMANTIC) 194 if (
src.get().empty())
198 src.get()._M_empty_initialize();
219 #if defined (_STLP_USE_PTR_SPECIALIZATIONS) 220 # define list _STLP_PTR_IMPL_NAME(list) 221 #elif defined (_STLP_DEBUG) 222 # define list _STLP_NON_DBG_NAME(list) 227 template <
class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) >
235 template <
class _Tp,
class _Alloc,
class _Predicate>
238 template <
class _Tp,
class _Alloc,
class _BinaryPredicate>
241 template <
class _Tp,
class _Alloc,
class _StrictWeakOrdering>
243 _StrictWeakOrdering __comp);
245 template <
class _Tp,
class _Alloc,
class _StrictWeakOrdering>
252 template <
class _Tp,
class _Alloc>
254 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (list) 280 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 293 #if defined (_STLP_DONT_SUP_DFLT_PARAM) 305 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 320 #if defined (_STLP_MEMBER_TEMPLATES) 323 template <
class _InputIterator>
324 list(_InputIterator __first, _InputIterator
__last,
329 # if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 330 template <
class _InputIterator>
331 list(_InputIterator __first, _InputIterator
__last)
346 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 358 #if !defined (_STLP_NO_MOVE_SEMANTIC) 374 const_reverse_iterator
rbegin()
const {
return const_reverse_iterator(
end()); }
377 const_reverse_iterator
rend()
const {
return const_reverse_iterator(
begin()); }
392 __x._M_node._M_swap_alloc(this->_M_node);
393 __x._M_node._M_data._M_next = this->_M_node.
_M_data._M_next;
394 __x._M_node._M_data._M_next->_M_prev = &__x._M_node._M_data;
395 __x._M_node._M_data._M_prev = this->_M_node.
_M_data._M_prev;
396 __x._M_node._M_data._M_prev->_M_next = &__x._M_node._M_data;
397 this->_M_empty_initialize();
407 }
else if (this->
empty()) {
410 this->_M_node.
swap(__x._M_node);
415 #if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 416 void _M_swap_workaround(
_Self& __x) {
swap(__x); }
419 #if !defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 428 __tmp->_M_next =
__n;
429 __tmp->_M_prev = __p;
430 __p->_M_next = __tmp;
431 __n->_M_prev = __tmp;
436 #if defined (_STLP_MEMBER_TEMPLATES) 437 template <
class _InputIterator>
440 _M_insert_dispatch(__pos, __first,
__last, _Integral());
444 template<
class _Integer>
445 void _M_insert_dispatch(
iterator __pos, _Integer
__n, _Integer __x,
449 template <
class _InputIter>
450 void _M_insert_dispatch(
iterator __pos,
451 _InputIter __first, _InputIter
__last,
455 for (; __first !=
__last; ++__first)
461 for (; __first !=
__last; ++__first)
466 #if defined (_STLP_MEMBER_TEMPLATES) 467 template <
class _InputIterator>
470 _M_splice_insert_dispatch(__pos, __first,
__last, _Integral());
475 template<
class _Integer>
476 void _M_splice_insert_dispatch(
iterator __pos, _Integer
__n, _Integer __x,
480 template <
class _InputIter>
481 void _M_splice_insert_dispatch(
iterator __pos,
482 _InputIter __first, _InputIter
__last,
511 #if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 519 _Node_base* __next_node = __pos._M_node->_M_next;
520 _Node_base* __prev_node = __pos._M_node->_M_prev;
522 __prev_node->_M_next = __next_node;
523 __next_node->_M_prev = __prev_node;
525 this->_M_node.deallocate(
__n, 1);
535 #if !defined (_STLP_DONT_SUP_DFLT_PARAM) 543 void pop_front() { erase(begin()); } 559 #if defined (_STLP_MEMBER_TEMPLATES) 560 template <
class _InputIterator>
561 void assign(_InputIterator __first, _InputIterator
__last) {
563 _M_assign_dispatch(__first,
__last, _Integral());
566 template <
class _Integer>
567 void _M_assign_dispatch(_Integer
__n, _Integer
__val,
572 template <
class _InputIterator>
573 void _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2,
579 for ( ; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
580 *__first1 = *__first2;
581 if (__first2 == __last2)
582 erase(__first1, __last1);
584 insert(__last1, __first2, __last2);
590 for ( ; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
591 *__first1 = *__first2;
592 if (__first2 == __last2)
593 erase(__first1, __last1);
595 insert(__last1, __first2, __last2);
613 if (__pos == __i || __pos == __j)
return;
637 while (__first !=
__last) {
656 __tmp = __tmp->_M_prev;
657 }
while (__tmp != __p);
663 #if defined (_STLP_MEMBER_TEMPLATES) 664 template <
class _Predicate>
667 template <
class _BinaryPredicate>
668 void unique(_BinaryPredicate __binary_pred)
671 template <
class _StrictWeakOrdering>
673 _StrictWeakOrdering __comp) {
677 template <
class _StrictWeakOrdering>
678 void sort(_StrictWeakOrdering __comp)
690 #if !defined (_STLP_LINK_TIME_INSTANTIATION) 694 #if defined (_STLP_USE_PTR_SPECIALIZATIONS) 698 #if defined (_STLP_DEBUG) 704 template <
class _Tp,
class _Alloc>
713 while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) {
717 return __i1 == __end1 && __i2 == __end2;
720 #define _STLP_EQUAL_OPERATOR_SPECIALIZED 721 #define _STLP_TEMPLATE_HEADER template <class _Tp, class _Alloc> 722 #define _STLP_TEMPLATE_CONTAINER list<_Tp, _Alloc> 724 #undef _STLP_TEMPLATE_CONTAINER 725 #undef _STLP_TEMPLATE_HEADER 726 #undef _STLP_EQUAL_OPERATOR_SPECIALIZED 728 #if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_NO_MOVE_SEMANTIC) 729 template <
class _Tp,
class _Alloc>
#define _STLP_CONVERT_ALLOCATOR(__a, _Tp)
#define bidirectional_iterator_tag
void _M_swap_aux(_Self &__x)
void push_back(const_reference __x)
void splice(iterator __pos, _Self &__x)
void splice(iterator __pos, _Self &__x, iterator __first, iterator __last)
void splice(iterator __pos, _Self &__x, iterator __i)
void insert(iterator __pos, const value_type *__first, const value_type *__last)
iterator erase(iterator __pos)
_List_base(const allocator_type &__a)
list(const_iterator __first, const_iterator __last, const allocator_type &__a=allocator_type())
_List_base(__move_source< _Self > src)
void _M_fill_assign(size_type __n, const_reference __val)
void resize(size_type __new_size, const_reference __x=value_type())
_Base::allocator_type allocator_type
_List_iterator< _Tp, _Traits > _Self
GLsizei const GLvoid * pointer
__bool2type< pod >::_Ret is_POD_type
list(const value_type *__first, const value_type *__last, const allocator_type &__a=allocator_type())
#define __STATIC_CAST(__x, __y)
_Traits::reference reference
allocator_type get_allocator() const
_STLP_INLINE_LOOP _InputIter _Predicate __pred
ptrdiff_t difference_type
void _S_merge(list< _Tp, _Alloc > &__that, list< _Tp, _Alloc > &__x, _StrictWeakOrdering __comp)
const value_type & const_reference
_List_iterator_base(_List_node_base *__x)
allocator_type get_allocator() const
_STLP_END_NAMESPACE _STLP_BEGIN_NAMESPACE _STLP_INLINE_LOOP bool _STLP_CALL operator==(const list< _Tp, _Alloc > &__x, const list< _Tp, _Alloc > &__y)
_STLP_PRIV _List_node_base _Node_base
_List_iterator< _Tp, _NonConstTraits > iterator
GLsizei GLsizei GLfloat distance
const_reverse_iterator rbegin() const
#define _STLP_MOVE_TO_PRIV_NAMESPACE
ptrdiff_t difference_type
_List_node_base * _M_node
bool operator==(const_iterator __y) const
const_reference back() const
_Tp * allocate(size_type __n, size_type &__allocated_n)
const_iterator begin() const
iterator insert(iterator __pos, const_reference __x=value_type())
list(const allocator_type &__a=allocator_type())
const_reverse_iterator rend() const
#define _STLP_DEFAULT_CONSTRUCTED(_TTp)
void _M_fill_insert(iterator __pos, size_type __n, const_reference __x)
#define _STLP_UNWIND(action)
_STLP_INLINE_LOOP _InputIter __last
void _S_unique(list< _Tp, _Alloc > &__that, _BinaryPredicate __binary_pred)
reference operator *() const
_STLP_PRIV _List_iterator< BookmarkNode, _Const_traits< BookmarkNode > > const_iterator
void remove(const_reference __val)
_STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS
void _M_insert(iterator __pos, const value_type *__first, const value_type *__last)
#define _STLP_MOVE_TO_STD_NAMESPACE
void get(int argc, const char *argv[])
void _Copy_Construct(_Tp *__p, const _Tp &__val)
_Node_base * _M_create_node(const_reference __x=value_type())
_List_node_base _Node_base
#define _STLP_ALLOCATOR_TYPE_DFL
_STLP_INLINE_LOOP _InputIter const _Tp & __val
_STLP_PRIV _List_base< _Tp, _Alloc > _Base
void assign(const_iterator __first2, const_iterator __last2)
#define _STLP_EXPORT_TEMPLATE_CLASS
const_reference front() const
__bool2type< trivial_constructor >::_Ret has_trivial_default_constructor
list< _Tp, _Alloc > _Self
_STLP_PRIV _List_node< _Tp > _Node
_STLP_INLINE_LOOP _ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last, _Predicate __pred)
#define _STLP_INLINE_LOOP
_List_iterator< _Tp, _ConstTraits > const_iterator
list(size_type __n, const_reference __val=_STLP_DEFAULT_CONSTRUCTED(value_type), const allocator_type &__a=allocator_type())
void assign(const value_type *__first2, const value_type *__last2)
ptrdiff_t difference_type
_STLP_PRIV _List_iterator< _Tp, _Nonconst_traits< _Tp > > iterator
void _Destroy(_Tp *__pointer)
_STLP_MOVE_TO_PRIV_NAMESPACE void _S_remove_if(list< _Tp, _Alloc > &__that, _Predicate __pred)
static void _STLP_CALL _Transfer(_Node_base *__pos, _Node_base *__first, _Node_base *__last)
void insert(iterator __pos, const_iterator __first, const_iterator __last)
bool operator!=(const_iterator __y) const
void insert(iterator __pos, size_type __n, const_reference __x)
bidirectional_iterator_tag iterator_category
void _Construct(_T1 *__p)
void _M_empty_initialize()
#define __CONST_CAST(__x, __y)
void _S_sort(list< _Tp, _Alloc > &__that, _StrictWeakOrdering __comp)
const_iterator end() const
__bool2type< trivial_assign >::_Ret has_trivial_assignment_operator
#define _STLP_END_NAMESPACE
_List_node_base * _M_next
__bool2type< trivial_copy >::_Ret has_trivial_copy_constructor
size_type max_size() const
__kernel_ptrdiff_t ptrdiff_t
void push_front(const_reference __x)
iterator erase(iterator __first, iterator __last)
#define _STLP_ASSERT(expr)
#define _STLP_DEFINE_ARROW_OPERATOR
reverse_iterator rbegin()
_Traits::_ConstTraits _ConstTraits
list(__move_source< _Self > src)
_List_global< bool > _List_global_inst
#define _STLP_BEGIN_NAMESPACE
_List_node_base * _M_prev
_STLP_DEFINE_ARROW_OPERATOR _Self & operator++()
_Traits::_NonConstTraits _NonConstTraits
_List_iterator(const iterator &__x)
_Alloc_traits< _Node, _Alloc >::allocator_type _Node_allocator_type
void _M_insert(iterator __pos, const_iterator __first, const_iterator __last)
void assign(size_type __n, const_reference __val)
__bool2type< trivial_destructor >::_Ret has_trivial_destructor
_List_iterator(_List_node_base *__x)
_Self & operator=(const _Self &__x)
bidirectional_iterator_tag iterator_category
#define __TRIVIAL_STUFF(__type)
const value_type * const_pointer
#define _STLP_FORCE_ALLOCATORS(a, y)