From 9c8a9af5afb5459fb7949d4468c5a2abe02baf2c Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Wed, 3 Oct 2007 21:24:38 +0000 Subject: [PATCH] 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 --- include/llvm/ADT/GraphTraits.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/llvm/ADT/GraphTraits.h b/include/llvm/ADT/GraphTraits.h index 99a69b8cc87..853615e2514 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 +struct GraphTraits > > { + typedef typename GraphTraits::NodeType NodeType; + typedef typename GraphTraits::ChildIteratorType ChildIteratorType; + + static NodeType *getEntryNode(Inverse > *G) { + return GraphTraits::getEntryNode(G.Graph.Graph); + } + + static ChildIteratorType child_begin(NodeType* N) { + return GraphTraits::child_begin(N); + } + + static ChildIteratorType child_end(NodeType* N) { + return GraphTraits::child_end(N); + } +}; + } // End llvm namespace #endif