Abstract out the Nodes collection. Instead of providing a getNodes() method,
authorChris Lattner <sabre@nondot.org>
Sat, 7 Feb 2004 23:57:09 +0000 (23:57 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 7 Feb 2004 23:57:09 +0000 (23:57 +0000)
provide node_begin/end iterators, which are only guaranteed to be
bidirectional, not random access.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11165 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DSGraph.h
include/llvm/Analysis/DSGraphTraits.h
include/llvm/Analysis/DataStructure/DSGraph.h
include/llvm/Analysis/DataStructure/DSGraphTraits.h

index a86f5218eb13569f47c1d0da8cc0fc9063c5b4ff..7e19212abefbcfa6c890a0a9261d1b5bd96ffa3a 100644 (file)
@@ -92,6 +92,7 @@ struct DSGraph {
   typedef DSScalarMap ScalarMapTy;
   typedef hash_map<Function*, DSNodeHandle> ReturnNodesTy;
   typedef hash_set<GlobalValue*> GlobalSetTy;
+  typedef std::vector<DSNode*> NodeListTy;
 
   /// NodeMapTy - This data type is used when cloning one graph into another to
   /// keep track of the correspondence between the nodes in the old and new
@@ -101,7 +102,7 @@ private:
   DSGraph *GlobalsGraph;   // Pointer to the common graph of global objects
   bool PrintAuxCalls;      // Should this graph print the Aux calls vector?
 
-  std::vector<DSNode*> Nodes;
+  NodeListTy Nodes;
   ScalarMapTy ScalarMap;
 
   // ReturnNodes - A return value for every function merged into this graph.
@@ -170,8 +171,9 @@ public:
 
   /// getNodes - Get a vector of all the nodes in the graph
   /// 
-  const std::vector<DSNode*> &getNodes() const { return Nodes; }
-        std::vector<DSNode*> &getNodes()       { return Nodes; }
+  typedef NodeListTy::const_iterator node_iterator;
+  node_iterator node_begin() const { return Nodes.begin(); }
+  node_iterator node_end()   const { return Nodes.end(); }
 
   /// getFunctionNames - Return a space separated list of the name of the
   /// functions in this graph (if any)
index ad2cc6fa8f4ef1b1ce181aa98c8c21bf8c0daf37..72541b8cd1ffcfac4c1889534bfc38f5a4f3dc9d 100644 (file)
@@ -115,13 +115,12 @@ template <> struct GraphTraits<DSGraph*> {
   typedef std::pointer_to_unary_function<DSNode *, DSNode&> DerefFun;
 
   // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
-  typedef mapped_iterator<std::vector<DSNode*>::iterator,
-                          DerefFun> nodes_iterator;
+  typedef mapped_iterator<DSGraph::node_iterator, DerefFun> nodes_iterator;
   static nodes_iterator nodes_begin(DSGraph *G) {
-    return map_iterator(G->getNodes().begin(), DerefFun(dereference));
+    return map_iterator(G->node_begin(), DerefFun(dereference));
   }
   static nodes_iterator nodes_end(DSGraph *G) {
-    return map_iterator(G->getNodes().end(), DerefFun(dereference));
+    return map_iterator(G->node_end(), DerefFun(dereference));
   }
 
   static ChildIteratorType child_begin(NodeType *N) { return N->begin(); }
@@ -135,13 +134,12 @@ template <> struct GraphTraits<const DSGraph*> {
   typedef std::pointer_to_unary_function<const DSNode *,const DSNode&> DerefFun;
 
   // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
-  typedef mapped_iterator<std::vector<DSNode*>::const_iterator,
-                          DerefFun> nodes_iterator;
+  typedef mapped_iterator<DSGraph::node_iterator, DerefFun> nodes_iterator;
   static nodes_iterator nodes_begin(const DSGraph *G) {
-    return map_iterator(G->getNodes().begin(), DerefFun(dereferenceC));
+    return map_iterator(G->node_begin(), DerefFun(dereferenceC));
   }
   static nodes_iterator nodes_end(const DSGraph *G) {
-    return map_iterator(G->getNodes().end(), DerefFun(dereferenceC));
+    return map_iterator(G->node_end(), DerefFun(dereferenceC));
   }
 
   static ChildIteratorType child_begin(const NodeType *N) { return N->begin(); }
index a86f5218eb13569f47c1d0da8cc0fc9063c5b4ff..7e19212abefbcfa6c890a0a9261d1b5bd96ffa3a 100644 (file)
@@ -92,6 +92,7 @@ struct DSGraph {
   typedef DSScalarMap ScalarMapTy;
   typedef hash_map<Function*, DSNodeHandle> ReturnNodesTy;
   typedef hash_set<GlobalValue*> GlobalSetTy;
+  typedef std::vector<DSNode*> NodeListTy;
 
   /// NodeMapTy - This data type is used when cloning one graph into another to
   /// keep track of the correspondence between the nodes in the old and new
@@ -101,7 +102,7 @@ private:
   DSGraph *GlobalsGraph;   // Pointer to the common graph of global objects
   bool PrintAuxCalls;      // Should this graph print the Aux calls vector?
 
-  std::vector<DSNode*> Nodes;
+  NodeListTy Nodes;
   ScalarMapTy ScalarMap;
 
   // ReturnNodes - A return value for every function merged into this graph.
@@ -170,8 +171,9 @@ public:
 
   /// getNodes - Get a vector of all the nodes in the graph
   /// 
-  const std::vector<DSNode*> &getNodes() const { return Nodes; }
-        std::vector<DSNode*> &getNodes()       { return Nodes; }
+  typedef NodeListTy::const_iterator node_iterator;
+  node_iterator node_begin() const { return Nodes.begin(); }
+  node_iterator node_end()   const { return Nodes.end(); }
 
   /// getFunctionNames - Return a space separated list of the name of the
   /// functions in this graph (if any)
index ad2cc6fa8f4ef1b1ce181aa98c8c21bf8c0daf37..72541b8cd1ffcfac4c1889534bfc38f5a4f3dc9d 100644 (file)
@@ -115,13 +115,12 @@ template <> struct GraphTraits<DSGraph*> {
   typedef std::pointer_to_unary_function<DSNode *, DSNode&> DerefFun;
 
   // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
-  typedef mapped_iterator<std::vector<DSNode*>::iterator,
-                          DerefFun> nodes_iterator;
+  typedef mapped_iterator<DSGraph::node_iterator, DerefFun> nodes_iterator;
   static nodes_iterator nodes_begin(DSGraph *G) {
-    return map_iterator(G->getNodes().begin(), DerefFun(dereference));
+    return map_iterator(G->node_begin(), DerefFun(dereference));
   }
   static nodes_iterator nodes_end(DSGraph *G) {
-    return map_iterator(G->getNodes().end(), DerefFun(dereference));
+    return map_iterator(G->node_end(), DerefFun(dereference));
   }
 
   static ChildIteratorType child_begin(NodeType *N) { return N->begin(); }
@@ -135,13 +134,12 @@ template <> struct GraphTraits<const DSGraph*> {
   typedef std::pointer_to_unary_function<const DSNode *,const DSNode&> DerefFun;
 
   // nodes_iterator/begin/end - Allow iteration over all nodes in the graph
-  typedef mapped_iterator<std::vector<DSNode*>::const_iterator,
-                          DerefFun> nodes_iterator;
+  typedef mapped_iterator<DSGraph::node_iterator, DerefFun> nodes_iterator;
   static nodes_iterator nodes_begin(const DSGraph *G) {
-    return map_iterator(G->getNodes().begin(), DerefFun(dereferenceC));
+    return map_iterator(G->node_begin(), DerefFun(dereferenceC));
   }
   static nodes_iterator nodes_end(const DSGraph *G) {
-    return map_iterator(G->getNodes().end(), DerefFun(dereferenceC));
+    return map_iterator(G->node_end(), DerefFun(dereferenceC));
   }
 
   static ChildIteratorType child_begin(const NodeType *N) { return N->begin(); }