From 54d149bc251610cdaf7dbc29445adf442bf894bc Mon Sep 17 00:00:00 2001 From: Dan Klishch Date: Sat, 28 Oct 2023 15:37:10 -0400 Subject: [PATCH] AK: Move String::bytes() and String::operator==(String) to StringBase The idea is to eventually get rid of protected state in StringBase. To do this, we first need to remove all references to m_data and m_short_string from String. --- AK/String.cpp | 14 -------------- AK/String.h | 6 +----- AK/StringBase.cpp | 14 ++++++++++++++ AK/StringBase.h | 6 ++++++ 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/AK/String.cpp b/AK/String.cpp index d44e3949c6..c61be2b95d 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -213,13 +213,6 @@ StringView String::bytes_as_string_view() const return StringView(bytes()); } -ReadonlyBytes String::bytes() const -{ - if (is_short_string()) - return m_short_string.bytes(); - return m_data->bytes(); -} - bool String::is_empty() const { return bytes().size() == 0; @@ -291,13 +284,6 @@ Optional String::find_byte_offset(StringView substring, size_t from_byte return {}; } -bool String::operator==(String const& other) const -{ - if (is_short_string()) - return m_data == other.m_data; - return bytes_as_string_view() == other.bytes_as_string_view(); -} - bool String::operator==(FlyString const& other) const { if (reinterpret_cast(m_data) == other.data({})) diff --git a/AK/String.h b/AK/String.h index 1f25f663d8..672597036e 100644 --- a/AK/String.h +++ b/AK/String.h @@ -121,10 +121,6 @@ public: // Returns an iterable view over the Unicode code points. [[nodiscard]] Utf8View code_points() const; - // Returns the underlying UTF-8 encoded bytes. - // NOTE: There is no guarantee about null-termination. - [[nodiscard]] ReadonlyBytes bytes() const; - // Returns true if the String is zero-length. [[nodiscard]] bool is_empty() const; @@ -146,7 +142,7 @@ public: Optional find_byte_offset(u32 code_point, size_t from_byte_offset = 0) const; Optional find_byte_offset(StringView substring, size_t from_byte_offset = 0) const; - [[nodiscard]] bool operator==(String const&) const; + [[nodiscard]] bool operator==(String const&) const = default; [[nodiscard]] bool operator==(FlyString const&) const; [[nodiscard]] bool operator==(StringView) const; [[nodiscard]] bool operator==(char const* cstring) const; diff --git a/AK/StringBase.cpp b/AK/StringBase.cpp index 0f04bf3202..944c8df6f2 100644 --- a/AK/StringBase.cpp +++ b/AK/StringBase.cpp @@ -59,4 +59,18 @@ bool StringBase::is_short_string() const return has_short_string_bit(reinterpret_cast(m_data)); } +ReadonlyBytes StringBase::bytes() const +{ + if (is_short_string()) + return m_short_string.bytes(); + return m_data->bytes(); +} + +bool StringBase::operator==(StringBase const& other) const +{ + if (is_short_string()) + return m_data == other.m_data; + return bytes() == other.bytes(); +} + } diff --git a/AK/StringBase.h b/AK/StringBase.h index bdceeac351..302a9b211e 100644 --- a/AK/StringBase.h +++ b/AK/StringBase.h @@ -45,6 +45,12 @@ public: // NOTE: This is primarily interesting to unit tests. [[nodiscard]] bool is_short_string() const; + // Returns the underlying UTF-8 encoded bytes. + // NOTE: There is no guarantee about null-termination. + [[nodiscard]] ReadonlyBytes bytes() const; + + [[nodiscard]] bool operator==(StringBase const&) const; + protected: // NOTE: If the least significant bit of the pointer is set, this is a short string. static constexpr uintptr_t SHORT_STRING_FLAG = 1;