Open
Graph Drawing
Framework

 v.2012.05
 

PlanarSubgraphModule.h
Go to the documentation of this file.
00001 /*
00002  * $Revision: 2299 $
00003  * 
00004  * last checkin:
00005  *   $Author: gutwenger $ 
00006  *   $Date: 2012-05-07 15:57:08 +0200 (Mon, 07 May 2012) $ 
00007  ***************************************************************/
00008  
00043 #ifdef _MSC_VER
00044 #pragma once
00045 #endif
00046 
00047 #ifndef OGDF_PLANAR_SUBGRAPH_MODULE_H
00048 #define OGDF_PLANAR_SUBGRAPH_MODULE_H
00049 
00050 
00051 
00052 #include <ogdf/planarity/PlanRepUML.h>
00053 #include <ogdf/basic/Module.h>
00054 #include <ogdf/basic/Logger.h>
00055 #include <ogdf/basic/Timeouter.h>
00056 
00057 
00058 namespace ogdf {
00059 
00065 class OGDF_EXPORT PlanarSubgraphModule : public Module, public Timeouter {
00066 public:
00068     PlanarSubgraphModule() { }
00069 
00070     // destruction
00071     virtual ~PlanarSubgraphModule() { }
00072 
00080     ReturnType call(const Graph &G,
00081         const List<edge> &preferedEdges,
00082         List<edge> &delEdges,
00083         bool preferedImplyPlanar = false)
00084     {
00085         return doCall(G,preferedEdges,delEdges,0,preferedImplyPlanar);
00086     }
00087 
00088 
00095     ReturnType call(const Graph &G, const EdgeArray<int> &cost, List<edge> &delEdges) {
00096         List<edge> preferedEdges;
00097         return doCall(G,preferedEdges,delEdges, &cost);
00098     }
00099 
00105     ReturnType call(const Graph &G, List<edge> &delEdges) {
00106         List<edge> preferedEdges;
00107         return doCall(G,preferedEdges,delEdges);
00108     }
00109 
00110 
00112     ReturnType operator()(const Graph &G,
00113         const List<edge> &preferedEdges,
00114         List<edge> &delEdges,
00115         bool preferedImplyPlanar = false)
00116     {
00117         return call(G,preferedEdges,delEdges,preferedImplyPlanar);
00118     }
00119 
00121     ReturnType operator()(const Graph &G, List<edge> &delEdges) {
00122         return call(G,delEdges);
00123     }
00124 
00125 
00133     ReturnType callAndDelete(GraphCopy &GC,
00134         const List<edge> &preferedEdges,
00135         List<edge> &delOrigEdges,
00136         bool preferedImplyPlanar = false);
00137 
00143     ReturnType callAndDelete(GraphCopy &GC, List<edge> &delOrigEdges) {
00144         List<edge> preferedEdges;
00145         return callAndDelete(GC,preferedEdges,delOrigEdges);
00146     }
00147 
00148 protected:
00149     // computes set of edges delEdges, which have to be deleted
00150     // in order to get a planar subgraph; edges in preferedEdges
00151     // should be contained in planar subgraph
00152     // must be implemented by derived classes!
00165     virtual ReturnType doCall(const Graph &G,
00166         const List<edge> &preferedEdges,
00167         List<edge> &delEdges,
00168         const EdgeArray<int>  *pCost = 0,
00169         bool preferedImplyPlanar = false) = 0;
00170 
00171 
00172 
00173     OGDF_MALLOC_NEW_DELETE
00174 };
00175 
00176 } // end namespace ogdf
00177 
00178 #endif