summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-04-24 23:48:12 +0000
committerTed Kremenek <kremenek@apple.com>2008-04-24 23:48:12 +0000
commitea33c8fed681d103f159e7e80591437c726576ec (patch)
tree0d1484481f2ccdfcc27a738b295fee317c83ac30 /include
parent1e8586d175872bd7372cad52e97660f2c3fcc8de (diff)
downloadllvm-ea33c8fed681d103f159e7e80591437c726576ec.tar.gz
llvm-ea33c8fed681d103f159e7e80591437c726576ec.tar.bz2
llvm-ea33c8fed681d103f159e7e80591437c726576ec.tar.xz
Added iterator support for DenseSet.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50235 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/ADT/DenseSet.h42
1 files changed, 38 insertions, 4 deletions
diff --git a/include/llvm/ADT/DenseSet.h b/include/llvm/ADT/DenseSet.h
index 1179bd6ef2..778b6bafc0 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