cmStandardIncludes: Add a join algorithm for string containers.
This requires the input range to supply BidirectionalIterators, which is not a problem for where it is currently useful to us. The alternative would be to not invoke --last;, and instead create an output iterator similar to std::ostream_iterator, but which puts the delimiter before the item to output.
This commit is contained in:
parent
b5813ceeb5
commit
8dc8d756bc
|
@ -358,6 +358,33 @@ static thisClass* SafeDownCast(cmObject *c) \
|
|||
} \
|
||||
class cmTypeMacro_UseTrailingSemicolon
|
||||
|
||||
template<typename Range>
|
||||
std::string cmJoin(Range const& r, const char* delimiter)
|
||||
{
|
||||
if (r.empty())
|
||||
{
|
||||
return std::string();
|
||||
}
|
||||
std::ostringstream os;
|
||||
typedef typename Range::value_type ValueType;
|
||||
typedef typename Range::const_iterator InputIt;
|
||||
InputIt first = r.begin();
|
||||
InputIt last = r.end();
|
||||
--last;
|
||||
std::copy(first, last,
|
||||
std::ostream_iterator<ValueType>(os, delimiter));
|
||||
|
||||
os << *last;
|
||||
|
||||
return os.str();
|
||||
}
|
||||
|
||||
template<typename Range>
|
||||
std::string cmJoin(Range const& r, std::string delimiter)
|
||||
{
|
||||
return cmJoin(r, delimiter.c_str());
|
||||
};
|
||||
|
||||
inline bool cmHasLiteralPrefixImpl(const std::string &str1,
|
||||
const char *str2,
|
||||
size_t N)
|
||||
|
|
Loading…
Reference in New Issue