KiCad PCB EDA Suite
DLIST< T > Class Template Reference

Class DLIST is the head of a doubly linked list. More...

#include <dlist.h>

Inheritance diagram for DLIST< T >:
DHEAD

Public Member Functions

 operator T * () const
 operator T* is a casting operator that returns GetFirst(), a T* More...
 
T * operator-> () const
 operator -> is a dereferencing operator that returns GetFirst(), a T* More...
 
T * GetFirst () const
 Function GetFirst returns the first T* in the list without removing it, or NULL if the list is empty. More...
 
T * GetLast () const
 Function GetLast returns the last T* in the list without removing it, or NULL if the list is empty. More...
 
void Append (T *aNewElement)
 Function Append adds aNewElement to the end of the list. More...
 
void Append (DLIST &aList)
 Function Append adds aList to the end of the list. More...
 
void Insert (T *aNewElement, T *aElementAfterMe)
 Function Insert puts aNewElement just in front of aElementAfterMe in the list sequence. More...
 
T * Remove (T *aElement)
 Function Remove removes aElement from the list, but does not delete it. More...
 
T * begin () const
 
T * end () const
 
T * PopFront ()
 
T * PopBack ()
 
void PushFront (T *aNewElement)
 Function PushFront puts aNewElement at front of list sequence. More...
 
void PushBack (T *aNewElement)
 Function PushBack puts aNewElement at the end of the list sequence. More...
 
void DeleteAll ()
 Function DeleteAll deletes all items on the list and leaves the list empty. More...
 
void SetOwnership (bool Iown)
 Function SetOwnership controls whether the list owns the objects and is responsible for deleteing their memory at time of this object's destruction. More...
 
unsigned GetCount () const
 Function GetCount returns the number of elements in the list. More...
 

Protected Member Functions

void append (EDA_ITEM *aNewElement)
 Function append adds aNewElement to the end of the list. More...
 
void append (DHEAD &aList)
 Function append adds aList to the end of the list. More...
 
void insert (EDA_ITEM *aNewElement, EDA_ITEM *aElementAfterMe)
 Function insert puts aNewElement just in front of aElementAfterMe in the list sequence. More...
 
void insert (EDA_ITEM *aNewElement)
 Function insert puts aNewElement in front of list sequence. More...
 
void remove (EDA_ITEM *aElement)
 Function remove removes aElement from the list, but does not delete it. More...
 

Protected Attributes

EDA_ITEMfirst
 first element in list, or NULL if list empty More...
 
EDA_ITEMlast
 last elment in list, or NULL if empty More...
 
unsigned count
 how many elements are in the list, automatically maintained. More...
 
bool meOwner
 I must delete the objects I hold in my destructor. More...
 

Detailed Description

template<class T>
class DLIST< T >

Class DLIST is the head of a doubly linked list.

It contains pointers to the first and last elements in a doubly linked list. The elements in the list must be of class T or derived from T, and T must be derived from EDA_ITEM.

See also
DHEAD for additional public functions.

Definition at line 142 of file dlist.h.

Member Function Documentation

void DHEAD::append ( EDA_ITEM aNewElement)
protectedinherited

Function append adds aNewElement to the end of the list.

Parameters
aNewElementThe element to insert.

Definition at line 59 of file dlist.cpp.

References DHEAD::count, DHEAD::first, DHEAD::last, EDA_ITEM::SetBack(), EDA_ITEM::SetList(), and EDA_ITEM::SetNext().

Referenced by DLIST< TRACK >::Append(), DHEAD::insert(), and DLIST< TRACK >::PushBack().

60 {
61  wxASSERT( aNewElement != NULL );
62 
63  if( first ) // list is not empty, first is not touched
64  {
65  wxASSERT( last != NULL );
66 
67  aNewElement->SetNext( 0 );
68  aNewElement->SetBack( last );
69 
70  last->SetNext( aNewElement );
71  last = aNewElement;
72  }
73  else // list is empty, first and last are changed
74  {
75  aNewElement->SetNext( 0 );
76  aNewElement->SetBack( 0 );
77 
78  first = aNewElement;
79  last = aNewElement;
80  }
81 
82  aNewElement->SetList( this );
83 
84  ++count;
85 }
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:212
void SetList(DHEAD *aList)
Definition: base_struct.h:214
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:211
EDA_ITEM * last
last elment in list, or NULL if empty
Definition: dlist.h:44
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
void DHEAD::append ( DHEAD aList)
protectedinherited

