15 }
catch (std::exception&
e) {
17 std::string message =
"Parsing " + name +
" failed with error: " +
e.what();
18 throw std::logic_error(message);
23 nameElements.push_back(name);
26 nameElements.push_back(std::string(
"[" + std::to_string(i) +
"]"));
30 std::string ret = nameElements.back();
31 nameElements.pop_back();
36 std::string ret = nameElements.front();
37 nameElements.pop_front();
42 return nameElements.front();
46 return nameElements.size();
50 return nameElements.empty();
54 return std::vector<std::string>(nameElements.begin(), nameElements.end());
58 if (nameElements.empty()) {
64 ss << nameElements[0];
65 for (
unsigned int i = 1; i < nameElements.size(); i++) {
66 if (nameElements[i].at(0) !=
'[') {
70 ss << nameElements[i];
77 std::deque<std::string> nameElements;
80 void parse_str(std::string name) {
83 if (name.size() == 0) {
87 size_t dot_pos = name.find(
".", 0);
88 size_t index_pos = name.find(
"[", 0);
90 std::string rest_of_name;
92 if (dot_pos == std::string::npos && index_pos == std::string::npos) {
99 }
else if (index_pos == 0) {
101 size_t end_index_pos = name.find(
"]", 0);
102 if (end_index_pos == std::string::npos) {
104 throw std::logic_error(
"Missing end bracket");
107 size_t number_length = end_index_pos - (index_pos+1);
108 std::string number = name.substr(index_pos+1, number_length);
112 index = stoi(number);
113 }
catch (std::exception&
e) {
115 std::string message =
"Index brackets contain \"" + number +
"\", which cannot be parsed as an unsigned integer.";
116 throw std::logic_error(message);
120 std::string message =
"Index brackets contain a negative number (" + number +
").";
121 throw std::logic_error(message);
126 rest_of_name = name.substr(end_index_pos+1);
127 }
else if (dot_pos == 0) {
130 rest_of_name = name.substr(1);
136 size_t name_end_index = [=]() ->
size_t {
137 if (index_pos == std::string::npos)
return dot_pos;
138 if (dot_pos == std::string::npos)
return index_pos;
139 return std::min(dot_pos, index_pos);
142 std::string subname = name.substr(0, name_end_index);
145 rest_of_name = name.substr(name_end_index);
149 parse_str(rest_of_name);
Definition: MutableVariableName.hpp:9
void pushIndex(int i)
Definition: MutableVariableName.hpp:25
std::string pop_front()
Definition: MutableVariableName.hpp:35
bool empty()
Definition: MutableVariableName.hpp:49
std::string pop_back()
Definition: MutableVariableName.hpp:29
MutableVariableName()
Definition: MutableVariableName.hpp:11
void pushName(std::string name)
Definition: MutableVariableName.hpp:22
std::string front()
Definition: MutableVariableName.hpp:41
int size()
Definition: MutableVariableName.hpp:45
std::string toString() const
Definition: MutableVariableName.hpp:57
MutableVariableName(std::string name)
Definition: MutableVariableName.hpp:12
std::vector< std::string > getElements() const
Definition: MutableVariableName.hpp:53
e
Definition: AllocInfo.hpp:23