diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2024-05-04 20:36:34 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-04 20:36:34 -0400 |
| commit | f3d89e071332ce13154d0a47e365f548ce4e4f65 (patch) | |
| tree | dd9c5b72f43f56d7dcf538f5166a2962b8f4fe04 /src | |
| parent | 1ecdfe9a4dfdd429c04424d77a9c0e6c148832a1 (diff) | |
| parent | 3b8a4efbfd28d229e0e0e2e013d2a390b2ed217f (diff) | |
Merge pull request #21 from elijah-thomas774/ut_LinkList
ut_LinkList
Diffstat (limited to 'src')
| -rw-r--r-- | src/nw4r/ut/ut_LinkList.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/nw4r/ut/ut_LinkList.cpp b/src/nw4r/ut/ut_LinkList.cpp new file mode 100644 index 00000000..5b0d8ee1 --- /dev/null +++ b/src/nw4r/ut/ut_LinkList.cpp @@ -0,0 +1,76 @@ +#include <nw4r/ut/ut_LinkList.h> + +namespace nw4r { +namespace ut { +namespace detail { + +/* 8042a850 */ +LinkListImpl::~LinkListImpl() { + Clear(); +} + +/* 8042a8e0 */ +LinkListImpl::Iterator LinkListImpl::Erase(LinkListImpl::Iterator it) { + Iterator copy(it); + return Erase(it, ++copy); +} + +/* 8042a930 */ +void LinkListImpl::Clear() { + Erase(GetBeginIter(), GetEndIter()); +} + +/* 8042a980 */ +LinkListImpl::Iterator LinkListImpl::Insert(Iterator it, LinkListNode *p) { + LinkListNode *next = it.mNode; + LinkListNode *prev = next->mPrev; + + // prev <- p -> next + p->mNext = next; + p->mPrev = prev; + // prev <-> p <-> next + next->mPrev = p; + prev->mNext = p; + + mSize++; + + return Iterator(p); +} + +/* 8042a9b0 */ +LinkListImpl::Iterator LinkListImpl::Erase(LinkListNode *p) { + LinkListNode *next = p->mNext; + LinkListNode *prev = p->mPrev; + + // Remove connections to node + next->mPrev = prev; + prev->mNext = next; + + mSize--; + + // Isolate node + p->mNext = NULL; + p->mPrev = NULL; + + return Iterator(next); +} + +/* Not in SS */ +LinkListImpl::Iterator LinkListImpl::Erase(Iterator begin, Iterator end) { + LinkListNode *pCur = begin.mNode; + LinkListNode *pEnd = end.mNode; + + while (pCur != pEnd) { + // Preserve next node before erasing pointers + LinkListNode *pNext = pCur->mNext; + // Erase current node + Erase(pCur); + pCur = pNext; + } + + return Iterator(pEnd); +} + +} // namespace detail +} // namespace ut +} // namespace nw4r |
