mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-22 20:45:14 +00:00
AK: Stream operators for String for generic streams.
I think this should really be a member function of InputStream instead, but I don't want to include String in Stream.h. This will do for now...
This commit is contained in:
parent
deb85c47b5
commit
e7df17d146
Notes:
sideshowbarker
2024-07-19 03:01:41 +09:00
Author: https://github.com/asynts Commit: https://github.com/SerenityOS/serenity/commit/e7df17d1467 Pull-request: https://github.com/SerenityOS/serenity/pull/3341 Reviewed-by: https://github.com/stelar7
2 changed files with 20 additions and 18 deletions
|
@ -181,8 +181,6 @@ inline OutputStream& operator<<(OutputStream& stream, bool value)
|
|||
}
|
||||
|
||||
class InputMemoryStream final : public InputStream {
|
||||
friend InputMemoryStream& operator>>(InputMemoryStream& stream, String& string);
|
||||
|
||||
public:
|
||||
InputMemoryStream(ReadonlyBytes bytes)
|
||||
: m_bytes(bytes)
|
||||
|
|
36
AK/String.h
36
AK/String.h
|
@ -29,6 +29,7 @@
|
|||
#include <AK/Forward.h>
|
||||
#include <AK/RefPtr.h>
|
||||
#include <AK/Stream.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/StringImpl.h>
|
||||
#include <AK/StringUtils.h>
|
||||
#include <AK/Traits.h>
|
||||
|
@ -277,26 +278,29 @@ bool operator<=(const char*, const String&);
|
|||
|
||||
String escape_html_entities(const StringView& html);
|
||||
|
||||
inline InputMemoryStream& operator>>(InputMemoryStream& stream, String& string)
|
||||
inline InputStream& operator>>(InputStream& stream, String& string)
|
||||
{
|
||||
// FIXME: There was some talking about a generic lexer class?
|
||||
StringBuilder builder;
|
||||
|
||||
const auto start = stream.offset();
|
||||
for (;;) {
|
||||
if (stream.eof()) {
|
||||
string = nullptr;
|
||||
|
||||
while (!stream.eof() && stream.m_bytes[stream.m_offset]) {
|
||||
++stream.m_offset;
|
||||
// FIXME: We need an InputStream::set_error_flag method.
|
||||
stream.discard_or_error(1);
|
||||
return stream;
|
||||
}
|
||||
|
||||
char next_char;
|
||||
stream >> next_char;
|
||||
|
||||
if (next_char) {
|
||||
builder.append(next_char);
|
||||
} else {
|
||||
string = builder.to_string();
|
||||
return stream;
|
||||
}
|
||||
}
|
||||
|
||||
if (stream.eof()) {
|
||||
stream.m_error = true;
|
||||
stream.m_offset = start;
|
||||
string = nullptr;
|
||||
} else {
|
||||
string = String { stream.bytes().slice(start, stream.offset() - start) };
|
||||
++stream.m_offset;
|
||||
}
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue