KiCad PCB EDA Suite
DHEAD Class Reference

Class DHEAD is only for use by template class DLIST, use that instead. More...

#include <dlist.h>

Inheritance diagram for DHEAD:
DLIST< T > DLIST< BOARD_ITEM > DLIST< D_PAD > DLIST< GERBER_DRAW_ITEM > DLIST< MODULE > DLIST< SCH_ITEM > DLIST< SEGZONE > DLIST< TRACK >

Public Member Functions

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

 DHEAD ()
 Constructor DHEAD is protected so that a DHEAD can only be instantiated from within a DLIST template. More...
 
 ~DHEAD ()
 
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

Class DHEAD is only for use by template class DLIST, use that instead.

Definition at line 40 of file dlist.h.

Constructor & Destructor Documentation

DHEAD::DHEAD ( )
inlineprotected

Constructor DHEAD is protected so that a DHEAD can only be instantiated from within a DLIST template.

Definition at line 53 of file dlist.h.

References append(), insert(), and ~DHEAD().

53  :
54  first(0),
55  last(0),
56  count(0),
57  meOwner(true)
58  {
59  }
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
bool meOwner
I must delete the objects I hold in my destructor.
Definition: dlist.h:46
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
DHEAD::~DHEAD ( )
protected

Definition at line 37 of file dlist.cpp.

References DeleteAll(), and meOwner.

Referenced by DHEAD().

38 {
39  if( meOwner )
40  DeleteAll();
41 }
void DeleteAll()
Function DeleteAll deletes all items on the list and leaves the list empty.
Definition: dlist.cpp:44
bool meOwner
I must delete the objects I hold in my destructor.
Definition: dlist.h:46

Member Function Documentation

void DHEAD::append ( EDA_ITEM aNewElement)
protected

Function append adds aNewElement to the end of the list.

Parameters
aNewElementThe element to insert.

Definition at line 63 of file dlist.cpp.

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

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

64 {
65  wxCHECK( aNewElement, /*void*/ );
66 
67  if( first ) // list is not empty, first is not touched
68  {
69  wxASSERT( count > 0 );
70  wxCHECK( last, /*void*/ ); // 'first' is non-null, so 'last' should be non-null too
71 
72  aNewElement->SetNext( 0 );
73  aNewElement->SetBack( last );
74 
75  wxASSERT( !last->Next() ); // the last element should point to nullptr
76  last->SetNext( aNewElement );
77  last = aNewElement;
78  }
79  else // list is empty, first and last are changed
80  {
81  wxASSERT( count == 0 );
82  wxASSERT( !last ); // 'first' is null, then 'last' should be too
83  aNewElement->SetNext( 0 );
84  aNewElement->SetBack( 0 );
85 
86  first = aNewElement;
87  last = aNewElement;
88  }
89 
90  CHECK_OWNERSHIP( aNewElement );
91  aNewElement->SetList( this );
92 
93  ++count;
94 }
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:215
void SetList(DHEAD *aList)
Definition: base_struct.h:217
EDA_ITEM * Next() const
Definition: base_struct.h:209
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:214
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
#define CHECK_OWNERSHIP(a)
Definition: dlist.cpp:32
void DHEAD::append ( DHEAD aList)
protected

Function append adds aList to the end of the list.

Parameters
aListThe list to aList.

Definition at line 97 of file dlist.cpp.

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

98 {
99  if( aList.first )
100  {
101  // Change the item's list to me.
102  for( EDA_ITEM* item = aList.first; item; item = item->Next() )
103  {
104  wxASSERT( item->GetList() == &aList );
105  item->SetList( this );
106  }
107 
108  if( first ) // this list is not empty, set last item's next to the first item in aList
109  {
110  wxCHECK_RET( last != NULL, wxT( "Last list element not set." ) );
111 
112  last->SetNext( aList.first );
113  aList.first->SetBack( last );
114  last = aList.last;
115  }
116  else // this list is empty, first and last are same as aList
117  {
118  first = aList.first;
119  last = aList.last;
120  }
121 
122  count += aList.count;
123 
124  aList.count = 0;
125  aList.first = NULL;
126  aList.last = NULL;
127  }
128 }
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:215
EDA_ITEM * Next() const
Definition: base_struct.h:209
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:214
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:154
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
void DHEAD::DeleteAll ( )

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

The destructor for each item is called.

Definition at line 44 of file dlist.cpp.

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

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

