1#pragma once
2
3#include "container/seadTreeNode.h"
4#include "hostio/seadHostIOReflexible.h"
5
6namespace sead::hostio
7{
8class Node : public Reflexible
9{
10public:
11 NodeClassType getNodeClassType() const override { return Reflexible::NodeClassType::Node; }
12
13#ifdef SEAD_DEBUG
14public:
15 Node();
16 Node(Heap* heap, IDisposer::HeapNullOption heap_null_option);
17 ~Node() override { disposeHostIOImpl_(); }
18
19 void appendChild(Node* node);
20 void insertAfterSelf(Node* node);
21 void insertBeforeSelf(Node* node);
22 void detachAll();
23 void detach();
24 void destroy() { detachAll(); }
25 Node* getParentNode() const;
26 Node* getChildNode() const;
27 Node* getNextNode() const;
28 Node* getPrevNode() const;
29
30 bool isAppended() const;
31
32 Reflexible* searchNode(const SafeString& name) override;
33 void calcURL(BufferedSafeString* url) const override { calcURLImpl_(url, true); }
34
35protected:
36 void genChildNode(Context* context) override;
37 bool isHaveChild() const override { return mTreeNode.child() != nullptr; }
38 void disposeHostIO() override
39 {
40 disposeHostIOImpl_();
41 Reflexible::disposeHostIO();
42 }
43
44private:
45 void disposeHostIOImpl_();
46 void calcURLImpl_(BufferedSafeString* url, bool) const;
47
48 TTreeNode<Node*> mTreeNode;
49#endif
50};
51} // namespace sead::hostio
52