From ea33c8fed681d103f159e7e80591437c726576ec Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 24 Apr 2008 23:48:12 +0000 Subject: [PATCH] Added iterator support for DenseSet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50235 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/DenseSet.h | 42 +++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/include/llvm/ADT/DenseSet.h b/include/llvm/ADT/DenseSet.h index 1179bd6ef2b..778b6bafc0b 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 > class DenseSet { - DenseMap TheMap; + typedef DenseMap 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 -- 2.34.1