From 388ac82baa14bc8ba76cc306c935daaf10f82050 Mon Sep 17 00:00:00 2001 From: John Scipione Date: Thu, 5 Jan 2017 17:20:08 -0800 Subject: [PATCH] BString: Add IStartsWith() and IEndsWith() methods Case-insensitive version of StartsWith() and EndsWith() --- headers/os/support/String.h | 8 ++++++ src/kits/support/String.cpp | 49 +++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/headers/os/support/String.h b/headers/os/support/String.h index 4d45a86dfa..73a5372f58 100644 --- a/headers/os/support/String.h +++ b/headers/os/support/String.h @@ -243,10 +243,18 @@ public: bool StartsWith(const char* string) const; bool StartsWith(const char* string, int32 length) const; + bool IStartsWith(const BString& string) const; + bool IStartsWith(const char* string) const; + bool IStartsWith(const char* string, int32 length) const; + bool EndsWith(const BString& string) const; bool EndsWith(const char* string) const; bool EndsWith(const char* string, int32 length) const; + bool IEndsWith(const BString& string) const; + bool IEndsWith(const char* string) const; + bool IEndsWith(const char* string, int32 length) const; + // Replacing BString& ReplaceFirst(char replaceThis, char withThis); BString& ReplaceLast(char replaceThis, char withThis); diff --git a/src/kits/support/String.cpp b/src/kits/support/String.cpp index 12c09f814f..611acec4f6 100644 --- a/src/kits/support/String.cpp +++ b/src/kits/support/String.cpp @@ -1412,6 +1412,30 @@ BString::StartsWith(const char* string, int32 length) const } +bool +BString::IStartsWith(const BString& string) const +{ + return IStartsWith(string.String(), string.Length()); +} + + +bool +BString::IStartsWith(const char* string) const +{ + return IStartsWith(string, strlen(string)); +} + + +bool +BString::IStartsWith(const char* string, int32 length) const +{ + if (length > Length() || length > (int32)strlen(string)) + return false; + + return _IFindAfter(string, 0, length) == 0; +} + + bool BString::EndsWith(const BString& string) const { @@ -1437,6 +1461,31 @@ BString::EndsWith(const char* string, int32 length) const } +bool +BString::IEndsWith(const BString& string) const +{ + return IEndsWith(string.String(), string.Length()); +} + + +bool +BString::IEndsWith(const char* string) const +{ + return IEndsWith(string, strlen(string)); +} + + +bool +BString::IEndsWith(const char* string, int32 length) const +{ + int32 offset = Length() - length; + if (offset < 0) + return false; + + return _IFindBefore(string, Length(), length) == offset; +} + + // #pragma mark - Replacing