diff options
-rw-r--r-- | include/llvm/ADT/GraphTraits.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/llvm/ADT/GraphTraits.h b/include/llvm/ADT/GraphTraits.h index 99a69b8cc8..853615e251 100644 --- a/include/llvm/ADT/GraphTraits.h +++ b/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 |