19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996,1997 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers. 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * You should not attempt to use it directly. 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_LIST_IMPL_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_LIST_IMPL_H 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALGOBASE_H 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_algobase.h> 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALLOC_H 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_alloc.h> 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ITERATOR_H 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_iterator.h> 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CONSTRUCT_H 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_construct.h> 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_FUNCTION_BASE_H 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_function_base.h> 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _List_node_base { 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_node_base* _M_next; 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_node_base* _M_prev; 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Dummy> 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _List_global { 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_node_base _Node_base; 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Transfer(_Node_base* __pos, 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __first, _Node_base* __last); 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _List_global<bool>; 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef _List_global<bool> _List_global_inst; 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _List_node : public _List_node_base { 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp _M_data; 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __TRIVIAL_STUFF(_List_node) 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _List_iterator_base { 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef size_t size_type; 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef bidirectional_iterator_tag iterator_category; 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_node_base* _M_node; 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_iterator_base(_List_node_base* __x) : _M_node(__x) {} 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_incr() { _M_node = _M_node->_M_next; } 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_decr() { _M_node = _M_node->_M_prev; } 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate<class _Tp, class _Traits> 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _List_iterator : public _List_iterator_base { 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::pointer pointer; 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::reference reference; 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_iterator<_Tp, _Traits> _Self; 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::_NonConstTraits _NonConstTraits; 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_iterator<_Tp, _NonConstTraits> iterator; 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::_ConstTraits _ConstTraits; 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_iterator<_Tp, _ConstTraits> const_iterator; 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef bidirectional_iterator_tag iterator_category; 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_node<_Tp> _Node; 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef size_t size_type; 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit _List_iterator(_List_node_base* __x) : _List_iterator_base(__x) {} 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_iterator() : _List_iterator_base(0) {} 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //copy constructor for iterator and constructor from iterator for const_iterator 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_iterator(const iterator& __x) : _List_iterator_base(__x._M_node) {} 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference operator*() const { return __STATIC_CAST(_Node*, this->_M_node)->_M_data; } 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEFINE_ARROW_OPERATOR 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator++() { 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_incr(); 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self operator++(int) { 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp = *this; 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_incr(); 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator--() { 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_decr(); 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self operator--(int) { 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp = *this; 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_decr(); 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool operator==(const_iterator __y ) const { 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->_M_node == __y._M_node; 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool operator!=(const_iterator __y ) const { 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->_M_node != __y._M_node; 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Traits> 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __type_traits<_STLP_PRIV _List_iterator<_Tp, _Traits> > { 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __false_type has_trivial_default_constructor; 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __true_type has_trivial_copy_constructor; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __true_type has_trivial_assignment_operator; 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __true_type has_trivial_destructor; 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __false_type is_POD_type; 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES) 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Traits> 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Tp* value_type(const _STLP_PRIV _List_iterator<_Tp, _Traits>&) { return 0; } 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bidirectional_iterator_tag iterator_category(const _STLP_PRIV _List_iterator_base&) { return bidirectional_iterator_tag();} 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline ptrdiff_t* distance_type(const _STLP_PRIV _List_iterator_base&) { return 0; } 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Base class that encapsulates details of allocators and helps 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// to simplify EH 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _List_base { 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected: 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FORCE_ALLOCATORS(_Tp, _Alloc) 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_node_base _Node_base; 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_node<_Tp> _Node; 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _List_base<_Tp, _Alloc> _Self; 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Alloc_traits<_Node, _Alloc>::allocator_type _Node_allocator_type; 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_alloc_proxy<_Node_base, _Node, _Node_allocator_type> _AllocProxy; 183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Alloc allocator_type; 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block allocator_type get_allocator() const 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _STLP_CONVERT_ALLOCATOR((const _Node_allocator_type&)_M_node, _Tp); } 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_base(const allocator_type& __a) : _M_node(_STLP_CONVERT_ALLOCATOR(__a, _Node), _Node_base()) 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_empty_initialize(); } 190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _List_base(__move_source<_Self> src) : 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node(__move_source<_AllocProxy>(src.get()._M_node)) { 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (src.get().empty()) 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //We force this to empty. 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_empty_initialize(); 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block src.get()._M_empty_initialize(); 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node._M_data._M_prev->_M_next = _M_node._M_data._M_next->_M_prev = &_M_node._M_data; 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~_List_base() 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { clear(); } 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void clear(); 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool empty() const { return _M_node._M_data._M_next == &_M_node._M_data; } 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_empty_initialize() { 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node._M_data._M_next = &_M_node._M_data; 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node._M_data._M_prev = _M_node._M_data._M_next; 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _AllocProxy _M_node; 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS) 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define list _STLP_PTR_IMPL_NAME(list) 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif defined (_STLP_DEBUG) 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define list _STLP_NON_DBG_NAME(list) 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) > 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass list; 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (list) 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// helper functions to reduce code duplication 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _Predicate> 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _S_remove_if(list<_Tp, _Alloc>& __that, _Predicate __pred); 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _BinaryPredicate> 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _S_unique(list<_Tp, _Alloc>& __that, _BinaryPredicate __binary_pred); 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _StrictWeakOrdering> 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _S_merge(list<_Tp, _Alloc>& __that, list<_Tp, _Alloc>& __x, 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StrictWeakOrdering __comp); 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _StrictWeakOrdering> 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _S_sort(list<_Tp, _Alloc>& __that, _StrictWeakOrdering __comp); 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (list) 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass list : public _STLP_PRIV _List_base<_Tp, _Alloc> 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (list) 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block , public __stlport_class<list<_Tp, _Alloc> > 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_PRIV _List_base<_Tp, _Alloc> _Base; 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef list<_Tp, _Alloc> _Self; 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_PRIV _List_node<_Tp> _Node; 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_PRIV _List_node_base _Node_base; 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef value_type* pointer; 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const value_type* const_pointer; 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef value_type& reference; 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const value_type& const_reference; 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef size_t size_type; 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FORCE_ALLOCATORS(_Tp, _Alloc) 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::allocator_type allocator_type; 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef bidirectional_iterator_tag _Iterator_category; 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_PRIV _List_iterator<_Tp, _Nonconst_traits<_Tp> > iterator; 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_PRIV _List_iterator<_Tp, _Const_traits<_Tp> > const_iterator; 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS; 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected: 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* _M_create_node(const_reference __x = value_type()) { 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* _M_create_node(const_reference __x) { 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node* __p = this->_M_node.allocate(1); 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Copy_Construct(&__p->_M_data, __x); 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_node.deallocate(__p, 1)) 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __p; 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_DONT_SUP_DFLT_PARAM) 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* _M_create_node() { 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node* __p = this->_M_node.allocate(1); 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Construct(&__p->_M_data); 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_node.deallocate(__p, 1)) 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __p; 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit list(size_type __n, const_reference __val = _STLP_DEFAULT_CONSTRUCTED(value_type), 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit list(size_type __n) 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(allocator_type()) 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->insert(begin(), __n, _STLP_DEFAULT_CONSTRUCTED(value_type)); } 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(size_type __n, const_reference __val) 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(allocator_type()) 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->insert(begin(), __n, __val); } 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(size_type __n, const_reference __val, const allocator_type& __a) 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(__a) 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->insert(begin(), __n, __val); } 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // We don't need any dispatching tricks here, because insert does all of 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // that anyway. 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(_InputIterator __first, _InputIterator __last, 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL) 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(__a) 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_insert(begin(), __first, __last); } 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(_InputIterator __first, _InputIterator __last) 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(allocator_type()) 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_insert(begin(), __first, __last); } 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_MEMBER_TEMPLATES */ 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(const value_type* __first, const value_type* __last, 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(__a) 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_insert(begin(), __first, __last); } 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(const_iterator __first, const_iterator __last, 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(__a) 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_insert(begin(), __first, __last); } 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit list(const allocator_type& __a = allocator_type()) 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list() 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(allocator_type()) {} 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(const allocator_type& __a) 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(__a) {} 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(const _Self& __x) : _STLP_PRIV _List_base<_Tp, _Alloc>(__x.get_allocator()) 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_insert(begin(), __x.begin(), __x.end()); } 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block list(__move_source<_Self> src) 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _List_base<_Tp, _Alloc>(__move_source<_Base>(src.get())) {} 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~list() {} 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator = (const _Self& __x); 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator begin() { return iterator(this->_M_node._M_data._M_next); } 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator begin() const { return const_iterator(this->_M_node._M_data._M_next); } 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator end() { return iterator(&this->_M_node._M_data); } 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator end() const { return const_iterator(__CONST_CAST(_Node_base*, &this->_M_node._M_data)); } 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reverse_iterator rbegin() { return reverse_iterator(end()); } 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reverse_iterator rend() { return reverse_iterator(begin()); } 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type size() const { 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __result = _STLP_STD::distance(begin(), end()); 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type max_size() const { return size_type(-1); } 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference front() { return *begin(); } 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference front() const { return *begin(); } 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference back() { return *(--end()); } 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference back() const { return *(--end()); } 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_swap_aux(_Self& __x) { 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x._M_node._M_swap_alloc(this->_M_node); 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x._M_node._M_data._M_next = this->_M_node._M_data._M_next; 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x._M_node._M_data._M_next->_M_prev = &__x._M_node._M_data; 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x._M_node._M_data._M_prev = this->_M_node._M_data._M_prev; 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x._M_node._M_data._M_prev->_M_next = &__x._M_node._M_data; 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_empty_initialize(); 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void swap(_Self& __x) { 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__x.empty()) { 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->empty()) { 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return; 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_swap_aux(__x); 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } else if (this->empty()) { 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x._M_swap_aux(*this); 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } else { 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_node.swap(__x._M_node); 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::swap(this->_M_node._M_data._M_prev->_M_next, __x._M_node._M_data._M_prev->_M_next); 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::swap(this->_M_node._M_data._M_next->_M_prev, __x._M_node._M_data._M_next->_M_prev); 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void _M_swap_workaround(_Self& __x) { swap(__x); } 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott iterator insert(iterator __pos, const_reference __x = value_type()) 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott iterator insert(iterator __pos, const_reference __x) 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*!_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __tmp = _M_create_node(__x); 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __n = __pos._M_node; 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __p = __n->_M_prev; 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp->_M_next = __n; 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp->_M_prev = __p; 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __p->_M_next = __tmp; 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __n->_M_prev = __tmp; 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return iterator(__tmp); 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert(iterator __pos, _InputIterator __first, _InputIterator __last) { 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_dispatch(__pos, __first, __last, _Integral()); 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check whether it's an integral type. If so, it's not an iterator. 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template<class _Integer> 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x, 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_IsIntegral*/) { 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_fill_insert(__pos, __n, __x); 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_dispatch(iterator __pos, 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter __first, _InputIter __last, 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_IsIntegral*/) { 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_MEMBER_TEMPLATES */ 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert(iterator __pos, const value_type* __first, const value_type* __last) { 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __first != __last; ++__first) 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__pos, *__first); 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert(iterator __pos, const_iterator __first, const_iterator __last) { 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //We use a temporary list to avoid the auto reference troubles (infinite loop) 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __first != __last; ++__first) 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__pos, *__first); 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __pos, _InputIterator __first, _InputIterator __last) { 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_splice_insert_dispatch(__pos, __first, __last, _Integral()); 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check whether it's an integral type. If so, it's not an iterator. 4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template<class _Integer> 4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_splice_insert_dispatch(iterator __pos, _Integer __n, _Integer __x, 4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_IsIntegral*/) { 4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_fill_insert(__pos, __n, __x); 4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_splice_insert_dispatch(iterator __pos, 4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter __first, _InputIter __last, 4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_IsIntegral*/) { 4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_MEMBER_TEMPLATES */ 4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __pos, const value_type* __first, const value_type* __last) { 4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp(__first, __last, this->get_allocator()); 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_ASSERT(__tmp.get_allocator() == this->get_allocator()) 4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block splice(__pos, __tmp); 4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __pos, const_iterator __first, const_iterator __last) { 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //We use a temporary list to avoid the auto reference troubles (infinite loop) 4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp(__first, __last, this->get_allocator()); 4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block splice(__pos, __tmp); 4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __pos, size_type __n, const_reference __x) 4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_fill_insert(__pos, __n, __x); } 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_fill_insert(iterator __pos, size_type __n, const_reference __x) { 5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __n > 0; --__n) 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__pos, __x); 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_front(const_reference __x) { insert(begin(), __x); } 5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_back (const_reference __x) { insert(end(), __x); } 5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator insert(iterator __pos) 5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(value_type)); } 5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_front() {insert(begin());} 5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_back() {insert(end());} 5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator erase(iterator __pos) { 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __next_node = __pos._M_node->_M_next; 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __prev_node = __pos._M_node->_M_prev; 5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node* __n = __STATIC_CAST(_Node*, __pos._M_node); 5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __prev_node->_M_next = __next_node; 5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __next_node->_M_prev = __prev_node; 5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(&__n->_M_data); 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_node.deallocate(__n, 1); 5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return iterator(__next_node); 5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator erase(iterator __first, iterator __last) { 5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__first != __last) 5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(__first++); 5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __last; 5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void resize(size_type __new_size, const_reference __x = value_type()); 5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void resize(size_type __new_size, const_reference __x); 5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void resize(size_type __new_size) 5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(value_type)); } 5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*!_STLP_DONT_SUP_DFLT_PARAM*/ 5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void pop_front() { erase(begin()); } 5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void pop_back() { 5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __tmp = end(); 5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(--__tmp); 5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // assign(), a generalized assignment member function. Two 5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // versions: one that takes a count, and one that takes a range. 5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // The range version is a member template, so we dispatch on whether 5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // or not the type is an integer. 5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(size_type __n, const_reference __val) { _M_fill_assign(__n, __val); } 5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_fill_assign(size_type __n, const_reference __val); 5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(_InputIterator __first, _InputIterator __last) { 5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_assign_dispatch(__first, __last, _Integral()); 5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_assign_dispatch(_Integer __n, _Integer __val, 5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_IsIntegral*/) { 5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_fill_assign(__n, __val); 5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2, 5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_IsIntegral*/) { 5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(const value_type *__first2, const value_type *__last2) { 5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __first1 = begin(); 5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __last1 = end(); 5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2) 5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__first1 = *__first2; 5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first2 == __last2) 5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(__first1, __last1); 5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__last1, __first2, __last2); 5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(const_iterator __first2, const_iterator __last2) { 5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __first1 = begin(); 5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __last1 = end(); 5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2) 5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__first1 = *__first2; 5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first2 == __last2) 5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(__first1, __last1); 5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__last1, __first2, __last2); 5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void splice(iterator __pos, _Self& __x) { 6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__x.empty()) { 6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->get_allocator() == __x.get_allocator()) { 6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV _List_global_inst::_Transfer(__pos._M_node, __x.begin()._M_node, __x.end()._M_node); 6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__pos, __x.begin(), __x.end()); 6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x.clear(); 6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void splice(iterator __pos, _Self& __x, iterator __i) { 6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __j = __i; 6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__j; 6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__pos == __i || __pos == __j) return; 6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->get_allocator() == __x.get_allocator()) { 6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV _List_global_inst::_Transfer(__pos._M_node, __i._M_node, __j._M_node); 6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__pos, *__i); 6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x.erase(__i); 6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void splice(iterator __pos, _Self& __x, iterator __first, iterator __last) { 6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first != __last) { 6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->get_allocator() == __x.get_allocator()) { 6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV _List_global_inst::_Transfer(__pos._M_node, __first._M_node, __last._M_node); 6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(__pos, __first, __last); 6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x.erase(__first, __last); 6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void remove(const_reference __val) { 6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __first = begin(); 6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __last = end(); 6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__first != __last) { 6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __next = __first; 6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__next; 6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__val == *__first) erase(__first); 6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __first = __next; 6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void unique() 6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _STLP_PRIV _S_unique(*this, equal_to<value_type>()); } 6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void merge(_Self& __x) 6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _STLP_PRIV _S_merge(*this, __x, less<value_type>()); } 6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void reverse() { 6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __p = &this->_M_node._M_data; 6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Node_base* __tmp = __p; 6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block do { 6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::swap(__tmp->_M_next, __tmp->_M_prev); 6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp = __tmp->_M_prev; // Old next node is now prev. 6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } while (__tmp != __p); 6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void sort() 6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _STLP_PRIV _S_sort(*this, less<value_type>()); } 6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Predicate> 6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void remove_if(_Predicate __pred) 6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _STLP_PRIV _S_remove_if(*this, __pred); } 6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _BinaryPredicate> 6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void unique(_BinaryPredicate __binary_pred) 6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _STLP_PRIV _S_unique(*this, __binary_pred); } 6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _StrictWeakOrdering> 6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void merge(_Self& __x, 6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StrictWeakOrdering __comp) { 6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV _S_merge(*this, __x, __comp); 6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _StrictWeakOrdering> 6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void sort(_StrictWeakOrdering __comp) 6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _STLP_PRIV _S_sort(*this, __comp); } 6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (list) 6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef list 6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_LINK_TIME_INSTANTIATION) 6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_list.c> 6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS) 6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/pointers/_list.h> 6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG) 6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/debug/_list.h> 7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_INLINE_LOOP bool _STLP_CALL 7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator==(const list<_Tp,_Alloc>& __x, const list<_Tp,_Alloc>& __y) { 7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename list<_Tp,_Alloc>::const_iterator const_iterator; 7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __end1 = __x.end(); 7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __end2 = __y.end(); 7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __i1 = __x.begin(); 7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __i2 = __y.begin(); 7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) { 7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__i1; 7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__i2; 7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __i1 == __end1 && __i2 == __end2; 7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_EQUAL_OPERATOR_SPECIALIZED 7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_TEMPLATE_HEADER template <class _Tp, class _Alloc> 7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_TEMPLATE_CONTAINER list<_Tp, _Alloc> 7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_relops_cont.h> 7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_TEMPLATE_CONTAINER 7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_TEMPLATE_HEADER 7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_EQUAL_OPERATOR_SPECIALIZED 7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 728e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) && !defined (_STLP_NO_MOVE_SEMANTIC) 7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __move_traits<list<_Tp, _Alloc> > { 731e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename __move_traits<_Alloc>::complete complete; 7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 734e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_LIST_IMPL_H */ 7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 743