diff --git a/src/caliper/ConfigManager.cpp b/src/caliper/ConfigManager.cpp index ad98aa86..47057b3c 100644 --- a/src/caliper/ConfigManager.cpp +++ b/src/caliper/ConfigManager.cpp @@ -311,147 +311,6 @@ void add_metadata(const std::string &args, info_map_t &info) { } } -ConfigManager::arglist_t parse_keyval_list(std::istream &is) { - ConfigManager::arglist_t ret; - char c = 0; - - do { - std::string key = util::read_word(is, "="); - if (key.empty()) - return ret; - - c = util::read_char(is); - if (c != '=') - return ret; - - std::string val = util::read_word(is, ",()"); - if (!val.empty()) - ret.push_back(std::make_pair(key, val)); - - c = util::read_char(is); - } while (is.good() && c == ','); - - if (is.good()) - is.unget(); - - return ret; -} - -std::pair -find_key_in_json(const std::vector &path, - const std::map &dict) { - if (path.empty()) - return std::make_pair(false, StringConverter()); - - auto it = dict.find(path.front()); - if (it == dict.end()) - return std::make_pair(false, StringConverter()); - - if (path.size() == 1) - return std::make_pair(true, it->second); - - StringConverter ret = it->second; - for (auto path_it = path.begin() + 1; path_it != path.end(); ++path_it) { - auto sub_dict = ret.rec_dict(); - it = sub_dict.find(*path_it); - if (it == sub_dict.end()) - return std::make_pair(false, StringConverter()); - ret = it->second; - } - - return std::make_pair(true, ret); -} - -unsigned add_metadata_entries(const std::string &key, - const StringConverter &val, info_map_t &info) { - unsigned num_entries = 0; - - bool is_dict = false; - auto dict = val.rec_dict(&is_dict); - - if (is_dict) { - std::string prefix = key + "."; - for (const auto &p : dict) - num_entries += add_metadata_entries(prefix + p.first, p.second, info); - } else { - info[key] = val.to_string(); - ++num_entries; - } - - return num_entries; -} - -void read_metadata_from_json_file(const std::string &filename, - const std::string &keys, info_map_t &info) { - std::ifstream is(filename.c_str(), std::ios::ate); - - if (!is) { - Log(0).stream() << "read_metadata_from_json_file(): Cannot open file " - << filename << ", quitting\n"; - return; - } - - auto size = is.tellg(); - std::string str(size, '\0'); - is.seekg(0); - if (!is.read(&str[0], size)) { - Log(0).stream() << "read_metadata_from_json_file(): Cannot read file " - << filename << ", quitting\n"; - return; - } - - bool ok = false; - auto top = StringConverter(str).rec_dict(&ok); - - if (!ok) { - Log(0).stream() - << "read_metadata_from_json_file(): Cannot parse top-level dict in " - << filename << ", quitting\n"; - return; - } - - auto keylist = StringConverter(keys).to_stringlist(); - if (keylist.empty()) { - for (const auto &p : top) - keylist.push_back(p.first); - } - - for (const std::string &key : keylist) { - std::vector path = StringConverter(key).to_stringlist("."); - auto ret = find_key_in_json(path, top); - if (ret.first) - add_metadata_entries(key, ret.second, info); - else - Log(1).stream() << "read_metadata_from_json_file(): Key " << key - << " not found\n"; - } -} - -void add_metadata(const std::string &args, info_map_t &info) { - std::istringstream is(args); - auto arglist = parse_keyval_list(is); - - auto it = std::find_if(arglist.begin(), arglist.end(), - [](const std::pair &p) { - return p.first == "file"; - }); - - if (it != arglist.end()) { - std::string filename = it->second; - std::string keys; - it = std::find_if(arglist.begin(), arglist.end(), - [](const std::pair &p) { - return p.first == "keys"; - }); - if (it != arglist.end()) - keys = it->second; - read_metadata_from_json_file(filename, keys, info); - } else { - for (const auto &p : arglist) - info[p.first] = p.second; - } -} - } // namespace //