X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FSupport%2FDOTGraphTraits.h;h=796c74a21ca86d5168cc21e98d469d4e237b433c;hb=867fe8570f299a058f155f98646d85cabc27155b;hp=7dbc4ff0b656568949a2a214fbe2f4b9ef0e947d;hpb=6178085cfd772f62c641234bec156240281e7cf4;p=oota-llvm.git diff --git a/include/llvm/Support/DOTGraphTraits.h b/include/llvm/Support/DOTGraphTraits.h index 7dbc4ff0b65..796c74a21ca 100644 --- a/include/llvm/Support/DOTGraphTraits.h +++ b/include/llvm/Support/DOTGraphTraits.h @@ -1,10 +1,10 @@ -//===-- Support/DotGraphTraits.h - Customize .dot output --------*- C++ -*-===// -// +//===-- llvm/Support/DotGraphTraits.h - Customize .dot output ---*- C++ -*-===// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// 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 @@ -14,8 +14,8 @@ // //===----------------------------------------------------------------------===// -#ifndef SUPPORT_DOTGRAPHTRAITS_H -#define SUPPORT_DOTGRAPHTRAITS_H +#ifndef LLVM_SUPPORT_DOTGRAPHTRAITS_H +#define LLVM_SUPPORT_DOTGRAPHTRAITS_H #include @@ -27,27 +27,65 @@ namespace llvm { /// 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(const void *Graph) { return ""; } + template + static std::string getGraphName(const GraphType& Graph) { return ""; } /// getGraphProperties - Return any custom properties that should be included /// in the top level graph structure for dot. /// - static std::string getGraphProperties(const void *Graph) { + template + static std::string getGraphProperties(const GraphType& Graph) { 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 *Node) { + 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(const void *Node, const void *Graph) { + template + std::string getNodeLabel(const void *Node, const GraphType& Graph) { return ""; } + /// hasNodeAddressLabel - If this method returns true, the address of the node + /// is added to the label of the node. + template + static bool hasNodeAddressLabel(const void *Node, const GraphType& Graph) { + return false; + } + /// If you want to specify custom node attributes, this is the place to do so /// - static std::string getNodeAttributes(const void *Node) { return ""; } + template + static std::string getNodeAttributes(const void *Node, + const GraphType& Graph) { + return ""; + } /// If you want to override the dot attributes printed for a particular edge, /// override this method. @@ -79,14 +117,32 @@ struct DefaultDOTGraphTraits { 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 *Node) { + 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 *Node, unsigned i) { + 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 void *Graph, GraphWriter &GW) {} + template + static void addCustomGraphFeatures(const GraphType& Graph, GraphWriter &GW) {} }; @@ -95,7 +151,9 @@ 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