20inline std::vector<std::string>
split(
const std::string &str,
char delim)
24 std::vector<std::string> parts;
26 while ((start = str.find_first_not_of(delim, end)) != std::string::npos)
28 end = str.find(delim, start);
29 parts.push_back(str.substr(start, end - start));
37 std::vector<std::string> temp =
split(str, delim);
38 std::vector<size_t> res;
39 res.reserve(temp.size());
41 for (
const std::string& s : temp)
43 char *p_end =
nullptr;
44 long int t = strtol(s.c_str(), &p_end, 10);
45 if (p_end != s.data() + s.size())
47 throw std::range_error(
"Can't parse \"" + str +
"\"");
51 throw std::range_error(
"Can't parse \"" + str +
"\": value " + std::to_string(t) +
" must be > 0");
53 if (
size_t(t) >= std::numeric_limits<size_t>::max())
55 throw std::range_error(
"Can't parse \"" + str +
"\": value " + std::to_string(t) +
" is too high");
57 res.push_back(
size_t(t));