[llvm-commits] CVS: llvm/include/llvm/ADT/SmallVector.h

Chris Lattner lattner at cs.uiuc.edu
Thu Jul 27 22:04:03 PDT 2006



Changes in directory llvm/include/llvm/ADT:

SmallVector.h updated: 1.2 -> 1.3
---
Log message:

The smallvector dtor should destroy the elements.
Implement pop_back.
Chage some code to use 'iterator' instead of T*.  This unbreaks operators=.



---
Diffs of the changes:  (+12 -2)

 SmallVector.h |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)


Index: llvm/include/llvm/ADT/SmallVector.h
diff -u llvm/include/llvm/ADT/SmallVector.h:1.2 llvm/include/llvm/ADT/SmallVector.h:1.3
--- llvm/include/llvm/ADT/SmallVector.h:1.2	Wed Jul 26 22:38:08 2006
+++ llvm/include/llvm/ADT/SmallVector.h	Fri Jul 28 00:03:42 2006
@@ -66,6 +66,10 @@
     std::uninitialized_copy(RHS.begin(), RHS.end(), Begin);
   }
   ~SmallVector() {
+    // Destroy the constructed elements in the vector.
+    for (iterator I = Begin, E = End; I != E; ++I)
+      I->~T();
+
     // If this wasn't grown from the inline copy, deallocate the old space.
     if ((void*)Begin != (void*)InlineElts)
       delete[] (char*)Begin;
@@ -115,6 +119,12 @@
     goto Retry;
   }
   
+  void pop_back() {
+    assert(!empty() && "SmallVector is empty!");
+    --End;
+    End->~T();
+  }
+  
   /// append - Add the specified range to the end of the SmallVector.
   ///
   template<typename in_iter>
@@ -154,7 +164,7 @@
     // This allows us to avoid copying them during the grow.
     if (Capacity-Begin < RHSSize) {
       // Destroy current elements.
-      for (T *I = Begin, E = End; I != E; ++I)
+      for (iterator I = Begin, E = End; I != E; ++I)
         I->~T();
       End = Begin;
       CurSize = 0;
@@ -192,7 +202,7 @@
     std::uninitialized_copy(Begin, End, NewElts);
     
     // Destroy the original elements.
-    for (T *I = Begin, *E = End; I != E; ++I)
+    for (iterator I = Begin, E = End; I != E; ++I)
       I->~T();
     
     // If this wasn't grown from the inline copy, deallocate the old space.






More information about the llvm-commits mailing list