Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

Loading...
Searching...
No Matches
ShellingOrder.h
Go to the documentation of this file.
1
32#pragma once
33
34#include <ogdf/basic/Array.h>
35#include <ogdf/basic/Graph.h>
36#include <ogdf/basic/basic.h>
37
38namespace ogdf {
39template<class E>
40class List;
41
45class ShellingOrderSet : public Array<node> {
46public:
49 m_leftVertex = m_rightVertex = nullptr;
50 m_leftAdj = m_rightAdj = nullptr;
51 }
52
54
59 ShellingOrderSet(int n, adjEntry adjL = nullptr, adjEntry adjR = nullptr) : Array<node>(1, n) {
60 m_leftVertex = (adjL != nullptr) ? adjL->twinNode() : nullptr;
61 m_rightVertex = (adjR != nullptr) ? adjR->twinNode() : nullptr;
62 m_leftAdj = adjL;
63 m_rightAdj = adjR;
64 }
65
67 node left() const { return m_leftVertex; }
68
70 node right() const { return m_rightVertex; }
71
73 adjEntry leftAdj() const { return m_leftAdj; }
74
76 adjEntry rightAdj() const { return m_rightAdj; }
77
79 bool hasLeft() const { return m_leftAdj != nullptr; }
80
82 bool hasRight() const { return m_rightAdj != nullptr; }
83
85 void left(node cl) { m_leftVertex = cl; }
86
88 void right(node cr) { m_rightVertex = cr; }
89
91 void leftAdj(adjEntry adjL) { m_leftAdj = adjL; }
92
94 void rightAdj(adjEntry adjR) { m_rightAdj = adjR; }
95
97 int len() const { return high(); }
98
100 node operator[](const int i) const { return Array<node>::operator[](i); }
101
103 node& operator[](const int i) { return Array<node>::operator[](i); }
104
105
106private:
111};
112
117public:
119 ShellingOrder() { m_pGraph = nullptr; }
120
121#if 0
122 ShellingOrder(const Graph &G, const List<ShellingOrderSet> &partition);
123#endif
124
126
128 const Graph& getGraph() const { return *m_pGraph; }
129
131 int length() const { return m_V.high(); }
132
134 int len(int i) const { return m_V[i].len(); }
135
137 node operator()(int i, int j) const { return (m_V[i])[j]; }
138
140 const ShellingOrderSet& operator[](int i) const { return m_V[i]; }
141
143 node left(int i) const { return m_V[i].left(); }
144
146 node right(int i) const { return m_V[i].right(); }
147
149 int rank(node v) const { return m_rank[v]; }
150
156 void init(const Graph& G, const List<ShellingOrderSet>& partition);
157
163 void initLeftmost(const Graph& G, const List<ShellingOrderSet>& partition);
164
165
166 void push(int k, node v, node tgt);
167
168 friend class CompOrderBic;
169
170private:
174};
175
176}
Declaration and implementation of Array class and Array algorithms.
Includes declaration of graph class.
Basic declarations, included by all source files.
Class for adjacency list elements.
Definition Graph_d.h:143
The parameterized class Array implements dynamic arrays of type E.
Definition Array.h:219
const_reference operator[](INDEX i) const
Returns a reference to the element at position i.
Definition Array.h:308
int high() const
Returns the maximal array index.
Definition Array.h:299
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
Class for the representation of nodes.
Definition Graph_d.h:241
The shelling order of a graph.
node right(int i) const
Returns the right-node of the i-th set Vi.
const ShellingOrderSet & operator[](int i) const
Returns the i-th set V_i
const Graph & getGraph() const
Returns the graph associated with the shelling order.
NodeArray< int > m_rank
the rank of nodes.
void init(const Graph &G, const List< ShellingOrderSet > &partition)
Initializes the shelling order for graph G with a given node partition.
void initLeftmost(const Graph &G, const List< ShellingOrderSet > &partition)
Initializes the shelling order for graph G with a given node partition and transforms it into a leftm...
void push(int k, node v, node tgt)
Array< ShellingOrderSet > m_V
the node partition.
const Graph * m_pGraph
the associated graph.
node operator()(int i, int j) const
Returns the j-th node of the i-th order set Vi.
ShellingOrder()
Creates an empty shelling order.
int length() const
Returns the number of sets in the node partition.
int len(int i) const
Returns the length of the i-th order set Vi.
node left(int i) const
Returns the left-node of the i-th set Vi.
int rank(node v) const
Returns the rank of node v, where rank(v) = i iff v is contained in Vi.
The node set in a shelling order of a graph.
ShellingOrderSet(int n, adjEntry adjL=nullptr, adjEntry adjR=nullptr)
Creates a shelling order set for n nodes.
adjEntry m_leftAdj
the adjacency entry pointing to the left-node.
node left() const
Returns the left-node of the set.
void left(node cl)
Sets the left-node to cl.
node m_leftVertex
the left-node of the set.
node operator[](const int i) const
Returns the i-th node in the order set from left (the leftmost node has index 1).
bool hasRight() const
Returns true iff the adjacency entry to the right-node exists.
adjEntry m_rightAdj
the adjacency entry pointing to the right-node.
adjEntry leftAdj() const
Returns the adjacency entry pointing from z1 to the left node (or 0 if no such node).
ShellingOrderSet()
Creates an empty shelling order set.
node & operator[](const int i)
Returns the i-th node in the order set from left (the leftmost node has index 1).
adjEntry rightAdj() const
Returns the adjacency entry pointing from zp to the right node (or 0 if no such node).
node m_rightVertex
the right-node of the set.
node right() const
Returns the right-node of the set.
int len() const
Returns the length of the order set, i.e., the number of contained nodes.
void leftAdj(adjEntry adjL)
Sets the adjacency entry pointing to the left-node to adjL.
void right(node cr)
Sets the right-node to cr.
bool hasLeft() const
Returns true iff the adjacency entry to the left-node exists.
void rightAdj(adjEntry adjR)
Sets the adjacency entry pointing to the right-node to adjR.
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.