#include "parameterset.h" #include "comment.h" #include "modcontext.h" #include "expression.h" #include void ParameterSet::readParameterSet(const std::string &filename) { try { pt::read_json(filename, this->root); } catch (const pt::json_parser_error &e) { // FIXME: Better error handling std::cerr << e.what() << std::endl; } } void ParameterSet::writeParameterSet(const std::string &filename) const { if (this->root.empty()) return; try { pt::write_json(filename, this->root); } catch (const pt::json_parser_error &e) { // FIXME: Better error handling std::cerr << e.what() << std::endl; } } void ParameterSet::applyParameterSet(FileModule *fileModule, const std::string &setName) { if (fileModule == NULL || this->root.empty()) return; try { ModuleContext ctx; std::string path = "SET." + setName; for (auto &assignment : fileModule->scope.assignments) { for (auto &v : root.get_child(path)) { if (v.first == assignment.name) { const ValuePtr defaultValue = assignment.expr->evaluate(&ctx); if (defaultValue->type() == Value::STRING) { assignment.expr = shared_ptr(new Literal(ValuePtr(v.second.data()))); } else if (defaultValue->type() == Value::BOOL) { assignment.expr = shared_ptr(new Literal(ValuePtr(v.second.get_value()))); } else { shared_ptr params = CommentParser::parser(v.second.data().c_str()); if (!params) continue; ModuleContext ctx; if (defaultValue->type() == params->evaluate(&ctx)->type()) { assignment.expr = params; } } } } } } catch (std::exception const& e) { // FIXME: Better error handling std::cerr << e.what() << std::endl; } }