#include namespace NV { namespace Metric { namespace Parser { inline bool ParseMetricNameString(const std::string& metricName, std::string* reqName, bool* isolated, bool* keepInstances) { std::string& name = *reqName; name = metricName; if (name.empty()) { return false; } // boost program_options sometimes inserts a \n between the metric name and a '&' at the end size_t pos = name.find('\n'); if (pos != std::string::npos) { name.erase(pos, 1); } // trim whitespace while (name.back() == ' ') { name.pop_back(); if (name.empty()) { return false; } } *keepInstances = false; if (name.back() == '+') { *keepInstances = true; name.pop_back(); if (name.empty()) { return false; } } *isolated = true; if (name.back() == '$') { name.pop_back(); if (name.empty()) { return false; } } else if (name.back() == '&') { *isolated = false; name.pop_back(); if (name.empty()) { return false; } } return true; } } } }