New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
LineNodeMgr.h
Go to the documentation of this file.
1#pragma once
2
3#include <basis/seadTypes.h>
4
5template <typename T>
7{
8public:
9 struct Node
10 {
11 Node(T* obj_)
12 : obj(obj_)
13 , next(nullptr)
14 , prev(nullptr)
15 {
16 }
17
18 T* obj;
21 };
22 static_assert(sizeof(Node) == 0xC);
23
24public:
26 : mHead(nullptr)
27 , mTail(nullptr)
28 {
29 }
30
31 Node* front() const
32 {
33 return mHead;
34 }
35
36 Node* back() const
37 {
38 return mTail;
39 }
40
41 bool contains(const Node* node) const
42 {
43 if (node == nullptr)
44 return false;
45
46 return node->next != nullptr || node->prev != nullptr || node == mHead;
47 }
48
49 virtual void insertAfter(Node* node, Node* basis)
50 {
51 if (basis == nullptr)
52 {
53 pushFront(node);
54 return;
55 }
56
57 if (node == nullptr)
58 return;
59
60 node->next = basis->next;
61 node->prev = basis;
62 basis->next = node;
63
64 if (node->next != nullptr)
65 node->next->prev = node;
66
67 if (node->next == nullptr)
68 mTail = node;
69 }
70
71 virtual void erase(Node* node)
72 {
73 if (node == nullptr)
74 return;
75
76 if (node->prev != nullptr)
77 node->prev->next = node->next;
78
79 else if (node == mHead)
80 mHead = node->next;
81
82 if (node->next != nullptr)
83 node->next->prev = node->prev;
84
85 else if (node == mTail)
86 mTail = node->prev;
87
88 node->next = nullptr;
89 node->prev = nullptr;
90 }
91
92 virtual void pushBack(Node* node)
93 {
94 if (node == nullptr)
95 return;
96
97 if (mTail != nullptr)
98 {
99 mTail->next = node;
100 node->prev = mTail;
101 }
102 else
103 {
104 mHead = node;
105 }
106
107 mTail = node;
108 }
109
110 virtual void pushFront(Node* node)
111 {
112 if (node == nullptr)
113 return;
114
115 if (mHead != nullptr)
116 {
117 mHead->prev = node;
118 node->next = mHead;
119 }
120 else
121 {
122 mTail = node;
123 }
124
125 mHead = node;
126 }
127
128 virtual void clear()
129 {
130 while (mHead != nullptr)
132 }
133
134protected:
137};
138static_assert(sizeof(LineNodeMgr<void>) == 0xC);
Definition LineNodeMgr.h:7
LineNodeMgr()
Definition LineNodeMgr.h:25
Node * mTail
Definition LineNodeMgr.h:136
bool contains(const Node *node) const
Definition LineNodeMgr.h:41
Node * front() const
Definition LineNodeMgr.h:31
Node * mHead
Definition LineNodeMgr.h:135
virtual void pushBack(Node *node)
Definition LineNodeMgr.h:92
virtual void pushFront(Node *node)
Definition LineNodeMgr.h:110
virtual void insertAfter(Node *node, Node *basis)
Definition LineNodeMgr.h:49
Node * back() const
Definition LineNodeMgr.h:36
virtual void clear()
Definition LineNodeMgr.h:128
virtual void erase(Node *node)
Definition LineNodeMgr.h:71
Definition LineNodeMgr.h:10
Node(T *obj_)
Definition LineNodeMgr.h:11
T * obj
Definition LineNodeMgr.h:18
Node * prev
Definition LineNodeMgr.h:20
Node * next
Definition LineNodeMgr.h:19