#include <ogdf/basic/GraphCopy.h>
Public Member Functions | |
GraphCopyBase ()=default | |
Constructs a GraphCopyBase associated with no graph. More... | |
GraphCopyBase (const GraphCopyBase &other)=delete | |
GraphCopyBase (GraphCopyBase &&other) noexcept=delete | |
void | clear () override=0 |
Removes all nodes and edges from this copy but does not break the link with the original graph. More... | |
virtual adjEntry | copy (adjEntry adj) const =0 |
Returns the adjacency entry in the graph copy corresponding to adj . More... | |
virtual edge | copy (edge e) const =0 |
Returns the edge in the graph copy corresponding to e . More... | |
node | copy (node v) const |
Returns the node in the graph copy corresponding to v . More... | |
void | createEmpty (const Graph &G) |
Re-initializes the copy using G , but does not create any nodes or edges. More... | |
void | delNode (node v) override |
Removes node v . More... | |
bool | getLinkCopiesOnInsert () const |
const Graph * | getOriginalGraph () const |
void | init (const Graph &G) |
Re-initializes the copy using G , creating copies for all nodes and edges in G . More... | |
void | init (const Graph *G) |
Re-initializes the copy using G (which might be null), creating copies for all nodes and edges in G . More... | |
bool | isDummy (adjEntry adj) const |
Returns true iff adj->theEdge() has no corresponding edge in the original graph. More... | |
bool | isDummy (edge e) const |
Returns true iff e has no corresponding edge in the original graph. More... | |
bool | isDummy (node v) const |
Returns true iff v has no corresponding node in the original graph. More... | |
node | newNode (int index=-1) |
Creates a new node and returns it. More... | |
node | newNode (node vOrig) |
Creates a new node in the graph copy with original node vOrig . More... | |
GraphCopyBase & | operator= (const GraphCopyBase &other)=delete |
GraphCopyBase & | operator= (GraphCopyBase &&other) noexcept=delete |
const Graph & | original () const |
Returns a reference to the original graph. More... | |
adjEntry | original (adjEntry adj) const |
Returns the adjacency entry in the original graph corresponding to adj . More... | |
edge | original (edge e) const |
Returns the edge in the original graph corresponding to e . More... | |
node | original (node v) const |
Returns the node in the original graph corresponding to v . More... | |
void | setLinkCopiesOnInsert (bool linkCopiesOnInsert) |
Whether insert(getOriginalGraph()) will automatically set copy and original . More... | |
virtual void | setOriginalEmbedding ()=0 |
Sets the embedding of the graph copy to the embedding of the original graph. More... | |
void | setOriginalGraph (const Graph &G) |
Re-initializes the copy using G , but does not create any nodes or edges. More... | |
virtual void | setOriginalGraph (const Graph *G)=0 |
Re-initializes the copy using G (which might be null), but does not create any nodes or edges. More... | |
Public Member Functions inherited from ogdf::Graph | |
Graph () | |
Constructs an empty graph. More... | |
Graph (const Graph ©) | |
Constructs a graph that is a copy of G . More... | |
Graph (Graph &&move)=delete | |
virtual | ~Graph () |
Destructor. More... | |
Graph & | operator= (const Graph ©) |
Overwrites this graph to be a copy of G . More... | |
Graph & | operator= (Graph &&move)=delete |
bool | empty () const |
Returns true iff the graph is empty, i.e., contains no nodes. More... | |
int | numberOfNodes () const |
Returns the number of nodes in the graph. More... | |
int | numberOfEdges () const |
Returns the number of edges in the graph. More... | |
int | maxNodeIndex () const |
Returns the largest used node index. More... | |
int | maxEdgeIndex () const |
Returns the largest used edge index. More... | |
int | maxAdjEntryIndex () const |
Returns the largest used adjEntry index. More... | |
node | firstNode () const |
Returns the first node in the list of all nodes. More... | |
node | lastNode () const |
Returns the last node in the list of all nodes. More... | |
edge | firstEdge () const |
Returns the first edge in the list of all edges. More... | |
edge | lastEdge () const |
Returns the last edge in the list of all edges. More... | |
node | chooseNode (std::function< bool(node)> includeNode=[](node) { return true;}, bool isFastTest=true) const |
Returns a random node. More... | |
edge | chooseEdge (std::function< bool(edge)> includeEdge=[](edge) { return true;}, bool isFastTest=true) const |
Returns a random edge. More... | |
template<class CONTAINER > | |
void | allNodes (CONTAINER &nodeContainer) const |
Returns a container with all nodes of the graph. More... | |
template<class CONTAINER > | |
void | allEdges (CONTAINER &edgeContainer) const |
Returns a container with all edges of the graph. More... | |
node | newNode (int index=-1) |
Creates a new node and returns it. More... | |
edge | newEdge (node v, node w, int index=-1) |
Creates a new edge (v ,w ) and returns it. More... | |
edge | newEdge (node v, adjEntry adjTgt, int index=-1) |
Creates a new edge at predefined positions in the adjacency lists. More... | |
edge | newEdge (adjEntry adjSrc, node w, int index=-1) |
Creates a new edge at predefined positions in the adjacency lists. More... | |
edge | newEdge (adjEntry adjSrc, adjEntry adjTgt, Direction dir=Direction::after, int index=-1) |
Creates a new edge at predefined positions in the adjacency lists. More... | |
template<typename S , typename T > | |
edge | newEdge (S src, Direction dirSrc, T tgt, Direction dirTgt, int index=-1) |
Creates a new edge at predefined positions in the adjacency lists. More... | |
virtual void | delEdge (edge e) |
Removes edge e from the graph. More... | |
void | restoreAllEdges () |
Restore all hidden edges and invalidate all HiddenEdgeSets. More... | |
virtual edge | split (edge e) |
Splits edge e into two edges introducing a new node. More... | |
void | unsplit (node u) |
Undoes a split operation. More... | |
virtual void | unsplit (edge eIn, edge eOut) |
Undoes a split operation. More... | |
node | splitNode (adjEntry adjStartLeft, adjEntry adjStartRight) |
Splits a node while preserving the order of adjacency entries. More... | |
node | contract (edge e, bool keepSelfLoops=false) |
Contracts edge e while preserving the order of adjacency entries. More... | |
void | move (edge e, adjEntry adjSrc, Direction dirSrc, adjEntry adjTgt, Direction dirTgt) |
Moves edge e to a different adjacency list. More... | |
void | moveTarget (edge e, node w) |
Moves the target node of edge e to node w . More... | |
void | moveTarget (edge e, adjEntry adjTgt, Direction dir) |
Moves the target node of edge e to a specific position in an adjacency list. More... | |
void | moveSource (edge e, node w) |
Moves the source node of edge e to node w . More... | |
void | moveSource (edge e, adjEntry adjSrc, Direction dir) |
Moves the source node of edge e to a specific position in an adjacency list. More... | |
edge | searchEdge (node v, node w, bool directed=false) const |
Searches and returns an edge connecting nodes v and w in time O( min(deg(v ), deg(w ))). More... | |
void | reverseEdge (edge e) |
Reverses the edge e , i.e., exchanges source and target node. More... | |
void | reverseAllEdges () |
Reverses all edges in the graph. More... | |
template<class NODELIST > | |
void | collapse (NODELIST &nodesToCollapse) |
Collapses all nodes in the list nodesToCollapse to the first node in the list. More... | |
template<class ADJ_ENTRY_LIST > | |
void | sort (node v, const ADJ_ENTRY_LIST &newOrder) |
Sorts the adjacency list of node v according to newOrder . More... | |
template<class IT > | |
void | sort (node v, IT begin, IT end) |
Sorts the adjacency list of node v according to the range denoted by two iterators. More... | |
void | reverseAdjEdges (node v) |
Reverses the adjacency list of v . More... | |
void | moveAdj (adjEntry adjMove, Direction dir, adjEntry adjPos) |
Moves adjacency entry adjMove before or after adjPos . More... | |
void | moveAdjAfter (adjEntry adjMove, adjEntry adjAfter) |
Moves adjacency entry adjMove after adjAfter . More... | |
void | moveAdjBefore (adjEntry adjMove, adjEntry adjBefore) |
Moves adjacency entry adjMove before adjBefore . More... | |
void | reverseAdjEdges () |
Reverses all adjacency lists. More... | |
void | swapAdjEdges (adjEntry adj1, adjEntry adj2) |
Exchanges two entries in an adjacency list. More... | |
int | genus () const |
Returns the genus of the graph's embedding. More... | |
bool | representsCombEmbedding () const |
Returns true iff the graph represents a combinatorial embedding. More... | |
void | consistencyCheck () const |
Asserts that this graph is consistent. More... | |
internal::GraphNodeRegistry & | nodeRegistry () |
Returns a reference to the registry of node arrays associated with this graph. More... | |
const internal::GraphNodeRegistry & | nodeRegistry () const |
Returns a const reference to the registry of node arrays associated with this graph. More... | |
operator const internal::GraphNodeRegistry & () const | |
internal::GraphEdgeRegistry & | edgeRegistry () |
Returns a reference to the registry of edge arrays associated with this graph. More... | |
const internal::GraphEdgeRegistry & | edgeRegistry () const |
Returns a const reference to the registry of edge arrays associated with this graph. More... | |
operator const internal::GraphEdgeRegistry & () const | |
internal::GraphAdjRegistry & | adjEntryRegistry () |
Returns a reference to the registry of adjEntry arrays associated with this graph. More... | |
const internal::GraphAdjRegistry & | adjEntryRegistry () const |
Returns a const reference to the registry of adjEntry arrays associated with this graph. More... | |
operator const internal::GraphAdjRegistry & () const | |
void | resetEdgeIdCount (int maxId) |
Resets the edge id count to maxId . More... | |
void | resetNodeIdCount (int maxId) |
template<OGDF_NODE_ITER NI, OGDF_EDGE_ITER EI, bool copyEmbedding = true, bool copyIDs = false, bool notifyObservers = true> | |
std::pair< int, int > | insert (const NI &nodesBegin, const NI &nodesEnd, const EI &edgesBegin, const EI &edgesEnd, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given subgraph into this graph. More... | |
template<OGDF_NODE_ITER NI, OGDF_EDGE_FILTER EF, bool copyIDs = false, bool notifyObservers = true> | |
std::pair< int, int > | insert (const NI &nodesBegin, const NI &nodesEnd, const EF &edgeFilter, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given subgraph into this graph. More... | |
template<OGDF_NODE_LIST NL> | |
std::pair< int, int > | insert (const NL &nodeList, const EdgeSet< true > &edgeSet, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given subgraph into this graph. More... | |
template<OGDF_NODE_LIST NL> | |
std::pair< int, int > | insert (const NL &nodeList, const EdgeSet< false > &edgeSet, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given subgraph into this graph. More... | |
template<OGDF_NODE_LIST NL, OGDF_EDGE_LIST EL> | |
std::pair< int, int > | insert (const NL &nodeList, const EL &edgeList, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given subgraph into this graph. More... | |
std::pair< int, int > | insert (const CCsInfo &info, int cc, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given connected component cc into this graph. More... | |
std::pair< int, int > | insert (const Graph &G, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap) |
Inserts a copy of a given Graph G into this graph. More... | |
std::pair< int, int > | insert (const Graph &G) |
Inserts a copy of a given Graph G into this graph. More... | |
Public Member Functions inherited from ogdf::Observable< GraphObserver, Graph > | |
Observable ()=default | |
Observable (const Observable ©)=delete | |
If you want to copy a subclass of Observable, call the default Observable() constructor. More... | |
Observable (Observable &&move)=delete | |
If you want to move a subclass of Observable, call the default Observable() constructor. More... | |
virtual | ~Observable () |
Observable & | operator= (const Observable ©)=delete |
Observable & | operator= (Observable &&move)=delete |
Protected Member Functions | |
void | nodeInserted (void *userData, node original, node copy) override |
Callback notifying subclasses that insert() copied a node. More... | |
void * | preInsert (bool copyEmbedding, bool copyIDs, bool notifyObservers, bool edgeFilter, NodeArray< node > &nodeMap, EdgeArray< edge > &edgeMap, int *newNodes, int *newEdges) override |
Callback notifying subclasses that some graph is about to be insert() -ed. More... | |
Protected Member Functions inherited from ogdf::Graph | |
virtual void | edgeInserted (void *userData, edge original, edge copy) |
Callback notifying subclasses that insert() copied an edge. More... | |
virtual void | postInsert (void *userData, int newNodes, int newEdges) |
Callback notifying subclasses that an insert() call has finished. More... | |
Protected Member Functions inherited from ogdf::Observable< GraphObserver, Graph > | |
void | clearObservers () |
const ListPure< GraphObserver * > & | getObservers () const |
Protected Attributes | |
EdgeArray< edge > | m_eOrig |
The corresponding edge in the original graph. More... | |
bool | m_linkCopiesOnInsert |
Whether insert(getOriginalGraph()) will set copy and original . More... | |
const Graph * | m_pGraph = nullptr |
The original graph. More... | |
NodeArray< node > | m_vCopy |
The corresponding node in the graph copy. More... | |
NodeArray< node > | m_vOrig |
The corresponding node in the original graph. More... | |
Additional Inherited Members | |
Public Types inherited from ogdf::Graph | |
enum | EdgeType { EdgeType::association = 0, EdgeType::generalization = 1, EdgeType::dependency = 2 } |
The type of edges (only used in derived classes). More... | |
enum | NodeType { NodeType::vertex = 0, NodeType::dummy = 1, NodeType::generalizationMerger = 2, NodeType::generalizationExpander = 3, NodeType::highDegreeExpander = 4, NodeType::lowDegreeExpander = 5, NodeType::associationClass = 6 } |
The type of nodes. More... | |
using | node_iterator = internal::GraphIterator< node > |
Provides a bidirectional iterator to a node in a graph. More... | |
using | edge_iterator = internal::GraphIterator< edge > |
Provides a bidirectional iterator to an edge in a graph. More... | |
using | adjEntry_iterator = internal::GraphIterator< adjEntry > |
Provides a bidirectional iterator to an entry in an adjacency list. More... | |
Public Attributes inherited from ogdf::Graph | |
internal::GraphObjectContainer< NodeElement > | nodes |
The container containing all node objects. More... | |
internal::GraphObjectContainer< EdgeElement > | edges |
The container containing all edge objects. More... | |
Definition at line 51 of file GraphCopy.h.
|
default |
Constructs a GraphCopyBase associated with no graph.
|
delete |
|
deletenoexcept |
|
overridepure virtual |
Removes all nodes and edges from this copy but does not break the link with the original graph.
Reimplemented from ogdf::Graph.
Implemented in ogdf::GraphCopy, and ogdf::GraphCopySimple.
Returns the adjacency entry in the graph copy corresponding to adj
.
Has to be defined by the implemented GraphCopyBase subclass.
adj | is an adjacency entry in the original graph. |
nullptr
if it doesn't exist. Implemented in ogdf::GraphCopy, and ogdf::GraphCopySimple.
Returns the edge in the graph copy corresponding to e
.
Has to be defined by the implemented GraphCopyBase subclass.
e | is an edge in the original graph. |
nullptr
if it doesn't exist. Implemented in ogdf::GraphCopy, and ogdf::GraphCopySimple.
Returns the node in the graph copy corresponding to v
.
v | is a node in the original graph. |
nullptr
if it doesn't exist. Definition at line 147 of file GraphCopy.h.
|
inline |
Re-initializes the copy using G
, but does not create any nodes or edges.
Definition at line 91 of file GraphCopy.h.
|
inlineoverridevirtual |
Removes node v
.
v | is a node in the graph copy. |
Reimplemented from ogdf::Graph.
Definition at line 207 of file GraphCopy.h.
|
inline |
Definition at line 222 of file GraphCopy.h.
|
inline |
Definition at line 99 of file GraphCopy.h.
|
inline |
Re-initializes the copy using G
, creating copies for all nodes and edges in G
.
Definition at line 73 of file GraphCopy.h.
|
inline |
Re-initializes the copy using G
(which might be null), creating copies for all nodes and edges in G
.
Definition at line 80 of file GraphCopy.h.
|
inline |
Returns true iff adj->theEdge()
has no corresponding edge in the original graph.
adj | is an adjEntry in the graph copy. |
Definition at line 185 of file GraphCopy.h.
|
inline |
Returns true iff e
has no corresponding edge in the original graph.
e | is an edge in the graph copy. |
Definition at line 179 of file GraphCopy.h.
|
inline |
Returns true iff v
has no corresponding node in the original graph.
v | is a node in the graph copy. |
Definition at line 173 of file GraphCopy.h.
|
inline |
Creates a new node and returns it.
index | is the index that will be assigned to the newly created node. If negative or not given will use the next free index maxNodeIndex() . Passing a node index that is already in use results in an inconsistent data structure. Only specify this parameter if you know what you're doing! |
Creates a new node in the graph copy with original node vOrig
.
vOrig
is not the original node of another node in the copy. Definition at line 192 of file GraphCopy.h.
|
overrideprotectedvirtual |
Callback notifying subclasses that insert() copied a node.
userData | value returned from the initial preInsert() call |
original | the original node |
copy | the created copy |
Reimplemented from ogdf::Graph.
|
delete |
|
deletenoexcept |
|
inline |
Returns a reference to the original graph.
Definition at line 105 of file GraphCopy.h.
Returns the adjacency entry in the original graph corresponding to adj
.
Note that this method does not pay attention to reversed edges. Given a source (target) adjacency entry, the source (target) adjacency entry of the original edge is returned.
adj | is an adjacency entry in the copy graph. |
Definition at line 136 of file GraphCopy.h.
Returns the edge in the original graph corresponding to e
.
e | is an edge in the graph copy. |
Definition at line 124 of file GraphCopy.h.
Returns the node in the original graph corresponding to v
.
v | is a node in the graph copy. |
Definition at line 116 of file GraphCopy.h.
|
overrideprotectedvirtual |
Callback notifying subclasses that some graph is about to be insert() -ed.
See its implementation in GraphCopy for an example.
copyEmbedding | value of the template parameter copyEmbedding of the insert() call |
copyIDs | value of the template parameter copyIDs of the insert() call |
notifyObservers | value of the template parameter notifyObservers of the insert() call |
edgeFilter | true if the insert variant with an edge filter instead of an iterator is used |
nodeMap | value of the template parameter nodeMap of the insert() call |
edgeMap | value of the template parameter edgeMap of the insert() call |
newNodes | pointer to the counter of inserted nodes, will be valid until after postInsert() |
newEdges | pointer to the counter of inserted edges, will be valid until after postInsert() |
Reimplemented from ogdf::Graph.
|
inline |
Whether insert(getOriginalGraph())
will automatically set copy
and original
.
Whether the inserted elements should automatically have assigned copy
and original
values when calling insert() with nodes and edges from getOriginalGraph(). Note that this also applies to elements inserted when calling init().
linkCopiesOnInsert | When true, copy and original will be automatically set for elements from the original graph. When false, all inserted elements (no matter from which Graph) will be dummies. |
Definition at line 234 of file GraphCopy.h.
|
pure virtual |
Sets the embedding of the graph copy to the embedding of the original graph.
Edges that have no copy in this graph will be left out, while dummy edges that are not present in the original graph will be moved to the end of their nodes' adjacency lists.
Implemented in ogdf::GraphCopy, and ogdf::GraphCopySimple.
|
inline |
Re-initializes the copy using G
, but does not create any nodes or edges.
Definition at line 97 of file GraphCopy.h.
|
pure virtual |
Re-initializes the copy using G
(which might be null), but does not create any nodes or edges.
Implemented in ogdf::EdgeWeightedGraphCopy< T >, ogdf::GraphCopy, and ogdf::GraphCopySimple.
The corresponding edge in the original graph.
Definition at line 55 of file GraphCopy.h.
|
protected |
Whether insert(getOriginalGraph())
will set copy
and original
.
Definition at line 57 of file GraphCopy.h.
|
protected |
The original graph.
Definition at line 53 of file GraphCopy.h.
The corresponding node in the graph copy.
Definition at line 56 of file GraphCopy.h.
The corresponding node in the original graph.
Definition at line 54 of file GraphCopy.h.