summaryrefslogtreecommitdiff
path: root/src/JSystem
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2026-01-08 06:52:18 -0800
committerGitHub <noreply@github.com>2026-01-08 07:52:18 -0700
commit0e7b42e9ea78e960647ce25528cf7b65a6ddfc9d (patch)
tree19bbd556b98acd6c23451d8e35ca7b2bce9d592a /src/JSystem
parent2b52bc59d00bc83abce50c026447780d6c8ad943 (diff)
linklist debug (#3025)
Diffstat (limited to 'src/JSystem')
-rw-r--r--src/JSystem/JGadget/linklist.cpp123
1 files changed, 109 insertions, 14 deletions
diff --git a/src/JSystem/JGadget/linklist.cpp b/src/JSystem/JGadget/linklist.cpp
index 4a705dd5e7..366a8db320 100644
--- a/src/JSystem/JGadget/linklist.cpp
+++ b/src/JSystem/JGadget/linklist.cpp
@@ -1,7 +1,10 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JGadget/linklist.h"
+#include "JSystem/JGadget/define.h"
+namespace JGadget {
+namespace {
template <typename T>
class TPRIsEqual_pointer_ {
public:
@@ -12,29 +15,45 @@ public:
private:
const T* p_;
};
+}
+}
-JGadget::TNodeLinkList::~TNodeLinkList() {}
+JGadget::TNodeLinkList::~TNodeLinkList() {
+#if DEBUG
+ Confirm();
+ clear();
+ JGADGET_ASSERTWARN(84, empty())
+ oNode_.clear_();
+#endif
+}
JGadget::TNodeLinkList::iterator
JGadget::TNodeLinkList::erase(JGadget::TNodeLinkList::iterator it) {
+ JUT_ASSERT(102, it.p_!=&oNode_);
iterator next = it;
++next;
return erase(it, next);
}
JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(iterator a, iterator b) {
- TLinkListNode* cur = a.node;
- TLinkListNode* end = b.node;
+ TLinkListNode* cur = a.p_;
+ TLinkListNode* end = b.p_;
TLinkListNode* next;
for (; cur != end; cur = next) {
- next = cur->mNext;
+ next = cur->pNext_;
Erase(cur);
}
return b;
}
+void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc) {
+ JUT_ASSERT(146, this!=&rSrc);
+ splice(it, rSrc, rSrc.begin(), rSrc.end());
+ JUT_ASSERT(148, rSrc.empty());
+}
+
void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator itSrc) {
iterator itSrcNext = itSrc;
++itSrcNext;
@@ -48,24 +67,69 @@ void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator i
}
}
+void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator itBegin, iterator itEnd) {
+ s32 dist = 0;
+ if (this == &rSrc) {
+ if (itBegin == itEnd) {
+ return;
+ }
+ } else {
+ dist = std::distance(itBegin, itEnd);
+ if (dist == 0) {
+ return;
+ }
+ }
+ TLinkListNode* r31 = it.p_;
+ TLinkListNode* r30 = itBegin.p_;
+ TLinkListNode* r29 = itEnd.p_;
+ TLinkListNode* r25 = r29->pPrev_;
+ TLinkListNode* r24 = r30->pPrev_;
+ r24->pNext_ = r29;
+ r29->pPrev_ = r24;
+ rSrc.count -= dist;
+ TLinkListNode* r23 = r31->pPrev_;
+ r23->pNext_ = r30;
+ r30->pPrev_ = r23;
+ r25->pNext_ = r31;
+ r31->pPrev_ = r25;
+ count += dist;
+}
+
+JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Find(const JGadget::TLinkListNode* p) {
+ return std::find_if(begin(), end(), TPRIsEqual_pointer_<TLinkListNode>(p));
+}
+
JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Insert(iterator it, TLinkListNode* p) {
- TLinkListNode* pIt = it.node;
- TLinkListNode* pItPrev = pIt->mPrev;
+ JUT_ASSERT(300, p!=NULL);
+ TLinkListNode* pIt = it.p_;
+ JUT_ASSERT(302, pIt!=NULL);
+ TLinkListNode* pItPrev = pIt->pPrev_;
+ JUT_ASSERT(305, pItPrev!=0);
+ JGADGET_ASSERTWARN(307, p->pNext_==NULL);
+ JGADGET_ASSERTWARN(308, p->pPrev_==NULL);
- p->mNext = pIt;
- p->mPrev = pItPrev;
- pIt->mPrev = p;
- pItPrev->mNext = p;
+ p->pNext_ = pIt;
+ p->pPrev_ = pItPrev;
+ pIt->pPrev_ = p;
+ pItPrev->pNext_ = p;
count++;
return iterator(p);
}
JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p) {
- TLinkListNode* pNext = p->mNext;
- TLinkListNode* pPrev = p->mPrev;
- pNext->mPrev = pPrev;
- pPrev->mNext = pNext;
+ JUT_ASSERT(325, !empty());
+ JUT_ASSERT(326, p!=0);
+ JUT_ASSERT(327, p!=&oNode_);
+ TLinkListNode* pNext = p->pNext_;
+ TLinkListNode* pPrev = p->pPrev_;
+ JUT_ASSERT(330, pNext!=NULL);
+ pNext->pPrev_ = pPrev;
+ JUT_ASSERT(332, pPrev!=NULL);
+ pPrev->pNext_ = pNext;
count--;
+#if DEBUG
+ p->clear_();
+#endif
return iterator(pNext);
}
@@ -73,3 +137,34 @@ JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p)
void JGadget::TNodeLinkList::Remove(TLinkListNode* p) {
remove_if(TPRIsEqual_pointer_<TLinkListNode>(p));
}
+
+bool JGadget::TNodeLinkList::Confirm() const {
+ int u = 0;
+ const_iterator itEnd = end();
+ JGADGET_EXITWARN(357, itEnd.p_==&oNode_);
+ const_iterator it = begin();
+ JGADGET_EXITWARN(359, it.p_==oNode_.pNext_);
+ for (; it != itEnd; ++it, ++u) {
+ JGADGET_EXITWARN(362, u<size());
+ const TLinkListNode* pIt = it.p_;
+ JUT_ASSERT(364, pIt!=NULL);
+ JGADGET_EXITWARN(365, pIt->pNext_->pPrev_==pIt);
+ JGADGET_EXITWARN(366, pIt->pPrev_->pNext_==pIt);
+ }
+ JGADGET_EXITWARN(368, it.p_==&oNode_);
+ JGADGET_EXITWARN(369, u==size());
+ return true;
+}
+
+bool JGadget::TNodeLinkList::Confirm_iterator(const_iterator it) const {
+ const_iterator itBegin = begin();
+ const_iterator itEnd = end();
+ while (itBegin != itEnd) {
+ if (itBegin == it) {
+ return true;
+ }
+ ++itBegin;
+ }
+ JGADGET_EXITWARN(383, it==itEnd);
+ return true;
+}