123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #ifndef CATCH_STRINGREF_H_INCLUDED
- #define CATCH_STRINGREF_H_INCLUDED
- #include <cstddef>
- #include <string>
- #include <iosfwd>
- #include <cassert>
- namespace Catch {
-
-
-
- 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:
- 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:
- 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:
- constexpr auto empty() const noexcept -> bool {
- return m_size == 0;
- }
- constexpr auto size() const noexcept -> size_type {
- return m_size;
- }
-
-
- auto c_str() const -> char const*;
- public:
-
-
-
- auto substr( size_type start, size_type length ) const noexcept -> StringRef;
-
- auto data() const noexcept -> char const*;
- constexpr auto isNullTerminated() const noexcept -> bool {
- return m_start[m_size] == '\0';
- }
- public:
- constexpr const_iterator begin() const { return m_start; }
- constexpr const_iterator end() const { return m_start + m_size; }
- };
- auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&;
- auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&;
- constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef {
- return StringRef( rawChars, size );
- }
- }
- constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef {
- return Catch::StringRef( rawChars, size );
- }
- #endif
|