mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 07:16:10 +01:00
Use StringRef through XmlEncode
This introduces a potential lifetime risk when using the API, but the intended way to use the `XmlEncode` class is to use it directly, e.g. `out << XmlEncode(some-text-argument)`, not to store it around. The benefit is that we avoid allocations for strings that do not fit into SSO for given platform.
This commit is contained in:
parent
aba114d6fe
commit
1d04427fcd
@ -77,7 +77,7 @@ namespace {
|
||||
}
|
||||
|
||||
|
||||
XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat )
|
||||
XmlEncode::XmlEncode( StringRef str, ForWhat forWhat )
|
||||
: m_str( str ),
|
||||
m_forWhat( forWhat )
|
||||
{}
|
||||
|
@ -9,6 +9,7 @@
|
||||
#define CATCH_XMLWRITER_HPP_INCLUDED
|
||||
|
||||
#include <catch2/internal/catch_stream.hpp>
|
||||
#include <catch2/internal/catch_stringref.hpp>
|
||||
|
||||
#include <vector>
|
||||
|
||||
@ -22,18 +23,24 @@ namespace Catch {
|
||||
XmlFormatting operator | (XmlFormatting lhs, XmlFormatting rhs);
|
||||
XmlFormatting operator & (XmlFormatting lhs, XmlFormatting rhs);
|
||||
|
||||
/**
|
||||
* Helper for XML-encoding text (escaping angle brackets, quotes, etc)
|
||||
*
|
||||
* Note: doesn't take ownership of passed strings, and thus the
|
||||
* encoded string must outlive the encoding instance.
|
||||
*/
|
||||
class XmlEncode {
|
||||
public:
|
||||
enum ForWhat { ForTextNodes, ForAttributes };
|
||||
|
||||
XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes );
|
||||
XmlEncode( StringRef str, ForWhat forWhat = ForTextNodes );
|
||||
|
||||
void encodeTo( std::ostream& os ) const;
|
||||
|
||||
friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode );
|
||||
|
||||
private:
|
||||
std::string m_str;
|
||||
StringRef m_str;
|
||||
ForWhat m_forWhat;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user