Added iterators to ImmutableSet.
authorTed Kremenek <kremenek@apple.com>
Thu, 11 Oct 2007 00:14:49 +0000 (00:14 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 11 Oct 2007 00:14:49 +0000 (00:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42851 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ImmutableSet.h

index a0a28df2a360d1f53f3d80b0cadebe8392245b15..30815751de2f43ce93aff70987608d430b9933c2 100644 (file)
@@ -633,8 +633,8 @@ public:
   
   inline bool operator!=(const _Self& x) const { return !operator==(x); }  
   
-  inline TreeTy* operator*() { return *InternalItr; }
-  inline TreeTy* operator->() { return *InternalItr; }
+  inline TreeTy* operator*() const { return *InternalItr; }
+  inline TreeTy* operator->() const { return *InternalItr; }
   
   inline _Self& operator++() { 
     do ++InternalItr;
@@ -821,7 +821,7 @@ public:
     void operator=(const Factory& RHS) {};    
   };
   
-  friend class Factory;
+  friend class Factory;  
 
   /// contains - Returns true if the set contains the specified value.
   bool contains(const value_type_ref V) const {
@@ -844,6 +844,27 @@ public:
   
   template <typename Callback>
   void foreach() { if (Root) { Callback C; Root->foreach(C); } }
+    
+  //===--------------------------------------------------===//    
+  // Iterators.
+  //===--------------------------------------------------===//  
+
+  class iterator {
+    typename TreeTy::iterator itr;
+    
+    iterator() {}
+    iterator(TreeTy* t) : itr(t) {}
+    friend class ImmutableSet<ValT,ValInfo>;
+  public:
+    inline value_type_ref operator*() const { return itr->getValue(); }
+    inline iterator& operator++() { ++itr; return *this; }
+    inline iterator& operator--() { --itr; return *this; }
+    inline bool operator==(const iterator& RHS) const { return RHS.itr == itr; }
+    inline bool operator!=(const iterator& RHS) const { return RHS.itr != itr; }        
+  };
+  
+  iterator begin() const { return iterator(Root); }
+  iterator end() const { return iterator(); }  
   
   //===--------------------------------------------------===//    
   // For testing.