From 7bce096afdf182216c9da4c94765e12662188c98 Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Sun, 2 Jun 2019 12:26:28 +0200 Subject: [PATCH] Take StringView in more places We should work towards a pattern where we take StringView as function arguments, and store String as member, to push the String construction to the last possible moment. --- AK/AKString.h | 6 +++--- AK/BufferStream.h | 10 +--------- AK/FileSystemPath.cpp | 2 +- AK/FileSystemPath.h | 2 +- AK/String.cpp | 10 +++++----- AK/StringBuilder.cpp | 2 +- AK/StringBuilder.h | 2 +- Applications/FileManager/DirectoryView.cpp | 6 +++--- Applications/FileManager/DirectoryView.h | 10 +++++----- Applications/FileManager/main.cpp | 4 ++-- LibCore/CDirIterator.cpp | 2 +- LibCore/CDirIterator.h | 2 +- LibCore/CFile.cpp | 2 +- LibCore/CFile.h | 4 ++-- 14 files changed, 28 insertions(+), 36 deletions(-) diff --git a/AK/AKString.h b/AK/AKString.h index a2a972ebf9a..e75172a870b 100644 --- a/AK/AKString.h +++ b/AK/AKString.h @@ -87,7 +87,7 @@ public: }; static String repeated(char, int count); - bool matches(const String& pattern, CaseSensitivity = CaseSensitivity::CaseInsensitive) const; + bool matches(const StringView& pattern, CaseSensitivity = CaseSensitivity::CaseInsensitive) const; int to_int(bool& ok) const; unsigned to_uint(bool& ok) const; @@ -122,7 +122,7 @@ public: return (*m_impl)[i]; } - bool ends_with(const String&) const; + bool ends_with(const StringView&) const; bool operator==(const String&) const; bool operator!=(const String& other) const { return !(*this == other); } @@ -166,7 +166,7 @@ public: StringView view() const { return { characters(), length() }; } private: - bool match_helper(const String& mask) const; + bool match_helper(const StringView& mask) const; RetainPtr m_impl; }; diff --git a/AK/BufferStream.h b/AK/BufferStream.h index db2907963f6..7edc9f6e65d 100644 --- a/AK/BufferStream.h +++ b/AK/BufferStream.h @@ -36,15 +36,7 @@ public: m_buffer[m_offset++] = (byte)(value >> 24) & 0xffu; } - void operator<<(const char* str) - { - ssize_t len = strlen(str); - ASSERT(len >= 0); - for (ssize_t i = 0; i < len; ++i) - m_buffer[m_offset++] = str[i]; - } - - void operator<<(const String& value) + void operator<<(const StringView& value) { for (ssize_t i = 0; i < value.length(); ++i) m_buffer[m_offset++] = value[i]; diff --git a/AK/FileSystemPath.cpp b/AK/FileSystemPath.cpp index 07d8d5ea829..fbef784160b 100644 --- a/AK/FileSystemPath.cpp +++ b/AK/FileSystemPath.cpp @@ -5,7 +5,7 @@ namespace AK { -FileSystemPath::FileSystemPath(const String& s) +FileSystemPath::FileSystemPath(const StringView& s) : m_string(s) { m_is_valid = canonicalize(); diff --git a/AK/FileSystemPath.h b/AK/FileSystemPath.h index b62160a5264..d985baded19 100644 --- a/AK/FileSystemPath.h +++ b/AK/FileSystemPath.h @@ -7,7 +7,7 @@ namespace AK { class FileSystemPath { public: FileSystemPath() {} - explicit FileSystemPath(const String&); + explicit FileSystemPath(const StringView&); bool is_valid() const { return m_is_valid; } String string() const { return m_string; } diff --git a/AK/String.cpp b/AK/String.cpp index ed3943318c2..8bfc7876865 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -175,7 +175,7 @@ String String::format(const char* fmt, ...) return builder.to_string(); } -bool String::ends_with(const String& str) const +bool String::ends_with(const StringView& str) const { if (str.is_empty()) return true; @@ -196,20 +196,20 @@ String String::repeated(char ch, int count) return *impl; } -bool String::matches(const String& mask, CaseSensitivity case_sensitivity) const +bool String::matches(const StringView& mask, CaseSensitivity case_sensitivity) const { if (case_sensitivity == CaseSensitivity::CaseInsensitive) { String this_lower = this->to_lowercase(); - String mask_lower = mask.to_lowercase(); + String mask_lower = String(mask).to_lowercase(); return this_lower.match_helper(mask_lower); } return match_helper(mask); } -bool String::match_helper(const String& mask) const +bool String::match_helper(const StringView& mask) const { - if (is_null() || mask.is_null()) + if (is_null()) return false; const char* string_ptr = characters(); diff --git a/AK/StringBuilder.cpp b/AK/StringBuilder.cpp index 0fe550242e0..6f6a86de266 100644 --- a/AK/StringBuilder.cpp +++ b/AK/StringBuilder.cpp @@ -16,7 +16,7 @@ StringBuilder::StringBuilder(ssize_t initial_capacity) m_buffer.grow(initial_capacity); } -void StringBuilder::append(const String& str) +void StringBuilder::append(const StringView& str) { if (str.is_empty()) return; diff --git a/AK/StringBuilder.h b/AK/StringBuilder.h index 700540942aa..65bc8e2c072 100644 --- a/AK/StringBuilder.h +++ b/AK/StringBuilder.h @@ -11,7 +11,7 @@ public: explicit StringBuilder(ssize_t initial_capacity = 16); ~StringBuilder() {} - void append(const String&); + void append(const StringView&); void append(char); void append(const char*, ssize_t); void appendf(const char*, ...); diff --git a/Applications/FileManager/DirectoryView.cpp b/Applications/FileManager/DirectoryView.cpp index cf8187ecd45..9d13de521b6 100644 --- a/Applications/FileManager/DirectoryView.cpp +++ b/Applications/FileManager/DirectoryView.cpp @@ -108,7 +108,7 @@ void DirectoryView::set_view_mode(ViewMode mode) ASSERT_NOT_REACHED(); } -void DirectoryView::add_path_to_history(const String& path) +void DirectoryView::add_path_to_history(const StringView& path) { if (m_path_history_position < m_path_history.size()) m_path_history.resize(m_path_history_position + 1); @@ -117,13 +117,13 @@ void DirectoryView::add_path_to_history(const String& path) m_path_history_position = m_path_history.size() - 1; } -void DirectoryView::open(const String& path) +void DirectoryView::open(const StringView& path) { add_path_to_history(path); model().open(path); } -void DirectoryView::set_status_message(const String& message) +void DirectoryView::set_status_message(const StringView& message) { if (on_status_message) on_status_message(message); diff --git a/Applications/FileManager/DirectoryView.h b/Applications/FileManager/DirectoryView.h index c494419e5de..fa8d7cba101 100644 --- a/Applications/FileManager/DirectoryView.h +++ b/Applications/FileManager/DirectoryView.h @@ -12,7 +12,7 @@ public: explicit DirectoryView(GWidget* parent); virtual ~DirectoryView() override; - void open(const String& path); + void open(const StringView& path); String path() const { return model().path(); } void open_parent_directory(); void open_previous_directory(); @@ -22,8 +22,8 @@ public: void refresh(); - Function on_path_change; - Function on_status_message; + Function on_path_change; + Function on_status_message; Function on_thumbnail_progress; enum ViewMode @@ -41,14 +41,14 @@ private: void handle_activation(const GModelIndex&); - void set_status_message(const String&); + void set_status_message(const StringView&); ViewMode m_view_mode { Invalid }; Retained m_model; int m_path_history_position { 0 }; Vector m_path_history; - void add_path_to_history(const String& path); + void add_path_to_history(const StringView& path); GTableView* m_table_view { nullptr }; GItemView* m_item_view { nullptr }; diff --git a/Applications/FileManager/main.cpp b/Applications/FileManager/main.cpp index 7c6fe3bc734..258f178b5dc 100644 --- a/Applications/FileManager/main.cpp +++ b/Applications/FileManager/main.cpp @@ -199,8 +199,8 @@ int main(int argc, char** argv) go_back_action->set_enabled(directory_view->path_history_position() > 0); }; - directory_view->on_status_message = [statusbar] (String message) { - statusbar->set_text(move(message)); + directory_view->on_status_message = [statusbar] (const StringView& message) { + statusbar->set_text(message); }; directory_view->on_thumbnail_progress = [&] (int done, int total) { diff --git a/LibCore/CDirIterator.cpp b/LibCore/CDirIterator.cpp index aa64ea8b719..d76d52970d4 100644 --- a/LibCore/CDirIterator.cpp +++ b/LibCore/CDirIterator.cpp @@ -1,7 +1,7 @@ #include "CDirIterator.h" #include -CDirIterator::CDirIterator(const String& path, Flags flags) +CDirIterator::CDirIterator(const StringView& path, Flags flags) : m_flags(flags) { m_dir = opendir(path.characters()); diff --git a/LibCore/CDirIterator.h b/LibCore/CDirIterator.h index 72920c2c1f1..1d3395ef135 100644 --- a/LibCore/CDirIterator.h +++ b/LibCore/CDirIterator.h @@ -11,7 +11,7 @@ public: SkipDots = 0x1, }; - CDirIterator(const String& path, Flags = Flags::NoFlags); + CDirIterator(const StringView& path, Flags = Flags::NoFlags); ~CDirIterator(); bool has_error() const { return m_error != 0; } diff --git a/LibCore/CFile.cpp b/LibCore/CFile.cpp index 44813e1c971..ce686ec4163 100644 --- a/LibCore/CFile.cpp +++ b/LibCore/CFile.cpp @@ -3,7 +3,7 @@ #include #include -CFile::CFile(const String& filename) +CFile::CFile(const StringView& filename) : m_filename(filename) { } diff --git a/LibCore/CFile.h b/LibCore/CFile.h index fab396ac55d..de051b3084f 100644 --- a/LibCore/CFile.h +++ b/LibCore/CFile.h @@ -6,11 +6,11 @@ class CFile final : public CIODevice { public: CFile() {} - explicit CFile(const String&); + explicit CFile(const StringView&); virtual ~CFile() override; String filename() const { return m_filename; } - void set_filename(const String& filename) { m_filename = filename; } + void set_filename(const StringView& filename) { m_filename = filename; } virtual bool open(CIODevice::OpenMode) override;