Add cmSystemTools::ExpandedLists and cmSystemTools::ExpandedListArgument methods
Changes
In cmSystemTools
this
- renames the method
ExpandList
toExpandLists
and makes it iterator based
and adds the methods
std::vector<std::string> ExpandedLists(InputIt first, InputIt last)
std::vector<std::string> ExpandedListArgument(const std::string& arg, bool emptyArgs)
Both return the std::vector<std::string>
instead of taking a return vector reference like cmSystemTools::ExpandLists
and cmSystemTools::ExpandListArgument
.
Motivation
Since C++17 return value optimization is mandatory, so returning a std:vector<std::string>
from a function should be (at least) as fast as passing a return vector reference to the function.
The new methods can replace cmSystemTools::ExpandLists
and cmSystemTools::ExpandListArgument
in many cases which leads to shorter and simpler syntax.
E.g. the commonly used pattern
if (const char* value = X->GetProperty("A_KEY_STRING")) {
std::vector<std::string> valuesList;
cmSystemTools::ExpandListArgument(value, valuesList);
for (std::string const& i : valuesList) {
doSomething(i);
}
}
becomes
if (const char* value = X->GetProperty("A_KEY_STRING")) {
for (std::string const& i :
cmSystemTools::ExpandedListArgument(value)) {
doSomething(i);
}
}