blob: de1318e3d32ba5a05439db0d19371a80865224c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#include "c/c_tree.h"
/* 0x802E0E70 */
cTreeNd_c::cTreeNd_c() {
this->forcedClear();
}
/* 0x802E0EA0 */
void cTreeNd_c::forcedClear() {
this->mpParent = nullptr;
this->mpChild = nullptr;
this->mpPrev = nullptr;
this->mpNext = nullptr;
}
/* 0x802E0EC0 */
bool cTreeMg_c::addTreeNode(cTreeNd_c *node, cTreeNd_c *parent) {
if (node != nullptr) {
if (parent != nullptr) {
node->mpParent = parent;
if (parent->mpChild == nullptr) {
parent->mpChild = node;
} else {
cTreeNd_c *cursor;
for (cursor = parent->mpChild; cursor->mpNext != nullptr; cursor = cursor->mpNext) {}
cursor->mpNext = node;
node->mpPrev = cursor;
}
} else {
cTreeNd_c *cursor = this->mpRootNode;
if (cursor != nullptr) {
for (; cursor->mpNext != nullptr; cursor = cursor->mpNext) {}
cursor->mpNext = node;
node->mpPrev = cursor;
} else {
this->mpRootNode = node;
}
}
} else {
return false;
}
return true;
}
/* 0x802E0F60*/
bool cTreeMg_c::removeTreeNode(cTreeNd_c *node) {
if (node != nullptr) {
if (node->mpChild != nullptr) {
return false;
}
if (node->mpPrev != nullptr) {
node->mpPrev->mpNext = node->mpNext;
} else if (node->mpParent != nullptr) {
node->mpParent->mpChild = node->mpNext;
} else if (node == this->mpRootNode) {
this->mpRootNode = node->mpNext;
}
if (node->mpNext != nullptr) {
node->mpNext->mpPrev = node->mpPrev;
}
node->mpPrev = nullptr;
node->mpNext = nullptr;
node->mpParent = nullptr;
} else {
return false;
}
return true;
}
/* 0x802E1000 */
bool cTreeMg_c::insertTreeNode(cTreeNd_c *node, cTreeNd_c *parent) {
cTreeNd_c *cursor;
for (cursor = parent; cursor != nullptr; cursor = cursor->mpParent) {
if (cursor == node) {
return false;
}
}
if (node != nullptr) {
cTreeNd_c *child = node->mpChild;
node->mpChild = nullptr;
if (!this->removeTreeNode(node)) {
node->mpChild = child;
return false;
} else {
node->mpChild = child;
return this->addTreeNode(node, parent);
}
}
return false;
}
/* 0x802E10C0 */
cTreeNd_c *cTreeNd_c::getTreeNext() const {
cTreeNd_c *child = this->mpChild;
if (child != nullptr) {
return child;
} else {
return this->getTreeNextNotChild();
}
}
/* 0x802E1100 */
cTreeNd_c *cTreeNd_c::getTreeNextNotChild() const {
if (this->mpNext != nullptr) {
return this->mpNext;
}
cTreeNd_c *parent;
for (parent = this->mpParent; parent != nullptr; parent = parent->mpParent) {
if (parent->mpNext != nullptr) {
return parent->mpNext;
}
}
return nullptr;
}
|