Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Loading...
Searching...
No Matches
DynamicSPQRTree.h
Go to the documentation of this file.
1
32#pragma once
33
34#include <ogdf/basic/Graph.h>
35#include <ogdf/basic/List.h>
36#include <ogdf/basic/basic.h>
40
41namespace ogdf {
42class PertinentGraph;
43class Skeleton;
44template<class E>
45class SList;
46
80class OGDF_EXPORT DynamicSPQRTree : public virtual SPQRTree, public DynamicSPQRForest {
81public:
82 friend class DynamicSkeleton;
83
84 // constructors
85
91 explicit DynamicSPQRTree(Graph& G) : DynamicSPQRForest(G) { init(G.firstEdge()); }
92
99
100 // destructor
101
103
104 //
105 // a) Access operations
106 //
107
109 const Graph& originalGraph() const override { return m_G; }
110
112 const Graph& tree() const override { return m_T; }
113
115 edge rootEdge() const override { return m_rootEdge; }
116
118 node rootNode() const override { return findSPQR(m_bNode_SPQR[m_B.firstNode()]); }
119
121 int numberOfSNodes() const override { return m_bNode_numS[m_B.firstNode()]; }
122
124 int numberOfPNodes() const override { return m_bNode_numP[m_B.firstNode()]; }
125
127 int numberOfRNodes() const override { return m_bNode_numR[m_B.firstNode()]; }
128
133 NodeType typeOf(node v) const override { return (NodeType)m_tNode_type[findSPQR(v)]; }
134
136 List<node> nodesOfType(NodeType t) const override;
137
140 return findPathSPQR(m_gNode_hNode[s], m_gNode_hNode[t]);
141 }
142
147 Skeleton& skeleton(node v) const override {
148 v = findSPQR(v);
149 if (!m_sk[v]) {
150 return createSkeleton(v);
151 }
152 return *m_sk[v];
153 }
154
159 const Skeleton& skeletonOfReal(edge e) const override {
160 return skeleton(spqrproper(m_gEdge_hEdge[e]));
161 }
162
167 edge copyOfReal(edge e) const override {
168 e = m_gEdge_hEdge[e];
169 skeleton(spqrproper(e));
170 return m_skelEdge[e];
171 }
172
179 edge e = virtualEdge(v, w);
180 if (!e) {
181 return e;
182 }
183 skeleton(w);
184 return m_skelEdge[e];
185 }
186
187 //
188 // b) Update operations
189 //
190
195 node rootTreeAt(edge e) override;
196
201 node rootTreeAt(node v) override;
202
208
214
215
216protected:
218 void init(edge e);
219
222
227 void cpRec(node v, PertinentGraph& Gp) const override {
228 v = findSPQR(v);
229 for (ListConstIterator<edge> i = m_tNode_hEdges[v]->begin(); i.valid(); ++i) {
230 edge e = m_hEdge_gEdge[*i];
231 if (e) {
232 cpAddEdge(e, Gp);
233 } else if (*i != m_tNode_hRefEdge[v]) {
234 cpRec(spqrproper(*i), Gp);
235 }
236 }
237 }
238
240
242
246
248};
249
250}
Declaration of class DynamicSPQRForest.
Declaration of class DynamicSkeleton.
Includes declaration of graph class.
Declaration of doubly linked lists and iterators.
Declaration of class SPQRTree.
Basic declarations, included by all source files.
Dynamic SPQR-forest.
Linear-time implementation of dynamic SPQR-trees.
NodeArray< node > m_mapV
temporary array used by createSkeleton()
DynamicSkeleton & createSkeleton(node vT) const
Creates the skeleton graph belonging to a given vertex vT of T.
edge skeletonEdge(node v, node w) const
Returns the virtual edge in the skeleton of w that corresponds to the tree edge between v and w.
int numberOfSNodes() const override
Returns the number of S-nodes in T.
const Graph & originalGraph() const override
Returns a reference to the original graph G.
NodeArray< DynamicSkeleton * > m_sk
pointer to skeleton of a node in T
node rootNode() const override
Returns the root node of T.
DynamicSPQRTree(Graph &G)
Creates an SPQR tree T for graph G rooted at the first edge of G.
edge updateInsertedEdge(edge e) override
Updates the whole data structure after a new edge e has been inserted into G.
const Graph & tree() const override
Returns a reference to the tree T.
edge rootEdge() const override
Returns the edge of G at which T is rooted.
void cpRec(node v, PertinentGraph &Gp) const override
Recursively performs the task of adding edges (and nodes) to the pertinent graph Gp for each involved...
NodeType typeOf(node v) const override
Returns the type of node v.
edge m_rootEdge
edge of G at which T is rooted
const Skeleton & skeletonOfReal(edge e) const override
Returns the skeleton that contains the real edge e.
void init(edge e)
Initialization (called by constructors).
List< node > nodesOfType(NodeType t) const override
Returns the list of all nodes with type t.
SList< node > & findPath(node s, node t)
Finds the shortest path between the two sets of vertices of T which s and t of G belong to.
DynamicSPQRTree(Graph &G, edge e)
Creates an SPQR tree T for graph G rooted at the edge e.
Skeleton & skeleton(node v) const override
Returns the skeleton of node v.
node updateInsertedNode(edge e, edge f) override
Updates the whole data structure after a new vertex has been inserted into G by splitting an edge int...
node rootTreeAt(edge e) override
Roots T at edge e and returns the new root node of T.
EdgeArray< edge > m_skelEdge
copies of real and virtual edges in their skeleton graphs (invalid, if the skeleton does not actually...
int numberOfRNodes() const override
Returns the number of R-nodes in T.
edge copyOfReal(edge e) const override
Returns the skeleton edge that corresponds to the real edge e.
node rootTreeAt(node v) override
Roots T at node v and returns v.
int numberOfPNodes() const override
Returns the number of P-nodes in T.
Skeleton graphs of nodes in a dynamic SPQR-tree.
Class for the representation of edges.
Definition Graph_d.h:364
Data type for general directed graphs (adjacency list representation).
Definition Graph_d.h:866
Doubly linked lists (maintaining the length of the list).
Definition List.h:1451
Encapsulates a pointer to a list element.
Definition List.h:113
Class for the representation of nodes.
Definition Graph_d.h:241
Pertinent graphs of nodes in an SPQR-tree.
Singly linked lists (maintaining the length of the list).
Definition SList.h:845
Linear-time implementation of static SPQR-trees.
Definition SPQRTree.h:73
NodeType
The type of a tree node in T.
Definition SPQRTree.h:76
Skeleton graphs of nodes in an SPQR-tree.
Definition Skeleton.h:60
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition Graph_d.h:717
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition Graph_d.h:659
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF dynamic library (shared object / DLL),...
Definition config.h:117
The namespace for all OGDF objects.
HypergraphRegistry< HypernodeElement >::iterator begin(const HypergraphRegistry< HypernodeElement > &self)