summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/FoldingSet.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2015-08-16 23:17:27 +0000
committerChandler Carruth <chandlerc@gmail.com>2015-08-16 23:17:27 +0000
commitb596ba2376a7e4391049bcfca14b60c0cdb18cc8 (patch)
treedb904ec7774bed5fb73298a5ed042e47e93e2d09 /llvm/lib/Support/FoldingSet.cpp
parent802d3d397c920fe6eef29484f95c46f318bed31a (diff)
downloadbcm5719-llvm-b596ba2376a7e4391049bcfca14b60c0cdb18cc8.tar.gz
bcm5719-llvm-b596ba2376a7e4391049bcfca14b60c0cdb18cc8.zip
[ADT] Teach FoldingSet to be movable.
This is a very minimal move support - it leaves the moved-from object in a zombie state that is only valid for destruction and move assignment. This seems fine to me, and leaving it in the default constructed state would require adding more state to the object and potentially allocating memory (!!!) and so seems like a Bad Idea. llvm-svn: 245192
Diffstat (limited to 'llvm/lib/Support/FoldingSet.cpp')
-rw-r--r--llvm/lib/Support/FoldingSet.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Support/FoldingSet.cpp b/llvm/lib/Support/FoldingSet.cpp
index b8538ffe1f9..bb0ec2defef 100644
--- a/llvm/lib/Support/FoldingSet.cpp
+++ b/llvm/lib/Support/FoldingSet.cpp
@@ -232,9 +232,29 @@ FoldingSetImpl::FoldingSetImpl(unsigned Log2InitSize) {
Buckets = AllocateBuckets(NumBuckets);
NumNodes = 0;
}
+
+FoldingSetImpl::FoldingSetImpl(FoldingSetImpl &&Arg)
+ : Buckets(Arg.Buckets), NumBuckets(Arg.NumBuckets), NumNodes(Arg.NumNodes) {
+ Arg.Buckets = nullptr;
+ Arg.NumBuckets = 0;
+ Arg.NumNodes = 0;
+}
+
+FoldingSetImpl &FoldingSetImpl::operator=(FoldingSetImpl &&RHS) {
+ free(Buckets); // This may be null if the set is in a moved-from state.
+ Buckets = RHS.Buckets;
+ NumBuckets = RHS.NumBuckets;
+ NumNodes = RHS.NumNodes;
+ RHS.Buckets = nullptr;
+ RHS.NumBuckets = 0;
+ RHS.NumNodes = 0;
+ return *this;
+}
+
FoldingSetImpl::~FoldingSetImpl() {
free(Buckets);
}
+
void FoldingSetImpl::clear() {
// Set all but the last bucket to null pointers.
memset(Buckets, 0, NumBuckets*sizeof(void*));
OpenPOWER on IntegriCloud