Improve XmlWriter::writeAttribute overload set for string-like types

Previously, string literals and `std::string`s would match the
template variant, which would serialize them into a stream and then
call the `StringRef` overload for resulting string. This caused
bunch of codebloat and unnecessary pessimization for common usage.
This commit is contained in:
Martin Hořeňovský
2021-05-30 13:06:03 +02:00
parent d9f72868b2
commit 41ad0fda11
2 changed files with 36 additions and 7 deletions
+15 -1
View File
@@ -217,6 +217,14 @@ namespace {
return *this;
}
XmlWriter::ScopedElement&
XmlWriter::ScopedElement::writeAttribute( StringRef name,
StringRef attribute ) {
m_writer->writeAttribute( name, attribute );
return *this;
}
XmlWriter::XmlWriter( std::ostream& os ) : m_os( os )
{
writeDeclaration();
@@ -276,7 +284,13 @@ namespace {
}
XmlWriter& XmlWriter::writeAttribute( StringRef name, bool attribute ) {
m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"';
writeAttribute(name, (attribute ? "true"_sr : "false"_sr));
return *this;
}
XmlWriter& XmlWriter::writeAttribute( StringRef name,
char const* attribute ) {
writeAttribute( name, StringRef( attribute ) );
return *this;
}