45 {
46  wxCHECK( meOwner, /*void*/ ); // only owning lists may delete the contents
47  EDA_ITEM* next;
48  EDA_ITEM* item = first;
49 
50  while( item )
51  {
52  next = item->Next();
53  delete item; // virtual destructor, class specific
54  item = next;
55  }
56 
57  first = 0;
58  last = 0;
59  count = 0;
60 }
CITER next(CITER it)
Definition: ptree.cpp:130
EDA_ITEM * Next() const
Definition: base_struct.h:209
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
bool meOwner
I must delete the objects I hold in my destructor.
Definition: dlist.h:46
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:154
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
void DHEAD::insert ( EDA_ITEM aNewElement,
EDA_ITEM aElementAfterMe 
)
protected

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 131 of file dlist.cpp.

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

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

132 {
133  wxCHECK( aNewElement, /*void*/ );
134 
135  if( !aAfterMe )
136  append( aNewElement );
137  else
138  {
139  wxCHECK( aAfterMe->GetList() == this, /*void*/ );
140 
141  // the list cannot be empty if aAfterMe is supposedly on the list
142  wxASSERT( first && last && count > 0 );
143 
144  if( first == aAfterMe )
145  {
146  aAfterMe->SetBack( aNewElement );
147 
148  aNewElement->SetBack( 0 ); // first in list does not point back
149  aNewElement->SetNext( aAfterMe );
150 
151  first = aNewElement;
152  }
153  else
154  {
155  EDA_ITEM* oldBack = aAfterMe->Back();
156 
157  aAfterMe->SetBack( aNewElement );
158 
159  aNewElement->SetBack( oldBack );
160  aNewElement->SetNext( aAfterMe );
161 
162  oldBack->SetNext( aNewElement );
163  }
164 
165  CHECK_OWNERSHIP( aNewElement );
166  aNewElement->SetList( this );
167 
168  ++count;
169  }
170 }
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:215
EDA_ITEM * Back() const
Definition: base_struct.h:210
void SetList(DHEAD *aList)
Definition: base_struct.h:217
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:214
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:154
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:63
#define CHECK_OWNERSHIP(a)
Definition: dlist.cpp:32
void DHEAD::insert ( EDA_ITEM aNewElement)
inlineprotected

Function insert puts aNewElement in front of list sequence.

Parameters
aNewElementThe element to insert.

Definition at line 92 of file dlist.h.

References DeleteAll(), and 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:131
EDA_ITEM * first
first element in list, or NULL if list empty
Definition: dlist.h:43
void DHEAD::remove ( EDA_ITEM aElement)
protected

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

Parameters
aElementThe element to remove.

Definition at line 173 of file dlist.cpp.

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

174 {
175  wxCHECK( aElement && aElement->GetList() == this, /*void*/ );
176 
177  if( aElement->Next() )
178  {
179  aElement->Next()->SetBack( aElement->Back() );
180  }
181  else // element being removed is last
182  {
183  wxASSERT( last == aElement );
184  last = aElement->Back();
185  }
186 
187  if( aElement->Back() )
188  {
189  aElement->Back()->SetNext( aElement->Next() );
190  }
191  else // element being removed is first
192  {
193  wxASSERT( first == aElement );
194  first = aElement->Next();
195  }
196 
197  aElement->SetBack( 0 );
198  aElement->SetNext( 0 );
199  aElement->SetList( 0 );
200 
201  --count;
202  wxASSERT( ( first && last ) || count == 0 );
203 }
DHEAD * GetList() const
Definition: base_struct.h:212
void SetBack(EDA_ITEM *aBack)
Definition: base_struct.h:215
EDA_ITEM * Back() const
Definition: base_struct.h:210
void SetList(DHEAD *aList)
Definition: base_struct.h:217
EDA_ITEM * Next() const
Definition: base_struct.h:209
unsigned count
how many elements are in the list, automatically maintained.
Definition: dlist.h:45
void SetNext(EDA_ITEM *aNext)
Definition: base_struct.h:214
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::SetOwnership ( bool  Iown)
inline

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_SCREEN::Append().

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
protected

how many elements are in the list, automatically maintained.

Definition at line 45 of file dlist.h.

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

EDA_ITEM* DHEAD::first
protected

first element in list, or NULL if list empty

Definition at line 43 of file dlist.h.

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

EDA_ITEM* DHEAD::last
protected

last elment in list, or NULL if empty

Definition at line 44 of file dlist.h.

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

bool DHEAD::meOwner
protected

I must delete the objects I hold in my destructor.

Definition at line 46 of file dlist.h.

Referenced by DeleteAll(), and ~DHEAD().


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