diff --git a/AK/FlyString.cpp b/AK/FlyString.cpp index dc199ba778..07fc58e518 100644 --- a/AK/FlyString.cpp +++ b/AK/FlyString.cpp @@ -93,4 +93,9 @@ bool FlyString::equals_ignoring_case(const StringView& other) const return StringUtils::equals_ignoring_case(view(), other); } +FlyString FlyString::to_lowercase() const +{ + return String(*m_impl).to_lowercase(); +} + } diff --git a/AK/FlyString.h b/AK/FlyString.h index 9876cbf031..cef4498603 100644 --- a/AK/FlyString.h +++ b/AK/FlyString.h @@ -46,6 +46,8 @@ public: StringView view() const { return { characters(), length() }; } + FlyString to_lowercase() const; + int to_int(bool& ok) const; bool equals_ignoring_case(const StringView&) const; diff --git a/AK/LogStream.cpp b/AK/LogStream.cpp index 31eca75b88..e2a49cc076 100644 --- a/AK/LogStream.cpp +++ b/AK/LogStream.cpp @@ -24,6 +24,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -41,6 +42,11 @@ const LogStream& operator<<(const LogStream& stream, const String& value) return stream; } +const LogStream& operator<<(const LogStream& stream, const FlyString& value) +{ + return stream << value.view(); +} + const LogStream& operator<<(const LogStream& stream, const StringView& value) { stream.write(value.characters_without_null_termination(), value.length()); diff --git a/AK/LogStream.h b/AK/LogStream.h index 63e728d960..b7345564b5 100644 --- a/AK/LogStream.h +++ b/AK/LogStream.h @@ -26,6 +26,7 @@ #pragma once +#include #include #include @@ -38,9 +39,6 @@ namespace AK { -class String; -class StringView; - class LogStream { public: LogStream() @@ -95,6 +93,7 @@ inline const LogStream& operator<<(const LogStream& stream, const char* value) return stream; } +const LogStream& operator<<(const LogStream&, const FlyString&); const LogStream& operator<<(const LogStream&, const String&); const LogStream& operator<<(const LogStream&, const StringView&); const LogStream& operator<<(const LogStream&, int); diff --git a/AK/String.cpp b/AK/String.cpp index ec74a38742..7e751d752c 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -24,6 +24,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -321,4 +322,23 @@ String escape_html_entities(const StringView& html) return builder.to_string(); } +String::String(const FlyString& string) + : m_impl(string.impl()) +{ +} + +String String::to_lowercase() const +{ + if (!m_impl) + return {}; + return m_impl->to_lowercase(); +} + +String String::to_uppercase() const +{ + if (!m_impl) + return {}; + return m_impl->to_uppercase(); +} + } diff --git a/AK/String.h b/AK/String.h index a77799c0c1..246bd02831 100644 --- a/AK/String.h +++ b/AK/String.h @@ -111,25 +111,16 @@ public: { } + String(const FlyString&); + static String repeated(char, size_t count); bool matches(const StringView& mask, CaseSensitivity = CaseSensitivity::CaseInsensitive) const; int to_int(bool& ok) const; unsigned to_uint(bool& ok) const; - String to_lowercase() const - { - if (!m_impl) - return String(); - return m_impl->to_lowercase(); - } - - String to_uppercase() const - { - if (!m_impl) - return String(); - return m_impl->to_uppercase(); - } + String to_lowercase() const; + String to_uppercase() const; bool equals_ignoring_case(const StringView&) const;