6 switch (source.Type()) {
7 case YAML::NodeType::Scalar:
8 target = source.Scalar();
10 case YAML::NodeType::Map:
13 case YAML::NodeType::Sequence:
16 case YAML::NodeType::Null:
17 throw std::runtime_error(
"merge_node: Null source nodes not supported");
18 case YAML::NodeType::Undefined:
19 throw std::runtime_error(
20 "merge_node: Undefined source nodes not supported");
25 for (
auto const& j : source) {
26 merge_node(target[j.first.Scalar()], j.second);
31 for (std::size_t i = 0; i != source.size(); ++i) {
32 if (i < target.size()) {
35 target.push_back(YAML::Clone(source[i]));
42 if (not node.IsMap()) {
51 std::string key = i.first.as<std::string>();
56 auto ins = by_class.emplace(key, i.second);
57 if (ins.second ==
true) {
69 for (
auto const& i : by_class) {
70 tmp.emplace(i.first, YAML::Clone(i.second));
class_overrides clone(class_overrides const &by_class)
Recursively clone all the overrides in by_class.
void merge(class_overrides &by_class, YAML::Node source)
Merge the class-overrides from source into by_class.
std::map< std::string, YAML::Node > class_overrides
Store the overrides for each class.
void merge_sequences(YAML::Node target, YAML::Node const &source)
Memberwise merge two sequences, from source into target.
void merge_map(YAML::Node target, YAML::Node const &source)
Merge all the values from source into target.
#define JB_ASSERT_THROW(PRED)
void merge_node(YAML::Node target, YAML::Node const &source)
Merge two YAML nodes.