21 #ifndef XAPIAN_INCLUDED_STRINGUTILS_H
22 #define XAPIAN_INCLUDED_STRINGUTILS_H
26 #define XAPIAN_IN_XAPIAN_H
28 #undef XAPIAN_IN_XAPIAN_H
32 #include <string_view>
38 #define STRINGIZE_(X) #X
41 #define STRINGIZE(X) STRINGIZE_(X)
48 #define CONST_STRLEN(S) (sizeof(S"") - 1)
58 return !s.empty() && s[0] == pfx;
62 startswith(std::string_view s,
const char* pfx,
size_t len)
64 return s.size() >= len && (std::memcmp(s.data(), pfx, len) == 0);
82 return !s.empty() && s[s.size() - 1] == sfx;
86 endswith(std::string_view s,
const char* sfx,
size_t len)
88 return s.size() >= len && (std::memcmp(s.data() + s.size() - len, sfx, len) == 0);
94 return endswith(s, sfx, std::strlen(sfx));
98 endswith(std::string_view s, std::string_view sfx)
100 return endswith(s, sfx.data(), sfx.size());
106 return s.find(substring) != s.npos;
110 contains(std::string_view s,
const char* substring,
size_t len)
112 return s.find(substring, 0, len) != s.npos;
116 contains(std::string_view s,
const char* substring)
118 return s.find(substring) != s.npos;
122 contains(std::string_view s, std::string_view substring)
124 return s.find(substring) != s.npos;
127 inline std::string::size_type
130 std::string::size_type minlen = std::min(a.size(), b.size());
131 std::string::size_type common;
132 for (common = 0; common < minlen; ++common) {
133 if (a[common] != b[common])
break;
138 inline std::string::size_type
140 std::string::size_type max_prefix_len)
142 std::string::size_type minlen = std::min({a.size(),
145 std::string::size_type common;
146 for (common = 0; common < minlen; ++common) {
147 if (a[common] != b[common])
break;
171 static_assert(
'\x20' ==
' ',
"character set isn't a superset of ASCII");
179 return C_tab[
static_cast<unsigned char>(ch)];
Mechanism for accessing a struct of constant information.
const unsigned char IS_ALPHA
const unsigned char HEX_MASK
const unsigned char IS_SPACE
const struct constinfo * get_constinfo_() noexcept
const unsigned char IS_DIGIT
const unsigned char IS_UPPER
The Xapian namespace contains public interfaces for the Xapian library.
bool C_isnotalnum(char ch)
char hex_decode(char ch1, char ch2)
Decode a pair of ASCII hex digits.
bool C_isnotalpha(char ch)
bool endswith(std::string_view s, char sfx)
bool C_isnotdigit(char ch)
bool startswith(std::string_view s, char pfx)
std::string::size_type common_prefix_length(std::string_view a, std::string_view b)
bool C_isnotlower(char ch)
bool C_isnotxdigit(char ch)
bool C_isnotupper(char ch)
bool contains(std::string_view s, char substring)
bool C_isnotspace(char ch)
unsigned char C_tab_(char ch)