1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

Add StringRef::{substr, startswith}.

llvm-svn: 76559
This commit is contained in:
Daniel Dunbar 2009-07-21 09:18:49 +00:00
parent c142755cec
commit 30c92a0aee
2 changed files with 39 additions and 1 deletions

View File

@ -14,6 +14,7 @@
#include <string> #include <string>
namespace llvm { namespace llvm {
/// StringRef - Represent a constant reference to a string, i.e. a character /// StringRef - Represent a constant reference to a string, i.e. a character
/// array and a length, which need not be null terminated. /// array and a length, which need not be null terminated.
/// ///
@ -24,13 +25,14 @@ namespace llvm {
class StringRef { class StringRef {
public: public:
typedef const char *iterator; typedef const char *iterator;
static const size_t npos = std::string::npos;
private: private:
/// The start of the string, in an external buffer. /// The start of the string, in an external buffer.
const char *Data; const char *Data;
/// The length of the string. /// The length of the string.
unsigned Length; size_t Length;
public: public:
/// @name Constructors /// @name Constructors
@ -120,8 +122,32 @@ namespace llvm {
return str(); return str();
} }
/// @}
/// @name Utility Functions
/// @{
/// substr - Return a reference to a substring of this object.
///
/// \param Start - The index of the starting character in the substring; if
/// the index is greater than the length of the string then the empty
/// substring will be returned.
///
/// \param N - The number of characters to included in the substring. If N
/// exceeds the number of characters remaining in the string, the string
/// suffix (starting with \arg Start) will be returned.
StringRef substr(size_t Start, size_t N = npos) const {
Start = std::min(Start, Length);
return StringRef(Data + Start, std::min(N, Length - Start));
}
/// startswith - Check if this string starts with the given \arg Prefix.
bool startswith(const StringRef &Prefix) const {
return substr(0, Prefix.Length) == Prefix;
}
/// @} /// @}
}; };
} }
#endif #endif

View File

@ -56,4 +56,16 @@ TEST(StringRefTest, Operators) {
EXPECT_EQ('a', StringRef("aab")[1]); EXPECT_EQ('a', StringRef("aab")[1]);
} }
TEST(StringRefTest, Utilities) {
StringRef Str("hello");
EXPECT_TRUE(Str.substr(3) == "lo");
EXPECT_TRUE(Str.substr(100) == "");
EXPECT_TRUE(Str.substr(0, 100) == "hello");
EXPECT_TRUE(Str.substr(4, 10) == "o");
EXPECT_TRUE(Str.startswith("he"));
EXPECT_FALSE(Str.startswith("helloworld"));
EXPECT_FALSE(Str.startswith("hi"));
}
} // end anonymous namespace } // end anonymous namespace