Function append adds aList to the end of the list.

Parameters
aListThe list to aList.

Definition at line 88 of file dlist.cpp.

References DHEAD::count, DHEAD::first, DHEAD::last, EDA_ITEM::Next(), EDA_ITEM::SetBack(), and EDA_ITEM::SetNext().

89 {
90  if( aList.first )
91  {
92  // Change the item's list to me.
93  for( EDA_ITEM* item = aList.first; item; item = item->Next() )
94  item->SetList( this );
95 
96  if( first ) // this list is not empty, set last item's next to the first item in aList
97  {
98  wxCHECK_RET( last != NULL, wxT( "Last list element not set." ) );
99 
100  last->SetNext( aList.first );
101  aList.first->SetBack( last );
102  last = aList.last;
103  }
104  else // this list is empty, first and last are same as aList
105  {
106  first = aList.first;
107  last = aList.last;
108  }
109 
110  count += aList.count;
111 
112  aList.count = 0;
113  aList.first = NULL;
114  aList.last = NULL;
115  }
116 }
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:212
EDA_ITEM * Next() const
Definition: base_struct.h:206
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:211
EDA_ITEM * last
last elment in list, or NULL if empty
Definition: dlist.h:44
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:151
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
template<class T>
void DLIST< T >::Append ( T *  aNewElement)
inline

Function Append adds aNewElement to the end of the list.

Parameters
aNewElementThe element to insert.

Definition at line 177 of file dlist.h.

Referenced by PCAD2KICAD::PCB_PAD::AddToBoard(), PCAD2KICAD::PCB_LINE::AddToBoard(), SCH_SCREEN::Append(), GERBER_FILE_IMAGE::Execute_DCODE_Command(), EXCELLON_IMAGE::Execute_Drill_Command(), SCH_SCREEN::ExtractWires(), SCH_SCREEN::ReplaceWires(), and GERBER_FILE_IMAGE::StepAndRepeatItem().

178  {
179  append( aNewElement );
180  }
void append(EDA_ITEM *aNewElement)
Function append adds aNewElement to the end of the list.
Definition: dlist.cpp:59
template<class T>
void DLIST< T >::Append ( DLIST< T > &  aList)
inline

Function Append adds aList to the end of the list.

Parameters
aListThe list to append to the end of the list.

Definition at line 187 of file dlist.h.

188  {
189  append( aList );
190  }
void append(EDA_ITEM *aNewElement)
Function append adds aNewElement to the end of the list.
Definition: dlist.cpp:59
void DHEAD::DeleteAll ( )
inherited

Function DeleteAll deletes all items on the list and leaves the list empty.

The destructor for each item is called.

Definition at line 41 of file dlist.cpp.

References DHEAD::count, DHEAD::first, DHEAD::last, next(), and EDA_ITEM::Next().

Referenced by Abort_Create_Track(), AbortCreateNewLine(), FOOTPRINT_VIEWER_FRAME::ClickOnFootprintList(), PCB_EDIT_FRAME::Fill_All_Zones(), SCH_SCREEN::FreeDrawList(), DSN::SPECCTRA_DB::FromSESSION(), DISPLAY_FOOTPRINTS_FRAME::InitDisplay(), MODULE::operator=(), PCB_EDIT_FRAME::Process_Special_Functions(), FOOTPRINT_WIZARD_FRAME::ReloadFootprint(), FOOTPRINT_VIEWER_FRAME::SelectAndViewFootprint(), DHEAD::~DHEAD(), and GERBER_FILE_IMAGE::~GERBER_FILE_IMAGE().

