From e4b9cf9b6ca2cfbe020a1d147a07b6b8db7b7f48 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 5 May 2020 10:08:14 +0200 Subject: [PATCH] AK: Some FlyString improvements We're now clever enough to notice when we're constructing a FlyString from a String that is actually already a FlyString. :^) --- AK/FlyString.cpp | 4 ++++ AK/FlyString.h | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/AK/FlyString.cpp b/AK/FlyString.cpp index c537ac14e6..e320b95c2d 100644 --- a/AK/FlyString.cpp +++ b/AK/FlyString.cpp @@ -63,6 +63,10 @@ FlyString::FlyString(const String& string) { if (string.is_null()) return; + if (string.impl()->is_fly()) { + m_impl = string.impl(); + return; + } auto it = fly_impls().find(const_cast(string.impl())); if (it == fly_impls().end()) { fly_impls().set(const_cast(string.impl())); diff --git a/AK/FlyString.h b/AK/FlyString.h index cbab71a26d..8f92396928 100644 --- a/AK/FlyString.h +++ b/AK/FlyString.h @@ -33,10 +33,30 @@ namespace AK { class FlyString { public: FlyString() {} + FlyString(const FlyString& other) + : m_impl(other.impl()) + { + } + FlyString(FlyString&& other) + : m_impl(move(other.m_impl)) + { + } FlyString(const String&); FlyString(const StringView&); FlyString(const char*); + FlyString& operator=(const FlyString& other) + { + m_impl = other.m_impl; + return *this; + } + + FlyString& operator=(FlyString&& other) + { + m_impl = move(other.m_impl); + return *this; + } + bool is_empty() const { return !m_impl || !m_impl->length(); } bool is_null() const { return !m_impl; }