Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

SyncPlanComponents.h
Go to the documentation of this file.
1 
31 #pragma once
32 
33 #include <ogdf/basic/Graph.h>
34 #include <ogdf/basic/GraphSets.h>
37 
38 #include <functional>
39 #include <iosfwd>
40 #include <utility>
41 
42 namespace ogdf {
43 template<class E>
44 class List;
45 template<class E>
46 class SList;
47 template<class E>
48 class SListPure;
49 } // namespace ogdf
50 
51 namespace ogdf::sync_plan {
52 namespace internal {
53 struct EncapsulatedBlock;
54 }
55 
58  friend class SyncPlan;
59 
60  friend class SyncPlanConsistency;
61 
62  friend class SyncPlanDrawer;
63 
64 private:
65  Graph* G;
67  int conn_count, conn_next_id;
68 
74 
75  mutable int counter = 1;
76  mutable NodeArray<std::pair<int, edge>> marker; // used by graphEdgeToBCEdge
77 
78 public:
79  explicit SyncPlanComponents(Graph* g) : G(g), BC(), marker(BC, std::pair(0, nullptr)) {
80  reset();
81  }
82 
83  int connectedCount() const { return conn_count; }
84 
85  int connectedId(node n) const { return bcConnectedId(biconnectedComponent(n)); }
86 
87  int biconnectedId(node n) const { return biconnectedComponent(n)->index(); }
88 
89  node biconnectedComponent(node n) const;
90 
92 
93  bool isCutVertex(node n) const { return nodeType(n) == BCTree::GNodeType::CutVertex; }
94 
95  Graph& graph() const { return *G; }
96 
97  const Graph& bcTree() const { return BC; }
98 
99  BCTree::BNodeType bcNodeType(node n) const;
100 
101  bool isCutComponent(node n) const { return bcNodeType(n) == BCTree::BNodeType::CComp; }
102 
103  int bcSize(node n) const;
104 
105  int bcConnectedId(node n) const;
106 
107  node bcRepr(node bc) const;
108 
109  node findOtherRepr(node bc) const;
110 
111  std::function<std::ostream&(std::ostream&)> fmtBCNode(node bc) const;
112 
113  std::function<std::ostream&(std::ostream&)> fmtBCOf(node n) const {
114  return fmtBCNode(biconnectedComponent(n));
115  }
116 
118 
119  std::pair<edge, edge> graphEdgeToBCEdge(node bc_src, node bc_tgt) const;
120 
121  node findCommonBiconComp(node bc_cut1, node bc_cut2) const;
122 
123  void biconReprNodes(node bicon, SList<node>& nodes) const;
124 
125  FilteringBFS nodesInBiconnectedComponent(node bicon) const;
126 
128 
129 private:
130  void reset() {
131  conn_count = conn_next_id = 0;
132  bc_conn_id.init(BC, -1);
133  g_bc.init(*G, nullptr);
134  bc_g.init(BC, nullptr);
135  bc_size.init(BC, 0);
136  bc_type.init(BC, BCTree::BNodeType::BComp);
137  }
138 
139  void makeRepr(node bc, node n);
140 
141  void nodeInserted(node g_n, node bc_n);
142 
143  void insert(BCTree& tmp_bc);
144 
145  void cutReplacedByWheel(node centre, const NodeArray<SList<adjEntry>>& block_neigh);
146 
147  void relabelExplodedStar(node center1, node center2, List<node> remnants);
148 
149  void preJoin(node keep, node merge);
150 
151  void postSplitOffEncapsulatedBlock(node cut, internal::EncapsulatedBlock& block);
152 
153  void labelIsolatedNodes();
154 };
155 
161  NodeArray<SListPure<adjEntry>> m_adjEntries; // room for improvement: replace by contiguous vector + indices
163 
164 public:
165  explicit BiconnectedIsolation(SyncPlanComponents& comps, node bicon);
166 
167  ~BiconnectedIsolation() { restore(); }
168 
169  void restore(bool restore_embedding = true);
170 };
171 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::sync_plan::SyncPlanComponents::connectedCount
int connectedCount() const
Definition: SyncPlanComponents.h:83
ogdf::BCTree
Static BC-trees.
Definition: BCTree.h:55
Graph.h
Includes declaration of graph class.
ogdf::BCTree::BNodeType::CComp
@ CComp
a vertex representing a C-component
ogdf::sync_plan::BiconnectedIsolation
Hides all (edges leading to) adjacent biconnected components without changing the current embedding.
Definition: SyncPlanComponents.h:157
ogdf::sync_plan::SyncPlanComponents::isCutVertex
bool isCutVertex(node n) const
Definition: SyncPlanComponents.h:93
ogdf::sync_plan
Definition: clustering.h:44
ogdf::sync_plan::SyncPlanComponents::bc_conn_id
NodeArray< int > bc_conn_id
Definition: SyncPlanComponents.h:70
ogdf::sync_plan::SyncPlanComponents::conn_next_id
int conn_next_id
Definition: SyncPlanComponents.h:67
ogdf::BCTree::GNodeType
GNodeType
Enumeration type for characterizing the vertices of the original graph.
Definition: BCTree.h:58
ogdf::FilteringBFS
An iterator-based BFS through a Graph.
Definition: FilteringBFS.h:47
ogdf::Graph::HiddenEdgeSet
Functionality for temporarily hiding edges in constant time.
Definition: Graph_d.h:1216
ogdf::sync_plan::SyncPlanComponents::SyncPlanComponents
SyncPlanComponents(Graph *g)
Definition: SyncPlanComponents.h:79
ogdf::SList
Singly linked lists (maintaining the length of the list).
Definition: SList.h:833
backward::Color::reset
@ reset
Definition: backward.hpp:1719
ogdf::nodeType
long long nodeType
Definition: NodeTypePatterns.h:44
ogdf::sync_plan::BiconnectedIsolation::m_comps
SyncPlanComponents & m_comps
Definition: SyncPlanComponents.h:158
ogdf::NodeSet< true >
ogdf::sync_plan::SyncPlanComponents::G
Graph * G
Definition: SyncPlanComponents.h:65
ogdf::sync_plan::SyncPlanDrawer
Utilities by dumping a drawing of the current state of a SyncPlan instance.
Definition: SyncPlanDrawer.h:63
ogdf::sync_plan::SyncPlanComponents::BC
Graph BC
Definition: SyncPlanComponents.h:66
ogdf::sync_plan::BiconnectedIsolation::m_to_restore
NodeSet< true > m_to_restore
Definition: SyncPlanComponents.h:160
ogdf::sync_plan::SyncPlan
A class for modelling and solving Synchronized Planarity instances.
Definition: SyncPlan.h:123
GraphSets.h
Declaration and implementation of NodeSet, EdgeSet, and AdjEntrySet classes.
ogdf::BCTree::GNodeType::CutVertex
@ CutVertex
a cut-vertex
ogdf::sync_plan::BiconnectedIsolation::m_hiddenEdges
Graph::HiddenEdgeSet m_hiddenEdges
Definition: SyncPlanComponents.h:162
BCTree.h
Declaration of class BCTree.
ogdf::sync_plan::SyncPlanComponents::biconnectedId
int biconnectedId(node n) const
Definition: SyncPlanComponents.h:87
ogdf::sync_plan::internal::EncapsulatedBlock
Information on a single block adjacent to a cut-vertex that is about to be encapsulated.
Definition: Encapsulate.h:41
ogdf::sync_plan::BiconnectedIsolation::m_adjEntries
NodeArray< SListPure< adjEntry > > m_adjEntries
Definition: SyncPlanComponents.h:161
ogdf::sync_plan::SyncPlanComponents::bc_type
NodeArray< BCTree::BNodeType > bc_type
Definition: SyncPlanComponents.h:69
ogdf::sync_plan::SyncPlanConsistency
Consistency checks for debugging the SyncPlan algorithm.
Definition: SyncPlanConsistency.h:41
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::sync_plan::SyncPlanComponents::bcTree
const Graph & bcTree() const
Definition: SyncPlanComponents.h:97
ogdf::sync_plan::SyncPlanComponents::g_bc
NodeArray< node > g_bc
Definition: SyncPlanComponents.h:73
ogdf::sync_plan::SyncPlanComponents::reset
void reset()
Definition: SyncPlanComponents.h:130
std
Definition: GML.h:110
OGDF_EXPORT
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
Definition: config.h:101
ogdf::sync_plan::SyncPlanComponents::bc_g
NodeArray< node > bc_g
Definition: SyncPlanComponents.h:72
ogdf::sync_plan::SyncPlanComponents::fmtBCOf
std::function< std::ostream &(std::ostream &)> fmtBCOf(node n) const
Definition: SyncPlanComponents.h:113
ogdf::BCTree::BNodeType
BNodeType
Enumeration type for characterizing the BC-tree-vertices.
Definition: BCTree.h:66
ogdf::RegisteredArray< GraphRegistry< Key >, Value, WithDefault, Graph >::init
void init(const Graph *base=nullptr)
Reinitializes the array. Associates the array with the matching registry of base.
Definition: RegisteredArray.h:849
ogdf::sync_plan::BiconnectedIsolation::~BiconnectedIsolation
~BiconnectedIsolation()
Definition: SyncPlanComponents.h:167
ogdf::sync_plan::SyncPlanComponents::graph
Graph & graph() const
Definition: SyncPlanComponents.h:95
ogdf::sync_plan::SyncPlanComponents::connectedId
int connectedId(node n) const
Definition: SyncPlanComponents.h:85
ogdf::sync_plan::SyncPlanComponents::isCutComponent
bool isCutComponent(node n) const
Definition: SyncPlanComponents.h:101
ogdf::sync_plan::SyncPlanComponents
(Bi)Connected components information maintained during the SyncPlan algorithm.
Definition: SyncPlanComponents.h:57
ogdf::NodeElement
Class for the representation of nodes.
Definition: Graph_d.h:233
ogdf::BCTree::BNodeType::BComp
@ BComp
a vertex representing a B-component
ogdf::sync_plan::BiconnectedIsolation::m_bicon
node m_bicon
Definition: SyncPlanComponents.h:159
ogdf::sync_plan::SyncPlanComponents::bc_size
NodeArray< int > bc_size
Definition: SyncPlanComponents.h:71
FilteringBFS.h
An iterator-based BFS through a Graph. TODO should be moved to a central location; add DFS?
ogdf::sync_plan::SyncPlanComponents::marker
NodeArray< std::pair< int, edge > > marker
Definition: SyncPlanComponents.h:76