14 if (str ==
"1")
return true;
15 if ((str.size() == 4) && (strncasecmp(str.data(),
"true", 4) == 0))
17 if ((str.size() == 3) && (strncasecmp(str.data(),
"yes", 3) == 0))
24 std::string result(str);
31 if (
auto pos = str.find_last_not_of(chars); pos != string::npos) {
39 if (
auto pos = str.find_last_not_of(chars); pos != string::npos) {
47 while (!str.empty() && (chars.find(str.back()) != string_view::npos)) {
53 while (!str.empty() && (str.back() == chars)) {
60 str.erase(0, str.find_first_not_of(chars));
64 str.erase(0, str.find_first_not_of(chars));
66void trimLeft(string_view& str, string_view chars)
68 while (!str.empty() && (chars.find(str.front()) != string_view::npos)) {
74 while (!str.empty() && (str.front() == chars)) {
79void trim(string_view& str, string_view chars)
85void trim(string_view& str,
char chars)
91std::pair<string_view, string_view>
splitOnFirst(string_view str, string_view chars)
93 if (
auto pos = str.find_first_of(chars); pos == string_view::npos) {
94 return {str, string_view{}};
96 return {str.substr(0, pos), str.substr(pos + 1)};
99std::pair<string_view, string_view>
splitOnFirst(string_view str,
char chars)
101 if (
auto pos = str.find_first_of(chars); pos == string_view::npos) {
102 return {str, string_view{}};
104 return {str.substr(0, pos), str.substr(pos + 1)};
108std::pair<string_view, string_view>
splitOnLast(string_view str, string_view chars)
110 if (
auto pos = str.find_last_of(chars); pos == string_view::npos) {
111 return {string_view{}, str};
113 return {str.substr(0, pos), str.substr(pos + 1)};
116std::pair<string_view, string_view>
splitOnLast(string_view str,
char chars)
118 if (
auto pos = str.find_last_of(chars); pos == string_view::npos) {
119 return {string_view{}, str};
121 return {str.substr(0, pos), str.substr(pos + 1)};
136static unsigned parseNumber(string_view str)
139 auto r = stringToBase<10, unsigned>(str);
146static void checkRange(
unsigned x,
unsigned min,
unsigned max)
148 if ((
min <= x) && (x <=
max))
return;
150 "Out of range, should be between [, ",
min,
", ",
max,
155 unsigned min,
unsigned max)
159 if (str.empty())
return;
161 if (
auto pos = str.find(
'-'); pos == string_view::npos) {
162 auto x = parseNumber(str);
166 unsigned begin = parseNumber(str.substr(0, pos));
167 unsigned end = parseNumber(str.substr(pos + 1));
184 auto next = str.find(
',');
185 string_view sub = (next == string_view::npos)
187 : str.substr(0, next++);
188 parseRange2(sub, result,
min,
max);
189 if (next == string_view::npos)
break;
190 str = str.substr(next);
195#if defined(__APPLE__)
197std::string fromCFString(CFStringRef str)
200 const char *cstr = CFStringGetCStringPtr(str, kCFStringEncodingUTF8);
203 return std::string(cstr);
207 CFIndex len = CFStringGetLength(str);
208 CFRange range = CFRangeMake(0, len);
209 CFIndex usedBufLen = 0;
211 str, range, kCFStringEncodingUTF8,
'?',
false,
nullptr, len, &usedBufLen);
212 UInt8 buffer[usedBufLen];
214 str, range, kCFStringEncodingUTF8,
'?',
false, buffer, len, &usedBufLen);
215 return std::string(
reinterpret_cast<const char *
>(buffer), usedBufLen);
void setRange(size_t begin, size_t end)
Set all bits in the half-open range [begin, end) to '1'.
void set(size_t pos)
Set the (single) bit at position 'pos' to '1'.
void trim(string_view &str, string_view chars)
IterableBitSet< 64 > parseRange(string_view str, unsigned min, unsigned max)
bool stringToBool(string_view str)
std::pair< string_view, string_view > splitOnLast(string_view str, string_view chars)
void trimRight(string &str, const char *chars)
std::pair< string_view, string_view > splitOnFirst(string_view str, string_view chars)
void trimLeft(string &str, const char *chars)
std::string toLower(std::string_view str)
constexpr vecN< N, T > min(const vecN< N, T > &x, const vecN< N, T > &y)
constexpr vecN< N, T > max(const vecN< N, T > &x, const vecN< N, T > &y)
void swap(openmsx::MemBuffer< T > &l, openmsx::MemBuffer< T > &r) noexcept
auto transform_in_place(ForwardRange &&range, UnaryOperation op)
constexpr auto begin(const zstring_view &x)
constexpr auto end(const zstring_view &x)