more JUTConsole work

This commit is contained in:
Jasper St. Pierre
2023-11-25 14:35:04 -08:00
parent 855fb1e2ed
commit 4a496727a9
3 changed files with 16 additions and 5 deletions
+10 -2
View File
@@ -108,8 +108,8 @@ template <typename T, int I>
struct TLinkList : public TNodeLinkList {
TLinkList() : TNodeLinkList() {}
static TLinkListNode* Element_toNode(T* element) { return static_cast<TLinkListNode*>(element); }
static T* Element_toValue(TLinkListNode* node) { return static_cast<T*>(node); }
static TLinkListNode* Element_toNode(T* element) { return reinterpret_cast<TLinkListNode*>(((char*)element) - I); }
static T* Element_toValue(TLinkListNode* node) { return reinterpret_cast<T*>(((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;
+5 -2
View File
@@ -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<JUTConsole, 4> soLink_;
/* 0x00 */ JGadget::TLinkList<JUTConsole, -offsetof(JUTConsole, mLinkNode)> soLink_;
/* 0x0C */ JUTConsole* mActiveConsole;
/* 0x10 */ JUTConsole* mDirectConsole;
}; // Size: 0x14
+1 -1
View File
@@ -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();
}
}