codekingpro/portable-devtools
114k
1#include <string>
2
3namespace NV {
4 namespace Metric {
5 namespace Parser {
6 inline bool ParseMetricNameString(const std::string& metricName, std::string* reqName, bool* isolated, bool* keepInstances)
7 {
8 std::string& name = *reqName;
9 name = metricName;
10 if (name.empty())
11 {
12 return false;
13 }
14
15 // boost program_options sometimes inserts a \n between the metric name and a '&' at the end
16 size_t pos = name.find('\n');
17 if (pos != std::string::npos)
18 {
19 name.erase(pos, 1);
20 }
21
22 // trim whitespace
23 while (name.back() == ' ')
24 {
25 name.pop_back();
26 if (name.empty())
27 {
28 return false;
29 }
30 }
31
32 *keepInstances = false;
33 if (name.back() == '+')
34 {
35 *keepInstances = true;
36 name.pop_back();
37 if (name.empty())
38 {
39 return false;
40 }
41 }
42
43 *isolated = true;
44 if (name.back() == '$')
45 {
46 name.pop_back();
47 if (name.empty())
48 {
49 return false;
50 }
51 }
52 else if (name.back() == '&')
53 {
54 *isolated = false;
55 name.pop_back();
56 if (name.empty())
57 {
58 return false;
59 }
60 }
61
62 return true;
63 }
64 }
65 }
66}