aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yson/node/node_builder.cpp
blob: b21bc4502e9c196c85aa0a6d8caed485a134f718 (plain) (blame)
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
#include "node_builder.h" 
 
namespace NYT { 
 
//////////////////////////////////////////////////////////////////////////////// 
 
TNodeBuilder::TNodeBuilder(TNode* node) 
{ 
    Stack_.push(node); 
} 
 
void TNodeBuilder::OnStringScalar(TStringBuf value)
{ 
    AddNode(value, true); 
} 
 
void TNodeBuilder::OnInt64Scalar(i64 value) 
{ 
    AddNode(value, true); 
} 
 
void TNodeBuilder::OnUint64Scalar(ui64 value) 
{ 
    AddNode(value, true); 
} 
 
void TNodeBuilder::OnDoubleScalar(double value) 
{ 
    AddNode(value, true); 
} 
 
void TNodeBuilder::OnBooleanScalar(bool value) 
{ 
    AddNode(value, true); 
} 
 
void TNodeBuilder::OnEntity() 
{ 
    AddNode(TNode::CreateEntity(), true); 
} 
 
void TNodeBuilder::OnBeginList() 
{ 
    AddNode(TNode::CreateList(), false); 
} 
 
void TNodeBuilder::OnListItem() 
{ 
    Stack_.push(&Stack_.top()->Add()); 
} 
 
void TNodeBuilder::OnEndList() 
{ 
    Stack_.pop(); 
} 
 
void TNodeBuilder::OnBeginMap() 
{ 
    AddNode(TNode::CreateMap(), false); 
} 
 
void TNodeBuilder::OnKeyedItem(TStringBuf key)
{ 
    Stack_.push(&(*Stack_.top())[TString(key)]);
} 
 
void TNodeBuilder::OnEndMap() 
{ 
    Stack_.pop(); 
} 
 
void TNodeBuilder::OnBeginAttributes() 
{ 
    Stack_.push(&Stack_.top()->Attributes()); 
} 
 
void TNodeBuilder::OnEndAttributes() 
{ 
    Stack_.pop(); 
} 
 
void TNodeBuilder::OnNode(TNode node)
{
    AddNode(std::move(node), true);
}

void TNodeBuilder::AddNode(TNode value, bool pop) 
{ 
    Stack_.top()->MoveWithoutAttributes(std::move(value));
    if (pop) 
        Stack_.pop(); 
} 
 
//////////////////////////////////////////////////////////////////////////////// 
 
} // namespace NYT