Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

PlanRepExpansion.h
Go to the documentation of this file.
1 
33 #pragma once
34 
36 #include <ogdf/basic/FaceSet.h>
37 #include <ogdf/basic/Graph.h>
38 #include <ogdf/basic/NodeSet.h>
39 #include <ogdf/basic/SList.h>
40 #include <ogdf/basic/tuples.h>
41 
42 namespace ogdf {
43 
53 public:
54  struct Crossing {
55  Crossing() { m_adj = nullptr; }
56 
57  explicit Crossing(adjEntry adj) { m_adj = adj; }
58 
62 
63  friend std::ostream& operator<<(std::ostream& os, const Crossing& c) {
64  os << "(" << c.m_adj << ")";
65  return os;
66  }
67  };
68 
75  class NodeSplit {
76  public:
80  NodeSplit() { }
81 
85  explicit NodeSplit(ListIterator<NodeSplit> it) : m_nsIterator(it) { }
86 
90  node source() const { return m_path.front()->source(); }
91 
95  node target() const { return m_path.back()->target(); }
96 
99  };
100 
103 
104 
110  PlanRepExpansion(const Graph& G);
111 
119  PlanRepExpansion(const Graph& G, const List<node>& splittableNodes);
120 
122 
126 
129  const Graph& original() const { return *m_pGraph; }
130 
132  node original(node v) const { return m_vOrig[v]; }
133 
135  const List<node>& expansion(node vOrig) const { return m_vCopy[vOrig]; }
136 
138  node copy(node vOrig) const { return m_vCopy[vOrig].front(); }
139 
141  edge originalEdge(edge e) const { return m_eOrig[e]; }
142 
144  const List<edge>& chain(edge eOrig) const { return m_eCopy[eOrig]; }
145 
147  edge copy(edge eOrig) const { return m_eCopy[eOrig].front(); }
148 
150  bool splittable(node v) const { return m_splittable[v]; }
151 
153  bool splittableOrig(node vOrig) const { return m_splittableOrig[vOrig]; }
154 
156  NodeSplit* nodeSplitOf(edge e) const { return m_eNodeSplit[e]; }
157 
159  int numberOfNodeSplits() const { return m_nodeSplits.size(); }
160 
161  int numberOfSplittedNodes() const;
162 
164  List<NodeSplit>& nodeSplits() { return m_nodeSplits; }
165 
175  List<edge>& setOrigs(edge e, edge& eOrig, nodeSplit& ns);
176 
177  ListConstIterator<edge> position(edge e) const { return m_eIterator[e]; }
178 
179  bool isPseudoCrossing(node v) const;
180 
182  int computeNumberOfCrossings() const;
183 
185 
188 
190 
194  int numberOfCCs() const { return m_nodesInCC.size(); }
195 
199  int currentCC() const { return m_currentCC; }
200 
206  const List<node>& nodesInCC(int i) const { return m_nodesInCC[i]; }
207 
211  const List<node>& nodesInCC() const { return m_nodesInCC[m_currentCC]; }
212 
221  void initCC(int i);
222 
223 
225 
228 
230  edge split(edge e) override;
231 
232  void unsplit(edge eIn, edge eOut) override;
233 
235  virtual void delEdge(edge e) override;
236 
238  bool embed();
239 
240  void insertEdgePath(edge eOrig, nodeSplit ns, node vStart, node vEnd, List<Crossing>& eip,
241  edge eSrc, edge eTgt);
242 
255  void insertEdgePathEmbedded(edge eOrig, nodeSplit ns, CombinatorialEmbedding& E,
256  const List<Tuple2<adjEntry, adjEntry>>& crossedEdges);
257 
271  void removeEdgePathEmbedded(CombinatorialEmbedding& E, edge eOrig, nodeSplit ns,
272  FaceSet<false>& newFaces, NodeSet<false>& mergedNodes, node& oldSrc, node& oldTgt);
273 
283  void removeEdgePath(edge eOrig, nodeSplit ns, node& oldSrc, node& oldTgt);
284 
293  void contractSplit(nodeSplit ns, CombinatorialEmbedding& E);
294 
302  void contractSplit(nodeSplit ns);
303 
314  edge unsplitExpandNode(node u, edge eContract, edge eExpand, CombinatorialEmbedding& E);
315 
325  edge unsplitExpandNode(node u, edge eContract, edge eExpand);
326 
338  edge enlargeSplit(node v, edge e, CombinatorialEmbedding& E);
339 
350  edge enlargeSplit(node v, edge e);
351 
361  edge splitNodeSplit(edge e, CombinatorialEmbedding& E);
362 
371  edge splitNodeSplit(edge e);
372 
381  void removeSelfLoop(edge e, CombinatorialEmbedding& E);
382 
383  void removeSelfLoop(edge e);
384 
397 
398  edge separateDummy(adjEntry adj_1, adjEntry adj_2, node vStraight, bool isSrc);
399 
400  void resolvePseudoCrossing(node v);
401 
403 
406 
408 #ifdef OGDF_DEBUG
409  void consistencyCheck() const;
410 #endif
411 
413 
414 private:
415  void doInit(const Graph& G, const List<node>& splittableNodes);
416  void prepareNodeSplit(const SList<adjEntry>& partitionLeft, adjEntry& adjLeft,
417  adjEntry& adjRight);
418 
419  const Graph* m_pGraph;
426 
431 
433  int m_numCC;
434 
437 };
438 
439 }
ogdf::PlanRepExpansion::NodeSplit::m_path
List< edge > m_path
The insertion path of the node split.
Definition: PlanRepExpansion.h:97
NodeSet.h
Declaration and implementation of ogdf::NodeSet.
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::PlanRepExpansion::Crossing
Definition: PlanRepExpansion.h:54
ogdf::PlanRepExpansion::Crossing::m_adj
adjEntry m_adj
Definition: PlanRepExpansion.h:59
ogdf::PlanRepExpansion::m_currentCC
int m_currentCC
The index of the current component.
Definition: PlanRepExpansion.h:432
Graph.h
Includes declaration of graph class.
ogdf::PlanRepExpansion::Crossing::m_partitionLeft
SList< adjEntry > m_partitionLeft
Definition: PlanRepExpansion.h:60
FaceSet.h
Declaration and implementation of ogdf::FaceSet.
ogdf::PlanRepExpansion::currentCC
int currentCC() const
Returns the index of the current connected component (-1 if not yet initialized).
Definition: PlanRepExpansion.h:199
ogdf::PlanRepExpansion::m_eAuxCopy
EdgeArray< edge > m_eAuxCopy
Definition: PlanRepExpansion.h:436
ogdf::PlanRepExpansion::splittable
bool splittable(node v) const
Returns true iff v is splittable.
Definition: PlanRepExpansion.h:150
ogdf::Tuple2
Tuples of two elements (2-tuples).
Definition: tuples.h:46
ogdf::PlanRepExpansion::Crossing::m_partitionRight
SList< adjEntry > m_partitionRight
Definition: PlanRepExpansion.h:61
ogdf::PlanRepExpansion::NodeSplit::m_nsIterator
ListIterator< NodeSplit > m_nsIterator
This node split's iterator in the list of all node splits.
Definition: PlanRepExpansion.h:98
ogdf::sync_plan::split
std::pair< node, node > split(Graph &G, sync_plan::PipeBij &bij, const EdgeArray< edge > *new_edges=nullptr, const EdgeArray< bool > *reverse_edges=nullptr, node src=nullptr, node tgt=nullptr)
ogdf::SList
Singly linked lists (maintaining the length of the list).
Definition: SList.h:833
ogdf::PlanRepExpansion::m_numCC
int m_numCC
The number of components in the original graph.
Definition: PlanRepExpansion.h:433
ogdf::PlanRepExpansion
Planarized representations (of a connected component) of a graph.
Definition: PlanRepExpansion.h:52
ogdf::PlanRepExpansion::m_splittableOrig
NodeArray< bool > m_splittableOrig
Definition: PlanRepExpansion.h:428
ogdf::PlanRepExpansion::nodeSplitOf
NodeSplit * nodeSplitOf(edge e) const
Returns the node split associated with e, or 0 if none (e.g., e belongs to an original edge).
Definition: PlanRepExpansion.h:156
ogdf::PlanRepExpansion::m_vCopy
NodeArray< List< node > > m_vCopy
The corresponding list of nodes in the graph copy.
Definition: PlanRepExpansion.h:425
ogdf::NodeSet< false >
ogdf::PlanRepExpansion::m_eCopy
EdgeArray< List< edge > > m_eCopy
The corresponding list of edges in the graph copy.
Definition: PlanRepExpansion.h:423
ogdf::PlanRepExpansion::m_nodesInCC
Array< List< node > > m_nodesInCC
The list of original nodes in each component.
Definition: PlanRepExpansion.h:435
ogdf::PlanRepExpansion::Crossing::Crossing
Crossing()
Definition: PlanRepExpansion.h:55
ogdf::PlanRepExpansion::NodeSplit::source
node source() const
Returns the first node on the node split's insertion path.
Definition: PlanRepExpansion.h:90
ogdf::PlanRepExpansion::expansion
const List< node > & expansion(node vOrig) const
Returns the list of copy nodes of vOrig.
Definition: PlanRepExpansion.h:135
ogdf::PlanRepExpansion::NodeSplit::target
node target() const
Returns the last node on the node split's insertion path.
Definition: PlanRepExpansion.h:95
ogdf::AdjElement
Class for adjacency list elements.
Definition: Graph_d.h:135
ogdf::PlanRepExpansion::nodesInCC
const List< node > & nodesInCC() const
Returns the list of (original) nodes in the current connected component.
Definition: PlanRepExpansion.h:211
ogdf::PlanRepExpansion::m_vIterator
NodeArray< ListIterator< node > > m_vIterator
The position of copy node in the list.
Definition: PlanRepExpansion.h:424
ogdf::PlanRepExpansion::m_eOrig
EdgeArray< edge > m_eOrig
The corresponding edge in the original graph.
Definition: PlanRepExpansion.h:421
ogdf::PlanRepExpansion::copy
node copy(node vOrig) const
Returns the first copy node of vOrig.
Definition: PlanRepExpansion.h:138
ogdf::PlanRepExpansion::chain
const List< edge > & chain(edge eOrig) const
Returns the insertion path of edge eOrig.
Definition: PlanRepExpansion.h:144
ogdf::PlanRepExpansion::NodeSplit::NodeSplit
NodeSplit(ListIterator< NodeSplit > it)
Creates a node split and sets its iterator in the list of all node splits.
Definition: PlanRepExpansion.h:85
SList.h
Declaration of singly linked lists and iterators.
ogdf::Array
The parameterized class Array implements dynamic arrays of type E.
Definition: Array.h:214
ogdf::PlanRepExpansion::splittableOrig
bool splittableOrig(node vOrig) const
Returns true iff vOrig is splittable.
Definition: PlanRepExpansion.h:153
ogdf::FaceSet< false >
ogdf::PlanRepExpansion::m_eNodeSplit
EdgeArray< NodeSplit * > m_eNodeSplit
Definition: PlanRepExpansion.h:429
ogdf::PlanRepExpansion::numberOfCCs
int numberOfCCs() const
Returns the number of connected components in the original graph.
Definition: PlanRepExpansion.h:194
ogdf::PlanRepExpansion::NodeSplit::NodeSplit
NodeSplit()
Creates an empty node split.
Definition: PlanRepExpansion.h:80
ogdf::PlanRepExpansion::position
ListConstIterator< edge > position(edge e) const
Definition: PlanRepExpansion.h:177
ogdf::PlanRepExpansion::originalEdge
edge originalEdge(edge e) const
Returns the original edge of e, or 0 if e has none (e.g., e belongs to a node split).
Definition: PlanRepExpansion.h:141
ogdf::List< edge >
ogdf::internal::GraphRegisteredArray
RegisteredArray for nodes, edges and adjEntries of a graph.
Definition: Graph_d.h:651
ogdf::PlanRepExpansion::m_splittable
NodeArray< bool > m_splittable
Definition: PlanRepExpansion.h:427
ogdf::Graph
Data type for general directed graphs (adjacency list representation).
Definition: Graph_d.h:862
ogdf::PlanRepExpansion::m_nodeSplits
List< NodeSplit > m_nodeSplits
Definition: PlanRepExpansion.h:430
ogdf::PlanRepExpansion::m_eIterator
EdgeArray< ListIterator< edge > > m_eIterator
The position of copy edge in the list.
Definition: PlanRepExpansion.h:422
ogdf::PlanRepExpansion::copy
edge copy(edge eOrig) const
Returns the first edge in eOrig's insertion path.
Definition: PlanRepExpansion.h:147
ogdf::PlanRepExpansion::nodeSplits
List< NodeSplit > & nodeSplits()
Returns the list of node splits.
Definition: PlanRepExpansion.h:164
ogdf::PlanRepExpansion::m_vOrig
NodeArray< node > m_vOrig
The corresponding node in the original graph.
Definition: PlanRepExpansion.h:420
ogdf::PlanRepExpansion::Crossing::Crossing
Crossing(adjEntry adj)
Definition: PlanRepExpansion.h:57
CombinatorialEmbedding.h
Declaration of CombinatorialEmbedding and face.
ogdf::PlanRepExpansion::original
node original(node v) const
Returns the original node of v, or 0 if v is a dummy.
Definition: PlanRepExpansion.h:132
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::CombinatorialEmbedding
Combinatorial embeddings of planar graphs with modification functionality.
Definition: CombinatorialEmbedding.h:397
ogdf::PlanRepExpansion::original
const Graph & original() const
Returns a reference to the original graph.
Definition: PlanRepExpansion.h:129
ogdf::PlanRepExpansion::NodeSplit
Representation of a node split in a planarized expansion.
Definition: PlanRepExpansion.h:75
ogdf::EdgeElement
Class for the representation of edges.
Definition: Graph_d.h:356
ogdf::PlanRepExpansion::numberOfNodeSplits
int numberOfNodeSplits() const
Returns the number of node splits.
Definition: PlanRepExpansion.h:159
ogdf::ListIteratorBase
Encapsulates a pointer to a list element.
Definition: List.h:46
ogdf::PlanRepExpansion::nodesInCC
const List< node > & nodesInCC(int i) const
Returns the list of (original) nodes in connected component i.
Definition: PlanRepExpansion.h:206
ogdf::PlanRepExpansion::Crossing::operator<<
friend std::ostream & operator<<(std::ostream &os, const Crossing &c)
Definition: PlanRepExpansion.h:63
ogdf::PlanRepExpansion::m_pGraph
const Graph * m_pGraph
The original graph.
Definition: PlanRepExpansion.h:419
ogdf::PlanRepExpansion::~PlanRepExpansion
~PlanRepExpansion()
Definition: PlanRepExpansion.h:121
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
tuples.h
Declaration and implementation of class Tuple2, Tuple3 and Tuple4.
ogdf::internal::EdgeArrayBase2
RegisteredArray for edges of a graph, specialized for EdgeArray<edge>.
Definition: Graph_d.h:709