19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996,1997
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_SLIST_C
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_SLIST_C
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_SLIST_H
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_slist.h>
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_CARRAY_H
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_carray.h>
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_RANGE_ERRORS_H
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/_range_errors.h>
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NESTED_TYPE_PARAM_BUG)
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define size_type size_t
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc>
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Slist_node_base*
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Slist_base<_Tp,_Alloc>::_M_erase_after(_Slist_node_base* __before_first,
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                        _Slist_node_base* __last_node) {
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Slist_node_base* __cur = __before_first->_M_next;
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  while (__cur != __last_node) {
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Node* __tmp = __STATIC_CAST(_Node*, __cur);
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __cur = __cur->_M_next;
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_STD::_Destroy(&__tmp->_M_data);
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_head.deallocate(__tmp,1);
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __before_first->_M_next = __last_node;
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __last_node;
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS)
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define slist _STLP_PTR_IMPL_NAME(slist)
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif defined (_STLP_DEBUG)
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  define slist _STLP_NON_DBG_NAME(slist)
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* When building STLport lib Digital Mars Compiler complains on the _M_data assignment
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * problem which would be perfertly right if we were using it. Hiding it during build
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * fix this issue.
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc>
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockslist<_Tp,_Alloc>& slist<_Tp,_Alloc>::operator=(const slist<_Tp,_Alloc>& __x) {
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (&__x != this) {
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Node_base* __p1 = &this->_M_head._M_data;
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Node_base* __n1 = this->_M_head._M_data._M_next;
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    const _Node_base* __n2 = __x._M_head._M_data._M_next;
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    while (__n1 && __n2) {
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __STATIC_CAST(_Node*, __n1)->_M_data = __STATIC_CAST(const _Node*, __n2)->_M_data;
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __p1 = __n1;
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __n1 = __n1->_M_next;
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __n2 = __n2->_M_next;
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__n2 == 0)
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      this->_M_erase_after(__p1, 0);
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_insert_after_range(__p1, const_iterator(__CONST_CAST(_Node_base*, __n2)),
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                  const_iterator(0));
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return *this;
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc>
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid slist<_Tp, _Alloc>::_M_fill_assign(size_type __n, const _Tp& __val) {
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Node_base* __prev = &this->_M_head._M_data;
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Node_base* __node = this->_M_head._M_data._M_next;
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for ( ; __node != 0 && __n > 0 ; --__n) {
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __STATIC_CAST(_Node*, __node)->_M_data = __val;
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __prev = __node;
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __node = __node->_M_next;
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__n > 0)
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_insert_after_fill(__prev, __n, __val);
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    this->_M_erase_after(__prev, 0);
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc>
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid slist<_Tp,_Alloc>::resize(size_type __len, const _Tp& __x) {
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Node_base* __cur = &this->_M_head._M_data;
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  while (__cur->_M_next != 0 && __len > 0) {
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    --__len;
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __cur = __cur->_M_next;
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__cur->_M_next)
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    this->_M_erase_after(__cur, 0);
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_insert_after_fill(__cur, __len, __x);
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc>
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid slist<_Tp,_Alloc>::remove(const _Tp& __val) {
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Node_base* __cur = &this->_M_head._M_data;
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  while (__cur && __cur->_M_next) {
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__STATIC_CAST(_Node*, __cur->_M_next)->_M_data == __val)
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      this->_M_erase_after(__cur);
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __cur = __cur->_M_next;
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (slist)
1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _BinaryPredicate>
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Slist_unique(slist<_Tp, _Alloc>& __that, _BinaryPredicate __pred) {
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Slist_node<_Tp> _Node;
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typename slist<_Tp, _Alloc>::iterator __ite(__that.begin());
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__ite != __that.end()) {
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    while (__ite._M_node->_M_next) {
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__pred(*__ite, __STATIC_CAST(_Node*, __ite._M_node->_M_next)->_M_data))
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __that.erase_after(__ite);
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ++__ite;
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _StrictWeakOrdering>
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Slist_merge(slist<_Tp, _Alloc>& __that, slist<_Tp, _Alloc>& __x,
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                  _StrictWeakOrdering __comp) {
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _Slist_node<_Tp> _Node;
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _Slist_node_base _Node_base;
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (__that.get_allocator() == __x.get_allocator()) {
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typename slist<_Tp, _Alloc>::iterator __ite(__that.before_begin());
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    while (__ite._M_node->_M_next && !__x.empty()) {
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__comp(__x.front(), __STATIC_CAST(_Node*, __ite._M_node->_M_next)->_M_data)) {
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _STLP_VERBOSE_ASSERT(!__comp(__STATIC_CAST(_Node*, __ite._M_node->_M_next)->_M_data, __x.front()),
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                             _StlMsg_INVALID_STRICT_WEAK_PREDICATE)
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __that.splice_after(__ite, __x, __x.before_begin());
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__ite;
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (!__x.empty()) {
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __that.splice_after(__ite, __x);
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  else {
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typename slist<_Tp, _Alloc>::iterator __i1(__that.before_begin()), __i2(__x.begin());
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    while (__i1._M_node->_M_next && __i2._M_node) {
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__comp(__STATIC_CAST(_Node*, __i1._M_node->_M_next)->_M_data, *__i2)) {
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        _STLP_VERBOSE_ASSERT(!__comp(*__i2, __STATIC_CAST(_Node*, __i1._M_node->_M_next)->_M_data),
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                             _StlMsg_INVALID_STRICT_WEAK_PREDICATE)
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        ++__i1;
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      else {
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __i1 = __that.insert_after(__i1, *(__i2++));
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __that.insert_after(__i1, __i2, __x.end());
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __x.clear();
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc, class _StrictWeakOrdering>
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Slist_sort(slist<_Tp, _Alloc>& __that, _StrictWeakOrdering __comp) {
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (!__that.begin()._M_node || !__that.begin()._M_node->_M_next)
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return;
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  slist<_Tp, _Alloc> __carry(__that.get_allocator());
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const int NB = 64;
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_PRIV _CArray<slist<_Tp, _Alloc>, NB> __counter(__carry);
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int __fill = 0;
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  while (!__that.empty()) {
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __carry.splice_after(__carry.before_begin(), __that, __that.before_begin());
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    int __i = 0;
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    while (__i < __fill && !__counter[__i].empty()) {
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _STLP_PRIV _Slist_merge(__counter[__i], __carry, __comp);
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      __carry.swap(__counter[__i]);
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__i;
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __carry.swap(__counter[__i]);
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__i == __fill) {
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      ++__fill;
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      if (__fill >= NB) {
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        //Looks like the slist has too many elements to be sorted with this algorithm:
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block        __stl_throw_overflow_error("slist::sort");
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      }
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  for (int __i = 1; __i < __fill; ++__i)
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_PRIV _Slist_merge(__counter[__i], __counter[__i - 1], __comp);
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __that.swap(__counter[__fill-1]);
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (slist)
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef slist
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NESTED_TYPE_PARAM_BUG)
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  undef size_type
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*  _STLP_SLIST_C */
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
232