[llvm] r259018 - SmallPtrSet: Share some code between copy/move constructor/assignment operator
Matthias Braun via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 27 20:49:11 PST 2016
Author: matze
Date: Wed Jan 27 22:49:11 2016
New Revision: 259018
URL: http://llvm.org/viewvc/llvm-project?rev=259018&view=rev
Log:
SmallPtrSet: Share some code between copy/move constructor/assignment operator
Modified:
llvm/trunk/include/llvm/ADT/SmallPtrSet.h
llvm/trunk/lib/Support/SmallPtrSet.cpp
Modified: llvm/trunk/include/llvm/ADT/SmallPtrSet.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallPtrSet.h?rev=259018&r1=259017&r2=259018&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/SmallPtrSet.h (original)
+++ llvm/trunk/include/llvm/ADT/SmallPtrSet.h Wed Jan 27 22:49:11 2016
@@ -161,6 +161,12 @@ protected:
void CopyFrom(const SmallPtrSetImplBase &RHS);
void MoveFrom(unsigned SmallSize, SmallPtrSetImplBase &&RHS);
+
+private:
+ /// Code shared by MoveFrom() and move constructor.
+ void MoveHelper(unsigned SmallSize, SmallPtrSetImplBase &&RHS);
+ /// Code shared by CopyFrom() and copy constructor.
+ void CopyHelper(const SmallPtrSetImplBase &RHS);
};
/// SmallPtrSetIteratorImpl - This is the common base class shared between all
Modified: llvm/trunk/lib/Support/SmallPtrSet.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/SmallPtrSet.cpp?rev=259018&r1=259017&r2=259018&view=diff
==============================================================================
--- llvm/trunk/lib/Support/SmallPtrSet.cpp (original)
+++ llvm/trunk/lib/Support/SmallPtrSet.cpp Wed Jan 27 22:49:11 2016
@@ -164,45 +164,17 @@ SmallPtrSetImplBase::SmallPtrSetImplBase
assert(CurArray && "Failed to allocate memory?");
}
- // Copy over the new array size
- CurArraySize = that.CurArraySize;
-
- // Copy over the contents from the other set
- memcpy(CurArray, that.CurArray, sizeof(void*)*CurArraySize);
-
- NumElements = that.NumElements;
- NumTombstones = that.NumTombstones;
+ // Copy over the that array.
+ CopyHelper(that);
}
SmallPtrSetImplBase::SmallPtrSetImplBase(const void **SmallStorage,
unsigned SmallSize,
SmallPtrSetImplBase &&that) {
SmallArray = SmallStorage;
-
- // Copy over the basic members.
- CurArraySize = that.CurArraySize;
- NumElements = that.NumElements;
- NumTombstones = that.NumTombstones;
-
- // When small, just copy into our small buffer.
- if (that.isSmall()) {
- CurArray = SmallArray;
- memcpy(CurArray, that.CurArray, sizeof(void *) * CurArraySize);
- } else {
- // Otherwise, we steal the large memory allocation and no copy is needed.
- CurArray = that.CurArray;
- that.CurArray = that.SmallArray;
- }
-
- // Make the "that" object small and empty.
- that.CurArraySize = SmallSize;
- assert(that.CurArray == that.SmallArray);
- that.NumElements = 0;
- that.NumTombstones = 0;
+ MoveHelper(SmallSize, std::move(that));
}
-/// CopyFrom - implement operator= from a smallptrset that has the same pointer
-/// type, but may have a different small size.
void SmallPtrSetImplBase::CopyFrom(const SmallPtrSetImplBase &RHS) {
assert(&RHS != this && "Self-copy should be handled by the caller.");
@@ -229,6 +201,10 @@ void SmallPtrSetImplBase::CopyFrom(const
assert(CurArray && "Failed to allocate memory?");
}
+ CopyHelper(RHS);
+}
+
+void SmallPtrSetImplBase::CopyHelper(const SmallPtrSetImplBase &RHS) {
// Copy over the new array size
CurArraySize = RHS.CurArraySize;
@@ -241,10 +217,14 @@ void SmallPtrSetImplBase::CopyFrom(const
void SmallPtrSetImplBase::MoveFrom(unsigned SmallSize,
SmallPtrSetImplBase &&RHS) {
- assert(&RHS != this && "Self-move should be handled by the caller.");
-
if (!isSmall())
free(CurArray);
+ MoveHelper(SmallSize, std::move(RHS));
+}
+
+void SmallPtrSetImplBase::MoveHelper(unsigned SmallSize,
+ SmallPtrSetImplBase &&RHS) {
+ assert(&RHS != this && "Self-move should be handled by the caller.");
if (RHS.isSmall()) {
// Copy a small RHS rather than moving.
More information about the llvm-commits
mailing list