mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-22 10:29:35 +00:00
Add From arguments to StringRef search functions, and tweak doxyments.
Also, add unittests for find_first_of and find_first_not_of. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86770 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
253e9b2990
commit
64066bd8b5
@ -152,8 +152,8 @@ namespace llvm {
|
||||
///
|
||||
/// \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)
|
||||
size_t find(char C, size_t From = 0) const {
|
||||
for (size_t i = std::min(From, Length), e = Length; i != e; ++i)
|
||||
if (Data[i] == C)
|
||||
return i;
|
||||
return npos;
|
||||
@ -163,7 +163,7 @@ namespace llvm {
|
||||
///
|
||||
/// \return - The index of the first occurence of \arg Str, or npos if not
|
||||
/// found.
|
||||
size_t find(StringRef Str) const;
|
||||
size_t find(StringRef Str, size_t From = 0) const;
|
||||
|
||||
/// rfind - Search for the last character \arg C in the string.
|
||||
///
|
||||
@ -186,17 +186,25 @@ namespace llvm {
|
||||
/// found.
|
||||
size_t rfind(StringRef Str) const;
|
||||
|
||||
/// find_first_of - Find the first instance of the specified character or
|
||||
/// return npos if not in string. Same as find.
|
||||
size_type find_first_of(char C) const { return find(C); }
|
||||
/// find_first_of - Find the first character in the string that is \arg C,
|
||||
/// or npos if not found. Same as find.
|
||||
size_type find_first_of(char C, size_t From = 0) const { return find(C); }
|
||||
|
||||
/// find_first_of - Find the first character from the string 'Chars' in the
|
||||
/// current string or return npos if not in string.
|
||||
size_type find_first_of(StringRef Chars) const;
|
||||
/// find_first_of - Find the first character in the string that is in \arg
|
||||
/// Chars, or npos if not found.
|
||||
///
|
||||
/// Note: O(size() * Chars.size())
|
||||
size_type find_first_of(StringRef Chars, size_t From = 0) const;
|
||||
|
||||
/// find_first_not_of - Find the first character in the string that is not
|
||||
/// in the string 'Chars' or return npos if all are in string. Same as find.
|
||||
size_type find_first_not_of(StringRef Chars) const;
|
||||
/// \arg C or npos if not found.
|
||||
size_type find_first_not_of(char C, size_t From = 0) const;
|
||||
|
||||
/// find_first_not_of - Find the first character in the string that is not
|
||||
/// in the string \arg Chars, or npos if not found.
|
||||
///
|
||||
/// Note: O(size() * Chars.size())
|
||||
size_type find_first_not_of(StringRef Chars, size_t From = 0) const;
|
||||
|
||||
/// @}
|
||||
/// @name Helpful Algorithms
|
||||
|
@ -24,11 +24,11 @@ const size_t StringRef::npos;
|
||||
///
|
||||
/// \return - The index of the first occurence of \arg Str, or npos if not
|
||||
/// found.
|
||||
size_t StringRef::find(StringRef Str) const {
|
||||
size_t StringRef::find(StringRef Str, size_t From) const {
|
||||
size_t N = Str.size();
|
||||
if (N > Length)
|
||||
return npos;
|
||||
for (size_t i = 0, e = Length - N + 1; i != e; ++i)
|
||||
for (size_t e = Length - N + 1, i = std::min(From, e); i != e; ++i)
|
||||
if (substr(i, N).equals(Str))
|
||||
return i;
|
||||
return npos;
|
||||
@ -50,19 +50,34 @@ size_t StringRef::rfind(StringRef Str) const {
|
||||
return npos;
|
||||
}
|
||||
|
||||
/// find_first_of - Find the first character from the string 'Chars' in the
|
||||
/// current string or return npos if not in string.
|
||||
StringRef::size_type StringRef::find_first_of(StringRef Chars) const {
|
||||
for (size_type i = 0, e = Length; i != e; ++i)
|
||||
/// find_first_of - Find the first character in the string that is in \arg
|
||||
/// Chars, or npos if not found.
|
||||
///
|
||||
/// Note: O(size() * Chars.size())
|
||||
StringRef::size_type StringRef::find_first_of(StringRef Chars,
|
||||
size_t From) const {
|
||||
for (size_type i = std::min(From, Length), e = Length; i != e; ++i)
|
||||
if (Chars.find(Data[i]) != npos)
|
||||
return i;
|
||||
return npos;
|
||||
}
|
||||
|
||||
/// find_first_not_of - Find the first character in the string that is not
|
||||
/// in the string 'Chars' or return npos if all are in string. Same as find.
|
||||
StringRef::size_type StringRef::find_first_not_of(StringRef Chars) const {
|
||||
for (size_type i = 0, e = Length; i != e; ++i)
|
||||
/// \arg C or npos if not found.
|
||||
StringRef::size_type StringRef::find_first_not_of(char C, size_t From) const {
|
||||
for (size_type i = std::min(From, Length), e = Length; i != e; ++i)
|
||||
if (Data[i] != C)
|
||||
return i;
|
||||
return npos;
|
||||
}
|
||||
|
||||
/// find_first_not_of - Find the first character in the string that is not
|
||||
/// in the string \arg Chars, or npos if not found.
|
||||
///
|
||||
/// Note: O(size() * Chars.size())
|
||||
StringRef::size_type StringRef::find_first_not_of(StringRef Chars,
|
||||
size_t From) const {
|
||||
for (size_type i = std::min(From, Length), e = Length; i != e; ++i)
|
||||
if (Chars.find(Data[i]) == npos)
|
||||
return i;
|
||||
return npos;
|
||||
|
@ -125,6 +125,8 @@ TEST(StringRefTest, Find) {
|
||||
EXPECT_EQ(0U, Str.find("hello"));
|
||||
EXPECT_EQ(1U, Str.find("ello"));
|
||||
EXPECT_EQ(StringRef::npos, Str.find("zz"));
|
||||
EXPECT_EQ(2U, Str.find("ll", 2));
|
||||
EXPECT_EQ(StringRef::npos, Str.find("ll", 3));
|
||||
|
||||
EXPECT_EQ(3U, Str.rfind('l'));
|
||||
EXPECT_EQ(StringRef::npos, Str.rfind('z'));
|
||||
@ -132,6 +134,14 @@ TEST(StringRefTest, Find) {
|
||||
EXPECT_EQ(0U, Str.rfind("hello"));
|
||||
EXPECT_EQ(1U, Str.rfind("ello"));
|
||||
EXPECT_EQ(StringRef::npos, Str.rfind("zz"));
|
||||
|
||||
EXPECT_EQ(2U, Str.find_first_of('l'));
|
||||
EXPECT_EQ(1U, Str.find_first_of("el"));
|
||||
EXPECT_EQ(StringRef::npos, Str.find_first_of("xyz"));
|
||||
|
||||
EXPECT_EQ(1U, Str.find_first_not_of('h'));
|
||||
EXPECT_EQ(4U, Str.find_first_not_of("hel"));
|
||||
EXPECT_EQ(StringRef::npos, Str.find_first_not_of("hello"));
|
||||
}
|
||||
|
||||
TEST(StringRefTest, Count) {
|
||||
|
Loading…
Reference in New Issue
Block a user