diff options
| author | Jasper St. Pierre <jstpierre@mecheye.net> | 2023-11-25 14:24:49 -0800 |
|---|---|---|
| committer | Jasper St. Pierre <jstpierre@mecheye.net> | 2023-11-25 14:24:57 -0800 |
| commit | 855fb1e2ed4ee5440f2cb30c577b80dd6121d9fd (patch) | |
| tree | d2749a5d398ad0369bf3de37970b63db6d1195e2 /include/JSystem | |
| parent | fc958a8953cc7b06612508d2bc24587bc1b59736 (diff) | |
JUTConsole work
Diffstat (limited to 'include/JSystem')
| -rw-r--r-- | include/JSystem/JGadget/linklist.h | 108 | ||||
| -rw-r--r-- | include/JSystem/JUtility/JUTConsole.h | 7 |
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 |