42 {
43  EDA_ITEM* next;
44  EDA_ITEM* item = first;
45 
46  while( item )
47  {
48  next = item->Next();
49  delete item; // virtual destructor, class specific
50  item = next;
51  }
52 
53  first = 0;
54  last = 0;
55  count = 0;
56 }
CITER next(CITER it)
Definition: ptree.cpp:130
EDA_ITEM * Next() const
Definition: base_struct.h:206
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
EDA_ITEM * last
last elment in list, or NULL if empty
Definition: dlist.h:44
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:151
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
template<class T>
T* DLIST< T >::end ( ) const
inline

Definition at line 219 of file dlist.h.

219 { return NULL; }
template<class T>
T* DLIST< T >::GetFirst ( ) const
inline
template<class T>
T* DLIST< T >::GetLast ( ) const
inline

Function GetLast returns the last T* in the list without removing it, or NULL if the list is empty.

Definition at line 170 of file dlist.h.

Referenced by PCBNEW_CONTROL::AppendBoard(), PCB_EDIT_FRAME::AppendBoardFile(), DIALOG_EXCHANGE_MODULE::changeAllFootprints(), DIALOG_EXCHANGE_MODULE::changeSameFootprints(), DrawSegment(), SCH_EDIT_FRAME::EndSegment(), GERBER_FILE_IMAGE::Execute_DCODE_Command(), GERBER_FILE_IMAGE::Execute_G_Command(), and DLIST< TRACK >::PopBack().

170 { return (T*) last; }
T
enum T contains all this lexer's tokens.
EDA_ITEM * last
last elment in list, or NULL if empty
Definition: dlist.h:44
void DHEAD::insert ( EDA_ITEM aNewElement,
EDA_ITEM aElementAfterMe 
)
protectedinherited

Function insert puts aNewElement just in front of aElementAfterMe in the list sequence.

If aElementAfterMe is NULL, then simply append().

Parameters
aNewElementThe element to insert.
aElementAfterMeThe element to insert aNewElement before, if NULL then append aNewElement onto end of list.

Definition at line 119 of file dlist.cpp.

References DHEAD::append(), EDA_ITEM::Back(), DHEAD::count, DHEAD::first, EDA_ITEM::GetList(), DHEAD::last, EDA_ITEM::SetBack(), EDA_ITEM::SetList(), and EDA_ITEM::SetNext().

Referenced by DHEAD::insert(), DLIST< TRACK >::Insert(), and DLIST< TRACK >::PushFront().

120 {
121  wxASSERT( aNewElement != NULL );
122 
123  if( !aAfterMe )
124  append( aNewElement );
125  else
126  {
127  wxASSERT( aAfterMe->GetList() == this );
128 
129  // the list cannot be empty if aAfterMe is supposedly on the list
130  wxASSERT( first && last );
131 
132  if( first == aAfterMe )
133  {
134  aAfterMe->SetBack( aNewElement );
135 
136  aNewElement->SetBack( 0 ); // first in list does not point back
137  aNewElement->SetNext( aAfterMe );
138 
139  first = aNewElement;
140  }
141  else
142  {
143  EDA_ITEM* oldBack = aAfterMe->Back();
144 
145  aAfterMe->SetBack( aNewElement );
146 
147  aNewElement->SetBack( oldBack );
148  aNewElement->SetNext( aAfterMe );
149 
150  oldBack->SetNext( aNewElement );
151  }
152 
153  aNewElement->SetList( this );
154 
155  ++count;
156  }
157 }
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:212
EDA_ITEM * Back() const
Definition: base_struct.h:207
void SetList(DHEAD *aList)
Definition: base_struct.h:214
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:211
EDA_ITEM * last
last elment in list, or NULL if empty
Definition: dlist.h:44
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:151
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
void append(EDA_ITEM *aNewElement)
Function append adds aNewElement to the end of the list.
Definition: dlist.cpp:59
void DHEAD::insert ( EDA_ITEM aNewElement)
inlineprotectedinherited

Function insert puts aNewElement in front of list sequence.

Parameters
aNewElementThe element to insert.

Definition at line 92 of file dlist.h.

References DHEAD::insert().

