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 | 9c8a9af5afb5459fb7949d4468c5a2abe02baf2c (patch) | |
tree | 00fbc7ff7ce41bdb2a5730854fdb53f870220693 | |
parent | c1e2660c5d44154617144138a503088cd5a4c4d5 (diff) |
Add a GraphTraits partial specialization to make the inverse of an inverse be the same as the underlying graph.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42592 91177308-0d34-0410-b5e6-96231b3b80d8
-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 |