mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Inlined StringRef ctors/ dtor and size() and empty()
This commit is contained in:
		| @@ -14,63 +14,8 @@ | ||||
| #include "catch_stringref.h" | ||||
|  | ||||
| #include <ostream> | ||||
| #include <cstring> | ||||
| #include <stdexcept> | ||||
|  | ||||
|  | ||||
|  | ||||
| namespace Catch { | ||||
|      namespace { | ||||
|  | ||||
|      auto getEmptyStringRef() -> StringRef { | ||||
|          static StringRef s_emptyStringRef(""); | ||||
|          return s_emptyStringRef; | ||||
|      } | ||||
|  | ||||
|      char const* enforceNonNull(char const* ptr) { | ||||
|          if (ptr == nullptr) { | ||||
|              std::abort(); | ||||
|          } | ||||
|          return ptr; | ||||
|      } | ||||
|  | ||||
|      } | ||||
|  | ||||
|     StringRef::StringRef() noexcept | ||||
|     :   StringRef( getEmptyStringRef() ) | ||||
|     {} | ||||
|  | ||||
|     StringRef::StringRef( StringRef const& other ) noexcept | ||||
|     :   m_start( other.m_start ), | ||||
|         m_size( other.m_size ) | ||||
|     {} | ||||
|  | ||||
|     StringRef::StringRef( StringRef&& other ) noexcept | ||||
|     :   m_start( other.m_start ), | ||||
|         m_size( other.m_size ), | ||||
|         m_data( other.m_data ) | ||||
|     { | ||||
|         other.m_data = nullptr; | ||||
|     } | ||||
|  | ||||
|     StringRef::StringRef(char const* rawChars) noexcept | ||||
|         :   m_start( enforceNonNull(rawChars) ), | ||||
|             m_size( static_cast<size_type>(std::strlen(rawChars))) | ||||
|     {} | ||||
|  | ||||
|     StringRef::StringRef( char const* rawChars, size_type size ) noexcept | ||||
|     :   m_start( rawChars ), | ||||
|         m_size( size ) | ||||
|     {} | ||||
|  | ||||
|     StringRef::StringRef( std::string const& stdString ) noexcept | ||||
|     :   m_start( stdString.c_str() ), | ||||
|         m_size( stdString.size() ) | ||||
|     {} | ||||
|  | ||||
|     StringRef::~StringRef() noexcept { | ||||
|         delete[] m_data; | ||||
|     } | ||||
|  | ||||
|     auto StringRef::operator = ( StringRef other ) noexcept -> StringRef& { | ||||
|         swap( other ); | ||||
| @@ -129,13 +74,6 @@ namespace Catch { | ||||
|         return m_start[index]; | ||||
|     } | ||||
|  | ||||
|     auto StringRef::empty() const noexcept -> bool { | ||||
|         return m_size == 0; | ||||
|     } | ||||
|  | ||||
|     auto StringRef::size() const noexcept -> size_type { | ||||
|         return m_size; | ||||
|     } | ||||
|     auto StringRef::numberOfCharacters() const noexcept -> size_type { | ||||
|         size_type noChars = m_size; | ||||
|         // Make adjustments for uft encodings | ||||
|   | ||||
| @@ -10,6 +10,8 @@ | ||||
| #include <cstddef> | ||||
| #include <string> | ||||
| #include <iosfwd> | ||||
| #include <cassert> | ||||
| #include <cstring> | ||||
|  | ||||
| namespace Catch { | ||||
|      | ||||
| @@ -33,16 +35,48 @@ namespace Catch { | ||||
|         char* m_data = nullptr; | ||||
|          | ||||
|         void takeOwnership(); | ||||
|  | ||||
|         static constexpr char const* const s_empty = ""; | ||||
|          | ||||
|     public: // construction/ assignment | ||||
|         StringRef() noexcept; | ||||
|         StringRef( StringRef const& other ) noexcept; | ||||
|         StringRef( StringRef&& other ) noexcept; | ||||
|         StringRef( char const* rawChars ) noexcept; | ||||
|         StringRef( char const* rawChars, size_type size ) noexcept; | ||||
|         StringRef( std::string const& stdString ) noexcept; | ||||
|         ~StringRef() noexcept; | ||||
|          | ||||
|         StringRef() noexcept | ||||
|         :   StringRef( s_empty, 0 ) | ||||
|         {} | ||||
|  | ||||
|         StringRef( StringRef const& other ) noexcept | ||||
|         :   m_start( other.m_start ), | ||||
|             m_size( other.m_size ) | ||||
|         {} | ||||
|  | ||||
|         StringRef( StringRef&& other ) noexcept | ||||
|         :   m_start( other.m_start ), | ||||
|             m_size( other.m_size ), | ||||
|             m_data( other.m_data ) | ||||
|         { | ||||
|             other.m_data = nullptr; | ||||
|         } | ||||
|  | ||||
|         StringRef( char const* rawChars ) noexcept | ||||
|             :   m_start( rawChars ), | ||||
|                 m_size( static_cast<size_type>(std::strlen(rawChars))) | ||||
|         { | ||||
|             assert( rawChars ); | ||||
|         } | ||||
|  | ||||
|         StringRef( char const* rawChars, size_type size ) noexcept | ||||
|         :   m_start( rawChars ), | ||||
|             m_size( size ) | ||||
|         {} | ||||
|  | ||||
|         StringRef( std::string const& stdString ) noexcept | ||||
|         :   m_start( stdString.c_str() ), | ||||
|             m_size( stdString.size() ) | ||||
|         {} | ||||
|  | ||||
|         ~StringRef() noexcept { | ||||
|             delete[] m_data; | ||||
|         } | ||||
|  | ||||
|         auto operator = ( StringRef other ) noexcept -> StringRef&; | ||||
|         operator std::string() const; | ||||
|  | ||||
| @@ -55,8 +89,13 @@ namespace Catch { | ||||
|         auto operator[] ( size_type index ) const noexcept -> char; | ||||
|          | ||||
|     public: // named queries | ||||
|         auto empty() const noexcept -> bool; | ||||
|         auto size() const noexcept -> size_type; | ||||
|         auto empty() const noexcept -> bool { | ||||
|             return m_size == 0; | ||||
|         } | ||||
|         auto size() const noexcept -> size_type { | ||||
|             return m_size; | ||||
|         } | ||||
|  | ||||
|         auto numberOfCharacters() const noexcept -> size_type; | ||||
|         auto c_str() const -> char const*; | ||||
|          | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Nash
					Phil Nash