Iterator traits and swap. closes PR6548 and PR6549

llvm-svn: 97974
This commit is contained in:
Andrew Lenharth 2010-03-08 20:45:52 +00:00
parent 939801510b
commit 4f4af9d95c
2 changed files with 23 additions and 0 deletions

View File

@ -192,6 +192,13 @@ public:
return true;
}
void swap(DenseMap& RHS) {
std::swap(NumBuckets, RHS.NumBuckets);
std::swap(Buckets, RHS.Buckets);
std::swap(NumEntries, RHS.NumEntries);
std::swap(NumTombstones, RHS.NumTombstones);
}
value_type& FindAndConstruct(const KeyT &Key) {
BucketT *TheBucket;
if (LookupBucketFor(Key, TheBucket))

View File

@ -45,6 +45,10 @@ public:
return TheMap.erase(V);
}
void swap(DenseSet& RHS) {
TheMap.swap(RHS.TheMap);
}
DenseSet &operator=(const DenseSet &RHS) {
TheMap = RHS.TheMap;
return *this;
@ -55,6 +59,12 @@ public:
class Iterator {
typename MapTy::iterator I;
public:
typedef typename MapTy::iterator::difference_type difference_type;
typedef ValueT value_type;
typedef value_type *pointer;
typedef value_type &reference;
typedef std::forward_iterator_tag iterator_category;
Iterator(const typename MapTy::iterator &i) : I(i) {}
ValueT& operator*() { return I->first; }
@ -68,6 +78,12 @@ public:
class ConstIterator {
typename MapTy::const_iterator I;
public:
typedef typename MapTy::const_iterator::difference_type difference_type;
typedef ValueT value_type;
typedef value_type *pointer;
typedef value_type &reference;
typedef std::forward_iterator_tag iterator_category;
ConstIterator(const typename MapTy::const_iterator &i) : I(i) {}
const ValueT& operator*() { return I->first; }