13
0

add string_compose argument specializations so that empty std::string and empty C strings are handled as intended

This commit is contained in:
Paul Davis 2015-09-17 17:16:05 -04:00
parent f3a1ac21cb
commit c1d6a2fd92

View File

@ -54,6 +54,10 @@ namespace StringPrivate
template <typename T>
Composition &arg(const T &obj);
// specialization to catch strings (C++ and C)
Composition &arg(const std::string &str);
Composition &arg(char const * const cstr);
// compose and return string
std::string str() const;
@ -138,6 +142,42 @@ namespace StringPrivate
return *this;
}
inline Composition &Composition::arg(const std::string &str)
{
/* specialization to ensure that empty strings show up
* in the output
*/
for (specification_map::const_iterator i = specs.lower_bound(arg_no),
end = specs.upper_bound(arg_no); i != end; ++i) {
output_list::iterator pos = i->second;
++pos;
output.insert(pos, str);
}
++arg_no;
return *this;
}
inline Composition &Composition::arg(char const * const cstr)
{
/* specialization to ensure that empty C strings show up
* in the output
*/
for (specification_map::const_iterator i = specs.lower_bound(arg_no),
end = specs.upper_bound(arg_no); i != end; ++i) {
output_list::iterator pos = i->second;
++pos;
output.insert(pos, std::string (cstr));
}
++arg_no;
return *this;
}
inline Composition::Composition(std::string fmt)
: arg_no(1)
{