diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h index 0594a1770..cfe0f8a2f 100644 --- a/include/JSystem/JGadget/linklist.h +++ b/include/JSystem/JGadget/linklist.h @@ -108,8 +108,8 @@ template struct TLinkList : public TNodeLinkList { TLinkList() : TNodeLinkList() {} - static TLinkListNode* Element_toNode(T* element) { return static_cast(element); } - static T* Element_toValue(TLinkListNode* node) { return static_cast(node); } + static TLinkListNode* Element_toNode(T* element) { return reinterpret_cast(((char*)element) - I); } + static T* Element_toValue(TLinkListNode* node) { return reinterpret_cast(((char*)node) + I); } struct iterator : TNodeLinkList::iterator { iterator(TNodeLinkList::iterator iter) : TNodeLinkList::iterator(iter) {} @@ -192,6 +192,14 @@ struct TLinkList : public TNodeLinkList { this->Insert(iter, element); } + iterator Find(T* element) { + return TNodeLinkList::Find(Element_toNode(element)); + } + + void Remove(T* element) { + TNodeLinkList::Remove(Element_toNode(element)); + } + T* front() { TLinkList::iterator iter(TLinkList::begin()); return *iter; diff --git a/include/JSystem/JUtility/JUTConsole.h b/include/JSystem/JUtility/JUTConsole.h index 4672e504a..d5417506c 100644 --- a/include/JSystem/JUtility/JUTConsole.h +++ b/include/JSystem/JUtility/JUTConsole.h @@ -7,7 +7,7 @@ #include "Runtime.PPCEABI.H/__va_arg.h" #include "dolphin/types.h" -class JUTConsole : public JKRDisposer, public JGadget::TLinkListNode { +class JUTConsole : public JKRDisposer { public: enum EConsoleType { ACTIVE = 0, @@ -89,6 +89,9 @@ public: void scrollToLastLine() { scroll(mMaxLines); } void scrollToFirstLine() { scroll(-mMaxLines); } +public: + /* 0x18 */ JGadget::TLinkListNode mLinkNode; + private: /* 0x20 */ u32 field_0x20; /* 0x24 */ s32 mMaxLines; @@ -130,7 +133,7 @@ public: static JUTConsoleManager* sManager; private: - /* 0x00 */ JGadget::TLinkList soLink_; + /* 0x00 */ JGadget::TLinkList soLink_; /* 0x0C */ JUTConsole* mActiveConsole; /* 0x10 */ JUTConsole* mDirectConsole; }; // Size: 0x14 diff --git a/src/JSystem/JUtility/JUTConsole.cpp b/src/JSystem/JUtility/JUTConsole.cpp index 5548ace77..6d82be5d3 100644 --- a/src/JSystem/JUtility/JUTConsole.cpp +++ b/src/JSystem/JUtility/JUTConsole.cpp @@ -386,7 +386,7 @@ void JUTConsoleManager::removeConsole(JUTConsole* console) { if (soLink_.size() <= 1) { mActiveConsole = NULL; } else { - mActiveConsole = console != soLink_.back() ? soLink_.Element_toValue(console->getNext()) : soLink_.front(); + mActiveConsole = console != soLink_.back() ? soLink_.Element_toValue(console->mLinkNode.getNext()) : soLink_.front(); } }