Add a GraphTraits partial specialization to make the inverse of an inverse be the same as the underlying graph.

llvm-svn: 42592
This commit is contained in:
Owen Anderson 2007-10-03 21:24:38 +00:00
parent 3574759d85
commit 87337924d5
1 changed files with 20 additions and 0 deletions

View File

@ -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