[llvm] r203375 - Revert "Clean up SmallString a bit"

David Blaikie dblaikie at gmail.com
Sat Mar 8 22:22:58 PST 2014


Author: dblaikie
Date: Sun Mar  9 00:22:58 2014
New Revision: 203375

URL: http://llvm.org/viewvc/llvm-project?rev=203375&view=rev
Log:
Revert "Clean up SmallString a bit"

This reverts commit r203374.

Ambiguities in assign... oh well. I'm just going to revert this and
probably not try to recommit it as it's not terribly important.

Modified:
    llvm/trunk/include/llvm/ADT/SmallString.h
    llvm/trunk/include/llvm/ADT/SmallVector.h
    llvm/trunk/include/llvm/DebugInfo/DIContext.h
    llvm/trunk/unittests/ADT/SmallStringTest.cpp
    llvm/trunk/unittests/ADT/SmallVectorTest.cpp

Modified: llvm/trunk/include/llvm/ADT/SmallString.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallString.h?rev=203375&r1=203374&r2=203375&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/SmallString.h (original)
+++ llvm/trunk/include/llvm/ADT/SmallString.h Sun Mar  9 00:22:58 2014
@@ -28,18 +28,30 @@ public:
   SmallString() {}
 
   /// Initialize from a StringRef.
