00001 /* 00002 * $Revision: 1.5 $ 00003 * 00004 * last checkin: 00005 * $Author: gutwenger $ 00006 * $Date: 2007-11-13 12:32:13 +0100 (Di, 13 Nov 2007) $ 00007 ***************************************************************/ 00008 00051 #ifndef OGDF_SUBGRAPH_PLANARIZER_H 00052 #define OGDF_SUBGRAPH_PLANARIZER_H 00053 00054 #include <ogdf/module/CrossingMinimizationModule.h> 00055 #include <ogdf/module/PlanarSubgraphModule.h> 00056 #include <ogdf/module/EdgeInsertionModule.h> 00057 #include <ogdf/basic/ModuleOption.h> 00058 #include <ogdf/basic/Logger.h> 00059 00060 00061 namespace ogdf 00062 { 00063 00065 00118 class SubgraphPlanarizer : public CrossingMinimizationModule, public Logger 00119 { 00120 class CrossingStructure 00121 { 00122 public: 00123 CrossingStructure() : m_numCrossings(0) { } 00124 void init(PlanRep &PG, int weightedCrossingNumber); 00125 void restore(PlanRep &PG, int cc); 00126 00127 int numberOfCrossings() const { return m_numCrossings; } 00128 int weightedCrossingNumber() const { return m_weightedCrossingNumber; } 00129 const SListPure<int> &crossings(edge e) const { return m_crossings[e]; } 00130 00131 private: 00132 int m_numCrossings; 00133 int m_weightedCrossingNumber; 00134 EdgeArray<SListPure<int> > m_crossings; 00135 }; 00136 00137 protected: 00139 virtual ReturnType doCall(PlanRep &PG, 00140 int cc, 00141 const EdgeArray<int> &cost, 00142 const EdgeArray<bool> &forbid, 00143 const EdgeArray<unsigned int> &subgraphs, 00144 int& crossingNumber); 00145 00146 public: 00148 SubgraphPlanarizer(); 00149 00151 void setSubgraph(PlanarSubgraphModule *pSubgraph) { 00152 m_subgraph.set(pSubgraph); 00153 } 00154 00156 void setInserter(EdgeInsertionModule *pInserter) { 00157 m_inserter.set(pInserter); 00158 } 00159 00161 int permutations() { return m_permutations; } 00162 00164 void permutations(int p) { m_permutations = p; } 00165 00167 bool setTimeout() { return m_setTimeout; } 00168 00170 void setTimeout(bool b) { m_setTimeout = b; } 00171 00172 private: 00173 ModuleOption<PlanarSubgraphModule> m_subgraph; 00174 ModuleOption<EdgeInsertionModule> m_inserter; 00175 00176 int m_permutations; 00177 bool m_setTimeout; 00178 }; 00179 00180 } 00181 00182 #endif // OGDF_SUBGRAPH_PLANARIZER_H