LTP GCOV extension - code coverage report
Current view: directory - src/cpp/prod/tool - SList.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 95
Code covered: 67.4 % Executed lines: 64

       1                 : //=============================================================================
       2                 : // File <$/src/cpp/prod/tool/SList.cpp>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //=============================================================================
      21                 : 
      22                 : #include <stdio.h>
      23                 : 
      24                 : #include "src/cpp/prod/tool/Assert.h"
      25                 : #include "src/cpp/prod/tool/SList.h"
      26                 : 
      27               0 : SListItem::SListItem()
      28               0 : : _next(NULL), _item(NULL)
      29                 : {
      30                 : }
      31                 : 
      32           46064 : SListItem::SListItem(void *anObj)
      33           46064 : : _next(NULL), _item(anObj)
      34                 : {
      35                 : }
      36                 : 
      37               0 : SListItem::~SListItem()
      38               0 : {}
      39                 : 
      40          174233 : SList::SList()
      41          174233 : : _head(NULL), _tail(NULL), _size(0)
      42                 : {
      43                 : }
      44                 : 
      45            4865 : SList::SList(void *anObj)
      46            4865 : : _head(NULL), _tail(NULL), _size(0)
      47                 : {
      48            4865 :    _head = new SListItem(anObj) ;
      49            4865 :    _tail = _head ;
      50            4865 :    _size = 1 ;
      51                 : }
      52                 : 
      53           23683 : SList::~SList()
      54                 : {
      55           23683 :    clear() ;
      56                 : }
      57                 : 
      58           13621 : int SList::size() const
      59                 : {
      60                 :    return _size ;
      61                 : }
      62                 : 
      63               3 : bool SList::isEmpty() const
      64                 : {
      65                 :    return ((_size==0) ? true : false) ;
      66                 : }
      67                 : 
      68                 : 
      69               0 : void SList::addHead(void *anObj)
      70                 : {
      71                 :    SListItem *newItem ;
      72                 : 
      73               0 :    newItem = new SListItem(anObj) ;
      74               0 :    newItem->_next = _head ;
      75                 : 
      76               0 :    if (_head == NULL)
      77                 :    {
      78               0 :       _tail = newItem ;
      79                 :    }
      80                 : 
      81               0 :    _head = newItem ;
      82               0 :    _size++ ;
      83                 : }
      84                 : 
      85               0 : void SList::appendAndClear(SList& aList)
      86                 : {
      87               0 :    if (aList._size == 0)
      88                 :    {
      89                 :       ASSERT(aList._head == NULL) ;
      90                 :       ASSERT(aList._tail == NULL) ;
      91               0 :       return ;
      92                 :    }
      93                 : 
      94                 :    ASSERT(aList._head != NULL) ;
      95                 :    ASSERT(aList._tail != NULL) ;
      96                 : 
      97               0 :    if (_size == 0)
      98                 :    {
      99                 :       ASSERT(_head == NULL) ;
     100                 :       ASSERT(_tail == NULL) ;
     101                 : 
     102               0 :       _head = aList._head ;
     103               0 :       _tail = aList._tail ;
     104               0 :       _size = aList._size ;
     105                 : 
     106               0 :       aList._head = NULL ;
     107               0 :       aList._tail = NULL ;
     108               0 :       aList._size = 0 ;
     109                 : 
     110               0 :       return ;
     111                 :    }
     112                 : 
     113                 :    SListItem *lastOne, *firstSecond ;
     114                 :    lastOne = _tail ;
     115                 :    firstSecond = aList._head ;
     116                 : 
     117               0 :    lastOne->_next = firstSecond ;
     118                 : 
     119               0 :    _tail = aList._tail ;
     120               0 :    _size += aList._size ;
     121                 : 
     122               0 :    aList._head = NULL ;
     123               0 :    aList._tail = NULL ;
     124               0 :    aList._size = 0 ;
     125                 : 
     126                 :    return ;
     127                 : }
     128                 : 
     129           41199 : void SList::addTail(void *anObj)
     130                 : {
     131                 :    SListItem *newItem ;
     132                 : 
     133           41199 :    newItem = new SListItem(anObj) ;
     134           41199 :    newItem->_next = NULL ;
     135                 : 
     136           41199 :    if (_tail == NULL)
     137                 :    {
     138           16331 :       _head = newItem ;
     139                 :    }
     140                 :    else
     141                 :    {
     142           24868 :       _tail->_next = newItem ;
     143                 :    }
     144                 : 
     145           41199 :    _tail = newItem ;
     146           41199 :    _size++ ;
     147                 : }
     148                 : 
     149            9356 : void *SList::head() const
     150                 : {
     151                 :    ASSERT(_head != NULL) ;
     152                 : 
     153                 :    return _head->_item ;
     154                 : }
     155                 : 
     156               0 : void *SList::tail() const
     157                 : {
     158                 :    ASSERT(_tail != NULL) ;
     159                 : 
     160                 :    return _tail->_item ;
     161                 : }
     162                 : 
     163            1498 : void* SList::removeHead()
     164                 : {
     165                 :    void *result = NULL ;
     166                 : 
     167            1498 :    if (_head != NULL)
     168                 :    {
     169                 :       SListItem *cursor = NULL ;
     170                 : 
     171                 :       cursor = _head ;
     172            1498 :       _head = _head->_next ;
     173            1498 :       if (_head == NULL)
     174                 :       {
     175            1498 :          _tail = NULL ;
     176                 :       }
     177                 : 
     178            1498 :       result = cursor->_item ;
     179            1498 :       delete cursor ;
     180            1498 :       _size-- ;
     181                 :    }
     182                 : 
     183                 :    return result ;
     184                 : }
     185                 : 
     186             476 : void SList::removeObject(void *anObj)
     187                 : {
     188                 :    SListItem *prev = NULL ;
     189                 :    SListItem *cursor = NULL ;
     190                 :    SListItem *next = NULL ;
     191                 : 
     192             476 :    cursor = _head ;
     193                 : 
     194           13714 :    while (cursor != NULL)
     195                 :    {
     196           13714 :       if (cursor->_item == anObj)
     197                 :       {
     198                 :          // Found (Equal by address !)
     199                 : 
     200             476 :          next = cursor->_next ;
     201                 : 
     202             476 :          if (prev == NULL)
     203                 :          {
     204             107 :             _head = next ;
     205                 :          }
     206                 :          else
     207                 :          {
     208             369 :             prev->_next = next ;
     209                 :          }
     210                 : 
     211             476 :          if (next == NULL)
     212                 :          {
     213               3 :             _tail = prev ;
     214                 :          }
     215                 : 
     216                 :          return ;
     217                 :       }
     218                 :       else
     219                 :       {
     220                 :          prev = cursor ;
     221           13238 :          cursor = cursor->_next ;
     222                 :       }
     223                 :    }
     224                 : }
     225                 : 
     226           46199 : void SList::clear()
     227                 : {
     228                 :    SListItem *cursor ;
     229                 : 
     230           85249 :    while (_head != NULL)
     231                 :    {
     232           39050 :       cursor = _head->_next ;
     233           39050 :       delete _head ;
     234           39050 :       _head = cursor ;
     235                 :    }
     236           46199 :    _size = 0 ;
     237           46199 :    _tail = NULL ;
     238                 : }
     239                 : 
     240              63 : SList& SList::operator=(const SList& L)
     241                 : {
     242              63 :    if (this != &L)
     243                 :    {
     244              63 :       clear() ;
     245                 : 
     246              63 :       SListIterator it(L) ;
     247                 : 
     248             195 :       while (it.GetNext())
     249                 :       {
     250              69 :          addTail(it.GetItem()) ;
     251               0 :       }
     252                 :    }
     253                 : 
     254                 :    return *this ;
     255                 : }
     256                 : 
     257                 : ////////////////////////////////////////////////////
     258                 : 
     259           63348 : SListIterator::SListIterator(const SList& aList)
     260           63348 : : _cursor(NULL), _process(aList._head)
     261                 : {
     262                 : }
     263                 : 
     264           63348 : SListIterator::~SListIterator()
     265               0 : {}
     266                 : 
     267          801758 : bool SListIterator::GetNext()
     268                 : {
     269          801758 :    if (_process == NULL)
     270                 :    {
     271           52454 :       _cursor = NULL ;
     272           52454 :       return false ;
     273                 :    }
     274                 : 
     275          749304 :    _cursor = _process ;
     276          749304 :    _process = _process->_next ;
     277                 :    return true ;
     278                 : }
     279                 : 
     280          749304 : void *SListIterator::GetItem() const
     281                 : {
     282                 :    ASSERT(_cursor != NULL) ;
     283                 : 
     284                 :    return _cursor->_item ;
     285                 : }
     286                 : 

Generated by: LTP GCOV extension version 1.4