Add copy and assignment operators for POIterator, and
authorVikram S. Adve <vadve@cs.uiuc.edu>
Tue, 28 Aug 2001 21:34:56 +0000 (21:34 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Tue, 28 Aug 2001 21:34:56 +0000 (21:34 +0000)
static constructors.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@387 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CFG.h

index 5228746f34256086139f3e26e012263978f2ca87..43ca8fb0a8a83c1d5dc46324d06e9ab4165bea2e 100644 (file)
@@ -358,7 +358,8 @@ class POIterator : public std::forward_iterator<BBType,     ptrdiff_t> {
 
   void traverseChild() {
     while (VisitStack.top().second != succ_end(VisitStack.top().first)) {
-      BBType *BB = *VisitStack.top().second++;
+      BBType *BB = *VisitStack.top().second;
+      ++ VisitStack.top().second;
       if (!Visited.count(BB)) {  // If the block is not visited...
        Visited.insert(BB);
        VisitStack.push(make_pair(BB, succ_begin(BB)));
@@ -373,8 +374,16 @@ public:
     VisitStack.push(make_pair(BB, succ_begin(BB)));
     traverseChild();
   }
+  inline POIterator(const _Self& x)
+    : Visited(x.Visited), VisitStack(x.VisitStack) {
+  }
+  inline POIterator& operator=(const _Self& x) {
+    Visited = x.Visited;
+    VisitStack = x.VisitStack;
+    return *this;
+  }
   inline POIterator() { /* End is when stack is empty */ }
-
+  
   inline bool operator==(const _Self& x) const { 
     return VisitStack == x.VisitStack;
   }
@@ -400,6 +409,10 @@ public:
   inline _Self operator++(int) { // Postincrement
     _Self tmp = *this; ++*this; return tmp; 
   }
+
+  // Provide default begin and end methods when nothing special is needed.
+  static inline _Self   begin  (BBType *BB) { return _Self(BB); }
+  static inline _Self   end    (BBType *BB) { return _Self(); }
 };
 
 inline po_iterator       po_begin(      Method *M) {