mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +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:
		| @@ -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; | ||||
|     }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský