diff options
| author | Owen Anderson <resistor@mac.com> | 2007-10-03 21:24:38 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2007-10-03 21:24:38 +0000 |
| commit | 87337924d59aa6cffe61b7297887a7b3738ff58d (patch) | |
| tree | 117555ad8545eed7f3efc23bc2c12329084a09df | |
| parent | 3574759d8558e5f9d38e1be97d10a35329c75001 (diff) | |
| download | bcm5719-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.h | 20 |
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 |

