Make comments above APIs reflect what they should do.
[oota-llvm.git] / include / llvm / Analysis / IntervalIterator.h
index e533f8ac16f542889c478a294a2640db886c6d58..091959f25fa0e43915e1f53e394281597f5649da 100644 (file)
@@ -1,4 +1,11 @@
-//===- IntervalIterator.h - Interval Iterator Declaration --------*- C++ -*--=//
+//===- IntervalIterator.h - Interval Iterator Declaration -------*- C++ -*-===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
 //
 // This file defines an iterator that enumerates the intervals in a control flow
 // graph of some sort.  This iterator is parametric, allowing iterator over the
@@ -33,6 +40,8 @@
 #include <set>
 #include <algorithm>
 
+namespace llvm {
+
 // getNodeHeader - Given a source graph node and the source graph, return the 
 // BasicBlock that is the header node.  This is the opposite of
 // getSourceGraphNode.
@@ -76,7 +85,8 @@ inline void addNodeToInterval(Interval *Int, Interval *I) {
 
 
 
-template<class NodeTy, class OrigContainer_t>
+template<class NodeTy, class OrigContainer_t, class GT = GraphTraits<NodeTy*>,
+         class IGT = GraphTraits<Inverse<NodeTy*> > >
 class IntervalIterator {
   std::stack<std::pair<Interval*, typename Interval::succ_iterator> > IntStack;
   std::set<BasicBlock*> Visited;
@@ -163,8 +173,8 @@ private:
     Visited.insert(Header);   // The header has now been visited!
 
     // Check all of our successors to see if they are in the interval...
-    for (typename NodeTy::succ_iterator I = succ_begin(Node),
-                                        E = succ_end(Node); I != E; ++I)
+    for (typename GT::ChildIteratorType I = GT::child_begin(Node),
+           E = GT::child_end(Node); I != E; ++I)
       ProcessNode(Int, getSourceGraphNode(OrigContainer, *I));
 
     IntStack.push(make_pair(Int, succ_begin(Int)));
@@ -194,8 +204,8 @@ private:
          Int->Successors.push_back(NodeHeader);
       }
     } else {                             // Otherwise, not in interval yet
-      for (typename NodeTy::pred_iterator I = pred_begin(Node), 
-                                         E = pred_end(Node); I != E; ++I) {
+      for (typename IGT::ChildIteratorType I = IGT::child_begin(Node), 
+             E = IGT::child_end(Node); I != E; ++I) {
        if (!Int->contains(*I)) {        // If pred not in interval, we can't be
          if (!Int->isSuccessor(NodeHeader)) // Add only if not already in set
            Int->Successors.push_back(NodeHeader);
@@ -217,8 +227,8 @@ private:
     
       // Now that we have discovered that Node is in the interval, perhaps some
       // of its successors are as well?
-      for (typename NodeTy::succ_iterator It = succ_begin(Node),
-            End = succ_end(Node); It != End; ++It)
+      for (typename GT::ChildIteratorType It = GT::child_begin(Node),
+            End = GT::child_end(Node); It != End; ++It)
        ProcessNode(Int, getSourceGraphNode(OrigContainer, *It));
     }
   }
@@ -245,4 +255,6 @@ inline interval_part_interval_iterator intervals_end(IntervalPartition &IP) {
   return interval_part_interval_iterator();
 }
 
+} // End llvm namespace
+
 #endif