From c6cd9b51a258017f5cb8d5e494d46f4515705a04 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 24 Jul 2023 16:09:42 -0400 Subject: [PATCH] DoublyLinkedList: Add a RemoveAllBefore convenience function. Extracted from hamishm's event queue patches. --- .../private/kernel/util/DoublyLinkedList.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/headers/private/kernel/util/DoublyLinkedList.h b/headers/private/kernel/util/DoublyLinkedList.h index 492e888955..eb5d27c87a 100644 --- a/headers/private/kernel/util/DoublyLinkedList.h +++ b/headers/private/kernel/util/DoublyLinkedList.h @@ -338,6 +338,8 @@ public: inline void Add(Element* element, bool back = true); inline void Remove(Element* element); + inline void RemoveAllBefore(Element* element); + inline void Swap(Element* a, Element* b); inline void MoveFrom(DOUBLY_LINKED_LIST_CLASS_NAME* fromList); @@ -500,6 +502,7 @@ DOUBLY_LINKED_LIST_CLASS_NAME::Add(Element* element, bool back) Insert(element, back); } + // Remove DOUBLY_LINKED_LIST_TEMPLATE_LIST void @@ -528,6 +531,19 @@ DOUBLY_LINKED_LIST_CLASS_NAME::Remove(Element* element) } } + +// RemoveAllBefore +DOUBLY_LINKED_LIST_TEMPLATE_LIST +void +DOUBLY_LINKED_LIST_CLASS_NAME::RemoveAllBefore(Element* element) +{ + if (element != NULL) { + fFirst = element; + sGetLink(element)->previous = NULL; + } +} + + // Swap DOUBLY_LINKED_LIST_TEMPLATE_LIST void @@ -551,6 +567,7 @@ DOUBLY_LINKED_LIST_CLASS_NAME::Swap(Element* a, Element* b) } } + // MoveFrom DOUBLY_LINKED_LIST_TEMPLATE_LIST void @@ -570,6 +587,7 @@ DOUBLY_LINKED_LIST_CLASS_NAME::MoveFrom(DOUBLY_LINKED_LIST_CLASS_NAME* fromList) } } + // RemoveAll DOUBLY_LINKED_LIST_TEMPLATE_LIST void @@ -579,6 +597,7 @@ DOUBLY_LINKED_LIST_CLASS_NAME::RemoveAll() fLast = NULL; } + // RemoveHead DOUBLY_LINKED_LIST_TEMPLATE_LIST Element*