[llvm-commits] [support] r40477 - /support/trunk/lib/Support/SmallPtrSet.cpp

Owen Anderson resistor at mac.com
Tue Jul 24 15:45:36 PDT 2007


Author: resistor
Date: Tue Jul 24 17:45:36 2007
New Revision: 40477

URL: http://llvm.org/viewvc/llvm-project?rev=40477&view=rev
Log:
Merge patch from mainline.

Modified:
    support/trunk/lib/Support/SmallPtrSet.cpp

Modified: support/trunk/lib/Support/SmallPtrSet.cpp
URL: http://llvm.org/viewvc/llvm-project/support/trunk/lib/Support/SmallPtrSet.cpp?rev=40477&r1=40476&r2=40477&view=diff

==============================================================================
--- support/trunk/lib/Support/SmallPtrSet.cpp (original)
+++ support/trunk/lib/Support/SmallPtrSet.cpp Tue Jul 24 17:45:36 2007
@@ -149,33 +149,23 @@
 }
 
 SmallPtrSetImpl::SmallPtrSetImpl(const SmallPtrSetImpl& that) {
-  NumElements = that.NumElements;
-  NumTombstones = 0;
+  // If we're becoming small, prepare to insert into our stack space
   if (that.isSmall()) {
-    CurArraySize = that.CurArraySize;
     CurArray = &SmallArray[0];
-    // Copy the entire contents of the array, including the -1's and the null
-    // terminator.
-    memcpy(CurArray, that.CurArray, sizeof(void*)*(CurArraySize+1));
+  // Otherwise, allocate new heap space (unless we were the same size)
   } else {
-    CurArraySize = that.NumElements < 64 ? 128 : that.CurArraySize*2;
-    CurArray = (void**)malloc(sizeof(void*) * (CurArraySize+1));
+    CurArray = (void**)malloc(sizeof(void*) * (that.CurArraySize+1));
     assert(CurArray && "Failed to allocate memory?");
-    memset(CurArray, -1, CurArraySize*sizeof(void*));
-    
-    // The end pointer, always valid, is set to a valid element to help the
-    // iterator.
-    CurArray[CurArraySize] = 0;
-
-    // Copy over all valid entries.
-    for (void **BucketPtr = that.CurArray, **E = that.CurArray+that.CurArraySize;
-         BucketPtr != E; ++BucketPtr) {
-      // Copy over the element if it is valid.
-      void *Elt = *BucketPtr;
-      if (Elt != getTombstoneMarker() && Elt != getEmptyMarker())
-        *const_cast<void**>(FindBucketFor(Elt)) = Elt;
-    }
   }
+  
+  // Copy over the new array size
+  CurArraySize = that.CurArraySize;
+
+  // Copy over the contents from the other set
+  memcpy(CurArray, that.CurArray, sizeof(void*)*(CurArraySize+1));
+  
+  NumElements = that.NumElements;
+  NumTombstones = that.NumTombstones;
 }
 
 /// CopyFrom - implement operator= from a smallptrset that has the same pointer





More information about the llvm-commits mailing list