summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2007-10-03 21:24:38 +0000
committerOwen Anderson <resistor@mac.com>2007-10-03 21:24:38 +0000
commit87337924d59aa6cffe61b7297887a7b3738ff58d (patch)
tree117555ad8545eed7f3efc23bc2c12329084a09df
parent3574759d8558e5f9d38e1be97d10a35329c75001 (diff)
downloadbcm5719-llvm-87337924d59aa6cffe61b7297887a7b3738ff58d.tar.gz
bcm5719-llvm-87337924d59aa6cffe61b7297887a7b3738ff58d.zip
Add a GraphTraits partial specialization to make the inverse of an inverse be the same as the underlying graph.
llvm-svn: 42592
-rw-r--r--llvm/include/llvm/ADT/GraphTraits.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/GraphTraits.h b/llvm/include/llvm/ADT/GraphTraits.h
index 99a69b8cc87..853615e2514 100644
--- a/llvm/include/llvm/ADT/GraphTraits.h
+++ b/llvm/include/llvm/ADT/GraphTraits.h
@@ -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
OpenPOWER on IntegriCloud