diff options
author | Yabin Cui <yabinc@google.com> | 2018-10-30 15:49:53 -0700 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2018-10-30 17:20:50 -0700 |
commit | a656b986341766a26a7d65287575d98124a3dc44 (patch) | |
tree | 394f87540454d886c47d5b9f946273cee631bf92 | |
parent | b10f63526a1d553a69085a7b04f71b381efc896d (diff) | |
download | system_core-a656b986341766a26a7d65287575d98124a3dc44.tar.gz system_core-a656b986341766a26a7d65287575d98124a3dc44.tar.bz2 system_core-a656b986341766a26a7d65287575d98124a3dc44.zip |
libbase: support char parameter in StartsWith/EndsWith.
Bug: 117568547
Test: run libbase_test.
Change-Id: I5a6a412733c594f5a116f333b8e091d2d9f60e06
-rw-r--r-- | base/include/android-base/strings.h | 2 | ||||
-rw-r--r-- | base/strings.cpp | 8 | ||||
-rw-r--r-- | base/strings_test.cpp | 12 |
3 files changed, 22 insertions, 0 deletions
diff --git a/base/include/android-base/strings.h b/base/include/android-base/strings.h index 9c3556084..fc5c1ce36 100644 --- a/base/include/android-base/strings.h +++ b/base/include/android-base/strings.h @@ -61,6 +61,7 @@ bool StartsWith(const std::string& s, const char* prefix); bool StartsWithIgnoreCase(const std::string& s, const char* prefix); bool StartsWith(const std::string& s, const std::string& prefix); bool StartsWithIgnoreCase(const std::string& s, const std::string& prefix); +bool StartsWith(const std::string& s, char prefix); // Tests whether 's' ends with 'suffix'. // TODO: string_view @@ -68,6 +69,7 @@ bool EndsWith(const std::string& s, const char* suffix); bool EndsWithIgnoreCase(const std::string& s, const char* suffix); bool EndsWith(const std::string& s, const std::string& suffix); bool EndsWithIgnoreCase(const std::string& s, const std::string& suffix); +bool EndsWith(const std::string& s, char suffix); // Tests whether 'lhs' equals 'rhs', ignoring case. bool EqualsIgnoreCase(const std::string& lhs, const std::string& rhs); diff --git a/base/strings.cpp b/base/strings.cpp index a8bb2a986..2d6eef099 100644 --- a/base/strings.cpp +++ b/base/strings.cpp @@ -95,6 +95,10 @@ bool StartsWith(const std::string& s, const std::string& prefix) { return strncmp(s.c_str(), prefix.c_str(), prefix.size()) == 0; } +bool StartsWith(const std::string& s, char prefix) { + return *s.c_str() == prefix; // Use c_str() to guarantee there is at least a '\0'. +} + bool StartsWithIgnoreCase(const std::string& s, const char* prefix) { return strncasecmp(s.c_str(), prefix, strlen(prefix)) == 0; } @@ -121,6 +125,10 @@ bool EndsWith(const std::string& s, const std::string& suffix) { return EndsWith(s, suffix.c_str(), suffix.size(), true); } +bool EndsWith(const std::string& s, char suffix) { + return EndsWith(s, &suffix, 1, true); +} + bool EndsWithIgnoreCase(const std::string& s, const char* suffix) { return EndsWith(s, suffix, strlen(suffix), false); } diff --git a/base/strings_test.cpp b/base/strings_test.cpp index b8639ead4..9d740947e 100644 --- a/base/strings_test.cpp +++ b/base/strings_test.cpp @@ -198,6 +198,12 @@ TEST(strings, StartsWithIgnoreCase_contains_prefix) { ASSERT_FALSE(android::base::StartsWithIgnoreCase("foobar", "BAR")); } +TEST(strings, StartsWith_char) { + ASSERT_FALSE(android::base::StartsWith("", 'f')); + ASSERT_TRUE(android::base::StartsWith("foo", 'f')); + ASSERT_FALSE(android::base::StartsWith("foo", 'o')); +} + TEST(strings, EndsWith_empty) { ASSERT_FALSE(android::base::EndsWith("", "foo")); ASSERT_TRUE(android::base::EndsWith("", "")); @@ -273,6 +279,12 @@ TEST(strings, EndsWithIgnoreCase_std_string) { ASSERT_FALSE(android::base::EndsWithIgnoreCase("GoOdByE", std::string{"lo"})); } +TEST(strings, EndsWith_char) { + ASSERT_FALSE(android::base::EndsWith("", 'o')); + ASSERT_TRUE(android::base::EndsWith("foo", 'o')); + ASSERT_FALSE(android::base::EndsWith("foo", "f")); +} + TEST(strings, EqualsIgnoreCase) { ASSERT_TRUE(android::base::EqualsIgnoreCase("foo", "FOO")); ASSERT_TRUE(android::base::EqualsIgnoreCase("FOO", "foo")); |