[llvm-commits] [llvm] r42592 - /llvm/trunk/include/llvm/ADT/GraphTraits.h

Owen Anderson resistor at mac.com
Wed Oct 3 14:24:38 PDT 2007


Author: resistor
Date: Wed Oct  3 16:24:38 2007
New Revision: 42592

URL: http://llvm.org/viewvc/llvm-project?rev=42592&view=rev
Log:
Add a GraphTraits partial specialization to make the inverse of an inverse be the same as the underlying graph.

Modified:
    llvm/trunk/include/llvm/ADT/GraphTraits.h

Modified: llvm/trunk/include/llvm/ADT/GraphTraits.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/GraphTraits.h?rev=42592&r1=42591&r2=42592&view=diff

==============================================================================
--- llvm/trunk/include/llvm/ADT/GraphTraits.h (original)
+++ llvm/trunk/include/llvm/ADT/GraphTraits.h Wed Oct  3 16:24:38 2007
@@ -78,6 +78,26 @@
   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





More information about the llvm-commits mailing list