diff options
author | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-06 16:36:50 +0000 |
---|---|---|
committer | Mikhail Glushenkov <foldr@codedgers.com> | 2008-05-06 16:36:50 +0000 |
commit | d752c3ffd84d2b16d736e01504a9d470863fb679 (patch) | |
tree | 0d6c69e7b4108e5a609050b1c2b8025bab9068b2 /tools/llvmc2/CompilationGraph.h | |
parent | 0a174930e25ff59dd0181beedae1b47d85265ece (diff) |
More work on edge properties. Use Edge classes instead of strings in CompilationGraph.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50726 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvmc2/CompilationGraph.h')
-rw-r--r-- | tools/llvmc2/CompilationGraph.h | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/tools/llvmc2/CompilationGraph.h b/tools/llvmc2/CompilationGraph.h index 85210dc499..d953aeea90 100644 --- a/tools/llvmc2/CompilationGraph.h +++ b/tools/llvmc2/CompilationGraph.h @@ -28,6 +28,7 @@ namespace llvmcc { + // An edge in the graph. class Edge : public llvm::RefCountedBaseVPTR<Edge> { public: Edge(const std::string& T) : ToolName_(T) {} @@ -40,13 +41,15 @@ namespace llvmcc { std::string ToolName_; }; - class DefaultEdge : public Edge { + // Edges with no properties are instances of this class. + class SimpleEdge : public Edge { public: - DefaultEdge(const std::string& T) : Edge(T) {} + SimpleEdge(const std::string& T) : Edge(T) {} bool isEnabled() const { return true;} bool isDefault() const { return true;} }; + // A node in the graph. struct Node { typedef llvm::SmallVector<llvm::IntrusiveRefCntPtr<Edge>, 3> container_type; typedef container_type::iterator iterator; @@ -56,14 +59,14 @@ namespace llvmcc { Node(CompilationGraph* G) : OwningGraph(G) {} Node(CompilationGraph* G, Tool* T) : OwningGraph(G), ToolPtr(T) {} - bool HasChildren() const { return OutEdges.empty(); } + bool HasChildren() const { return !OutEdges.empty(); } iterator EdgesBegin() { return OutEdges.begin(); } const_iterator EdgesBegin() const { return OutEdges.begin(); } iterator EdgesEnd() { return OutEdges.end(); } const_iterator EdgesEnd() const { return OutEdges.end(); } - // E is a new-allocated pointer. + // Takes ownership of the object. void AddEdge(Edge* E) { OutEdges.push_back(llvm::IntrusiveRefCntPtr<Edge>(E)); } @@ -93,16 +96,16 @@ namespace llvmcc { CompilationGraph(); - // insertVertex - insert a new node into the graph. + // insertVertex - insert a new node into the graph. Takes + // ownership of the object. void insertNode(Tool* T); - // insertEdge - Insert a new edge into the graph. This function - // assumes that both A and B have been already inserted. - void insertEdge(const std::string& A, const std::string& B); + // insertEdge - Insert a new edge into the graph. Takes ownership + // of the object. + void insertEdge(const std::string& A, Edge* E); - // Build - Build the target(s) from the set of the input - // files. Command-line options are passed implicitly as global - // variables. + // Build - Build target(s) from the input file set. Command-line + // options are passed implicitly as global variables. int Build(llvm::sys::Path const& tempDir) const; // Return a reference to the node correponding to the given tool |