2#include "gaia/config/config.h"
7#include "gaia/cnt/darray.h"
8#include "gaia/core/span.h"
36 GAIA_NODISCARD
constexpr const char*
data()
const {
42 GAIA_NODISCARD
constexpr uint32_t
size()
const {
48 GAIA_NODISCARD
constexpr bool empty()
const {
56 GAIA_NODISCARD
constexpr uint32_t
find(
str_view value, uint32_t pos = 0)
const {
65 GAIA_NODISCARD
constexpr uint32_t
find(
const char* value, uint32_t len, uint32_t pos)
const {
73 for (uint32_t i = pos; i + len <=
m_size; ++i) {
74 if (equal_bytes(
m_data + i, value, len))
86 GAIA_NODISCARD
constexpr uint32_t
find(
const char (&lit)[N], uint32_t pos = 0)
const {
95 GAIA_NODISCARD
constexpr uint32_t
find(
char ch, uint32_t pos = 0)
const {
98 for (uint32_t i = pos; i <
m_size; ++i) {
112 for (uint32_t i = pos; i <
m_size; ++i) {
113 if (contains(chars,
m_data[i]))
123 GAIA_NODISCARD
constexpr uint32_t
find_first_of(
char ch, uint32_t pos = 0)
const {
124 return find(ch, pos);
133 GAIA_NODISCARD
constexpr uint32_t
find_first_of(
const char (&lit)[N], uint32_t pos = 0)
const {
146 if (i == BadIndex || i >=
m_size)
150 if (contains(chars,
m_data[i]))
163 GAIA_NODISCARD
constexpr uint32_t
find_last_of(
char ch, uint32_t pos = BadIndex)
const {
168 if (i == BadIndex || i >=
m_size)
187 GAIA_NODISCARD
constexpr uint32_t
find_last_of(
const char (&lit)[N], uint32_t pos = BadIndex)
const {
201 for (uint32_t i = pos; i <
m_size; ++i) {
202 if (!contains(chars,
m_data[i]))
215 for (uint32_t i = pos; i <
m_size; ++i) {
228 GAIA_NODISCARD
constexpr uint32_t
find_first_not_of(
const char (&lit)[N], uint32_t pos = 0)
const {
241 if (i == BadIndex || i >=
m_size)
248 if (!contains(chars,
m_data[i]))
261 GAIA_NODISCARD
constexpr uint32_t
find_last_not_of(
char ch, uint32_t pos = BadIndex)
const {
266 if (i == BadIndex || i >=
m_size)
285 GAIA_NODISCARD
constexpr uint32_t
find_last_not_of(
const char (&lit)[N], uint32_t pos = BadIndex)
const {
294 GAIA_NODISCARD
constexpr bool operator==(
const char (&lit)[N])
const {
295 static_assert(N > 0);
314 GAIA_NODISCARD
static constexpr bool contains(
str_view set,
char value) {
315 for (uint32_t i = 0; i < set.m_size; ++i) {
316 if (set.m_data[i] == value)
322 GAIA_NODISCARD
static constexpr bool equal_bytes(
const char* left,
const char* right, uint32_t
size) {
323 for (uint32_t i = 0; i <
size; ++i) {
324 if (left[i] != right[i])
348 explicit str(
const char (&lit)[N]) {
383 static_assert(N > 0);
384 assign(lit, (uint32_t)(N - 1));
391 const auto oldSize = this->
size();
408 static_assert(N > 0);
409 append(lit, (uint32_t)(N - 1));
420 GAIA_NODISCARD
const char*
data()
const {
432 GAIA_NODISCARD uint32_t
size()
const {
460 static_assert(N > 0);
461 const auto len = (uint32_t)(N - 1);
462 return size() == len && (len == 0 || memcmp(
data(), lit, len) == 0);
492 GAIA_NODISCARD uint32_t
find(
const char* value, uint32_t len, uint32_t pos)
const {
493 return view().
find(value, len, pos);
502 GAIA_NODISCARD uint32_t
find(
const char (&lit)[N], uint32_t pos = 0)
const {
503 static_assert(N > 0);
511 GAIA_NODISCARD uint32_t
find(
char ch, uint32_t pos = 0)
const {
537 GAIA_NODISCARD uint32_t
find_first_of(
const char (&lit)[N], uint32_t pos = 0)
const {
553 GAIA_NODISCARD uint32_t
find_last_of(
char ch, uint32_t pos = BadIndex)
const {
563 GAIA_NODISCARD uint32_t
find_last_of(
const char (&lit)[N], uint32_t pos = BadIndex)
const {
615 GAIA_NODISCARD uint32_t
find_last_not_of(
const char (&lit)[N], uint32_t pos = BadIndex)
const {
623 GAIA_NODISCARD
constexpr bool is_whitespace(
char c) {
624 return c ==
' ' || (c >=
'\t' && c <=
'\r');
630 GAIA_NODISCARD
constexpr str_view trim(str_view expr) {
631 const auto len = expr.
size();
636 while (beg < len && is_whitespace(expr.data()[beg]))
641 uint32_t end = len - 1;
642 while (end > beg && is_whitespace(expr.data()[end]))
644 return str_view(expr.data() + beg, end - beg + 1);
650 GAIA_NODISCARD
constexpr std::span<const char> trim(std::span<const char> expr) {
651 const auto trimmed = trim(str_view(expr.data(), (uint32_t)expr.size()));
652 return std::span<const char>(trimmed.data(), trimmed.size());
Array with variable size of elements of type.
Definition darray_impl.h:27
void reserve(size_type cap)
Ensures storage for at least the requested number of elements.
Definition darray_impl.h:223
GAIA_NODISCARD size_type size() const noexcept
Returns the number of elements.
Definition darray_impl.h:504
void clear() noexcept
Removes all elements.
Definition darray_impl.h:449
void resize(size_type count)
Changes the number of elements.
Definition darray_impl.h:240
GAIA_NODISCARD bool empty() const noexcept
Checks whether the container has no elements.
Definition darray_impl.h:510
GAIA_NODISCARD pointer data() noexcept
Returns a pointer to the element storage.
Definition darray_impl.h:193
void push_back(const T &arg)
Appends an element.
Definition darray_impl.h:309
Lightweight non-owning string view over a character sequence.
Definition str.h:13
GAIA_NODISCARD constexpr uint32_t find_last_of(const char(&lit)[N], uint32_t pos=BadIndex) const
Finds the last character that is present in literal set lit.
Definition str.h:187
GAIA_NODISCARD constexpr uint32_t find_first_of(char ch, uint32_t pos=0) const
Finds the first occurrence of character ch.
Definition str.h:123
GAIA_NODISCARD constexpr uint32_t size() const
Returns the number of characters in the view.
Definition str.h:42
GAIA_NODISCARD constexpr bool operator==(const char(&lit)[N]) const
Compares this view with literal lit for exact byte equality.
Definition str.h:294
constexpr str_view(const char *data, uint32_t size)
Constructs a string view from a pointer and an explicit length.
Definition str.h:24
GAIA_NODISCARD constexpr bool operator==(str_view other) const
Compares this view with view other for exact byte equality.
Definition str.h:302
GAIA_NODISCARD constexpr uint32_t find(char ch, uint32_t pos=0) const
Finds the first occurrence of character ch starting at index pos.
Definition str.h:95
GAIA_NODISCARD constexpr uint32_t find_last_not_of(const char(&lit)[N], uint32_t pos=BadIndex) const
Finds the last character that is NOT present in literal set lit.
Definition str.h:285
GAIA_NODISCARD constexpr bool empty() const
Checks whether the view contains no characters.
Definition str.h:48
GAIA_NODISCARD constexpr uint32_t find_last_of(str_view chars, uint32_t pos=BadIndex) const
Finds the last character that is present in set chars.
Definition str.h:141
uint32_t m_size
Number of characters in the view.
Definition str.h:17
GAIA_NODISCARD constexpr uint32_t find_first_not_of(str_view chars, uint32_t pos=0) const
Finds the first character that is NOT present in set chars.
Definition str.h:195
GAIA_NODISCARD constexpr uint32_t find_last_not_of(str_view chars, uint32_t pos=BadIndex) const
Finds the last character that is NOT present in set chars.
Definition str.h:236
const char * m_data
Pointer to the first character in the view.
Definition str.h:15
GAIA_NODISCARD constexpr uint32_t find_first_of(str_view chars, uint32_t pos=0) const
Finds the first character that is present in set chars.
Definition str.h:109
GAIA_NODISCARD constexpr uint32_t find_last_not_of(char ch, uint32_t pos=BadIndex) const
Finds the last character that is different from ch.
Definition str.h:261
GAIA_NODISCARD constexpr uint32_t find_first_of(const char(&lit)[N], uint32_t pos=0) const
Finds the first character that is present in literal set lit.
Definition str.h:133
GAIA_NODISCARD constexpr uint32_t find_last_of(char ch, uint32_t pos=BadIndex) const
Finds the last occurrence of character ch.
Definition str.h:163
constexpr str_view(const char(&lit)[N])
Constructs a string view from a literal, excluding its trailing null terminator.
Definition str.h:30
GAIA_NODISCARD constexpr uint32_t find(const char(&lit)[N], uint32_t pos=0) const
Finds the first occurrence of literal lit starting at index pos.
Definition str.h:86
GAIA_NODISCARD constexpr uint32_t find(const char *value, uint32_t len, uint32_t pos) const
Finds the first occurrence of a character sequence starting at index pos.
Definition str.h:65
GAIA_NODISCARD constexpr bool operator!=(str_view other) const
Compares this view with view other for exact byte inequality.
Definition str.h:309
GAIA_NODISCARD constexpr uint32_t find_first_not_of(const char(&lit)[N], uint32_t pos=0) const
Finds the first character that is NOT present in literal set lit.
Definition str.h:228
GAIA_NODISCARD constexpr const char * data() const
Returns the underlying character pointer.
Definition str.h:36
GAIA_NODISCARD constexpr uint32_t find(str_view value, uint32_t pos=0) const
Finds the first occurrence of substring value starting at index pos.
Definition str.h:56
GAIA_NODISCARD constexpr uint32_t find_first_not_of(char ch, uint32_t pos=0) const
Finds the first character that is different from ch.
Definition str.h:212
Lightweight owning string container with explicit length semantics (no implicit null terminator).
Definition str.h:332
void append(str_view view)
Appends view contents.
Definition str.h:399
GAIA_NODISCARD uint32_t size() const
Returns number of characters stored in the string.
Definition str.h:432
GAIA_NODISCARD uint32_t find(str_view value, uint32_t pos=0) const
Finds the first occurrence of substring value starting at index pos.
Definition str.h:483
GAIA_NODISCARD uint32_t find(char ch, uint32_t pos=0) const
Finds the first occurrence of character ch starting at index pos.
Definition str.h:511
GAIA_NODISCARD char * data()
Returns mutable pointer to internal data.
Definition str.h:426
cnt::darray< char > m_data
Contiguous owned character storage.
Definition str.h:334
GAIA_NODISCARD uint32_t find_first_not_of(const char(&lit)[N], uint32_t pos=0) const
Finds the first character that is NOT present in literal set lit.
Definition str.h:589
GAIA_NODISCARD bool operator==(const char(&lit)[N]) const
Compares this string with literal lit for exact byte equality.
Definition str.h:459
GAIA_NODISCARD uint32_t find_first_of(str_view chars, uint32_t pos=0) const
Finds the first character that is present in set chars.
Definition str.h:519
GAIA_NODISCARD uint32_t find_last_of(str_view chars, uint32_t pos=BadIndex) const
Finds the last character that is present in set chars.
Definition str.h:545
GAIA_NODISCARD uint32_t find_first_not_of(str_view chars, uint32_t pos=0) const
Finds the first character that is NOT present in set chars.
Definition str.h:571
GAIA_NODISCARD uint32_t find_first_not_of(char ch, uint32_t pos=0) const
Finds the first character that is different from ch.
Definition str.h:579
void assign(const char(&lit)[N])
Replaces contents with literal lit.
Definition str.h:382
void append(const char *data, uint32_t size)
Appends size characters from data.
Definition str.h:390
void append(const char(&lit)[N])
Appends literal lit.
Definition str.h:407
GAIA_NODISCARD bool operator==(const str &other) const
Compares this string with string other for exact byte equality.
Definition str.h:475
void clear()
Removes all characters from the string.
Definition str.h:353
GAIA_NODISCARD bool empty() const
Checks whether the string contains no characters.
Definition str.h:438
GAIA_NODISCARD uint32_t find(const char *value, uint32_t len, uint32_t pos) const
Finds the first occurrence of a character sequence starting at index pos.
Definition str.h:492
str(str_view view)
Constructs a string by copying view contents.
Definition str.h:340
GAIA_NODISCARD str_view view() const
Returns a non-owning view over the current contents.
Definition str.h:444
void reserve(uint32_t len)
Reserves capacity for at least len characters.
Definition str.h:359
void assign(const char *data, uint32_t size)
Replaces contents with size characters from data.
Definition str.h:366
GAIA_NODISCARD uint32_t find(const char(&lit)[N], uint32_t pos=0) const
Finds the first occurrence of literal lit starting at index pos.
Definition str.h:502
GAIA_NODISCARD const char * data() const
Returns read-only pointer to internal data.
Definition str.h:420
GAIA_NODISCARD uint32_t find_last_not_of(const char(&lit)[N], uint32_t pos=BadIndex) const
Finds the last character that is NOT present in literal set lit.
Definition str.h:615
void assign(str_view view)
Replaces contents with view contents.
Definition str.h:374
GAIA_NODISCARD bool operator==(str_view other) const
Compares this string with view other for exact byte equality.
Definition str.h:468
GAIA_NODISCARD uint32_t find_last_of(const char(&lit)[N], uint32_t pos=BadIndex) const
Finds the last character that is present in literal set lit.
Definition str.h:563
GAIA_NODISCARD uint32_t find_last_not_of(str_view chars, uint32_t pos=BadIndex) const
Finds the last character that is NOT present in set chars.
Definition str.h:597
GAIA_NODISCARD uint32_t find_first_of(char ch, uint32_t pos=0) const
Finds the first occurrence of character ch.
Definition str.h:527
str(const char(&lit)[N])
Constructs a string from literal lit, excluding trailing null terminator.
Definition str.h:348
void append(char ch)
Appends a single character.
Definition str.h:414
GAIA_NODISCARD uint32_t find_first_of(const char(&lit)[N], uint32_t pos=0) const
Finds the first character that is present in literal set lit.
Definition str.h:537
GAIA_NODISCARD uint32_t find_last_not_of(char ch, uint32_t pos=BadIndex) const
Finds the last character that is different from ch.
Definition str.h:605
GAIA_NODISCARD uint32_t find_last_of(char ch, uint32_t pos=BadIndex) const
Finds the last occurrence of character ch.
Definition str.h:553