diff options
author | asynts <asynts@gmail.com> | 2020-08-27 14:21:53 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2020-08-30 09:56:10 +0200 |
commit | e7df17d1467ee5379492576c831394f4126cb92a (patch) | |
tree | ed8b7191dffdfa97025c39365b13aef2be95c6ec /AK/String.h | |
parent | deb85c47b54b3ea98f74ba297fe0cc0b8d6d1a28 (diff) | |
download | serenity-e7df17d1467ee5379492576c831394f4126cb92a.zip |
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...
Diffstat (limited to 'AK/String.h')
-rw-r--r-- | AK/String.h | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/AK/String.h b/AK/String.h index 52c006e0be..1fcd6de7f1 100644 --- a/AK/String.h +++ b/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? - - const auto start = stream.offset(); - - while (!stream.eof() && stream.m_bytes[stream.m_offset]) { - ++stream.m_offset; + StringBuilder builder; + + for (;;) { + if (stream.eof()) { + string = nullptr; + + // 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; } } |