sead
Loading...
Searching...
No Matches
seadTreeNode.h
Go to the documentation of this file.
1#ifndef SEAD_TREENODE_H_
2#define SEAD_TREENODE_H_
3
4#include <basis/seadTypes.h>
5
6namespace sead {
7
9{
10public:
11 TreeNode();
12
13 void clearLinks();
14 void detachAll();
15 void detachSubTree();
17 void pushBackChild(TreeNode* n);
18 void pushFrontChild(TreeNode* n);
21 bool isRoot() const { return mParent == nullptr; }
22 bool isLeaf() const { return mChild == nullptr; }
23 const TreeNode* findRoot() const;
25 s32 countChildren() const;
26
27protected:
29
30protected:
35};
36#ifdef cafe
37static_assert(sizeof(TreeNode) == 0x10, "sead::TreeNode size mismatch");
38#endif // cafe
39
40template <typename T>
41class TTreeNode : public TreeNode
42{
43public:
45 : TreeNode()
46 , mData()
47 {
48 }
49
50 TTreeNode(T data)
51 : TreeNode()
52 , mData(data)
53 {
54 }
55
56 TTreeNode<T>* parent() const { return static_cast<TTreeNode<T>*>(mParent); }
57 TTreeNode<T>* child() const { return static_cast<TTreeNode<T>*>(mChild); }
58 TTreeNode<T>* next() const { return static_cast<TTreeNode<T>*>(mNext); }
59 TTreeNode<T>* prev() const { return static_cast<TTreeNode<T>*>(mPrev); }
60 TTreeNode<T>* findRoot() { return static_cast<TTreeNode<T>*>(TreeNode::findRoot()); }
61 const TTreeNode<T>* findRoot() const { return static_cast<TTreeNode<T>*>(TreeNode::findRoot()); }
67 T& val() { return mData; }
68 const T& val() const { return mData; }
69
70public:
71 // TODO
72 class nextIterator { };
73
74 // TODO
76
77 // TODO
79
80 // TODO
82
83public:
98
99protected:
101};
102#ifdef cafe
103static_assert(sizeof(TTreeNode<int*>) == 0x14, "sead::TTreeNode<T> size mismatch");
104#endif // cafe
105
106} // namespace sead
107
108#endif // SEAD_TREENODE_H_
Definition seadTreeNode.h:81
Definition seadTreeNode.h:78
Definition seadTreeNode.h:75
Definition seadTreeNode.h:72
Definition seadTreeNode.h:42
nextConstIterator nextConstEnd() const
depthFirstIterator depthFirstBegin() const
void pushBackChild(TTreeNode< T > *o)
Definition seadTreeNode.h:63
nextIterator childBegin() const
depthFirstIterator depthFirstEnd() const
TTreeNode< T > * parent() const
Definition seadTreeNode.h:56
depthFirstConstIterator depthFirstConstBegin() const
const TTreeNode< T > * findRoot() const
Definition seadTreeNode.h:61
T & val()
Definition seadTreeNode.h:67
depthFirstConstIterator depthFirstWithoutRootConstBegin() const
depthFirstIterator depthFirstWithoutRootBegin() const
void pushFrontChild(TTreeNode< T > *o)
Definition seadTreeNode.h:64
const T & val() const
Definition seadTreeNode.h:68
void pushBackSibling(TTreeNode< T > *o)
Definition seadTreeNode.h:62
TTreeNode< T > * child() const
Definition seadTreeNode.h:57
TTreeNode()
Definition seadTreeNode.h:44
nextIterator nextBegin() const
TTreeNode< T > * findRoot()
Definition seadTreeNode.h:60
nextConstIterator childConstEnd() const
nextConstIterator nextConstBegin() const
nextConstIterator childConstBegin() const
TTreeNode(T data)
Definition seadTreeNode.h:50
TTreeNode< T > * prev() const
Definition seadTreeNode.h:59
T mData
Definition seadTreeNode.h:100
void insertAfterSelf(TTreeNode< T > *o)
Definition seadTreeNode.h:66
depthFirstConstIterator depthFirstConstEnd() const
nextIterator childEnd() const
void insertBeforeSelf(TTreeNode< T > *o)
Definition seadTreeNode.h:65
TTreeNode< T > * next() const
Definition seadTreeNode.h:58
nextIterator nextEnd() const
Definition seadTreeNode.h:9
const TreeNode * findRoot() const
Definition seadTreeNode.cpp:144
void clearChildLinksRecursively_()
Definition seadTreeNode.cpp:167
TreeNode * findRoot()
Definition seadTreeNode.cpp:130
TreeNode * mParent
Definition seadTreeNode.h:31
bool isRoot() const
Definition seadTreeNode.h:21
void detachSubTree()
Definition seadTreeNode.cpp:102
void insertAfterSelf(TreeNode *n)
Definition seadTreeNode.cpp:79
TreeNode()
Definition seadTreeNode.cpp:6
void pushFrontChild(TreeNode *n)
Definition seadTreeNode.cpp:43
void pushBackChild(TreeNode *n)
Definition seadTreeNode.cpp:16
TreeNode * mChild
Definition seadTreeNode.h:32
s32 countChildren() const
Definition seadTreeNode.cpp:158
void insertBeforeSelf(TreeNode *n)
Definition seadTreeNode.cpp:61
void pushBackSibling(TreeNode *n)
Definition seadTreeNode.cpp:30
bool isLeaf() const
Definition seadTreeNode.h:22
TreeNode * mNext
Definition seadTreeNode.h:33
void detachAll()
Definition seadTreeNode.cpp:95
void clearLinks()
Definition seadTreeNode.cpp:11
TreeNode * mPrev
Definition seadTreeNode.h:34
Definition seadAssert.h:44