Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00047 #ifdef _MSC_VER
00048 #pragma once
00049 #endif
00050
00051
00052 #ifndef OGDF_CLUSTER_PQ_CONTAINER_H
00053 #define OGDF_CLUSTER_PQ_CONTAINER_H
00054
00055 #include <ogdf/cluster/CconnectClusterPlanarEmbed.h>
00056 #include <ogdf/internal/planarity/EmbedPQTree.h>
00057 #include <ogdf/basic/NodeArray.h>
00058 #include <ogdf/basic/EdgeArray.h>
00059
00060
00061 namespace ogdf {
00062
00063 class ClusterPQContainer {
00064
00065 friend class CconnectClusterPlanarEmbed;
00066
00067
00068
00069
00070
00071
00072
00073 NodeArray<SListPure<PlanarLeafKey<indInfo*>* > >* m_inLeaves;
00074
00075
00076 NodeArray<SListPure<PlanarLeafKey<indInfo*>* > >* m_outLeaves;
00077
00078
00079
00080 NodeArray<SListPure<edge> >* m_frontier;
00081
00082
00083
00084 NodeArray<SListPure<node> >* m_opposed;
00085
00086
00087
00088 NodeArray<SListPure<node> >* m_nonOpposed;
00089
00090
00091 EdgeArray<PlanarLeafKey<indInfo*>*>* m_edge2Key;
00092
00093
00094 NodeArray<int> *m_numbering;
00095
00096
00097 Array<node> *m_tableNumber2Node;
00098
00099 node m_superSink;
00100
00101
00102
00103
00104 Graph *m_subGraph;
00105
00106 EmbedPQTree *m_T;
00107
00108 PlanarLeafKey<indInfo*> *m_stEdgeLeaf;
00109
00110 public:
00111
00112 ClusterPQContainer():
00113 m_inLeaves(0),m_outLeaves(0),m_frontier(0),
00114 m_opposed(0),m_nonOpposed(0),m_edge2Key(0),
00115 m_numbering(0),m_tableNumber2Node(0),
00116 m_superSink(0),m_subGraph(0),m_T(0), m_stEdgeLeaf(0) {};
00117
00118 ~ClusterPQContainer() {};
00119
00120 void init(Graph *subGraph){
00121 m_subGraph = subGraph;
00122 m_inLeaves
00123 = OGDF_NEW NodeArray<SListPure<PlanarLeafKey<indInfo*>* > >(*subGraph);
00124
00125 m_outLeaves
00126 = OGDF_NEW NodeArray<SListPure<PlanarLeafKey<indInfo*>* > >(*subGraph);
00127
00128 m_frontier
00129 = OGDF_NEW NodeArray<SListPure<edge> >(*subGraph);
00130
00131 m_opposed
00132 = OGDF_NEW NodeArray<SListPure<node> >(*subGraph);
00133
00134 m_nonOpposed
00135 = OGDF_NEW NodeArray<SListPure<node> >(*subGraph);
00136
00137 m_edge2Key
00138 = OGDF_NEW EdgeArray<PlanarLeafKey<indInfo*>*>(*subGraph);
00139
00140 m_numbering
00141 = OGDF_NEW NodeArray<int >(*subGraph);
00142
00143 m_tableNumber2Node
00144 = OGDF_NEW Array<node>(subGraph->numberOfNodes()+1);
00145 }
00146
00147
00148 void Cleanup() {
00149 if (m_inLeaves)
00150 delete m_inLeaves;
00151 if (m_outLeaves)
00152 {
00153 node v;
00154 forall_nodes(v,*m_subGraph)
00155 {
00156 while (!(*m_outLeaves)[v].empty())
00157 {
00158 PlanarLeafKey<indInfo*>* L = (*m_outLeaves)[v].popFrontRet();
00159 delete L;
00160 }
00161 }
00162 delete m_outLeaves;
00163 }
00164 if (m_frontier)
00165 delete m_frontier;
00166 if (m_opposed)
00167 delete m_opposed;
00168 if (m_nonOpposed)
00169 delete m_nonOpposed;
00170 if (m_edge2Key)
00171 delete m_edge2Key;
00172 if (m_T)
00173 {
00174 m_T->emptyAllPertinentNodes();
00175 delete m_T;
00176 }
00177 if (m_numbering)
00178 delete m_numbering;
00179 if (m_tableNumber2Node)
00180 delete m_tableNumber2Node;
00181
00182 }
00183 };
00184
00185 }
00186
00187 #endif