-
Notifications
You must be signed in to change notification settings - Fork 0
/
tree.h
64 lines (47 loc) · 973 Bytes
/
tree.h
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
#ifndef _TREE_H_
#define _TREE_H_
#include "dlist.h"
enum TreeNodeType {
NODE_ROOT = 0,
NODE_FUNCTION,
NODE_DECLARATION_BLOCK,
NODE_DECLARATION,
NODE_GLOBAL
};
template<class T>
class TreeNode {
public:
T m_data;
TreeNode *m_parent;
dlist<Token> m_children;
};
template<class T>
class Tree {
public:
Tree() {}
virtual ~Tree() { }
TreeNode<T>* AddNode(T _data) {
TreeNode<Token>* node = new TreeNode<Token>;
node->m_data = _data;
return node;
}
TreeNode<T>* AddNode(int _nodetype) {
TreeNode<Token>* node = new TreeNode<Token>;
Token new_token;
new_token.type = _nodetype;
node->m_data = new_token;
return node;
}
void AddChild(TreeNode<T>* _parent, TreeNode<T>* _node) {
if(_node == NULL)
return;
if(_parent == NULL)
_node->m_parent = NULL;
else
{
_node->m_parent = _parent;
_parent->m_children.append(_node->m_data);
}
}
};
#endif