MxList DeleteAll and Empty functions

This commit is contained in:
disinvite 2024-08-11 15:55:13 -04:00
parent c4b2d604a4
commit 7cede53648
2 changed files with 25 additions and 22 deletions

View File

@ -45,17 +45,14 @@ class MxListEntry {
template <class T> template <class T>
class MxList : protected MxCollection<T> { class MxList : protected MxCollection<T> {
public: public:
MxList() MxList() { m_first = m_last = NULL; }
{
m_last = NULL;
m_first = NULL;
}
~MxList() override; ~MxList() override;
void Append(T p_obj) { InsertEntry(p_obj, this->m_last, NULL); } void Append(T p_obj) { InsertEntry(p_obj, this->m_last, NULL); }
void Prepend(T p_obj) { InsertEntry(p_obj, NULL, this->m_first); } void Prepend(T p_obj) { InsertEntry(p_obj, NULL, this->m_first); }
void DeleteAll(MxBool p_destroy = TRUE); void DeleteAll();
void Empty();
MxU32 GetCount() { return this->m_count; } MxU32 GetCount() { return this->m_count; }
friend class MxListCursor<T>; friend class MxListCursor<T>;
@ -136,27 +133,33 @@ MxList<T>::~MxList()
DeleteAll(); DeleteAll();
} }
// Delete entries and values
template <class T> template <class T>
inline void MxList<T>::DeleteAll(MxBool p_destroy) inline void MxList<T>::DeleteAll()
{ {
for (MxListEntry<T>* t = m_first;;) { MxListEntry<T>* next;
if (!t) { for (MxListEntry<T>* t = m_first; t; t = next) {
break; next = t->GetNext();
} this->m_customDestructor(t->GetValue());
MxListEntry<T>* next = t->GetNext();
if (p_destroy) {
this->m_customDestructor(t->GetValue());
}
delete t; delete t;
t = next;
} }
this->m_count = 0; this->m_count = 0;
m_last = NULL; m_first = m_last = NULL;
m_first = NULL; }
// Delete entries only
template <class T>
inline void MxList<T>::Empty()
{
MxListEntry<T>* next;
for (MxListEntry<T>* t = m_first; t; t = next) {
next = t->GetNext();
delete t;
}
this->m_count = 0;
m_first = m_last = NULL;
} }
template <class T> template <class T>

View File

@ -86,7 +86,7 @@ void MxCompositePresenter::EndAction()
return; return;
} }
((MxDSMultiAction*) m_action)->GetActionList()->DeleteAll(FALSE); ((MxDSMultiAction*) m_action)->GetActionList()->Empty();
while (!m_list.empty()) { while (!m_list.empty()) {
MxPresenter* presenter = m_list.front(); MxPresenter* presenter = m_list.front();