Skip to content

Commit caf7689

Browse files
kazutakahiratamedismailben
authored andcommitted
[ADT] Introduce StringRef::{starts,ends}_width{,_insensitive}
This patch introduces: StringRef::starts_with StringRef::starts_with_insensitive StringRef::ends_with StringRef::ends_with_insensitive to be more compatible with std::string and std::string_view. I'm planning to deprecate the existing functions in favor of the new ones. Differential Revision: https://reviews.llvm.org/D136030
1 parent d07bd3c commit caf7689

File tree

3 files changed

+43
-30
lines changed

3 files changed

+43
-30
lines changed

llvm/include/llvm/ADT/StringRef.h

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -253,22 +253,35 @@ namespace llvm {
253253
/// @{
254254

255255
/// Check if this string starts with the given \p Prefix.
256-
[[nodiscard]] bool startswith(StringRef Prefix) const {
256+
[[nodiscard]] bool starts_with(StringRef Prefix) const {
257257
return Length >= Prefix.Length &&
258258
compareMemory(Data, Prefix.Data, Prefix.Length) == 0;
259259
}
260+
[[nodiscard]] bool startswith(StringRef Prefix) const {
261+
return starts_with(Prefix);
262+
}
260263

261264
/// Check if this string starts with the given \p Prefix, ignoring case.
262-
[[nodiscard]] bool startswith_insensitive(StringRef Prefix) const;
265+
[[nodiscard]] bool starts_with_insensitive(StringRef Prefix) const;
266+
[[nodiscard]] bool startswith_insensitive(StringRef Prefix) const {
267+
return starts_with_insensitive(Prefix);
268+
}
263269

264270
/// Check if this string ends with the given \p Suffix.
265-
[[nodiscard]] bool endswith(StringRef Suffix) const {
271+
[[nodiscard]] bool ends_with(StringRef Suffix) const {
266272
return Length >= Suffix.Length &&
267-
compareMemory(end() - Suffix.Length, Suffix.Data, Suffix.Length) == 0;
273+
compareMemory(end() - Suffix.Length, Suffix.Data, Suffix.Length) ==
274+
0;
275+
}
276+
[[nodiscard]] bool endswith(StringRef Suffix) const {
277+
return ends_with(Suffix);
268278
}
269279

270280
/// Check if this string ends with the given \p Suffix, ignoring case.
271-
[[nodiscard]] bool endswith_insensitive(StringRef Suffix) const;
281+
[[nodiscard]] bool ends_with_insensitive(StringRef Suffix) const;
282+
[[nodiscard]] bool endswith_insensitive(StringRef Suffix) const {
283+
return ends_with_insensitive(Suffix);
284+
}
272285

273286
/// @}
274287
/// @name String Searching
@@ -622,7 +635,7 @@ namespace llvm {
622635
/// Returns true if this StringRef has the given prefix and removes that
623636
/// prefix.
624637
bool consume_front(StringRef Prefix) {
625-
if (!startswith(Prefix))
638+
if (!starts_with(Prefix))
626639
return false;
627640

628641
*this = drop_front(Prefix.size());
@@ -642,7 +655,7 @@ namespace llvm {
642655
/// Returns true if this StringRef has the given suffix and removes that
643656
/// suffix.
644657
bool consume_back(StringRef Suffix) {
645-
if (!endswith(Suffix))
658+
if (!ends_with(Suffix))
646659
return false;
647660

648661
*this = drop_back(Suffix.size());

llvm/lib/Support/StringRef.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ int StringRef::compare_insensitive(StringRef RHS) const {
4242
return Length < RHS.Length ? -1 : 1;
4343
}
4444

45-
bool StringRef::startswith_insensitive(StringRef Prefix) const {
45+
bool StringRef::starts_with_insensitive(StringRef Prefix) const {
4646
return Length >= Prefix.Length &&
4747
ascii_strncasecmp(Data, Prefix.Data, Prefix.Length) == 0;
4848
}
4949

50-
bool StringRef::endswith_insensitive(StringRef Suffix) const {
50+
bool StringRef::ends_with_insensitive(StringRef Suffix) const {
5151
return Length >= Suffix.Length &&
5252
ascii_strncasecmp(end() - Suffix.Length, Suffix.Data, Suffix.Length) == 0;
5353
}

llvm/unittests/ADT/StringRefTest.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -356,20 +356,20 @@ TEST(StringRefTest, Trim) {
356356

357357
TEST(StringRefTest, StartsWith) {
358358
StringRef Str("hello");
359-
EXPECT_TRUE(Str.startswith(""));
360-
EXPECT_TRUE(Str.startswith("he"));
361-
EXPECT_FALSE(Str.startswith("helloworld"));
362-
EXPECT_FALSE(Str.startswith("hi"));
359+
EXPECT_TRUE(Str.starts_with(""));
360+
EXPECT_TRUE(Str.starts_with("he"));
361+
EXPECT_FALSE(Str.starts_with("helloworld"));
362+
EXPECT_FALSE(Str.starts_with("hi"));
363363
}
364364

365365
TEST(StringRefTest, StartsWithInsensitive) {
366366
StringRef Str("heLLo");
367-
EXPECT_TRUE(Str.startswith_insensitive(""));
368-
EXPECT_TRUE(Str.startswith_insensitive("he"));
369-
EXPECT_TRUE(Str.startswith_insensitive("hell"));
370-
EXPECT_TRUE(Str.startswith_insensitive("HELlo"));
371-
EXPECT_FALSE(Str.startswith_insensitive("helloworld"));
372-
EXPECT_FALSE(Str.startswith_insensitive("hi"));
367+
EXPECT_TRUE(Str.starts_with_insensitive(""));
368+
EXPECT_TRUE(Str.starts_with_insensitive("he"));
369+
EXPECT_TRUE(Str.starts_with_insensitive("hell"));
370+
EXPECT_TRUE(Str.starts_with_insensitive("HELlo"));
371+
EXPECT_FALSE(Str.starts_with_insensitive("helloworld"));
372+
EXPECT_FALSE(Str.starts_with_insensitive("hi"));
373373
}
374374

375375
TEST(StringRefTest, ConsumeFront) {
@@ -408,21 +408,21 @@ TEST(StringRefTest, ConsumeFrontInsensitive) {
408408

409409
TEST(StringRefTest, EndsWith) {
410410
StringRef Str("hello");
411-
EXPECT_TRUE(Str.endswith(""));
412-
EXPECT_TRUE(Str.endswith("lo"));
413-
EXPECT_FALSE(Str.endswith("helloworld"));
414-
EXPECT_FALSE(Str.endswith("worldhello"));
415-
EXPECT_FALSE(Str.endswith("so"));
411+
EXPECT_TRUE(Str.ends_with(""));
412+
EXPECT_TRUE(Str.ends_with("lo"));
413+
EXPECT_FALSE(Str.ends_with("helloworld"));
414+
EXPECT_FALSE(Str.ends_with("worldhello"));
415+
EXPECT_FALSE(Str.ends_with("so"));
416416
}
417417

418418
TEST(StringRefTest, EndsWithInsensitive) {
419419
StringRef Str("heLLo");
420-
EXPECT_TRUE(Str.endswith_insensitive(""));
421-
EXPECT_TRUE(Str.endswith_insensitive("lo"));
422-
EXPECT_TRUE(Str.endswith_insensitive("LO"));
423-
EXPECT_TRUE(Str.endswith_insensitive("ELlo"));
424-
EXPECT_FALSE(Str.endswith_insensitive("helloworld"));
425-
EXPECT_FALSE(Str.endswith_insensitive("hi"));
420+
EXPECT_TRUE(Str.ends_with_insensitive(""));
421+
EXPECT_TRUE(Str.ends_with_insensitive("lo"));
422+
EXPECT_TRUE(Str.ends_with_insensitive("LO"));
423+
EXPECT_TRUE(Str.ends_with_insensitive("ELlo"));
424+
EXPECT_FALSE(Str.ends_with_insensitive("helloworld"));
425+
EXPECT_FALSE(Str.ends_with_insensitive("hi"));
426426
}
427427

428428
TEST(StringRefTest, ConsumeBack) {

0 commit comments

Comments
 (0)