diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2014-02-24 09:54:30 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2014-02-24 09:54:30 -0800 |
commit | 688ea28bed24ce74ab47f20f0f9471d7d4c8c1a2 (patch) | |
tree | 6349b61d51a6995897af3038d0946bdeb527b6da | |
parent | 5e7c01c2518d0e0dd412f675b48ac59e8e84dc93 (diff) |
Optimize the tokenize_variable_array hot spot to do less string copying
-rw-r--r-- | common.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
@@ -1674,14 +1674,17 @@ int common_get_height() void tokenize_variable_array(const wcstring &val, std::vector<wcstring> &out) { size_t pos = 0, end = val.size(); - while (pos < end) + while (pos <= end) { size_t next_pos = val.find(ARRAY_SEP, pos); - if (next_pos == wcstring::npos) break; - out.push_back(val.substr(pos, next_pos - pos)); - pos = next_pos + 1; //skip the separator + if (next_pos == wcstring::npos) + { + 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) |