From 854f0b9e1aa2504c89165f551cb6c56e59b4d9e8 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sat, 15 Feb 2020 10:14:22 +1300 Subject: [PATCH] AK: Add StringView::starts_with(char) & StringView::ends_with(char) This is simply meant to be a more efficient implementation in the case that we only need to check a single character. --- AK/StringView.cpp | 14 ++++++++++++++ AK/StringView.h | 2 ++ AK/Tests/TestStringView.cpp | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/AK/StringView.cpp b/AK/StringView.cpp index 69657e78cde..6f8af57d107 100644 --- a/AK/StringView.cpp +++ b/AK/StringView.cpp @@ -105,6 +105,13 @@ Vector StringView::lines(bool consider_cr) const return v; } +bool StringView::starts_with(char ch) const +{ + if (is_empty()) + return false; + return ch == characters_without_null_termination()[0]; +} + bool StringView::starts_with(const StringView& str) const { if (str.is_empty()) @@ -118,6 +125,13 @@ bool StringView::starts_with(const StringView& str) const return !memcmp(characters_without_null_termination(), str.characters_without_null_termination(), str.length()); } +bool StringView::ends_with(char ch) const +{ + if (is_empty()) + return false; + return ch == characters_without_null_termination()[length() - 1]; +} + bool StringView::ends_with(const StringView& str) const { if (str.is_empty()) diff --git a/AK/StringView.h b/AK/StringView.h index 4bf12a53644..8ccbefcad5c 100644 --- a/AK/StringView.h +++ b/AK/StringView.h @@ -63,6 +63,8 @@ public: bool starts_with(const StringView&) const; bool ends_with(const StringView&) const; + bool starts_with(char) const; + bool ends_with(char) const; StringView substring_view(size_t start, size_t length) const; Vector split_view(char, bool keep_empty = false) const; diff --git a/AK/Tests/TestStringView.cpp b/AK/Tests/TestStringView.cpp index 8b3fb3841e9..a9e032470e6 100644 --- a/AK/Tests/TestStringView.cpp +++ b/AK/Tests/TestStringView.cpp @@ -63,6 +63,8 @@ TEST_CASE(starts_with) { String test_string = "ABCDEF"; StringView test_string_view = test_string.view(); + EXPECT(test_string_view.starts_with('A')); + EXPECT(!test_string_view.starts_with('B')); EXPECT(test_string_view.starts_with("AB")); EXPECT(test_string_view.starts_with("ABCDEF")); EXPECT(!test_string_view.starts_with("DEF")); @@ -73,6 +75,8 @@ TEST_CASE(ends_with) String test_string = "ABCDEF"; StringView test_string_view = test_string.view(); EXPECT(test_string_view.ends_with("DEF")); + EXPECT(test_string_view.ends_with('F')); + EXPECT(!test_string_view.ends_with('E')); EXPECT(test_string_view.ends_with("ABCDEF")); EXPECT(!test_string_view.ends_with("ABCDE")); EXPECT(!test_string_view.ends_with("ABCDEFG"));