18#if defined(STRGEN) || defined(SETTINGSGEN)
35#if defined(STRGEN) || defined(SETTINGSGEN)
45 return static_cast<uint8_t
>(this->
src[this->
position]);
51 return static_cast<uint8_t
>(this->
src[this->
position]) |
52 static_cast<uint8_t
>(this->
src[this->
position + 1]) << 8;
58 return static_cast<uint8_t
>(this->
src[this->
position]) |
59 static_cast<uint8_t
>(this->
src[this->
position + 1]) << 8 |
60 static_cast<uint8_t
>(this->
src[this->
position + 2]) << 16 |
61 static_cast<uint8_t
>(this->
src[this->
position + 3]) << 24;
67 return static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position])) |
68 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 1])) << 8 |
69 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 2])) << 16 |
70 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 3])) << 24 |
71 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 4])) << 32 |
72 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 5])) << 40 |
73 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 6])) << 48 |
74 static_cast<uint64_t
>(
static_cast<uint8_t
>(this->
src[this->
position + 7])) << 56;
80 if (!result.has_value())
return {};
81 return static_cast<char>(*result);
93 if (len == std::string_view::npos) {
95 }
else if (len > buf.size()) {
98 return buf.substr(0, len);
103 if (len == std::string_view::npos) {
106 LogError(fmt::format(
"Source buffer too short: {} > {}", len, max_len));
115 assert(!str.empty());
117 return buf.find(str);
123 return this->
Find({data, len});
128 assert(!chars.empty());
130 return buf.find_first_of(chars);
135 assert(!chars.empty());
137 return buf.find_first_not_of(chars);
142 assert(!str.empty());
144 auto len = buf.find(str);
145 if (len != std::string_view::npos) {
148 if (buf.compare(len, str.size(), str) == 0) len += str.size();
151 while (buf.compare(len, str.size(), str) == 0) len += str.size();
157 return buf.substr(0, len);
std::string_view Peek(size_type len) const
Peek the next 'len' bytes.
SeparatorUsage
Treatment of separator characters.
@ READ_ALL_SEPARATORS
Read all consecutive separators, and include them all in the result.
@ READ_ONE_SEPARATOR
Read one separator, and include it in the result.
std::optional< uint32_t > PeekUint32LE() const
Peek binary uint32 using little endian.
size_type GetBytesLeft() const noexcept
Get number of bytes left to read.
std::string_view PeekUntil(std::string_view str, SeparatorUsage sep) const
Peek data until the first occurrence of 'str'.
std::string_view::size_type size_type
The type of the size of our strings.
static const std::string_view WHITESPACE_OR_NEWLINE
ASCII whitespace characters, including new-line.
std::string_view ReadUntil(std::string_view str, SeparatorUsage sep)
Read data until the first occurrence of 'str', and advance reader.
void SkipUntil(std::string_view str, SeparatorUsage sep)
Skip data until the first occurrence of 'str'.
static const std::string_view WHITESPACE_NO_NEWLINE
ASCII whitespace characters, excluding new-line.
std::optional< char > PeekChar() const
Peek 8-bit character.
static void LogError(std::string &&msg)
Log an error in the processing (too small buffer, integer out of range, etc.).
bool ReadIf(std::string_view str)
Check whether the next data matches 'str', and skip it.
std::string_view PeekUntilUtf8(char32_t c, SeparatorUsage sep) const
Peek data until the first occurrence of UTF-8 char 'c'.
std::optional< uint64_t > PeekUint64LE() const
Peek binary uint64 using little endian.
void SkipUntilCharNotIn(std::string_view chars)
Skip 8-bit chars, while they are in 'chars', until they are not.
size_type FindCharNotIn(std::string_view chars) const
Find first occurrence of any 8-bit char not in 'chars'.
void SkipIf(std::string_view str)
If the next data matches 'str', then skip it.
std::optional< uint16_t > PeekUint16LE() const
Peek binary uint16 using little endian.
size_type position
The current parsing position in the string.
std::string_view src
The string to parse.
void SkipIntegerBase(int base)
Skip an integer in number 'base'.
void Skip(size_type len)
Discard some bytes.
size_type Find(std::string_view str) const
Find first occurrence of 'str'.
std::optional< uint8_t > PeekUint8() const
Peek binary uint8.
void SkipUntilUtf8(char32_t c, SeparatorUsage sep)
Skip data until the first occurrence of UTF-8 char 'c'.
std::string_view ReadUntilUtf8(char32_t c, SeparatorUsage sep)
Read data until the first occurrence of UTF-8 char 'c', and advance reader.
std::pair< size_type, char32_t > PeekUtf8() const
Peek UTF-8 character.
size_type FindCharIn(std::string_view chars) const
Find first occurrence of any 8-bit char in 'chars'.
size_type FindUtf8(char32_t c) const
Find first occurrence of UTF-8 char 'c'.
void DebugPrint(std::string_view category, int level, std::string &&message)
Internal function for outputting the debug line.
Functions related to debugging.
Error reporting related functions.
void FatalErrorI(const std::string &str)
Error handling for fatal non-user errors.
A number of safeguards to prevent using unsafe methods.
Definition of base types and functions in a cross-platform compatible way.
Compose strings from textual and binary data.
Functions related to low-level strings.
std::pair< size_t, char32_t > DecodeUtf8(std::string_view buf)
Decode a character from UTF-8.
std::pair< char[4], size_t > EncodeUtf8(char32_t c)
Encode a character to UTF-8.
Handling of UTF-8 encoded data.