#include "ConfigYaml.h" #include std::ostream& operator <<(std::ostream &os, const Label& label) { os << "\"" << label.label_ << "\"" << "=" << label.text_; return os; } std::ostream& operator << (std::ostream &os, const Formula& formula) { os << formula.formula_ << "=" << formula.content_; return os; } std::ostream& operator << (std::ostream& os, const Command& command) { os << command.action_; return os; } std::ostream& operator << (std::ostream& os, const Constant& constant) { os << "const " << constant.type_ << " " << constant.constant_ << " = " << constant.value_; return os; } std::ostream& operator << (std::ostream& os, const Module& module) { os << "Module: " << module.module_ << std::endl; for (auto& command : module.commands_) { os << command << std::endl; } return os; } std::string Label::createExpression() const { if (overwrite_) { return "label \"" + label_ + "\" = " + text_ + Configuration::overwrite_identifier_; } return "label \"" + label_ + "\" = " + text_ + Configuration::configuration_identifier_; } std::string Formula::createExpression() const { if (overwrite_) { return "formula " + formula_ + " = " + content_ + Configuration::overwrite_identifier_; } return "formula " + formula_ + " = " + content_ + Configuration::configuration_identifier_; } std::string Command::createExpression() const { if (overwrite_) { return action_ + "\t" + guard_ + " -> " + update_ + Configuration::overwrite_identifier_; } return "\t" + action_ + "\t" + guard_ + " -> " + update_+ Configuration::configuration_identifier_; } std::string Constant::createExpression() const { if (overwrite_) { return "const " + type_ + " " + constant_ + " = " + value_ + Configuration::overwrite_identifier_; } return "const " + type_ + " " + constant_ + " = " + value_ + Configuration::configuration_identifier_; } YAML::Node YAML::convert::encode(const Module& rhs) { YAML::Node node; node.push_back(rhs.module_); node.push_back(rhs.commands_); return node; } bool YAML::convert::decode(const YAML::Node& node, Module& rhs) { if (!node.Type() == NodeType::Map) { return false; } rhs.commands_ = node["commands"].as>(); rhs.module_ = node["module"].as(); if (node["module_text"]) { rhs.module_text_ = node["module_text"].as(); } if (node["overwrite"]) { rhs.overwrite_module = node["overwrite"].as(); } return true; } YAML::Node YAML::convert::encode(const Command& rhs) { YAML::Node node; node.push_back(rhs.action_); node.push_back(rhs.guard_); node.push_back(rhs.overwrite_); node.push_back(rhs.update_); return node; } bool YAML::convert::decode(const YAML::Node& node, Command& rhs) { if (!node.Type() == NodeType::Map) { return false; } rhs.action_ = node["action"].as(); if (node["guard"]) { rhs.guard_ = node["guard"].as(); } if (node["update"]) { rhs.update_ = node["update"].as(); } if (node["overwrite"]) { rhs.overwrite_ = node["overwrite"].as(); } if (node["index"]) { try { rhs.indexes_ = node["index"].as>(); } catch(const std::exception& e) { rhs.indexes_ = {node["index"].as()}; } } return true; } YAML::Node YAML::convert