diff --git a/dune/stuff/common/string.hh b/dune/stuff/common/string.hh index 4f004938adc003d31ee7ac00024ed900cfc698e6..dc440bbc4fd7a5101724f6e8b9665c0c57f8e4b9 100644 --- a/dune/stuff/common/string.hh +++ b/dune/stuff/common/string.hh @@ -95,11 +95,26 @@ inline std::vector<T> tokenize(const std::string& msg, const std::string& seperators, const boost::algorithm::token_compress_mode_type mode = boost::algorithm::token_compress_off) { - std::vector<T> strings; + std::vector<std::string> strings; + boost::algorithm::split(strings, msg, boost::algorithm::is_any_of(seperators), mode); + std::vector<T> ret(strings.size()); + size_t i = 0; + // special case for empty strings to avoid non-default init + std::generate( + std::begin(ret), std::end(ret), [&]() { return strings[i++].empty() ? T() : convertFrom<T>(strings[i - 1]); }); + return ret; +} + +template <> +inline std::vector<std::string> tokenize(const std::string& msg, const std::string& seperators, + const boost::algorithm::token_compress_mode_type mode) +{ + std::vector<std::string> strings; boost::algorithm::split(strings, msg, boost::algorithm::is_any_of(seperators), mode); return strings; } +//! returns string with local time in current locale's format inline std::string fromTime(time_t cur_time = time(NULL)) { return ctime(&cur_time);