Made Remove() safe to be called with an element not in the list and changed its

return type to bool to indicate whether it was.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42096 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
bonefish 2011-06-11 13:02:41 +00:00
parent fca88f7b78
commit ea71d6eb4f

View File

@ -142,7 +142,7 @@ class SinglyLinkedList {
inline bool IsEmpty() const { return (fFirst == NULL); }
inline void Add(Element* element);
inline void Remove(Element* element);
inline bool Remove(Element* element);
inline void Remove(Element* previous, Element* element);
inline void MoveFrom(SINGLY_LINKED_LIST_CLASS_NAME* fromList);
@ -184,16 +184,25 @@ SINGLY_LINKED_LIST_CLASS_NAME::Add(Element* element)
}
/*! Removes \a element from the list.
It is safe to call the list with a \c NULL element or an element that isn't
in the list.
\param element The element to be removed.
\return \c true, if the element was in the list and has been removed,
\c false otherwise.
*/
SINGLY_LINKED_LIST_TEMPLATE_LIST
void
bool
SINGLY_LINKED_LIST_CLASS_NAME::Remove(Element* element)
{
if (element == NULL)
return;
return false;
Element* next = fFirst;
Element* last = NULL;
while (next != NULL && element != next) {
while (element != next) {
if (next == NULL)
return false;
last = next;
next = sGetLink(next)->next;
}
@ -205,6 +214,7 @@ SINGLY_LINKED_LIST_CLASS_NAME::Remove(Element* element)
sGetLink(last)->next = elementLink->next;
elementLink->next = NULL;
return true;
}