* Add new DOTGraphTraits::addCustomGraphFeatures method


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4197 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/Support/DOTGraphTraits.h b/include/Support/DOTGraphTraits.h
index ca7c463..42f9af2 100644
--- a/include/Support/DOTGraphTraits.h
+++ b/include/Support/DOTGraphTraits.h
@@ -60,6 +60,15 @@
   /// edge.
   template<typename EdgeIter>
   static EdgeIter getEdgeTarget(void *Node, EdgeIter I) { return I; }
+
+  /// 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 neccesary.  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<typename GraphWriter>
+  static void addCustomGraphFeatures(void *Graph, GraphWriter &GW) {}
 };
 
 
diff --git a/include/Support/GraphWriter.h b/include/Support/GraphWriter.h
index 0a7576c..7783b46 100644
--- a/include/Support/GraphWriter.h
+++ b/include/Support/GraphWriter.h
@@ -72,7 +72,11 @@
     O << DOTTraits::getGraphProperties(G);
     O << "\n";
 
+    // Emit all of the nodes in the graph...
     writeNodes();
+
+    // Output any customizations on the graph
+    DOTTraits::addCustomGraphFeatures(G, *this);
   }
 
   ~GraphWriter() {