diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-04-24 23:48:12 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-04-24 23:48:12 +0000 |
commit | 0cc2314f20bb58ece0aa3eeaa8a0d2a4c696cdd8 (patch) | |
tree | 0d1484481f2ccdfcc27a738b295fee317c83ac30 | |
parent | 5e9b2fe91d5c72ac1f6c99ee3b4c20ddc4b71e7b (diff) | |
download | external_llvm-0cc2314f20bb58ece0aa3eeaa8a0d2a4c696cdd8.zip external_llvm-0cc2314f20bb58ece0aa3eeaa8a0d2a4c696cdd8.tar.gz external_llvm-0cc2314f20bb58ece0aa3eeaa8a0d2a4c696cdd8.tar.bz2 |
Added iterator support for DenseSet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50235 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/DenseSet.h | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/include/llvm/ADT/DenseSet.h b/include/llvm/ADT/DenseSet.h index 1179bd6..778b6ba 100644 --- a/include/llvm/ADT/DenseSet.h +++ b/include/llvm/ADT/DenseSet.h @@ -24,15 +24,14 @@ namespace llvm { /// should be optimized later if there is a need. template<typename ValueT, typename ValueInfoT = DenseMapInfo<ValueT> > class DenseSet { - DenseMap<ValueT, char, ValueInfoT> TheMap; + typedef DenseMap<ValueT, char, ValueInfoT> MapTy; + MapTy TheMap; public: DenseSet(const DenseSet &Other) : TheMap(Other.TheMap) {} explicit DenseSet(unsigned NumInitBuckets = 64) : TheMap(NumInitBuckets) {} bool empty() const { return TheMap.empty(); } - unsigned size() const { return TheMap.size(); } - - // TODO add iterators. + unsigned size() const { return TheMap.size(); } void clear() { TheMap.clear(); @@ -54,6 +53,41 @@ public: TheMap = RHS.TheMap; return *this; } + + // Iterators. + + class Iterator { + typename MapTy::iterator I; + public: + Iterator(const typename MapTy::iterator &i) : I(i) {} + + ValueT& operator*() { return I->first; } + ValueT* operator->() { return &I->first; } + + Iterator& operator++() { ++I; return *this; }; + bool operator==(const Iterator& X) const { return I == X.I; } + }; + + class ConstIterator { + typename MapTy::const_iterator I; + public: + ConstIterator(const typename MapTy::const_iterator &i) : I(i) {} + + const ValueT& operator*() { return I->first; } + const ValueT* operator->() { return &I->first; } + + ConstIterator& operator++() { ++I; return *this; }; + bool operator==(const ConstIterator& X) const { return I == X.I; } + }; + + typedef Iterator iterator; + typedef ConstIterator const_iterator; + + iterator begin() { return Iterator(TheMap.begin()); } + iterator end() { return Iterator(TheMap.end()); } + + const_iterator begin() const { return ConstIterator(TheMap.begin()); } + const_iterator end() const { return ConstIterator(TheMap.end()); } }; } // end namespace llvm |