1 #ifndef ZSTRING_VIEW_HH
2 #define ZSTRING_VIEW_HH
27 static constexpr
auto npos = std::string_view::npos;
32 : dat(s), siz(n) { assert(s[n] ==
'\0'); }
36 [[nodiscard]] constexpr
auto begin()
const {
return dat; }
37 [[nodiscard]] constexpr
auto end()
const {
return dat + siz; }
39 [[nodiscard]] constexpr
auto size()
const {
return siz; }
40 [[nodiscard]] constexpr
auto empty()
const {
return siz == 0; }
46 [[nodiscard]] constexpr
char front()
const {
return *dat; }
47 [[nodiscard]] constexpr
char back()
const {
return *(dat + siz - 1); }
48 [[nodiscard]] constexpr
const char*
data()
const {
return dat; }
49 [[nodiscard]] constexpr
const char*
c_str()
const {
return dat; }
52 return view().find(c, pos);
60 [[nodiscard]] constexpr
bool starts_with(std::string_view sv)
const {
61 return view().starts_with(sv);
64 return view().starts_with(c);
66 [[nodiscard]] constexpr
bool starts_with(
const char* s)
const {
67 return view().starts_with(s);
69 [[nodiscard]] constexpr
bool ends_with(std::string_view sv)
const {
70 return view().ends_with(sv);
72 [[nodiscard]] constexpr
bool ends_with(
char c)
const {
73 return view().ends_with(c);
75 [[nodiscard]] constexpr
bool ends_with(
const char* s)
const {
76 return view().ends_with(s);
79 [[nodiscard]]
explicit operator std::string()
const {
82 [[nodiscard]] constexpr std::string_view
view()
const {
85 [[nodiscard]] constexpr
operator std::string_view()
const {
94 static_assert(std::is_trivially_destructible_v<zstring_view>);
95 static_assert(std::is_trivially_copyable_v<zstring_view>);
96 static_assert(std::is_trivially_copy_constructible_v<zstring_view>);
97 static_assert(std::is_trivially_move_constructible_v<zstring_view>);
98 static_assert(std::is_trivially_assignable_v<zstring_view, zstring_view>);
99 static_assert(std::is_trivially_copy_assignable_v<zstring_view>);
100 static_assert(std::is_trivially_move_assignable_v<zstring_view>);
106 return std::string_view(
x) == std::string_view(y);
109 return std::string_view(
x) == std::string_view(y);
112 return std::string_view(
x) == std::string_view(y);
115 return std::string_view(
x) == y;
118 return x == std::string_view(y);
121 return std::string_view(
x) == std::string_view(y);
124 return std::string_view(
x) == std::string_view(y);
127 return std::string_view(
x) != std::string_view(y);
130 return std::string_view(
x) != std::string_view(y);
133 return std::string_view(
x) != std::string_view(y);
136 return std::string_view(
x) != y;
139 return x != std::string_view(y);
142 return std::string_view(
x) != std::string_view(y);
145 return std::string_view(
x) != std::string_view(y);
150 os << std::string_view(str);
Like std::string_view, but with the extra guarantee that it refers to a zero-terminated string.
constexpr bool ends_with(char c) const
constexpr bool starts_with(char c) const
constexpr auto begin() const
constexpr const char * c_str() const
constexpr bool starts_with(const char *s) const
constexpr auto size() const
constexpr char back() const
zstring_view(const std::string &s)
constexpr zstring_view(const char *s, size_t n)
constexpr const char * data() const
constexpr char operator[](size_type i) const
const char * const_iterator
constexpr bool ends_with(std::string_view sv) const
zstring_view(const char *s)
constexpr auto end() const
constexpr bool ends_with(const char *s) const
static constexpr auto npos
constexpr char front() const
constexpr auto find(char c, size_type pos=0) const
constexpr zstring_view substr(size_type pos) const
constexpr bool starts_with(std::string_view sv) const
constexpr auto empty() const
constexpr std::string_view view() const
constexpr KeyMatrixPosition x
Keyboard bindings.
constexpr bool operator==(const zstring_view &x, const zstring_view &y)
constexpr bool operator!=(const zstring_view &x, const zstring_view &y)
constexpr auto begin(const zstring_view &x)
constexpr auto end(const zstring_view &x)
std::ostream & operator<<(std::ostream &os, const zstring_view &str)