mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 17:32:36 +00:00
StringRef: Add find(char) and find(StringRef).
Also, regroup functions. llvm-svn: 78712
This commit is contained in:
parent
30d9c39337
commit
f4e8af6ecc
@ -123,7 +123,50 @@ namespace llvm {
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name Utility Functions
|
||||
/// @name String Predicates
|
||||
/// @{
|
||||
|
||||
/// startswith - Check if this string starts with the given \arg Prefix.
|
||||
bool startswith(const StringRef &Prefix) const {
|
||||
return substr(0, Prefix.Length).equals(Prefix);
|
||||
}
|
||||
|
||||
/// endswith - Check if this string ends with the given \arg Suffix.
|
||||
bool endswith(const StringRef &Suffix) const {
|
||||
return slice(size() - Suffix.Length, size()).equals(Suffix);
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name String Searching
|
||||
/// @{
|
||||
|
||||
/// find - Search for the character \arg C in the string.
|
||||
///
|
||||
/// \return - The index of the first occurence of \arg C, or npos if not
|
||||
/// found.
|
||||
size_t find(char C) const {
|
||||
for (size_t i = 0, e = Length; i != e; ++i)
|
||||
if (Data[i] == C)
|
||||
return i;
|
||||
return npos;
|
||||
}
|
||||
|
||||
/// find - Search for the string \arg Str in the string.
|
||||
///
|
||||
/// \return - The index of the first occurence of \arg Str, or npos if not
|
||||
/// found.
|
||||
size_t find(const StringRef &Str) const {
|
||||
size_t N = Str.size();
|
||||
if (N > Length)
|
||||
return npos;
|
||||
for (size_t i = 0, e = Length - N + 1; i != e; ++i)
|
||||
if (substr(i, N).equals(Str))
|
||||
return i;
|
||||
return npos;
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name Substring Operations
|
||||
/// @{
|
||||
|
||||
/// substr - Return a reference to the substring from [Start, Start + N).
|
||||
@ -167,21 +210,10 @@ namespace llvm {
|
||||
/// \param Separator - The character to split on.
|
||||
/// \return - The split substrings.
|
||||
std::pair<StringRef, StringRef> split(char Separator) const {
|
||||
iterator it = std::find(begin(), end(), Separator);
|
||||
if (it == end())
|
||||
size_t Idx = find(Separator);
|
||||
if (Idx == npos)
|
||||
return std::make_pair(*this, StringRef());
|
||||
return std::make_pair(StringRef(begin(), it - begin()),
|
||||
StringRef(it + 1, end() - (it + 1)));
|
||||
}
|
||||
|
||||
/// startswith - Check if this string starts with the given \arg Prefix.
|
||||
bool startswith(const StringRef &Prefix) const {
|
||||
return substr(0, Prefix.Length).equals(Prefix);
|
||||
}
|
||||
|
||||
/// endswith - Check if this string ends with the given \arg Suffix.
|
||||
bool endswith(const StringRef &Suffix) const {
|
||||
return slice(size() - Suffix.Length, size()).equals(Suffix);
|
||||
return std::make_pair(slice(0, Idx), slice(Idx+1, npos));
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
@ -87,6 +87,13 @@ TEST(StringRefTest, Utilities) {
|
||||
raw_string_ostream OS(Storage);
|
||||
OS << StringRef("hello");
|
||||
EXPECT_EQ("hello", OS.str());
|
||||
|
||||
EXPECT_TRUE(Str.find('l') == 2);
|
||||
EXPECT_TRUE(Str.find('z') == StringRef::npos);
|
||||
EXPECT_TRUE(Str.find("helloworld") == StringRef::npos);
|
||||
EXPECT_TRUE(Str.find("hello") == 0);
|
||||
EXPECT_TRUE(Str.find("ello") == 1);
|
||||
EXPECT_TRUE(Str.find("zz") == StringRef::npos);
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
Loading…
x
Reference in New Issue
Block a user