Class StringRef

Synopsis

#include <include/internal/catch_stringref.h>

class StringRef

Description

A non-owning string class (similar to the forthcoming std::string_view) Note that, because a StringRef may be a substring of another string, it may not be null terminated.

Methods

StringRef overload
begin

Mentioned in

c_str
data
empty
end

Mentioned in

isNullTerminated
operator std::string
operator!=
operator==
operator[]
size

Mentioned in

substr

Source

Lines 20-89 in include/internal/catch_stringref.h.

class StringRef {
public:
    using size_type = std::size_t;
    using const_iterator = const char*;
private:
    static constexpr char const* const s_empty = "";
    char const* m_start = s_empty;
    size_type m_size = 0;
public: // construction
    constexpr StringRef() noexcept = default;
    StringRef( char const* rawChars ) noexcept;
    constexpr 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() )
    {}
    explicit operator std::string() const {
        return std::string(m_start, m_size);
    }
public: // operators
    auto operator == ( StringRef const& other ) const noexcept -> bool;
    auto operator != (StringRef const& other) const noexcept -> bool {
        return !(*this == other);
    }
    auto operator[] ( size_type index ) const noexcept -> char {
        assert(index < m_size);
        return m_start[index];
    }
public: // named queries
    constexpr auto empty() const noexcept -> bool {
        return m_size == 0;
    }
    constexpr auto size() const noexcept -> size_type {
        return m_size;
    }
    // Returns the current start pointer. If the StringRef is not
    // null-terminated, throws std::domain_exception
    auto c_str() const -> char const*;
public: // substrings and searches
    // Returns a substring of [start, start + length).
    // If start + length > size(), then the substring is [start, size()).
    // If start > size(), then the substring is empty.
    auto substr( size_type start, size_type length ) const noexcept -> StringRef;
    // Returns the current start pointer. May not be null-terminated.
    auto data() const noexcept -> char const*;
    constexpr auto isNullTerminated() const noexcept -> bool {
        return m_start[m_size] == '\0';
    }
public: // iterators
    constexpr const_iterator begin() const { return m_start; }
    constexpr const_iterator end() const { return m_start + m_size; }
};





Add Discussion as Guest

Log in