OSDN Git Service

Add a GraphTraits partial specialization to make the inverse of an inverse be the...
authorOwen Anderson <resistor@mac.com>
Wed, 3 Oct 2007 21:24:38 +0000 (21:24 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 3 Oct 2007 21:24:38 +0000 (21:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42592 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/GraphTraits.h

index 99a69b8..853615e 100644 (file)
@@ -78,6 +78,26 @@ struct Inverse {
   inline Inverse(GraphType &G) : Graph(G) {}
 };
 
+// Provide a partial specialization of GraphTraits so that the inverse of an inverse
+// falls back to the original graph.
+template<class T>
+struct GraphTraits<Inverse<Inverse<T> > > {
+  typedef typename GraphTraits<T>::NodeType NodeType;
+  typedef typename GraphTraits<T>::ChildIteratorType ChildIteratorType;
+  
+  static NodeType *getEntryNode(Inverse<Inverse<T> > *G) {
+    return GraphTraits<T>::getEntryNode(G.Graph.Graph);
+  }
+  
+  static ChildIteratorType child_begin(NodeType* N) {
+    return GraphTraits<T>::child_begin(N);
+  }
+  
+  static ChildIteratorType child_end(NodeType* N) {
+    return GraphTraits<T>::child_end(N);
+  }
+};
+
 } // End llvm namespace
 
 #endif