X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FDOTGraphTraits.h;h=4381b5bf163345c32d6dce539db60a9274a9e0e4;hb=abb30d1a458e4b68274a6e56fe3d1e5575845d81;hp=ca7c463f1c715c1b975e06fb43cdd73440f0ec77;hpb=e9812838eeb8be19c460c952840f929b4eef3953;p=oota-llvm.git diff --git a/include/llvm/Support/DOTGraphTraits.h b/include/llvm/Support/DOTGraphTraits.h index ca7c463f1c7..4381b5bf163 100644 --- a/include/llvm/Support/DOTGraphTraits.h +++ b/include/llvm/Support/DOTGraphTraits.h @@ -1,4 +1,11 @@ -//===-- Support/DotGraphTraits.h - Customize .dot output -------*- C++ -*--===// +//===-- llvm/Support/DotGraphTraits.h - Customize .dot output ---*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// // // This file defines a template class that can be used to customize dot output // graphs generated by the GraphWriter.h file. The default implementation of @@ -7,59 +14,142 @@ // //===----------------------------------------------------------------------===// -#ifndef SUPPORT_DOTGRAPHTRAITS_H -#define SUPPORT_DOTGRAPHTRAITS_H +#ifndef LLVM_SUPPORT_DOTGRAPHTRAITS_H +#define LLVM_SUPPORT_DOTGRAPHTRAITS_H #include +namespace llvm { + /// DefaultDOTGraphTraits - This class provides the default implementations of /// all of the DOTGraphTraits methods. If a specialization does not need to /// override all methods here it should inherit so that it can get the default /// implementations. /// struct DefaultDOTGraphTraits { +private: + bool IsSimple; + +protected: + bool isSimple() { + return IsSimple; + } + +public: + explicit DefaultDOTGraphTraits(bool simple=false) : IsSimple (simple) {} + /// getGraphName - Return the label for the graph as a whole. Printed at the /// top of the graph. /// - static std::string getGraphName(void *Graph) { return ""; } + template + static std::string getGraphName(const GraphType &) { return ""; } /// getGraphProperties - Return any custom properties that should be included - /// in the top level graph structure for dot. By default, we resize the graph - /// to fit on a letter size page. + /// in the top level graph structure for dot. /// - static std::string getGraphProperties(void *Graph) { - return "\tsize=\"7.5,10\";\n"; // Size to fit on a page + template + static std::string getGraphProperties(const GraphType &) { + return ""; + } + + /// renderGraphFromBottomUp - If this function returns true, the graph is + /// emitted bottom-up instead of top-down. This requires graphviz 2.0 to work + /// though. + static bool renderGraphFromBottomUp() { + return false; + } + + /// isNodeHidden - If the function returns true, the given node is not + /// displayed in the graph. + static bool isNodeHidden(const void *) { + return false; } /// getNodeLabel - Given a node and a pointer to the top level graph, return /// the label to print in the node. - static std::string getNodeLabel(void *Node, void *Graph) { return ""; } + template + std::string getNodeLabel(const void *, const GraphType &) { + return ""; + } + + // getNodeIdentifierLabel - Returns a string representing the + // address or other unique identifier of the node. (Only used if + // non-empty.) + template + static std::string getNodeIdentifierLabel(const void *, const GraphType &) { + return ""; + } + + template + static std::string getNodeDescription(const void *, const GraphType &) { + return ""; + } /// If you want to specify custom node attributes, this is the place to do so /// - static std::string getNodeAttributes(void *Node) { return ""; } + template + static std::string getNodeAttributes(const void *, + const GraphType &) { + return ""; + } /// If you want to override the dot attributes printed for a particular edge, /// override this method. - template - static std::string getEdgeAttributes(void *Node, EdgeIter EI) { return ""; } + template + static std::string getEdgeAttributes(const void *, EdgeIter, + const GraphType &) { + return ""; + } /// getEdgeSourceLabel - If you want to label the edge source itself, /// implement this method. template - static std::string getEdgeSourceLabel(void *Node, EdgeIter I) { return ""; } + static std::string getEdgeSourceLabel(const void *, EdgeIter) { + return ""; + } /// edgeTargetsEdgeSource - This method returns true if this outgoing edge /// should actually target another edge source, not a node. If this method is /// implemented, getEdgeTarget should be implemented. template - static bool edgeTargetsEdgeSource(void *Node, EdgeIter I) { return false; } + static bool edgeTargetsEdgeSource(const void *, EdgeIter) { + return false; + } /// getEdgeTarget - If edgeTargetsEdgeSource returns true, this method is /// called to determine which outgoing edge of Node is the target of this /// edge. template - static EdgeIter getEdgeTarget(void *Node, EdgeIter I) { return I; } + static EdgeIter getEdgeTarget(const void *, EdgeIter I) { + return I; + } + + /// hasEdgeDestLabels - If this function returns true, the graph is able + /// to provide labels for edge destinations. + static bool hasEdgeDestLabels() { + return false; + } + + /// numEdgeDestLabels - If hasEdgeDestLabels, this function returns the + /// number of incoming edge labels the given node has. + static unsigned numEdgeDestLabels(const void *) { + return 0; + } + + /// getEdgeDestLabel - If hasEdgeDestLabels, this function returns the + /// incoming edge label with the given index in the given node. + static std::string getEdgeDestLabel(const void *, unsigned) { + return ""; + } + + /// addCustomGraphFeatures - If a graph is made up of more than just + /// straight-forward nodes and edges, this is the place to put all of the + /// custom stuff necessary. The GraphWriter object, instantiated with your + /// GraphType is passed in as an argument. You may call arbitrary methods on + /// it to add things to the output graph. + /// + template + static void addCustomGraphFeatures(const GraphType &, GraphWriter &) {} }; @@ -68,6 +158,10 @@ struct DefaultDOTGraphTraits { /// from DefaultDOTGraphTraits if you don't need to override everything. /// template -class DOTGraphTraits : public DefaultDOTGraphTraits {}; +struct DOTGraphTraits : public DefaultDOTGraphTraits { + DOTGraphTraits (bool simple=false) : DefaultDOTGraphTraits (simple) {} +}; + +} // End llvm namespace #endif