summaryrefslogtreecommitdiff
path: root/include/JSystem
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2023-11-25 14:24:49 -0800
committerJasper St. Pierre <jstpierre@mecheye.net>2023-11-25 14:24:57 -0800
commit855fb1e2ed4ee5440f2cb30c577b80dd6121d9fd (patch)
treed2749a5d398ad0369bf3de37970b63db6d1195e2 /include/JSystem
parentfc958a8953cc7b06612508d2bc24587bc1b59736 (diff)
JUTConsole work
Diffstat (limited to 'include/JSystem')
-rw-r--r--include/JSystem/JGadget/linklist.h108
-rw-r--r--include/JSystem/JUtility/JUTConsole.h7
2 files changed, 95 insertions, 20 deletions
diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h
index f865c62f..0594a177 100644
--- a/include/JSystem/JGadget/linklist.h
+++ b/include/JSystem/JGadget/linklist.h
@@ -10,8 +10,10 @@ struct TLinkListNode {
mPrev = NULL;
}
- TLinkListNode* getNext() { return mNext; }
+ TLinkListNode* getNext() const { return mNext; }
+ TLinkListNode* getPrev() const { return mPrev; }
+public:
/* 0x0 */ TLinkListNode* mNext;
/* 0x4 */ TLinkListNode* mPrev;
}; // Size: 0x8
@@ -24,6 +26,17 @@ struct TNodeLinkList {
return node != NULL;
}
+ iterator& operator++() {
+ node = node->getNext();
+ return *this;
+ }
+ iterator& operator--() {
+ node = node->getPrev();
+ return *this;
+ }
+ bool operator==(const iterator& o) { return o.node == node; }
+ bool operator!=(const iterator& o) { return !(*this == o); }
+
TLinkListNode* node;
};
@@ -34,6 +47,17 @@ struct TNodeLinkList {
return node != NULL;
}
+ const_iterator& operator++() {
+ node = node->getNext();
+ return *this;
+ }
+ const_iterator& operator--() {
+ node = node->getPrev();
+ return *this;
+ }
+ bool operator==(const const_iterator& o) { return o.node == node; }
+ bool operator!=(const const_iterator& o) { return !(*this == o); }
+
TLinkListNode* node;
};
@@ -45,18 +69,23 @@ struct TNodeLinkList {
ocObject_.mPrev = &ocObject_;
}
- iterator end() {
- iterator iter(&ocObject_);
+ iterator begin() {
+ iterator iter(ocObject_.getNext());
return iter;
}
- iterator begin() {
- iterator iter(ocObject_.mNext);
+ iterator end() {
+ iterator iter(ocObject_.getPrev());
return iter;
}
const_iterator begin() const {
- const_iterator iter(ocObject_.mNext);
+ const_iterator iter(ocObject_.getNext());
+ return iter;
+ }
+
+ const_iterator end() const {
+ const_iterator iter(ocObject_.getPrev());
return iter;
}
@@ -69,8 +98,9 @@ struct TNodeLinkList {
iterator Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*);
iterator Erase(JGadget::TLinkListNode*);
void Remove(JGadget::TLinkListNode*);
+ u32 size() { return count; }
- /* 0x00 */ int count;
+ /* 0x00 */ u32 count;
/* 0x04 */ TLinkListNode ocObject_;
}; // Size: 0xC
@@ -78,19 +108,50 @@ 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); }
+
struct iterator : TNodeLinkList::iterator {
iterator(TNodeLinkList::iterator iter) : TNodeLinkList::iterator(iter) {}
+ iterator(const iterator& o) : TNodeLinkList::iterator(o) {}
+
+ iterator& operator++() {
+ iterator it(TNodeLinkList::iterator::operator++());
+ return it;
+ }
+ iterator& operator--() {
+ iterator it(TNodeLinkList::iterator::operator--());
+ return it;
+ }
+
+ T* operator*() {
+ return Element_toValue(node);
+ }
+ T* operator->() {
+ return Element_toValue(node);
+ }
};
struct const_iterator : TNodeLinkList::const_iterator {
const_iterator(TNodeLinkList::const_iterator iter) : TNodeLinkList::const_iterator(iter) {}
+ const_iterator(const const_iterator& o) : TNodeLinkList::const_iterator(o) {}
+
const_iterator& operator++() {
- node = node->getNext();
- return *this;
+ const_iterator it(TNodeLinkList::const_iterator::operator++());
+ return it;
+ }
+ const_iterator& operator--() {
+ const_iterator it(TNodeLinkList::const_iterator::operator--());
+ return it;
}
- };
- TLinkListNode* Element_toNode(T* element) const { return &element->ocObject_; }
+ T* operator*() {
+ return Element_toValue(node);
+ }
+ T* operator->() {
+ return Element_toValue(node);
+ }
+ };
void Insert(TLinkList::iterator iter, T* element) {
TLinkListNode* node = Element_toNode(element);
@@ -102,14 +163,14 @@ struct TLinkList : public TNodeLinkList {
return ((TNodeLinkList*)this)->Erase(node);
}
- TLinkList::iterator end() {
- TNodeLinkList::iterator node_iter = TNodeLinkList::end();
+ TLinkList::iterator begin() {
+ TNodeLinkList::iterator node_iter = TNodeLinkList::begin();
TLinkList::iterator iter(node_iter);
return iter;
}
- TLinkList::iterator begin() {
- TNodeLinkList::iterator node_iter = TNodeLinkList::begin();
+ TLinkList::iterator end() {
+ TNodeLinkList::iterator node_iter = TNodeLinkList::end();
TLinkList::iterator iter(node_iter);
return iter;
}
@@ -120,10 +181,27 @@ struct TLinkList : public TNodeLinkList {
return iter;
}
+ TLinkList::const_iterator end() const {
+ TNodeLinkList::const_iterator node_iter = TNodeLinkList::end();
+ TLinkList::const_iterator iter(node_iter);
+ return iter;
+ }
+
void Push_back(T* element) {
TLinkList::iterator iter(TLinkList::end());
this->Insert(iter, element);
}
+
+ T* front() {
+ TLinkList::iterator iter(TLinkList::begin());
+ return *iter;
+ }
+
+ T* back() {
+ TLinkList::iterator iter(TLinkList::end());
+ --iter;
+ return *iter;
+ }
};
template <typename T, int I>
diff --git a/include/JSystem/JUtility/JUTConsole.h b/include/JSystem/JUtility/JUTConsole.h
index 5be1e6f4..4672e504 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 {
+class JUTConsole : public JKRDisposer, public JGadget::TLinkListNode {
public:
enum EConsoleType {
ACTIVE = 0,
@@ -89,9 +89,6 @@ public:
void scrollToLastLine() { scroll(mMaxLines); }
void scrollToFirstLine() { scroll(-mMaxLines); }
-public:
- /* 0x18 */ JGadget::TLinkListNode mListNode;
-
private:
/* 0x20 */ u32 field_0x20;
/* 0x24 */ s32 mMaxLines;
@@ -133,7 +130,7 @@ public:
static JUTConsoleManager* sManager;
private:
- /* 0x00 */ JGadget::TLinkList<JUTConsole, 4> mLinkList;
+ /* 0x00 */ JGadget::TLinkList<JUTConsole, 4> soLink_;
/* 0x0C */ JUTConsole* mActiveConsole;
/* 0x10 */ JUTConsole* mDirectConsole;
}; // Size: 0x14