forked from OSchip/llvm-project
DenseMap: Factor destruction into a common helper method.
llvm-svn: 157538
This commit is contained in:
parent
f021889036
commit
fd91e72ee2
|
@ -62,20 +62,9 @@ public:
|
|||
init(NextPowerOf2(std::distance(I, E)));
|
||||
insert(I, E);
|
||||
}
|
||||
|
||||
|
||||
~DenseMap() {
|
||||
const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey();
|
||||
for (BucketT *P = Buckets, *E = Buckets+NumBuckets; P != E; ++P) {
|
||||
if (!KeyInfoT::isEqual(P->first, EmptyKey) &&
|
||||
!KeyInfoT::isEqual(P->first, TombstoneKey))
|
||||
P->second.~ValueT();
|
||||
P->first.~KeyT();
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
if (NumBuckets)
|
||||
memset((void*)Buckets, 0x5a, sizeof(BucketT)*NumBuckets);
|
||||
#endif
|
||||
operator delete(Buckets);
|
||||
DestroyAll();
|
||||
}
|
||||
|
||||
typedef DenseMapIterator<KeyT, ValueT, KeyInfoT> iterator;
|
||||
|
@ -254,28 +243,28 @@ public:
|
|||
const void *getPointerIntoBucketsArray() const { return Buckets; }
|
||||
|
||||
private:
|
||||
void CopyFrom(const DenseMap& other) {
|
||||
if (NumBuckets != 0 &&
|
||||
(!isPodLike<KeyT>::value || !isPodLike<ValueT>::value)) {
|
||||
const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey();
|
||||
for (BucketT *P = Buckets, *E = Buckets+NumBuckets; P != E; ++P) {
|
||||
if (!KeyInfoT::isEqual(P->first, EmptyKey) &&
|
||||
!KeyInfoT::isEqual(P->first, TombstoneKey))
|
||||
P->second.~ValueT();
|
||||
P->first.~KeyT();
|
||||
}
|
||||
void DestroyAll() {
|
||||
const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey();
|
||||
for (BucketT *P = Buckets, *E = Buckets+NumBuckets; P != E; ++P) {
|
||||
if (!KeyInfoT::isEqual(P->first, EmptyKey) &&
|
||||
!KeyInfoT::isEqual(P->first, TombstoneKey))
|
||||
P->second.~ValueT();
|
||||
P->first.~KeyT();
|
||||
}
|
||||
|
||||
NumEntries = other.NumEntries;
|
||||
NumTombstones = other.NumTombstones;
|
||||
|
||||
if (NumBuckets) {
|
||||
#ifndef NDEBUG
|
||||
memset((void*)Buckets, 0x5a, sizeof(BucketT)*NumBuckets);
|
||||
#endif
|
||||
operator delete(Buckets);
|
||||
}
|
||||
}
|
||||
|
||||
void CopyFrom(const DenseMap& other) {
|
||||
DestroyAll();
|
||||
|
||||
NumEntries = other.NumEntries;
|
||||
NumTombstones = other.NumTombstones;
|
||||
NumBuckets = other.NumBuckets;
|
||||
|
||||
if (NumBuckets == 0) {
|
||||
|
|
Loading…
Reference in New Issue