-  /*implicit*/ SmallString(StringRef S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {}
+  SmallString(StringRef S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {}
 
   /// Initialize with a range.
   template<typename ItTy>
   SmallString(ItTy S, ItTy E) : SmallVector<char, InternalLen>(S, E) {}
 
+  // Note that in order to add new overloads for append & assign, we have to
+  // duplicate the inherited versions so as not to inadvertently hide them.
+
   /// @}
   /// @name String Assignment
   /// @{
 
-  // Provide assign from SmallVectorImpl<char>
-  using SmallVectorImpl<char>::assign;
+  /// Assign from a repeated element.
+  void assign(size_t NumElts, char Elt) {
+    this->SmallVectorImpl<char>::assign(NumElts, Elt);
+  }
+
+  /// Assign from an iterator pair.
+  template<typename in_iter>
+  void assign(in_iter S, in_iter E) {
+    this->clear();
+    SmallVectorImpl<char>::append(S, E);
+  }
 
   /// Assign from a StringRef.
   void assign(StringRef RHS) {
@@ -53,7 +65,20 @@ public:
     SmallVectorImpl<char>::append(RHS.begin(), RHS.end());
   }
 
-  using SmallVectorImpl<char>::append;
+  /// @}
+  /// @name String Concatenation
+  /// @{
+
+  /// Append from an iterator pair.
+  template<typename in_iter>
+  void append(in_iter S, in_iter E) {
+    SmallVectorImpl<char>::append(S, E);
+  }
+
+  void append(size_t NumInputs, char Elt) {
+    SmallVectorImpl<char>::append(NumInputs, Elt);
+  }
+
 
   /// Append from a StringRef.
   void append(StringRef RHS) {
@@ -69,6 +94,12 @@ public:
   /// @name String Comparison
   /// @{
 
+  /// Check for string equality.  This is more efficient than compare() when
+  /// the relative ordering of inequal strings isn't needed.
+  bool equals(StringRef RHS) const {
+    return str().equals(RHS);
+  }
+
   /// Check for string equality, ignoring case.
   bool equals_lower(StringRef RHS) const {
     return str().equals_lower(RHS);
@@ -245,9 +276,6 @@ public:
   /// Implicit conversion to StringRef.
   operator StringRef() const { return str(); }
 
-  // Provide op= for SmallVectorImpl<char>
-  using SmallVectorImpl<char>::operator=;
-
   // Extra operators.
   const SmallString &operator=(StringRef RHS) {
     this->clear();
@@ -255,15 +283,9 @@ public:
   }
 
   SmallString &operator+=(StringRef RHS) {
-    append(RHS.begin(), RHS.end());
+    this->append(RHS.begin(), RHS.end());
     return *this;
   }
-
-  SmallString &operator+=(const SmallVectorImpl<char> &RHS) {
-    append(RHS.begin(), RHS.end());
-    return *this;
-  }
-
   SmallString &operator+=(char C) {
     this->push_back(C);
     return *this;

Modified: llvm/trunk/include/llvm/ADT/SmallVector.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallVector.h?rev=203375&r1=203374&r2=203375&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/SmallVector.h (original)
+++ llvm/trunk/include/llvm/ADT/SmallVector.h Sun Mar  9 00:22:58 2014
@@ -451,12 +451,10 @@ public:
 
   void assign(unsigned NumElts, const T &Elt) {
     clear();
-    append(NumElts, Elt);
-  }
-
-  template <typename in_iter> void assign(in_iter S, in_iter E) {
-    clear();
-    append(S, E);
+    if (this->capacity() < NumElts)
+      this->grow(NumElts);
+    this->setEnd(this->begin()+NumElts);
+    std::uninitialized_fill(this->begin(), this->end(), Elt);
   }
 
   iterator erase(iterator I) {

Modified: llvm/trunk/include/llvm/DebugInfo/DIContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DIContext.h?rev=203375&r1=203374&r2=203375&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/DIContext.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/DIContext.h Sun Mar  9 00:22:58 2014
@@ -50,7 +50,8 @@ public:
 
   bool operator==(const DILineInfo &RHS) const {
     return Line == RHS.Line && Column == RHS.Column &&
-           FileName == RHS.FileName && FunctionName == RHS.FunctionName;
+           FileName.equals(RHS.FileName) &&
+           FunctionName.equals(RHS.FunctionName);
   }
   bool operator!=(const DILineInfo &RHS) const {
     return !(*this == RHS);

Modified: llvm/trunk/unittests/ADT/SmallStringTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/SmallStringTest.cpp?rev=203375&r1=203374&r2=203375&view=diff
==============================================================================
--- llvm/trunk/unittests/ADT/SmallStringTest.cpp (original)
+++ llvm/trunk/unittests/ADT/SmallStringTest.cpp Sun Mar  9 00:22:58 2014
@@ -50,6 +50,13 @@ TEST_F(SmallStringTest, AssignRepeated)
   EXPECT_STREQ("aaa", theString.c_str());
 }
 
+TEST_F(SmallStringTest, AssignIterPair) {
+  StringRef abc = "abc";
+  theString.assign(abc.begin(), abc.end());
+  EXPECT_EQ(3u, theString.size());
+  EXPECT_STREQ("abc", theString.c_str());
+}
+
 TEST_F(SmallStringTest, AssignStringRef) {
   StringRef abc = "abc";
   theString.assign(abc);
@@ -80,23 +87,6 @@ TEST_F(SmallStringTest, AppendStringRef)
   EXPECT_EQ(6u, theString.size());
   EXPECT_STREQ("abcabc", theString.c_str());
 }
-
-TEST_F(SmallStringTest, PlusEqualsStringRef) {
-  StringRef abc = "abc";
-  theString += abc;
-  theString += abc;
-  EXPECT_EQ(6u, theString.size());
-  EXPECT_STREQ("abcabc", theString.c_str());
-}
-
-TEST_F(SmallStringTest, PlusEqualsSmallVector) {
-  StringRef abc = "abc";
-  SmallVector<char, 10> abcVec(abc.begin(), abc.end());
-  theString += abcVec;
-  theString += abcVec;
-  EXPECT_EQ(6u, theString.size());
-  EXPECT_STREQ("abcabc", theString.c_str());
-}
 
 TEST_F(SmallStringTest, AppendSmallVector) {
   StringRef abc = "abc";

Modified: llvm/trunk/unittests/ADT/SmallVectorTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/SmallVectorTest.cpp?rev=203375&r1=203374&r2=203375&view=diff
==============================================================================
--- llvm/trunk/unittests/ADT/SmallVectorTest.cpp (original)
+++ llvm/trunk/unittests/ADT/SmallVectorTest.cpp Sun Mar  9 00:22:58 2014
@@ -338,17 +338,6 @@ TYPED_TEST(SmallVectorTest, AssignTest)
   this->assertValuesInOrder(this->theVector, 2u, 77, 77);
 }
 
-TYPED_TEST(SmallVectorTest, AssignIterPair) {
-  SCOPED_TRACE("AssignIterPair");
-
-  std::vector<int> v;
-  v.push_back(1);
-  v.push_back(2);
-  this->theVector.push_back(Constructable(1));
-  this->theVector.assign(v.begin(), v.end());
-  this->assertValuesInOrder(this->theVector, 2u, 1, 2);
-}
-
 // Erase a single element
 TYPED_TEST(SmallVectorTest, EraseTest) {
   SCOPED_TRACE("EraseTest");





More information about the llvm-commits mailing list