111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1994
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Hewlett-Packard Company
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1996,1997
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Silicon Graphics Computer Systems, Inc.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1997
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Moscow Center for SPARC Technology
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk.
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies.
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted,
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice.
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_SLIST_BASE_C
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_SLIST_BASE_C
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_SLIST_BASE_H
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#  include <stl/_slist_base.h>
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_MOVE_TO_PRIV_NAMESPACE
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Dummy>
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Slist_node_base*  _STLP_CALL
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Sl_global<_Dummy>::__previous(_Slist_node_base* __head,
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                               const _Slist_node_base* __node) {
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  while (__head && __head->_M_next != __node)
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __head = __head->_M_next;
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __head;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Dummy>
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid _STLP_CALL
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Sl_global<_Dummy>::__splice_after(_Slist_node_base* __pos, _Slist_node_base* __head) {
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  _Slist_node_base* __before_last = __previous(__head, 0);
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  if (__before_last != __head) {
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    _Slist_node_base* __after = __pos->_M_next;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __pos->_M_next = __head->_M_next;
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __head->_M_next = 0;
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __before_last->_M_next = __after;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Dummy>
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid _STLP_CALL
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Sl_global<_Dummy>::__splice_after(_Slist_node_base* __pos,
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                   _Slist_node_base* __before_first,
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert                                   _Slist_node_base* __before_last) {
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  if (__pos != __before_first && __pos != __before_last) {
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    _Slist_node_base* __first = __before_first->_M_next;
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    _Slist_node_base* __after = __pos->_M_next;
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __before_first->_M_next = __before_last->_M_next;
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __pos->_M_next = __first;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __before_last->_M_next = __after;
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Dummy>
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Slist_node_base* _STLP_CALL
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Sl_global<_Dummy>::__reverse(_Slist_node_base* __node) {
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  _Slist_node_base* __result = __node;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  __node = __node->_M_next;
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  __result->_M_next = 0;
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  while(__node) {
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    _Slist_node_base* __next = __node->_M_next;
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __node->_M_next = __result;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __result = __node;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    __node = __next;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  }
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __result;
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Dummy>
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertsize_t _STLP_CALL
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_Sl_global<_Dummy>::size(_Slist_node_base* __node) {
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  size_t __result = 0;
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  for ( ; __node != 0; __node = __node->_M_next)
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ++__result;
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  return __result;
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_MOVE_TO_STD_NAMESPACE
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*  _STLP_SLIST_BASE_C */
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables:
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End:
105