/// Initialize from a StringRef.
SmallString(StringRef S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {}
+ /// Initialize by concatenating a list of StringRefs.
+ SmallString(std::initializer_list<StringRef> Refs)
+ : SmallVector<char, InternalLen>() {
+ this->append(Refs);
+ }
+
/// Initialize with a range.
template<typename ItTy>
SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {}
SmallVectorImpl<char>::append(RHS.begin(), RHS.end());
}
+ /// Assign from a list of StringRefs.
+ void assign(std::initializer_list<StringRef> Refs) {
+ this->clear();
+ append(Refs);
+ }
+
/// @}
/// @name String Concatenation
/// @{
SmallVectorImpl<char>::append(RHS.begin(), RHS.end());
}
+ /// Append from a list of StringRefs.
+ void append(std::initializer_list<StringRef> Refs) {
+ size_t SizeNeeded = this->size();
+ for (const StringRef &Ref : Refs)
+ SizeNeeded += Ref.size();
+ this->reserve(SizeNeeded);
+ auto CurEnd = this->end();
+ for (const StringRef &Ref : Refs) {
+ this->uninitialized_copy(Ref.begin(), Ref.end(), CurEnd);
+ CurEnd += Ref.size();
+ }
+ this->set_size(SizeNeeded);
+ }
+
/// @}
/// @name String Comparison
/// @{
EXPECT_STREQ("abc", theString.c_str());
}
+TEST_F(SmallStringTest, AssignStringRefs) {
+ theString.assign({"abc", "def", "ghi"});
+ EXPECT_EQ(9u, theString.size());
+ EXPECT_STREQ("abcdefghi", theString.c_str());
+}
+
TEST_F(SmallStringTest, AppendIterPair) {
StringRef abc = "abc";
theString.append(abc.begin(), abc.end());
EXPECT_STREQ("abcabc", theString.c_str());
}
+TEST_F(SmallStringTest, AppendStringRefs) {
+ theString.append({"abc", "def", "ghi"});
+ EXPECT_EQ(9u, theString.size());
+ EXPECT_STREQ("abcdefghi", theString.c_str());
+ StringRef Jkl = "jkl";
+ std::string Mno = "mno";
+ SmallString<4> Pqr("pqr");
+ const char *Stu = "stu";
+ theString.append({Jkl, Mno, Pqr, Stu});
+ EXPECT_EQ(21u, theString.size());
+ EXPECT_STREQ("abcdefghijklmnopqrstu", theString.c_str());
+}
+
TEST_F(SmallStringTest, StringRefConversion) {
StringRef abc = "abc";
theString.assign(abc.begin(), abc.end());