summaryrefslogtreecommitdiff
path: root/absl/strings
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2018-10-08 13:53:59 -0700
committerGravatar CJ Johnson <johnsoncj@google.com>2018-10-09 15:36:40 -0400
commit445998d7ac4e5d3c50411d377e3b50e960d2d6c2 (patch)
tree8d9c214c92786eae42860786fdaeaafd1ee57f03 /absl/strings
parente821380d69a549dc64900693942789d21aa4df5e (diff)
Export of internal Abseil changes.
-- 714347c156cfe01575c1830a92bc6dea3030065b by Emma Christie <emmachristie@google.com>: Release absl::EqualsIgnoreCase PiperOrigin-RevId: 216243900 -- 688106e2b9d2924799d597682690851cfba87818 by Abseil Team <absl-team@google.com>: Import of CCTZ from GitHub. PiperOrigin-RevId: 216208373 -- 53638e4da238b230af0e56dc31b9fb790e708f36 by Emma Christie <emmachristie@google.com>: Update StartsWithIgnoreCase(), EndsWithIgnoreCase(), and EqualsIgnoreCase() headers to say that these functions only consider ASCII case inputs. PiperOrigin-RevId: 215930962 GitOrigin-RevId: 714347c156cfe01575c1830a92bc6dea3030065b Change-Id: I7fb3506234185b1a961e0110c1f8302ffe7228fa
Diffstat (limited to 'absl/strings')
-rw-r--r--absl/strings/match.cc7
-rw-r--r--absl/strings/match.h14
-rw-r--r--absl/strings/match_test.cc11
3 files changed, 28 insertions, 4 deletions
diff --git a/absl/strings/match.cc b/absl/strings/match.cc
index 25bd7f0b..3d10c577 100644
--- a/absl/strings/match.cc
+++ b/absl/strings/match.cc
@@ -27,6 +27,13 @@ bool CaseEqual(absl::string_view piece1, absl::string_view piece2) {
}
} // namespace
+bool EqualsIgnoreCase(absl::string_view piece1, absl::string_view piece2) {
+ return (piece1.size() == piece2.size() &&
+ 0 == absl::strings_internal::memcasecmp(piece1.data(), piece2.data(),
+ piece1.size()));
+ // memcasecmp uses absl::ascii_tolower().
+}
+
bool StartsWithIgnoreCase(absl::string_view text, absl::string_view prefix) {
return (text.size() >= prefix.size()) &&
CaseEqual(text.substr(0, prefix.size()), prefix);
diff --git a/absl/strings/match.h b/absl/strings/match.h
index 942a196b..6e8ed10f 100644
--- a/absl/strings/match.h
+++ b/absl/strings/match.h
@@ -66,16 +66,22 @@ inline bool EndsWith(absl::string_view text, absl::string_view suffix) {
);
}
-// StartsWithIgnoreCase()
+// EqualsIgnoreCase()
//
-// Returns whether a given string `text` starts with `starts_with`, ignoring
+// Returns whether given ASCII strings `piece1` and `piece2` are equal, ignoring
// case in the comparison.
+bool EqualsIgnoreCase(absl::string_view piece1, absl::string_view piece2);
+
+// StartsWithIgnoreCase()
+//
+// Returns whether a given ASCII string `text` starts with `starts_with`,
+// ignoring case in the comparison.
bool StartsWithIgnoreCase(absl::string_view text, absl::string_view prefix);
// EndsWithIgnoreCase()
//
-// Returns whether a given string `text` ends with `ends_with`, ignoring case
-// in the comparison.
+// Returns whether a given ASCII string `text` ends with `ends_with`, ignoring
+// case in the comparison.
bool EndsWithIgnoreCase(absl::string_view text, absl::string_view suffix);
} // namespace absl
diff --git a/absl/strings/match_test.cc b/absl/strings/match_test.cc
index d194f0e6..c21e00bf 100644
--- a/absl/strings/match_test.cc
+++ b/absl/strings/match_test.cc
@@ -80,6 +80,17 @@ TEST(MatchTest, ContainsNull) {
EXPECT_FALSE(absl::StrContains(cs, sv2));
}
+TEST(MatchTest, EqualsIgnoreCase) {
+ std::string text = "the";
+ absl::string_view data(text);
+
+ EXPECT_TRUE(absl::EqualsIgnoreCase(data, "The"));
+ EXPECT_TRUE(absl::EqualsIgnoreCase(data, "THE"));
+ EXPECT_TRUE(absl::EqualsIgnoreCase(data, "the"));
+ EXPECT_FALSE(absl::EqualsIgnoreCase(data, "Quick"));
+ EXPECT_FALSE(absl::EqualsIgnoreCase(data, "then"));
+}
+
TEST(MatchTest, StartsWithIgnoreCase) {
EXPECT_TRUE(absl::StartsWithIgnoreCase("foo", "foo"));
EXPECT_TRUE(absl::StartsWithIgnoreCase("foo", "Fo"));