#ifndef YAMLCPP_EXTRA_H_INCLUDED #define YAMLCPP_EXTRA_H_INCLUDED #include #include #include template void operator >> (const YAML::Node& node, T& i) { if(node.IsDefined() && !node.IsNull()) //fail-safe i = node.as(); }; template T safe_as (const YAML::Node& node) { if(node.IsDefined() && !node.IsNull()) return node.as(); return T(); }; template void operator >>= (const YAML::Node& node, T& i) { i = safe_as(node); }; using string_array = std::vector; inline std::string dump_to_pairs (const YAML::Node &node, const string_array &exclude = string_array()) { std::string result; for(auto iter = node.begin(); iter != node.end(); iter++) { if(iter->second.Type() != YAML::NodeType::Scalar) continue; std::string key = iter->first.as(); if(std::find(exclude.cbegin(), exclude.cend(), key) != exclude.cend()) continue; std::string value = iter->second.as(); result += key + "=" + value + ","; } return result.erase(result.size() - 1); } #endif // YAMLCPP_EXTRA_H_INCLUDED