summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Gianforcaro <b.gianfo@gmail.com>2020-05-26 02:58:34 -0700
committerAndreas Kling <kling@serenityos.org>2020-05-26 13:17:19 +0200
commit8e4b858b3ff61a969fdc5c695a0affb76354ed51 (patch)
treeec752f5929fb03c8de44919f33a11cd7fb044bd9
parentd98e7435685dab9de5637a8d09a5cc99be16169a (diff)
downloadserenity-8e4b858b3ff61a969fdc5c695a0affb76354ed51.zip
AK: Move String::ends_with implementation to StringUtils
Centralizing so it can be used by other string implementations
-rw-r--r--AK/String.cpp8
-rw-r--r--AK/StringUtils.cpp12
-rw-r--r--AK/StringUtils.h2
3 files changed, 15 insertions, 7 deletions
diff --git a/AK/String.cpp b/AK/String.cpp
index 789b18dc8c..14f03c3f38 100644
--- a/AK/String.cpp
+++ b/AK/String.cpp
@@ -280,13 +280,7 @@ bool String::starts_with(char ch) const
bool String::ends_with(const StringView& str) const
{
- if (str.is_empty())
- return true;
- if (is_empty())
- return false;
- if (str.length() > length())
- return false;
- return !memcmp(characters() + (length() - str.length()), str.characters_without_null_termination(), str.length());
+ return StringUtils::ends_with(*this, str);
}
bool String::ends_with(char ch) const
diff --git a/AK/StringUtils.cpp b/AK/StringUtils.cpp
index 4bd2b7aada..09e4661710 100644
--- a/AK/StringUtils.cpp
+++ b/AK/StringUtils.cpp
@@ -25,6 +25,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <AK/Memory.h>
#include <AK/String.h>
#include <AK/StringUtils.h>
#include <AK/StringView.h>
@@ -195,6 +196,17 @@ bool equals_ignoring_case(const StringView& a, const StringView& b)
return true;
}
+bool ends_with(const StringView& str, const StringView& end)
+{
+ if (end.is_empty())
+ return true;
+ if (str.is_empty())
+ return false;
+ if (end.length() > str.length())
+ return false;
+ return !memcmp(str.characters_without_null_termination() + (str.length() - end.length()), end.characters_without_null_termination(), end.length());
+}
+
}
}
diff --git a/AK/StringUtils.h b/AK/StringUtils.h
index 7e9007f102..5ba124f9de 100644
--- a/AK/StringUtils.h
+++ b/AK/StringUtils.h
@@ -43,6 +43,8 @@ int convert_to_int(const StringView&, bool& ok);
unsigned convert_to_uint(const StringView&, bool& ok);
unsigned convert_to_uint_from_hex(const StringView&, bool& ok);
bool equals_ignoring_case(const StringView&, const StringView&);
+bool ends_with(const StringView& str, const StringView& end);
+
}
}