Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00044 #ifdef _MSC_VER
00045 #pragma once
00046 #endif
00047
00048 #ifndef OGDF_CCONNECT_CLUSTER_PLANAR_H
00049 #define OGDF_CCONNECT_CLUSTER_PLANAR_H
00050
00051
00052 #include <ogdf/internal/planarity/PlanarPQTree.h>
00053 #include <ogdf/cluster/ClusterArray.h>
00054 #include <ogdf/basic/EdgeArray.h>
00055
00056 namespace ogdf {
00057
00058 class OGDF_EXPORT CconnectClusterPlanar{
00059
00060 public:
00061
00062
00063 enum ccErrorCode {none = 0,
00064 nonConnected = 1,
00065 nonCConnected = 2,
00066 nonPlanar = 3,
00067 nonCPlanar = 4
00068 };
00069 ccErrorCode errCode() {return m_errorCode;}
00070
00071
00073 CconnectClusterPlanar();
00074
00076 virtual ~CconnectClusterPlanar();
00077
00079 virtual bool call(ClusterGraph &C);
00080
00083 bool call(ClusterGraph &C, char (&code)[124]);
00084
00086 virtual bool call(const ClusterGraph &C);
00087
00088 private:
00089
00091 bool planarityTest(ClusterGraph &C,
00092 cluster &act,
00093 Graph &G);
00095 bool preProcess(ClusterGraph &C,Graph &G);
00097 bool preparation(Graph &G,cluster &C,node superSink);
00099 bool doTest(Graph &G,
00100 NodeArray<int> &numbering,
00101 cluster &cl,
00102 node superSink,
00103 EdgeArray<edge> &edgeTable);
00104
00105 void prepareParallelEdges(Graph &G);
00106
00108 void constructWheelGraph(ClusterGraph &C,
00109 Graph &G,
00110 cluster &parent,
00111 PlanarPQTree* T,
00112 EdgeArray<node> &outgoingTable);
00113
00114
00115
00116 EdgeArray<ListPure<edge> > m_parallelEdges;
00117 EdgeArray<bool> m_isParallel;
00118 ClusterArray<PlanarPQTree*> m_clusterPQTree;
00119 int m_parallelCount;
00120 char errorCode[124];
00121 ccErrorCode m_errorCode;
00122
00123
00124 };
00125
00126 }
00127
00128
00129 #endif