mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-23 03:43:28 +01:00
Inlined StringRef ctors/ dtor and size() and empty()
This commit is contained in:
parent
c443afcca0
commit
b0c379f621
@ -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 {
|
||||
|
||||
@ -34,14 +36,46 @@ namespace Catch {
|
||||
|
||||
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*;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user