Skip to content

Commit

Permalink
Fixes rebase mistakes
Browse files Browse the repository at this point in the history
  • Loading branch information
ilumsden committed Oct 8, 2024
1 parent dcaa491 commit 494dd52
Showing 1 changed file with 0 additions and 141 deletions.
141 changes: 0 additions & 141 deletions src/caliper/ConfigManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<bool, StringConverter>
find_key_in_json(const std::vector<std::string> &path,
const std::map<std::string, StringConverter> &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<std::string> 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<std::string, std::string> &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<std::string, std::string> &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

//
Expand Down

0 comments on commit 494dd52

Please sign in to comment.