93  {
94  insert( aNewElement, first );
95  }
void insert(EDA_ITEM *aNewElement, EDA_ITEM *aElementAfterMe)
Function insert puts aNewElement just in front of aElementAfterMe in the list sequence.
Definition: dlist.cpp:119
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
template<class T>
void DLIST< T >::Insert ( T *  aNewElement,
T *  aElementAfterMe 
)
inline

Function Insert puts aNewElement just in front of aElementAfterMe in the list sequence.

If aElementAfterMe is NULL, then simply Append()

Parameters
aNewElementThe element to insert.
aElementAfterMeThe element to insert aNewElement before, if NULL then append aNewElement onto end of list.

Definition at line 200 of file dlist.h.

Referenced by BOARD::Add(), PCB_EDIT_FRAME::Add45DegreeSegment(), AddNewTrace(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), SCH_SCREEN::BreakSegment(), MWAVE::CreateMicrowaveInductor(), PCB_EDIT_FRAME::End_Route(), SCH_SCREEN::ExtractWires(), and EAGLE_PLUGIN::loadSignals().

201  {
202  insert( aNewElement, aElementAfterMe );
203  }
void insert(EDA_ITEM *aNewElement, EDA_ITEM *aElementAfterMe)
Function insert puts aNewElement just in front of aElementAfterMe in the list sequence.
Definition: dlist.cpp:119
template<class T>
DLIST< T >::operator T * ( ) const
inline

operator T* is a casting operator that returns GetFirst(), a T*

Definition at line 150 of file dlist.h.

150 { return GetFirst(); }
T * GetFirst() const
Function GetFirst returns the first T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:163
template<class T>
T* DLIST< T >::operator-> ( ) const
inline

operator -> is a dereferencing operator that returns GetFirst(), a T*

Definition at line 156 of file dlist.h.

156 { return GetFirst(); }
T * GetFirst() const
Function GetFirst returns the first T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:163
template<class T>
T* DLIST< T >::PopBack ( )
inline

Definition at line 228 of file dlist.h.

Referenced by PCB_EDIT_FRAME::Delete_Segment(), and OrCell_Trace().

229  {
230  if( GetLast() )
231  return Remove( GetLast() );
232  return NULL;
233  }
T * Remove(T *aElement)
Function Remove removes aElement from the list, but does not delete it.
Definition: dlist.h:211
T * GetLast() const
Function GetLast returns the last T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:170
template<class T>
T* DLIST< T >::PopFront ( )
inline

Definition at line 221 of file dlist.h.

Referenced by AddNewTrace(), PCB_EDIT_FRAME::End_Route(), SCH_EDIT_FRAME::EndSegment(), SCH_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_FRAME::PutDataInPreviousState(), and RebuildTrackChain().

222  {
223  if( GetFirst() )
224  return Remove( GetFirst() );
225  return NULL;
226  }
T * Remove(T *aElement)
Function Remove removes aElement from the list, but does not delete it.
Definition: dlist.h:211
T * GetFirst() const
Function GetFirst returns the first T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:163
template<class T>
void DLIST< T >::PushFront ( T *  aNewElement)
inline

Function PushFront puts aNewElement at front of list sequence.

Parameters
aNewElementThe element to insert at the front of the list.

Definition at line 240 of file dlist.h.

Referenced by MODULE::Add(), BOARD::Add(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), CopyMarkedItems(), PCB_EDIT_FRAME::Create_MuWaveComponent(), PCB_EDIT_FRAME::Create_MuWavePolygonShape(), MWAVE::CreateMicrowaveInductor(), PCB_EDIT_FRAME::CreateMuWaveBaseFootprint(), and FOOTPRINT_EDIT_FRAME::CreateTextModule().

241  {
242  insert( aNewElement );
243  }
void insert(EDA_ITEM *aNewElement, EDA_ITEM *aElementAfterMe)
Function insert puts aNewElement just in front of aElementAfterMe in the list sequence.
Definition: dlist.cpp:119
void DHEAD::remove ( EDA_ITEM aElement)
protectedinherited

Function remove removes aElement from the list, but does not delete it.

