diff --git a/common/dlist.cpp b/common/dlist.cpp index 976ff414d9..43b8ce779b 100644 --- a/common/dlist.cpp +++ b/common/dlist.cpp @@ -135,7 +135,7 @@ void DHEAD::remove( EDA_BaseStruct* aElement ) { aElement->Next()->SetBack( aElement->Back() ); } - else + else // element being removed is last { wxASSERT( last == aElement ); last = aElement->Back(); @@ -143,9 +143,9 @@ void DHEAD::remove( EDA_BaseStruct* aElement ) if( aElement->Back() ) { - aElement->Back()->SetNext( aElement->Back() ); + aElement->Back()->SetNext( aElement->Next() ); } - else + else // element being removed is first { wxASSERT( first == aElement ); first = aElement->Next(); @@ -156,5 +156,42 @@ void DHEAD::remove( EDA_BaseStruct* aElement ) aElement->SetList( 0 ); --count; + + D( VerifyListIntegrity(); ); } +#if defined(DEBUG) + +void DHEAD::VerifyListIntegrity() +{ + EDA_BaseStruct* item; + unsigned i = 0; + + for( item = first; item && iNext() ) + { + if( i < count-1 ) + { + wxASSERT( item->Next() ); + } + + wxASSERT( item->GetList() == this ); + } + + wxASSERT( item == NULL ); + wxASSERT( i == count ); + + i = 0; + for( item = last; item && iBack() ) + { + if( i < count-1 ) + { + wxASSERT( item->Back() ); + } + } + + wxASSERT( item == NULL ); + wxASSERT( i == count ); +} + +#endif + diff --git a/include/dlist.h b/include/dlist.h index f9879b9ed1..c17017639d 100644 --- a/include/dlist.h +++ b/include/dlist.h @@ -108,6 +108,10 @@ public: * returns the number of elements in the list. */ unsigned GetCount() { return count; } + +#if defined(DEBUG) + void VerifyListIntegrity(); +#endif }; @@ -179,7 +183,6 @@ public: return aElement; } - //-----< STL like functions >--------------------------------------- T* begin() const { return GetFirst(); } T* end() const { return NULL; }