Add graph traits specializations for intervals
authorChris Lattner <sabre@nondot.org>
Wed, 1 Oct 2003 22:27:36 +0000 (22:27 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 1 Oct 2003 22:27:36 +0000 (22:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8808 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/Interval.h

index 3974c72871678cea37e5dcbf564f5833e267e8e9..86965df90d9ba749f63d73f996469102135af842 100644 (file)
@@ -13,6 +13,7 @@
 #ifndef LLVM_INTERVAL_H
 #define LLVM_INTERVAL_H
 
+#include "Support/GraphTraits.h"
 #include <vector>
 #include <iosfwd>
 
@@ -111,4 +112,31 @@ inline Interval::pred_iterator pred_end(Interval *I)   {
   return I->Predecessors.end();
 }
 
+template <> struct GraphTraits<Interval*> {
+  typedef Interval NodeType;
+  typedef Interval::succ_iterator ChildIteratorType;
+
+  static NodeType *getEntryNode(Interval *I) { return I; }
+
+  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
+  static inline ChildIteratorType child_begin(NodeType *N) { 
+    return succ_begin(N);
+  }
+  static inline ChildIteratorType child_end(NodeType *N) { 
+    return succ_end(N);
+  }
+};
+
+template <> struct GraphTraits<Inverse<Interval*> > {
+  typedef Interval NodeType;
+  typedef Interval::pred_iterator ChildIteratorType;
+  static NodeType *getEntryNode(Inverse<Interval *> G) { return G.Graph; }
+  static inline ChildIteratorType child_begin(NodeType *N) { 
+    return pred_begin(N);
+  }
+  static inline ChildIteratorType child_end(NodeType *N) { 
+    return pred_end(N);
+  }
+};
+
 #endif