mirror of
https://github.com/RGBCube/serenity
synced 2025-05-25 22:35:07 +00:00
AK: Try to use StringViews more for substrings and splitting.
This commit is contained in:
parent
a082738f04
commit
33920df299
9 changed files with 133 additions and 13 deletions
54
AK/StringView.cpp
Normal file
54
AK/StringView.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
#include <AK/StringView.h>
|
||||
#include <AK/AKString.h>
|
||||
|
||||
namespace AK {
|
||||
|
||||
Vector<StringView> StringView::split_view(const char separator) const
|
||||
{
|
||||
if (is_empty())
|
||||
return { };
|
||||
|
||||
Vector<StringView> v;
|
||||
ssize_t substart = 0;
|
||||
for (ssize_t i = 0; i < length(); ++i) {
|
||||
char ch = characters()[i];
|
||||
if (ch == separator) {
|
||||
ssize_t sublen = i - substart;
|
||||
if (sublen != 0)
|
||||
v.append(substring_view(substart, sublen));
|
||||
substart = i + 1;
|
||||
}
|
||||
}
|
||||
ssize_t taillen = length() - substart;
|
||||
if (taillen != 0)
|
||||
v.append(substring_view(substart, taillen));
|
||||
if (characters()[length() - 1] == separator)
|
||||
v.append(String::empty().view());
|
||||
return v;
|
||||
}
|
||||
|
||||
StringView StringView::substring_view(int start, int length) const
|
||||
{
|
||||
if (!length)
|
||||
return { };
|
||||
ASSERT(start + length <= m_length);
|
||||
return { m_characters + start, length };
|
||||
}
|
||||
|
||||
unsigned StringView::to_uint(bool& ok) const
|
||||
{
|
||||
unsigned value = 0;
|
||||
for (ssize_t i = 0; i < length(); ++i) {
|
||||
if (characters()[i] < '0' || characters()[i] > '9') {
|
||||
ok = false;
|
||||
return 0;
|
||||
}
|
||||
value = value * 10;
|
||||
value += characters()[i] - '0';
|
||||
}
|
||||
ok = true;
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue