Be a bit more efficient when processing the active and inactive
[oota-llvm.git] / include / Support / PostOrderIterator.h
index 4f94141b5c4406d21f7400a6f5c560b67d036f2d..d66c4b84c40240467f9d2c1439f770d1d4c773d5 100644 (file)
@@ -1,4 +1,11 @@
-//===-- Support/PostOrderIterator.h - Generic PostOrder iterator -*- C++ -*--=//
+//===- Support/PostOrderIterator.h - Generic PostOrder iterator -*- 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 builds on the Support/GraphTraits.h file to build a generic graph
 // post order iterator.  This should work over any graph type that has a
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_SUPPORT_POSTORDER_ITERATOR_H
-#define LLVM_SUPPORT_POSTORDER_ITERATOR_H
+#ifndef SUPPORT_POSTORDERITERATOR_H
+#define SUPPORT_POSTORDERITERATOR_H
 
 #include "Support/GraphTraits.h"
-#include <Support/iterator>
+#include "Support/iterator"
 #include <stack>
 #include <set>
 
+namespace llvm {
+
 template<class GraphT, class GT = GraphTraits<GraphT> >
 class po_iterator : public forward_iterator<typename GT::NodeType, ptrdiff_t> {
   typedef forward_iterator<typename GT::NodeType, ptrdiff_t> super;
-  typedef typename super::pointer pointer;
   typedef typename GT::NodeType          NodeType;
   typedef typename GT::ChildIteratorType ChildItTy;
 
@@ -43,6 +51,7 @@ class po_iterator : public forward_iterator<typename GT::NodeType, ptrdiff_t> {
   }
   inline po_iterator() { /* End is when stack is empty */ }
 public:
+  typedef typename super::pointer pointer;
   typedef po_iterator<GraphT, GT> _Self;
 
   // Provide static "constructors"...
@@ -109,11 +118,11 @@ ipo_iterator<T> ipo_end(T G){
 // computer RPO from a graph.  Because of this, the construction of the 
 // ReversePostOrderTraversal object is expensive (it must walk the entire graph
 // with a postorder iterator to build the data structures).  The moral of this
-// story is: Don't create more ReversePostOrderTraversal classes than neccesary.
+// story is: Don't create more ReversePostOrderTraversal classes than necessary.
 //
 // This class should be used like this:
 // {
-//   ReversePostOrderTraversal<Method*> RPOT(MethodPtr); // Expensive to create
+//   ReversePostOrderTraversal<Function*> RPOT(FuncPtr); // Expensive to create
 //   for (rpo_iterator I = RPOT.begin(); I != RPOT.end(); ++I) {
 //      ...
 //   }
@@ -131,7 +140,7 @@ class ReversePostOrderTraversal {
     copy(po_begin(BB), po_end(BB), back_inserter(Blocks));
   }
 public:
-  typedef std::vector<NodeType*>::reverse_iterator rpo_iterator;
+  typedef typename std::vector<NodeType*>::reverse_iterator rpo_iterator;
 
   inline ReversePostOrderTraversal(GraphT G) {
     Initialize(GT::getEntryNode(G));
@@ -142,4 +151,6 @@ public:
   inline rpo_iterator end()   { return Blocks.rend(); }
 };
 
+} // End llvm namespace
+
 #endif