From 9920d17342bba6f712965adfa72c143dade39a2c Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sat, 15 Feb 2020 13:04:00 +1300 Subject: [PATCH] AK: Add String starts_with(char) & 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/String.cpp | 13 +++++++++++++ AK/String.h | 2 ++ AK/Tests/TestString.cpp | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/AK/String.cpp b/AK/String.cpp index 4149a15467..980b346867 100644 --- a/AK/String.cpp +++ b/AK/String.cpp @@ -295,6 +295,13 @@ bool String::starts_with(const StringView& str) const return !memcmp(characters(), str.characters_without_null_termination(), str.length()); } +bool String::starts_with(char ch) const +{ + if (is_empty()) + return false; + return characters()[0] == ch; +} + bool String::ends_with(const StringView& str) const { if (str.is_empty()) @@ -306,6 +313,12 @@ bool String::ends_with(const StringView& str) const return !memcmp(characters() + (length() - str.length()), str.characters_without_null_termination(), str.length()); } +bool String::ends_with(char ch) const +{ + if (is_empty()) + return false; + return characters()[length() - 1] == ch; +} String String::repeated(char ch, size_t count) { if (!count) diff --git a/AK/String.h b/AK/String.h index fea82b40b0..c1c381f00f 100644 --- a/AK/String.h +++ b/AK/String.h @@ -157,6 +157,8 @@ public: bool starts_with(const StringView&) const; bool ends_with(const StringView&) const; + bool starts_with(char) const; + bool ends_with(char) const; bool operator==(const String&) const; bool operator!=(const String& other) const { return !(*this == other); } diff --git a/AK/Tests/TestString.cpp b/AK/Tests/TestString.cpp index b96531b74b..0ba1d4233d 100644 --- a/AK/Tests/TestString.cpp +++ b/AK/Tests/TestString.cpp @@ -80,6 +80,8 @@ TEST_CASE(starts_with) { String test_string = "ABCDEF"; EXPECT(test_string.starts_with("AB")); + EXPECT(test_string.starts_with('A')); + EXPECT(!test_string.starts_with('B')); EXPECT(test_string.starts_with("ABCDEF")); EXPECT(!test_string.starts_with("DEF")); } @@ -88,6 +90,8 @@ TEST_CASE(ends_with) { String test_string = "ABCDEF"; EXPECT(test_string.ends_with("EF")); + EXPECT(test_string.ends_with('F')); + EXPECT(!test_string.ends_with('E')); EXPECT(test_string.ends_with("ABCDEF")); EXPECT(!test_string.ends_with("ABC")); }