[llvm-commits] [llvm] r50235 - /llvm/trunk/include/llvm/ADT/DenseSet.h

Ted Kremenek kremenek at apple.com
Thu Apr 24 16:48:12 PDT 2008


Author: kremenek
Date: Thu Apr 24 18:48:12 2008
New Revision: 50235

URL: http://llvm.org/viewvc/llvm-project?rev=50235&view=rev
Log:
Added iterator support for DenseSet.

Modified:
    llvm/trunk/include/llvm/ADT/DenseSet.h

Modified: llvm/trunk/include/llvm/ADT/DenseSet.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DenseSet.h?rev=50235&r1=50234&r2=50235&view=diff

==============================================================================
--- llvm/trunk/include/llvm/ADT/DenseSet.h (original)
+++ llvm/trunk/include/llvm/ADT/DenseSet.h Thu Apr 24 18:48:12 2008
@@ -24,15 +24,14 @@
 /// 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 @@
     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





More information about the llvm-commits mailing list