Implement methods needed to print out call graph
authorChris Lattner <sabre@nondot.org>
Mon, 4 Nov 2002 02:53:39 +0000 (02:53 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 4 Nov 2002 02:53:39 +0000 (02:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4522 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/CallGraph.h

index 740709d29f8732be899bd0b6fa6df194adca40e3..fde7c82abbe72a791da69dfe5ee37f5a31a4e711 100644 (file)
@@ -42,6 +42,7 @@
 #define LLVM_ANALYSIS_CALLGRAPH_H
 
 #include "Support/GraphTraits.h"
+#include "Support/STLExtras.h"
 #include "llvm/Pass.h"
 class Function;
 class Module;
@@ -242,18 +243,36 @@ template <> struct GraphTraits<const CallGraphNode*> {
   static inline ChildIteratorType child_end  (NodeType *N) { return N->end(); }
 };
 
-
-template<> struct GraphTraits<CallGraph*> :
-  public GraphTraits<CallGraphNode*> {
+template<> struct GraphTraits<CallGraph*> : public GraphTraits<CallGraphNode*> {
   static NodeType *getEntryNode(CallGraph *CGN) {
     return CGN->getExternalNode();  // Start at the external node!
   }
+  typedef std::pair<const Function*, CallGraphNode*> PairTy;
+  typedef std::pointer_to_unary_function<PairTy, CallGraphNode&> DerefFun;
+
+  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
+  typedef mapped_iterator<CallGraph::iterator, DerefFun> nodes_iterator;
+  static nodes_iterator nodes_begin(CallGraph *CG) {
+    return map_iterator(CG->begin(), DerefFun(CGdereference));
+  }
+  static nodes_iterator nodes_end  (CallGraph *CG) {
+    return map_iterator(CG->end(), DerefFun(CGdereference));
+  }
+
+  static CallGraphNode &CGdereference (std::pair<const Function*,
+                                       CallGraphNode*> P) {
+    return *P.second;
+  }
 };
 template<> struct GraphTraits<const CallGraph*> :
   public GraphTraits<const CallGraphNode*> {
   static NodeType *getEntryNode(const CallGraph *CGN) {
     return CGN->getExternalNode();
   }
+  // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
+  typedef CallGraph::const_iterator nodes_iterator;
+  static nodes_iterator nodes_begin(const CallGraph *CG) { return CG->begin(); }
+  static nodes_iterator nodes_end  (const CallGraph *CG) { return CG->end(); }
 };
 
 #endif