epoc32/include/stdapis/stlport/stl/_slist_base.c
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
     1 _slist_base.c
     1 /*
       
     2  *
       
     3  *
       
     4  * Copyright (c) 1994
       
     5  * Hewlett-Packard Company
       
     6  *
       
     7  * Copyright (c) 1996,1997
       
     8  * Silicon Graphics Computer Systems, Inc.
       
     9  *
       
    10  * Copyright (c) 1997
       
    11  * Moscow Center for SPARC Technology
       
    12  *
       
    13  * Copyright (c) 1999 
       
    14  * Boris Fomitchev
       
    15  *
       
    16  * This material is provided "as is", with absolutely no warranty expressed
       
    17  * or implied. Any use is at your own risk.
       
    18  *
       
    19  * Permission to use or copy this software for any purpose is hereby granted 
       
    20  * without fee, provided the above notices are retained on all copies.
       
    21  * Permission to modify the code and to distribute modified code is granted,
       
    22  * provided the above notices are retained, and a notice that the code was
       
    23  * modified is included with the above copyright notice.
       
    24  *
       
    25  */
       
    26 #ifndef _STLP_SLIST_BASE_C
       
    27 #define _STLP_SLIST_BASE_C
       
    28 
       
    29 #ifndef _STLP_INTERNAL_SLIST_BASE_H
       
    30 # include <stl/_slist_base.h>
       
    31 #endif
       
    32 
       
    33 _STLP_BEGIN_NAMESPACE
       
    34 
       
    35 # if defined (_STLP_EXPOSE_GLOBALS_IMPLEMENTATION)
       
    36 
       
    37 template <class _Dummy>
       
    38 _Slist_node_base*  _STLP_CALL
       
    39 _Sl_global<_Dummy>::__previous(_Slist_node_base* __head,
       
    40 			       const _Slist_node_base* __node)
       
    41 {
       
    42   while (__head && __head->_M_next != __node)
       
    43     __head = __head->_M_next;
       
    44   return __head;
       
    45 }
       
    46 
       
    47 template <class _Dummy>
       
    48 void _STLP_CALL
       
    49 _Sl_global<_Dummy>::__splice_after(_Slist_node_base* __pos, _Slist_node_base* __head)
       
    50 {
       
    51   _Slist_node_base* __before_last = __previous(__head, 0);
       
    52   if (__before_last != __head) {
       
    53     _Slist_node_base* __after = __pos->_M_next;
       
    54     __pos->_M_next = __head->_M_next;
       
    55     __head->_M_next = 0;
       
    56     __before_last->_M_next = __after;
       
    57   }
       
    58 }
       
    59 
       
    60 template <class _Dummy>
       
    61 void _STLP_CALL
       
    62 _Sl_global<_Dummy>::__splice_after(_Slist_node_base* __pos,
       
    63 				   _Slist_node_base* __before_first,
       
    64 				   _Slist_node_base* __before_last)
       
    65 {
       
    66   if (__pos != __before_first && __pos != __before_last) {
       
    67     _Slist_node_base* __first = __before_first->_M_next;
       
    68     _Slist_node_base* __after = __pos->_M_next;
       
    69     __before_first->_M_next = __before_last->_M_next;
       
    70     __pos->_M_next = __first;
       
    71     __before_last->_M_next = __after;
       
    72   }
       
    73 }
       
    74 
       
    75 template <class _Dummy>
       
    76 _Slist_node_base* _STLP_CALL
       
    77 _Sl_global<_Dummy>::__reverse(_Slist_node_base* __node)
       
    78 {
       
    79   _Slist_node_base* __result = __node;
       
    80   __node = __node->_M_next;
       
    81   __result->_M_next = 0;
       
    82   while(__node) {
       
    83     _Slist_node_base* __next = __node->_M_next;
       
    84     __node->_M_next = __result;
       
    85     __result = __node;
       
    86     __node = __next;
       
    87   }
       
    88   return __result;
       
    89 }
       
    90 
       
    91 template <class _Dummy> 
       
    92 size_t _STLP_CALL
       
    93 _Sl_global<_Dummy>::size(_Slist_node_base* __node)
       
    94 {
       
    95   size_t __result = 0;
       
    96   for ( ; __node != 0; __node = __node->_M_next)
       
    97     ++__result;
       
    98   return __result;
       
    99 }
       
   100 
       
   101 #endif /* defined (__BUILDING_STLPORT) || ! defined (_STLP_OWN_IOSTREAMS) */
       
   102 
       
   103 _STLP_END_NAMESPACE
       
   104 
       
   105 #endif /*  _STLP_SLIST_BASE_C */
       
   106 
       
   107 // Local Variables:
       
   108 // mode:C++
       
   109 // End: