all operators will only be found when using sync_plan::internal
, so no namespace pollution
More...
Classes | |
struct | BlockEmbedding |
Internal class used to embed a biconnected component with Q-vertices. More... | |
struct | EncapsulatedBlock |
Information on a single block adjacent to a cut-vertex that is about to be encapsulated. More... | |
struct | FrozenSimplifyMapping |
struct | SimplifyMapping |
class | UndoSimplify |
Typedefs | |
using | GnMultiArray = RegisteredMultiArray< node, BlockEmbedding *, node, NA > |
template<typename V > | |
using | NA = NodeArray< V > |
using | tp = const std::chrono::time_point< std::chrono::high_resolution_clock > |
using | tpc = std::chrono::high_resolution_clock |
Functions | |
bool | compareWithExhaustiveNodeDFS (Graph &G, adjEntry u_adj, node v, const EdgeSet<> &visited, const List< adjEntry > &found) |
Check that the method exhaustiveNodeDFS would return the same adjEntries as contained in found . More... | |
adjEntry | continueNodeDFS (Graph &G, adjEntry u_adj, node v, EdgeSet<> &visited, List< adjEntry > &dfs_stack) |
Continue a DFS from the last node of dfs_stack until an unvisited edge incident to v is found. More... | |
int64_t | dur_ms (const tp::duration &d) |
int64_t | dur_ns (const tp::duration &d) |
int | exhaustiveNodeDFS (Graph &G, adjEntry u_adj, node v, EdgeSet<> &visited, List< adjEntry > &out) |
Use a DFS to find all edges incident to v reachable from u_adj without crossing the node u and add them to out . More... | |
int | findCycles (Graph &G, node u, const std::function< adjEntry(adjEntry)> &mapping, List< List< adjEntry >> &cycles, std::ostream &log) |
Find all cycles the permutation mapping defines on the order of the adjEntries of u and put all adjEntries of each cycle into their own list in cycles . More... | |
OGDF_CONTAINER_PRINTER (printBijection) | |
OGDF_CONTAINER_PRINTER (printContainer) | |
OGDF_CONTAINER_PRINTER (printEdges) | |
OGDF_CONTAINER_PRINTER (printFrozenBijection) | |
OGDF_CONTAINER_PRINTER (printIncidentEdges) | |
std::ostream & | operator<< (std::ostream &os, const ogdf::ClusterGraph &CG) |
std::ostream & | operator<< (std::ostream &os, const ogdf::Graph &G) |
template<typename Container > | |
std::ostream & | operator<< (std::ostream &os, const printBijection< Container > &inst) |
template<typename Container > | |
std::ostream & | operator<< (std::ostream &os, const printContainer< Container > &inst) |
template<typename Container > | |
std::ostream & | operator<< (std::ostream &os, const printEdges< Container > &inst) |
template<> | |
std::ostream & | operator<< (std::ostream &os, const printEdges< PipeBij > &inst) |
template<typename Container > | |
std::ostream & | operator<< (std::ostream &os, const printFrozenBijection< Container > &inst) |
template<typename Container > | |
std::ostream & | operator<< (std::ostream &os, const printIncidentEdges< Container > &inst) |
template<> | |
std::ostream & | operator<< (std::ostream &os, const printIncidentEdges< PipeBij > &inst) |
std::ostream & | operator<< (std::ostream &os, const std::function< std::ostream &(std::ostream &)> &func) |
template<typename T1 , typename T2 > | |
std::ostream & | operator<< (std::ostream &os, const std::pair< T1, T2 > &pair) |
adjEntry | startNodeDFS (Graph &G, adjEntry u_adj, node v, EdgeSet<> &visited, List< adjEntry > &dfs_stack) |
Use a DFS to find an edge incident to v reachable from u_adj without crossing the node u. More... | |
int | sumPNodeDegrees (const ogdf::pc_tree::PCTree &pct) |
std::string | to_string (const std::function< std::ostream &(std::ostream &)> &func) |
bool | validateCollectedAdjs (node v, node u, List< SimplifyMapping > &bij_list, EdgeSet<> &visited, SyncPlanComponents &components) |
Check that /p bij_list contains all adjEntries of v which belong to a parallel bundle leading to u . More... | |
void | validatePartnerPCTree (const NodePCRotation *u_pc, const NodePCRotation *v_pc) |
For two poles u,v of an (SPQR-Tree) parallel, check that their embedding PCTrees correctly represent all parallel bundles between u and v. More... | |
all operators will only be found when using sync_plan::internal
, so no namespace pollution
using ogdf::sync_plan::internal::GnMultiArray = typedef RegisteredMultiArray<node, BlockEmbedding*, node, NA> |
Definition at line 49 of file BlockEmbedding.h.
using ogdf::sync_plan::internal::NA = typedef NodeArray<V> |
Definition at line 47 of file BlockEmbedding.h.
using ogdf::sync_plan::internal::tp = typedef const std::chrono::time_point<std::chrono::high_resolution_clock> |
Definition at line 84 of file SyncPlan.h.
using ogdf::sync_plan::internal::tpc = typedef std::chrono::high_resolution_clock |
Definition at line 83 of file SyncPlan.h.
bool ogdf::sync_plan::internal::compareWithExhaustiveNodeDFS | ( | Graph & | G, |
adjEntry | u_adj, | ||
node | v, | ||
const EdgeSet<> & | visited, | ||
const List< adjEntry > & | found | ||
) |
Check that the method exhaustiveNodeDFS would return the same adjEntries as contained in found
.
adjEntry ogdf::sync_plan::internal::continueNodeDFS | ( | Graph & | G, |
adjEntry | u_adj, | ||
node | v, | ||
EdgeSet<> & | visited, | ||
List< adjEntry > & | dfs_stack | ||
) |
Continue a DFS from the last node of dfs_stack
until an unvisited edge incident to v
is found.
All edges visited on the way (also those that didn't lead to an edge incident to v and the edge incident to v found in the end) are added to the set visited
.
G | the graph |
u_adj | (for debugging purposes) an adjEntry at the bottom of the stack, whose node we should never visit |
v | the node to find (an adjacent edge to) |
visited | set of already used edges |
dfs_stack | continuation points for the dfs |
v
reachable from dfs_stack.back()
via previously unvisited edges
|
inline |
Definition at line 86 of file SyncPlan.h.
|
inline |
Definition at line 90 of file SyncPlan.h.
int ogdf::sync_plan::internal::exhaustiveNodeDFS | ( | Graph & | G, |
adjEntry | u_adj, | ||
node | v, | ||
EdgeSet<> & | visited, | ||
List< adjEntry > & | out | ||
) |
Use a DFS to find all edges incident to v
reachable from u_adj
without crossing the node u and add them to out
.
All edges visited on the way (also those that didn't lead to an edge incident to v and the edge incident to v found in the end) are added to the set visited
. Calls startNodeDFS once and then repeatedly calls continueNodeDFS until no new adjEntry is found.
int ogdf::sync_plan::internal::findCycles | ( | Graph & | G, |
node | u, | ||
const std::function< adjEntry(adjEntry)> & | mapping, | ||
List< List< adjEntry >> & | cycles, | ||
std::ostream & | log | ||
) |
Find all cycles the permutation mapping
defines on the order of the adjEntries of u
and put all adjEntries of each cycle into their own list in cycles
.
ogdf::sync_plan::internal::OGDF_CONTAINER_PRINTER | ( | printBijection | ) |
ogdf::sync_plan::internal::OGDF_CONTAINER_PRINTER | ( | printContainer | ) |
ogdf::sync_plan::internal::OGDF_CONTAINER_PRINTER | ( | printEdges | ) |
ogdf::sync_plan::internal::OGDF_CONTAINER_PRINTER | ( | printFrozenBijection | ) |
ogdf::sync_plan::internal::OGDF_CONTAINER_PRINTER | ( | printIncidentEdges | ) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const ogdf::ClusterGraph & | CG | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const ogdf::Graph & | G | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printBijection< Container > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printContainer< Container > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printEdges< Container > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printEdges< PipeBij > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printFrozenBijection< Container > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printIncidentEdges< Container > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const printIncidentEdges< PipeBij > & | inst | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const std::function< std::ostream &(std::ostream &)> & | func | ||
) |
std::ostream& ogdf::sync_plan::internal::operator<< | ( | std::ostream & | os, |
const std::pair< T1, T2 > & | pair | ||
) |
adjEntry ogdf::sync_plan::internal::startNodeDFS | ( | Graph & | G, |
adjEntry | u_adj, | ||
node | v, | ||
EdgeSet<> & | visited, | ||
List< adjEntry > & | dfs_stack | ||
) |
Use a DFS to find an edge incident to v
reachable from u_adj
without crossing the node u.
All edges visited on the way (also those that didn't lead to an edge incident to v and the edge incident to v found in the end) are added to the set visited
. The path taken is recorded in dfs_stack
, where dfs_stack.front() == u_adj and dfs_stack.back() is the adjEntry of v which is also returned. If you want to find a further alternative adjEntries that match this criterion, pop the last entry off the stack and call continueNodeDFS (see also exhaustiveNodeDFS).
int ogdf::sync_plan::internal::sumPNodeDegrees | ( | const ogdf::pc_tree::PCTree & | pct | ) |
std::string ogdf::sync_plan::internal::to_string | ( | const std::function< std::ostream &(std::ostream &)> & | func | ) |
bool ogdf::sync_plan::internal::validateCollectedAdjs | ( | node | v, |
node | u, | ||
List< SimplifyMapping > & | bij_list, | ||
EdgeSet<> & | visited, | ||
SyncPlanComponents & | components | ||
) |
Check that /p bij_list contains all adjEntries of v
which belong to a parallel bundle leading to u
.
void ogdf::sync_plan::internal::validatePartnerPCTree | ( | const NodePCRotation * | u_pc, |
const NodePCRotation * | v_pc | ||
) |
For two poles u,v of an (SPQR-Tree) parallel, check that their embedding PCTrees correctly represent all parallel bundles between u and v.
Note: u_pc
must be trivial, while v_pc
may be non-trivial.