Open
Graph Drawing
Framework

 v.2012.05
 

DynamicSPQRForest.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_DYNAMIC_SPQR_FOREST_H
00048 #define OGDF_DYNAMIC_SPQR_FOREST_H
00049 
00050 #include <ogdf/decomposition/DynamicBCTree.h>
00051 #include <ogdf/decomposition/SPQRTree.h>
00052 
00053 namespace ogdf {
00054 
00063 class OGDF_EXPORT DynamicSPQRForest : public DynamicBCTree {
00064 
00065 public:
00066 
00079     enum TNodeType {
00080         SComp = SPQRTree::SNode,
00081         PComp = SPQRTree::PNode,
00082         RComp = SPQRTree::RNode
00083     };
00084 
00085 protected:
00086 
00090     mutable Graph m_T;
00091 
00099     mutable NodeArray<node> m_bNode_SPQR;
00108     mutable NodeArray<int> m_bNode_numS;
00117     mutable NodeArray<int> m_bNode_numP;
00126     mutable NodeArray<int> m_bNode_numR;
00127 
00131     mutable NodeArray<TNodeType> m_tNode_type;
00136     mutable NodeArray<node> m_tNode_owner;
00141     mutable NodeArray<edge> m_tNode_hRefEdge;
00146     mutable NodeArray<List<edge> > m_tNode_hEdges;
00147 
00152     mutable EdgeArray<ListIterator<edge> > m_hEdge_position;
00157     mutable EdgeArray<node> m_hEdge_tNode;
00161     mutable EdgeArray<edge> m_hEdge_twinEdge;
00162 
00166     mutable NodeArray<node> m_htogc;
00170     mutable NodeArray<bool> m_tNode_isMarked;
00171 
00175     void init ();
00191     void createSPQR (node vB) const;
00192 
00206     node uniteSPQR (node vB, node sT, node tT);
00214     node findSPQR (node vT) const;
00215 
00227     node findNCASPQR (node sT, node tT) const;
00241     SList<node>& findPathSPQR (node sH, node tH, node& rT) const;
00242 
00256     edge updateInsertedEdgeSPQR (node vB, edge eG);
00270     node updateInsertedNodeSPQR (node vB, edge eG, edge fG);
00271 
00272 public:
00273 
00283     DynamicSPQRForest (Graph& G) : DynamicBCTree(G) { init(); }
00284 
00300     node spqrproper (edge eH) const { return m_hEdge_tNode[eH] = findSPQR(m_hEdge_tNode[eH]); }
00308     edge twinEdge (edge eH) const { return m_hEdge_twinEdge[eH]; }
00309 
00320     TNodeType typeOfTNode (node vT) const { return m_tNode_type[vT]; }
00332     const List<edge>& hEdgesSPQR (node vT) const { return m_tNode_hEdges[vT]; }
00345     SList<node>& findPathSPQR (node sH, node tH) const;
00361     edge virtualEdge (node vT, node wT) const;
00362 
00376     edge updateInsertedEdge (edge eG);
00391     node updateInsertedNode (edge eG, edge fG);
00392 
00395 };
00396 
00397 }
00398 
00399 #endif