summaryrefslogtreecommitdiffstats
path: root/src/Utilities.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2017-07-05 15:15:42 +0200
committerWillem Jan Palenstijn <Willem.Jan.Palenstijn@cwi.nl>2017-10-17 20:35:30 +0200
commit7b25c857ded357c0cb0b481dac6404c27ed0293d (patch)
tree2b2d61cedfbfd0536a61fcda388030d41c36d57a /src/Utilities.cpp
parent207e8f099f8004de82ee02fff235e85638ca2223 (diff)
downloadastra-7b25c857ded357c0cb0b481dac6404c27ed0293d.tar.gz
astra-7b25c857ded357c0cb0b481dac6404c27ed0293d.tar.bz2
astra-7b25c857ded357c0cb0b481dac6404c27ed0293d.tar.xz
astra-7b25c857ded357c0cb0b481dac6404c27ed0293d.zip
Reduce stringstream creation/imbue overhead
Diffstat (limited to 'src/Utilities.cpp')
-rw-r--r--src/Utilities.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/Utilities.cpp b/src/Utilities.cpp
index eb06d8b..eb34092 100644
--- a/src/Utilities.cpp
+++ b/src/Utilities.cpp
@@ -73,7 +73,24 @@ std::vector<float> stringToFloatVector(const std::string &s)
std::vector<double> stringToDoubleVector(const std::string &s)
{
- return stringToVector<double>(s);
+ std::vector<double> out;
+ out.reserve(100);
+ std::istringstream iss;
+ iss.imbue(std::locale::classic());
+ size_t current = 0;
+ size_t next;
+ do {
+ next = s.find_first_of(",;", current);
+ std::string t = s.substr(current, next - current);
+ iss.str(t);
+ iss.clear();
+ double f;
+ iss >> f;
+ out.push_back(f);
+ current = next + 1;
+ } while (next != std::string::npos);
+
+ return out;
}
template<typename T>