Parameters
aElementThe element to remove.

Definition at line 160 of file dlist.cpp.

References EDA_ITEM::Back(), DHEAD::count, DHEAD::first, EDA_ITEM::GetList(), DHEAD::last, EDA_ITEM::Next(), EDA_ITEM::SetBack(), EDA_ITEM::SetList(), and EDA_ITEM::SetNext().

161 {
162  wxASSERT( aElement );
163  wxASSERT( aElement->GetList() == this );
164 
165  if( aElement->Next() )
166  {
167  aElement->Next()->SetBack( aElement->Back() );
168  }
169  else // element being removed is last
170  {
171  wxASSERT( last == aElement );
172  last = aElement->Back();
173  }
174 
175  if( aElement->Back() )
176  {
177  aElement->Back()->SetNext( aElement->Next() );
178  }
179  else // element being removed is first
180  {
181  wxASSERT( first == aElement );
182  first = aElement->Next();
183  }
184 
185  aElement->SetBack( 0 );
186  aElement->SetNext( 0 );
187  aElement->SetList( 0 );
188 
189  --count;
190 }
DHEAD * GetList() const
Definition: base_struct.h:209
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:212
EDA_ITEM * Back() const
Definition: base_struct.h:207
void SetList(DHEAD *aList)
Definition: base_struct.h:214
EDA_ITEM * Next() const
Definition: base_struct.h:206
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:211
EDA_ITEM * last
last elment in list, or NULL if empty
Definition: dlist.h:44
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
template<class T>
T* DLIST< T >::Remove ( T *  aElement)
inline

Function Remove removes aElement from the list, but does not delete it.

Parameters
aElementThe element to remove from the list.
Returns
T* - the removed element, so you can easily delete it upon return.

Definition at line 211 of file dlist.h.

Referenced by PCB_EDIT_FRAME::Delete_Module(), PCB_EDIT_FRAME::Delete_net(), SCH_SCREEN::DeleteItem(), DeleteNullTrackSegments(), SCH_EDIT_FRAME::EndSegment(), SCH_SCREEN::ExtractWires(), DLIST< TRACK >::PopBack(), DLIST< TRACK >::PopFront(), MODULE::Remove(), SCH_SCREEN::Remove(), BOARD::Remove(), PCB_EDIT_FRAME::Remove_One_Track(), and RemoveBacktracks().

212  {
213  remove( aElement );
214  return aElement;
215  }
void DHEAD::SetOwnership ( bool  Iown)
inlineinherited

Function SetOwnership controls whether the list owns the objects and is responsible for deleteing their memory at time of this object's destruction.

Definition at line 119 of file dlist.h.

Referenced by SCH_EDIT_FRAME::Process_Special_Functions(), and SCH_EDIT_FRAME::PutDataInPreviousState().

119 { meOwner = Iown; }
bool meOwner
I must delete the objects I hold in my destructor.
Definition: dlist.h:46

Member Data Documentation

unsigned DHEAD::count
protectedinherited

how many elements are in the list, automatically maintained.

Definition at line 45 of file dlist.h.

Referenced by DHEAD::append(), DHEAD::DeleteAll(), DHEAD::GetCount(), DHEAD::insert(), and DHEAD::remove().

EDA_ITEM* DHEAD::first
protectedinherited

first element in list, or NULL if list empty

Definition at line 43 of file dlist.h.

Referenced by DHEAD::append(), DHEAD::DeleteAll(), DLIST< TRACK >::GetFirst(), DHEAD::insert(), and DHEAD::remove().

EDA_ITEM* DHEAD::last
protectedinherited

last elment in list, or NULL if empty

Definition at line 44 of file dlist.h.

Referenced by DHEAD::append(), DHEAD::DeleteAll(), DLIST< TRACK >::GetLast(), DHEAD::insert(), and DHEAD::remove().

bool DHEAD::meOwner
protectedinherited

I must delete the objects I hold in my destructor.

Definition at line 46 of file dlist.h.

Referenced by DHEAD::~DHEAD().


The documentation for this class was generated from the following file: