Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

DynamicSPQRTree.h
Go to the documentation of this file.
1 
32 #pragma once
33 
37 
38 namespace ogdf {
39 
73 class OGDF_EXPORT DynamicSPQRTree : public virtual SPQRTree, public DynamicSPQRForest {
74 public:
75  friend class DynamicSkeleton;
76 
77  // constructors
78 
84  explicit DynamicSPQRTree(Graph& G) : DynamicSPQRForest(G) { init(G.firstEdge()); }
85 
92 
93  // destructor
94 
95  ~DynamicSPQRTree();
96 
97  //
98  // a) Access operations
99  //
100 
102  const Graph& originalGraph() const override { return m_G; }
103 
105  const Graph& tree() const override { return m_T; }
106 
108  edge rootEdge() const override { return m_rootEdge; }
109 
111  node rootNode() const override { return findSPQR(m_bNode_SPQR[m_B.firstNode()]); }
112 
114  int numberOfSNodes() const override { return m_bNode_numS[m_B.firstNode()]; }
115 
117  int numberOfPNodes() const override { return m_bNode_numP[m_B.firstNode()]; }
118 
120  int numberOfRNodes() const override { return m_bNode_numR[m_B.firstNode()]; }
121 
126  NodeType typeOf(node v) const override { return (NodeType)m_tNode_type[findSPQR(v)]; }
127 
129  List<node> nodesOfType(NodeType t) const override;
130 
133  return findPathSPQR(m_gNode_hNode[s], m_gNode_hNode[t]);
134  }
135 
140  Skeleton& skeleton(node v) const override {
141  v = findSPQR(v);
142  if (!m_sk[v]) {
143  return createSkeleton(v);
144  }
145  return *m_sk[v];
146  }
147 
152  const Skeleton& skeletonOfReal(edge e) const override {
153  return skeleton(spqrproper(m_gEdge_hEdge[e]));
154  }
155 
160  edge copyOfReal(edge e) const override {
161  e = m_gEdge_hEdge[e];
162  skeleton(spqrproper(e));
163  return m_skelEdge[e];
164  }
165 
171  edge skeletonEdge(node v, node w) const {
172  edge e = virtualEdge(v, w);
173  if (!e) {
174  return e;
175  }
176  skeleton(w);
177  return m_skelEdge[e];
178  }
179 
180  //
181  // b) Update operations
182  //
183 
188  node rootTreeAt(edge e) override;
189 
194  node rootTreeAt(node v) override;
195 
200  edge updateInsertedEdge(edge e) override;
201 
206  node updateInsertedNode(edge e, edge f) override;
207 
208 
209 protected:
211  void init(edge e);
212 
214  DynamicSkeleton& createSkeleton(node vT) const;
215 
220  void cpRec(node v, PertinentGraph& Gp) const override {
221  v = findSPQR(v);
222  for (ListConstIterator<edge> i = m_tNode_hEdges[v]->begin(); i.valid(); ++i) {
223  edge e = m_hEdge_gEdge[*i];
224  if (e) {
225  cpAddEdge(e, Gp);
226  } else if (*i != m_tNode_hRefEdge[v]) {
227  cpRec(spqrproper(*i), Gp);
228  }
229  }
230  }
231 
233 
235 
239 
241 };
242 
243 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::DynamicSkeleton
Skeleton graphs of nodes in a dynamic SPQR-tree.
Definition: DynamicSkeleton.h:58
ogdf::DynamicSPQRTree::copyOfReal
edge copyOfReal(edge e) const override
Returns the skeleton edge that corresponds to the real edge e.
Definition: DynamicSPQRTree.h:160
SPQRTree.h
Declaration of class SPQRTree.
ogdf::DynamicSPQRTree
Linear-time implementation of dynamic SPQR-trees.
Definition: DynamicSPQRTree.h:73
ogdf::begin
HypergraphRegistry< HypernodeElement >::iterator begin(const HypergraphRegistry< HypernodeElement > &self)
ogdf::DynamicSPQRTree::tree
const Graph & tree() const override
Returns a reference to the tree T.
Definition: DynamicSPQRTree.h:105
ogdf::SList
Singly linked lists (maintaining the length of the list).
Definition: SList.h:833
ogdf::DynamicSPQRTree::DynamicSPQRTree
DynamicSPQRTree(Graph &G)
Creates an SPQR tree T for graph G rooted at the first edge of G.
Definition: DynamicSPQRTree.h:84
ogdf::SPQRTree
Linear-time implementation of static SPQR-trees.
Definition: SPQRTree.h:70
ogdf::DynamicSPQRTree::rootNode
node rootNode() const override
Returns the root node of T.
Definition: DynamicSPQRTree.h:111
ogdf::DynamicSPQRTree::rootEdge
edge rootEdge() const override
Returns the edge of G at which T is rooted.
Definition: DynamicSPQRTree.h:108
ogdf::DynamicSPQRTree::originalGraph
const Graph & originalGraph() const override
Returns a reference to the original graph G.
Definition: DynamicSPQRTree.h:102
ogdf::DynamicSPQRTree::DynamicSPQRTree
DynamicSPQRTree(Graph &G, edge e)
Creates an SPQR tree T for graph G rooted at the edge e.
Definition: DynamicSPQRTree.h:91
ogdf::DynamicSPQRTree::cpRec
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...
Definition: DynamicSPQRTree.h:220
ogdf::DynamicSPQRTree::m_sk
NodeArray< DynamicSkeleton * > m_sk
pointer to skeleton of a node in T
Definition: DynamicSPQRTree.h:234
ogdf::DynamicSPQRTree::numberOfRNodes
int numberOfRNodes() const override
Returns the number of R-nodes in T.
Definition: DynamicSPQRTree.h:120
DynamicSPQRForest.h
Declaration of class DynamicSPQRForest.
ogdf::DynamicSPQRForest
Dynamic SPQR-forest.
Definition: DynamicSPQRForest.h:49
ogdf::DynamicSPQRTree::m_skelEdge
EdgeArray< edge > m_skelEdge
copies of real and virtual edges in their skeleton graphs (invalid, if the skeleton does not actually...
Definition: DynamicSPQRTree.h:238
ogdf::List
Doubly linked lists (maintaining the length of the list).
Definition: List.h:42
ogdf::internal::GraphRegisteredArray
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition: Graph_d.h:651
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::DynamicSPQRTree::typeOf
NodeType typeOf(node v) const override
Returns the type of node v.
Definition: DynamicSPQRTree.h:126
ogdf::graphics::init
void init()
Definition: graphics.h:446
ogdf::DynamicSPQRTree::skeletonEdge
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.
Definition: DynamicSPQRTree.h:171
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::SPQRTree::NodeType
NodeType
The type of a tree node in T.
Definition: SPQRTree.h:73
ogdf::DynamicSPQRTree::m_rootEdge
edge m_rootEdge
edge of G at which T is rooted
Definition: DynamicSPQRTree.h:232
ogdf::EdgeElement
Class for the representation of edges.
Definition: Graph_d.h:356
ogdf::DynamicSPQRTree::skeleton
Skeleton & skeleton(node v) const override
Returns the skeleton of node v.
Definition: DynamicSPQRTree.h:140
ogdf::DynamicSPQRTree::numberOfPNodes
int numberOfPNodes() const override
Returns the number of P-nodes in T.
Definition: DynamicSPQRTree.h:117
ogdf::Skeleton
Skeleton graphs of nodes in an SPQR-tree.
Definition: Skeleton.h:59
ogdf::PertinentGraph
Pertinent graphs of nodes in an SPQR-tree.
Definition: PertinentGraph.h:59
ogdf::DynamicSPQRTree::skeletonOfReal
const Skeleton & skeletonOfReal(edge e) const override
Returns the skeleton that contains the real edge e.
Definition: DynamicSPQRTree.h:152
ogdf::ListIteratorBase
Encapsulates a pointer to a list element.
Definition: List.h:46
ogdf::DynamicSPQRTree::findPath
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.
Definition: DynamicSPQRTree.h:132
ogdf::DynamicSPQRTree::numberOfSNodes
int numberOfSNodes() const override
Returns the number of S-nodes in T.
Definition: DynamicSPQRTree.h:114
DynamicSkeleton.h
Declaration of class DynamicSkeleton.
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::DynamicSPQRTree::m_mapV
NodeArray< node > m_mapV
temporary array used by createSkeleton()
Definition: DynamicSPQRTree.h:240
ogdf::internal::EdgeArrayBase2
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition: Graph_d.h:709