30 NodeValue(std::vector<std::unique_ptr<NodeValue>>);
31 NodeValue(std::unique_ptr<std::vector<std::unique_ptr<NodeValue>>>);
37 Values() { memset(
this, 0,
sizeof(*
this)); }
41 Values(std::unique_ptr<std::string> x) :
s(
std::move(x)) {}
42 Values(std::shared_ptr<Json::Node> x) :
n(
std::move(x)) {}
43 Values(std::unique_ptr<std::vector<std::unique_ptr<NodeValue>>> x) :
v(
std::move(x)) {}
76 std::cout <<
"UNKONW TAG TYPE\n";
82 std::unique_ptr<bool>
b;
83 std::unique_ptr<int>
i;
84 std::unique_ptr<double>
d;
85 std::unique_ptr<std::string>
s;
86 std::shared_ptr<Node>
n;
87 std::unique_ptr<std::vector<std::unique_ptr<NodeValue>>>
v;
91 std::unique_ptr<std::vector<std::shared_ptr<Node>>>
root;
97 std::shared_ptr<Node>
addChild(std::string);
99 std::shared_ptr<Node>
addChild(std::string, T);
103 class Node :
public std::enable_shared_from_this<Node>
107 Node(std::string, std::unique_ptr<NodeValue>);
110 std::shared_ptr<Node>
getPtr();
112 std::shared_ptr<Node>
addChild(std::string);
113 template <
typename T>
114 std::shared_ptr<Node>
addChild(std::string, T);
120 std::unique_ptr<Json::NodeValue>
value;
136 template <
typename T>
141 std::shared_ptr<Json::Node>
node = std::make_shared<Json::Node>(name, std::move(value));
149 template <
typename T>
155 std::shared_ptr<Json::Node> newNode(
new Json::Node(
name, std::move(newValue)));
156 std::unique_ptr<Json::NodeValue> nodeValue(
new Json::NodeValue(newNode));
158 value = std::move(nodeValue);
166 std::shared_ptr<Json::Node> newNode(
new Json::Node(
name, std::move(newValue)));
167 std::unique_ptr<Json::NodeValue> nodeValue(
new Json::NodeValue(newNode));
169 value->value.v->push_back(std::move(nodeValue));
177 std::shared_ptr<Json::Node> newNode(
new Json::Node(
name, std::move(newValue)));
178 std::unique_ptr<Json::NodeValue> nodeValue(
new Json::NodeValue(newNode));
179 std::unique_ptr<std::vector<std::unique_ptr<Json::NodeValue>>> vec(
new std::vector<std::unique_ptr<Json::NodeValue>>());
180 vec->push_back(std::move(
value));
181 vec->push_back(std::move(nodeValue));
182 value->value.~Values();
183 std::unique_ptr<Json::NodeValue> joinedValue(
new Json::NodeValue(std::move(vec)));
184 value = std::move(joinedValue);
196 template <
typename T>
202 value = std::move(newValue);
213 std::unique_ptr<std::vector<std::unique_ptr<Json::NodeValue>>> vec(
new std::vector<std::unique_ptr<Json::NodeValue>>());
214 vec->push_back(std::move(value));
215 vec->push_back(std::move(newValue));
216 value->value.~Values();
217 std::unique_ptr<Json::NodeValue> joinedValue(
new Json::NodeValue(std::move(vec)));
218 value = std::move(joinedValue);