(file) Return to List.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/List.cpp between version 1.1.2.6 and 1.3

version 1.1.2.6, 2006/06/30 20:07:50 version 1.3, 2006/11/10 18:14:58
Line 29 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Mike Brasher (m.brasher@inovadevelopment.com)  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "List.h" #include "List.h"
 #include "PegasusAssert.h" #include "PegasusAssert.h"
  
 #ifdef PEGASUS_LINKABLE_SANITY  
 # define PEGASUS_LIST_ASSERT(COND) PEGASUS_ASSERT(COND)  
 #else  
 # define PEGASUS_LIST_ASSERT(COND) /* empty */  
 #endif  
   
 #define PEGASUS_LIST_MAGIC 0x6456FD0A  
   
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 ListRep::ListRep(void (*destructor)(Linkable*)) :  ListRep::ListRep(void (*destructor)(Linkable*))
     _magic(PEGASUS_LIST_MAGIC), _front(0), _back(0), _size(0)      : _front(0), _back(0), _size(0)
 { {
     if (destructor)     if (destructor)
         _destructor = destructor;         _destructor = destructor;
Line 57 
Line 47 
  
 ListRep::~ListRep() ListRep::~ListRep()
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
  
     clear();     clear();
 #ifdef PEGASUS_LINKABLE_SANITY  #ifdef PEGASUS_DEBUG
     memset(this, 0xDD, sizeof(ListRep));     memset(this, 0xDD, sizeof(ListRep));
 #endif #endif
 } }
  
 void ListRep::clear() void ListRep::clear()
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
  
     if (_destructor)     if (_destructor)
     {     {
Line 84 
Line 74 
  
         for (Linkable* p = front; p; )         for (Linkable* p = front; p; )
         {         {
             PEGASUS_LIST_ASSERT(p->magic == PEGASUS_LINKABLE_MAGIC);              PEGASUS_DEBUG_ASSERT(p->magic);
             Linkable* next = p->next;             Linkable* next = p->next;
             p->list = 0;             p->list = 0;
             _destructor(p);             _destructor(p);
Line 95 
Line 85 
  
 void ListRep::insert_front(Linkable* elem) void ListRep::insert_front(Linkable* elem)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(elem != 0);      PEGASUS_DEBUG_ASSERT(elem != 0);
     PEGASUS_LIST_ASSERT(elem->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(elem->magic);
     PEGASUS_LIST_ASSERT(elem->list == 0);      PEGASUS_DEBUG_ASSERT(elem->list == 0);
  
     elem->list = this;     elem->list = this;
     elem->next = _front;     elem->next = _front;
Line 115 
Line 105 
  
 void ListRep::insert_back(Linkable* elem) void ListRep::insert_back(Linkable* elem)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(elem != 0);      PEGASUS_DEBUG_ASSERT(elem != 0);
     PEGASUS_LIST_ASSERT(elem->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(elem->magic);
     PEGASUS_LIST_ASSERT(elem->list == 0);      PEGASUS_DEBUG_ASSERT(elem->list == 0);
  
     elem->list = this;     elem->list = this;
     elem->prev = _back;     elem->prev = _back;
Line 137 
Line 127 
     Linkable* pos,     Linkable* pos,
     Linkable* elem)     Linkable* elem)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(pos != 0);      PEGASUS_DEBUG_ASSERT(pos != 0);
     PEGASUS_LIST_ASSERT(elem != 0);      PEGASUS_DEBUG_ASSERT(elem != 0);
     PEGASUS_LIST_ASSERT(elem->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(elem->magic);
     PEGASUS_LIST_ASSERT(pos->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(pos->magic);
     PEGASUS_LIST_ASSERT(elem->list == 0);      PEGASUS_DEBUG_ASSERT(elem->list == 0);
  
     elem->list = this;     elem->list = this;
     elem->prev = pos;     elem->prev = pos;
Line 163 
Line 153 
     Linkable* pos,     Linkable* pos,
     Linkable* elem)     Linkable* elem)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(pos != 0);      PEGASUS_DEBUG_ASSERT(pos != 0);
     PEGASUS_LIST_ASSERT(elem != 0);      PEGASUS_DEBUG_ASSERT(elem != 0);
     PEGASUS_LIST_ASSERT(pos->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(pos->magic);
     PEGASUS_LIST_ASSERT(elem->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(elem->magic);
     PEGASUS_LIST_ASSERT(elem->list == 0);      PEGASUS_DEBUG_ASSERT(elem->list == 0);
  
     elem->list = this;     elem->list = this;
     elem->next = pos;     elem->next = pos;
Line 187 
Line 177 
  
 void ListRep::remove(Linkable* pos) void ListRep::remove(Linkable* pos)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(pos != 0);      PEGASUS_DEBUG_ASSERT(pos != 0);
     PEGASUS_LIST_ASSERT(pos->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(pos->magic);
     PEGASUS_LIST_ASSERT(pos->list == this);      PEGASUS_DEBUG_ASSERT(pos->list == this);
     PEGASUS_LIST_ASSERT(_size != 0);      PEGASUS_DEBUG_ASSERT(_size != 0);
  
     if (_size == 0)     if (_size == 0)
         return;         return;
Line 215 
Line 205 
  
 bool ListRep::contains(const Linkable* elem) bool ListRep::contains(const Linkable* elem)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(elem != 0);      PEGASUS_DEBUG_ASSERT(elem != 0);
     PEGASUS_LIST_ASSERT(elem->magic == PEGASUS_LINKABLE_MAGIC);      PEGASUS_DEBUG_ASSERT(elem->magic);
  
     for (const Linkable* p = _front; p; p = p->next)     for (const Linkable* p = _front; p; p = p->next)
     {     {
Line 231 
Line 221 
  
 Linkable* ListRep::remove_front() Linkable* ListRep::remove_front()
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
  
     if (_size == 0)     if (_size == 0)
         return 0;         return 0;
Line 244 
Line 234 
  
 Linkable* ListRep::remove_back() Linkable* ListRep::remove_back()
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(_size > 0);      PEGASUS_DEBUG_ASSERT(_size > 0);
  
     Linkable* elem = _back;     Linkable* elem = _back;
     remove(elem);     remove(elem);
Line 255 
Line 245 
  
 Linkable* ListRep::find(ListRep::Equal equal, const void* client_data) Linkable* ListRep::find(ListRep::Equal equal, const void* client_data)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(equal != 0);      PEGASUS_DEBUG_ASSERT(equal != 0);
  
     for (Linkable* p = _front; p; p = p->next)     for (Linkable* p = _front; p; p = p->next)
     {     {
         if ((*equal)(p, client_data))         if ((*equal)(p, client_data))
         {         {
             PEGASUS_LIST_ASSERT(p->magic == PEGASUS_LINKABLE_MAGIC);              PEGASUS_DEBUG_ASSERT(p->magic);
             return p;             return p;
         }         }
     }     }
Line 273 
Line 263 
  
 Linkable* ListRep::remove(ListRep::Equal equal, const void* client_data) Linkable* ListRep::remove(ListRep::Equal equal, const void* client_data)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(equal != 0);      PEGASUS_DEBUG_ASSERT(equal != 0);
  
     Linkable* p = find(equal, client_data);     Linkable* p = find(equal, client_data);
  
     if (p)     if (p)
     {     {
         PEGASUS_LIST_ASSERT(p->magic == PEGASUS_LINKABLE_MAGIC);          PEGASUS_DEBUG_ASSERT(p->magic);
         remove(p);         remove(p);
     }     }
  
Line 289 
Line 279 
  
 void ListRep::apply(ListRep::Apply apply, const void* client_data) void ListRep::apply(ListRep::Apply apply, const void* client_data)
 { {
     PEGASUS_LIST_ASSERT(_magic == PEGASUS_LIST_MAGIC);      PEGASUS_DEBUG_ASSERT(_magic);
     PEGASUS_LIST_ASSERT(apply != 0);      PEGASUS_DEBUG_ASSERT(apply != 0);
  
     for (Linkable* p = _front; p; p = p->next)     for (Linkable* p = _front; p; p = p->next)
         (*apply)(p, client_data);         (*apply)(p, client_data);


Legend:
Removed from v.1.1.2.6  
changed lines
  Added in v.1.3

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2