-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNode.hh
106 lines (88 loc) · 1.83 KB
/
Node.hh
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
#ifndef _NODE_HH_
#define _NODE_HH_
#include <map>
#include <xercesc/dom/DOM.hpp>
#include "Key.hh"
using namespace xercesc;
namespace Yang
{
namespace Ast
{
class Container;
class Leaf;
}
}
class DomUtils;
namespace YDB
{
class Node;
typedef std::map<YDB::Key, Node*> Nodes;
class Node
{
public:
Node(DomUtils& domUtils, Node* parent, DOMNode* domNode);
virtual ~Node();
// Will take over the memory owned by node
virtual void merge(Node* node) = 0;
virtual const YDB::Key getKey() const = 0;
DOMNode* getDomNode() { return _domNode; }
Nodes& getNodes() { return _nodes; }
virtual void setText(const XMLCh* text) { /* default a nop*/ }
// Disassociate its self with its parent and
// gives the dom node away.
DOMNode* release();
void removeChild(Node* node);
protected:
DomUtils& _domUtils;
Node* _parent;
DOMNode* _domNode;
Nodes _nodes;
};
class LeafNode;
class InteriorNode : public Node
{
public:
InteriorNode(DomUtils& domUtils,
Node* parent,
DOMNode* domNode);
private:
};
class Container : public InteriorNode
{
public:
Container(const Yang::Ast::Container* schema,
DomUtils& domUtils,
Node* parent,
DOMNode* domNode);
void merge(Node* node);
const YDB::Key getKey() const;
private:
const Yang::Ast::Container* _schema;
};
class List : public InteriorNode
{
};
class LeafNode : public Node
{
public:
LeafNode(DomUtils& domUtils, Node* parent, DOMNode* domNode);
private:
};
class Leaf : public LeafNode
{
public:
Leaf(const Yang::Ast::Leaf* schema,
DomUtils& domUtils,
Node* parent,
DOMNode* domNode);
void merge(Node* node);
const YDB::Key getKey() const;
virtual void setText(const XMLCh* text);
private:
const Yang::Ast::Leaf* _schema;
};
class LeafList : public LeafNode
{
};
}
#endif