Optimize the tokenize_variable_array hot spot to do less string copying

This commit is contained in:
ridiculousfish 2014-02-24 09:54:30 -08:00
parent 5e7c01c251
commit 688ea28bed

View file

@ -1674,14 +1674,17 @@ int common_get_height()
void tokenize_variable_array(const wcstring &val, std::vector<wcstring> &out) void tokenize_variable_array(const wcstring &val, std::vector<wcstring> &out)
{ {
size_t pos = 0, end = val.size(); size_t pos = 0, end = val.size();
while (pos < end) while (pos <= end)
{ {
size_t next_pos = val.find(ARRAY_SEP, pos); size_t next_pos = val.find(ARRAY_SEP, pos);
if (next_pos == wcstring::npos) break; if (next_pos == wcstring::npos)
out.push_back(val.substr(pos, next_pos - pos)); {
pos = next_pos + 1; //skip the separator next_pos = end;
}
out.resize(out.size() + 1);
out.back().assign(val, pos, next_pos - pos);
pos = next_pos + 1; //skip the separator, or skip past the end
} }
out.push_back(val.substr(pos, end - pos));
} }
bool string_prefixes_string(const wchar_t *proposed_prefix, const wcstring &value) bool string_prefixes_string(const wchar_t *proposed_prefix, const wcstring &value)