21 #ifndef DOXYGEN_NOTFOR_DEVEL
23 #ifndef Tulip_GraphDecorator_H
24 #define Tulip_GraphDecorator_H
26 #include <tulip/Graph.h>
30 class TLP_SCOPE GraphDecorator :
public Graph {
32 GraphDecorator(Graph *s);
33 ~GraphDecorator()
override;
35 void clear()
override;
36 Graph *addSubGraph(BooleanProperty *selection =
nullptr,
37 const std::string &name =
"unnamed")
override;
38 void delSubGraph(Graph *s)
override;
39 void delAllSubGraphs(Graph *s)
override;
40 Graph *getSuperGraph()
const override;
41 void setSuperGraph(Graph *s)
override;
42 Graph *getRoot()
const override;
43 Iterator<Graph *> *getSubGraphs()
const override;
44 const std::vector<Graph *> &subGraphs()
const override;
45 bool isSubGraph(
const Graph *sg)
const override;
46 bool isDescendantGraph(
const Graph *sg)
const override;
47 Graph *getSubGraph(
unsigned int id)
const override;
48 Graph *getSubGraph(
const std::string &name)
const override;
49 Graph *getDescendantGraph(
unsigned int id)
const override;
50 Graph *getDescendantGraph(
const std::string &name)
const override;
51 unsigned int numberOfSubGraphs()
const override;
52 unsigned int numberOfDescendantGraphs()
const override;
55 node source(
const edge e)
const override;
56 void setSource(
const edge,
const node)
override;
57 node target(
const edge e)
const override;
58 void setTarget(
const edge,
const node)
override;
59 node opposite(
const edge e,
const node n)
const override;
60 edge existEdge(
const node n,
const node m,
bool directed =
true)
const override;
61 bool hasEdge(
const node source,
const node target,
bool directed =
true)
const override;
62 std::vector<edge> getEdges(
const node source,
const node target,
63 bool directed =
true)
const override;
64 const std::pair<node, node> &ends(
const edge e)
const override;
65 void setEnds(
const edge,
const node,
const node)
override;
66 void reverse(
const edge e)
override;
67 unsigned int deg(
const node n)
const override;
68 unsigned int indeg(
const node n)
const override;
69 unsigned int outdeg(
const node n)
const override;
70 Graph *getNodeMetaInfo(
const node n)
const override;
73 node createMetaNode(
const std::vector<node> &nodes,
bool multiEdges =
true,
74 bool delAllEdge =
true,
bool allGrouped =
true)
override;
75 void createMetaNodes(Iterator<Graph *> *itS, Graph *quotientGraph, std::vector<node> &metaNodes,
76 bool inoutGrouped)
override;
77 node createMetaNode(Graph *subGraph,
bool multiEdges =
true,
bool delAllEdge =
true,
78 bool allGrouped =
true)
override;
81 node getOneNode()
const override;
82 node getRandomNode()
const override;
83 node getInNode(
const node n,
unsigned int i)
const override;
84 node getOutNode(
const node n,
unsigned int i)
const override;
85 edge getOneEdge()
const override;
86 edge getRandomEdge()
const override;
88 unsigned int numberOfNodes()
const override;
89 unsigned int numberOfEdges()
const override;
90 bool isEmpty()
const override;
94 void reserveNodes(
unsigned int nbNodes)
override;
95 void reserveEdges(
unsigned int nbEdges)
override;
98 bool isElement(
const node n)
const override;
99 bool isMetaNode(
const node n)
const override;
100 bool isElement(
const edge e)
const override;
101 bool isMetaEdge(
const edge e)
const override;
102 node addNode()
override;
103 void addNodes(
unsigned int nb)
override;
104 void addNodes(
unsigned int nb, std::vector<node> &addedNodes)
override;
105 void addNode(
const node)
override;
106 void addNodes(Iterator<node> *nodes)
override;
107 edge addEdge(
const node n1,
const node n2)
override;
108 void addEdges(
const std::vector<std::pair<node, node>> &edges)
override;
109 void addEdges(
const std::vector<std::pair<node, node>> &edges,
110 std::vector<edge> &addedEdges)
override;
111 void addEdge(
const edge)
override;
112 void addEdges(Iterator<edge> *edges)
override;
113 void delNode(
const tlp::node n,
bool deleteInAllGraphs =
false)
override;
114 void delNodes(Iterator<node> *itN,
bool deleteInAllGraphs)
override;
115 void delEdge(
const tlp::edge e,
bool deleteInAllGraphs =
false)
override;
116 void delEdges(Iterator<edge> *itE,
bool deleteInAllGraphs =
false)
override;
117 void setEdgeOrder(
const node n,
const std::vector<edge> &s)
override;
118 void swapEdgeOrder(
const node n,
const edge e1,
const edge e2)
override;
120 const std::vector<node> &nodes()
const override;
121 unsigned int nodePos(
const node)
const override;
122 Iterator<node> *getNodes()
const override;
123 Iterator<node> *getInNodes(
const node n)
const override;
124 Iterator<node> *getOutNodes(
const node n)
const override;
125 Iterator<node> *getInOutNodes(
const node n)
const override;
126 Iterator<node> *bfs(
const node root = node())
const override;
127 Iterator<node> *dfs(
const node root = node())
const override;
128 const std::vector<edge> &edges()
const override;
129 unsigned int edgePos(
const edge)
const override;
130 Iterator<edge> *getEdges()
const override;
131 Iterator<edge> *getOutEdges(
const node n)
const override;
132 Iterator<edge> *getInOutEdges(
const node n)
const override;
133 Iterator<edge> *getInEdges(
const node n)
const override;
134 const std::vector<edge> &allEdges(
const node n)
const override;
135 Iterator<edge> *getEdgeMetaInfo(
const edge)
const override;
136 void sortElts()
override;
138 template <
typename PropertyType>
139 PropertyType *getProperty(
const std::string &name);
140 PropertyInterface *getProperty(
const std::string &name)
const override;
141 bool existProperty(
const std::string &name)
const override;
142 bool existLocalProperty(
const std::string &name)
const override;
143 void delLocalProperty(
const std::string &name)
override;
144 void addLocalProperty(
const std::string &name, PropertyInterface *prop)
override;
145 Iterator<std::string> *getLocalProperties()
const override;
146 Iterator<std::string> *getInheritedProperties()
const override;
147 Iterator<std::string> *getProperties()
const override;
148 Iterator<PropertyInterface *> *getLocalObjectProperties()
const override;
149 Iterator<PropertyInterface *> *getInheritedObjectProperties()
const override;
150 Iterator<PropertyInterface *> *getObjectProperties()
const override;
152 void push(
bool unpopAllowed =
true,
153 std::vector<PropertyInterface *> *propertiesToPreserveOnPop =
nullptr)
override;
154 void pop(
bool unpopAllowed =
true)
override;
155 void popIfNoUpdates()
override;
156 void unpop()
override;
157 bool canPop()
override;
158 bool canUnpop()
override;
159 bool canPopThenUnpop()
override;
162 void setName(
const std::string &name)
override;
163 std::string getName()
const override;
166 DataSet &getNonConstAttributes()
override;
167 Graph *graph_component;
170 void restoreNode(node)
override;
171 void restoreEdge(edge, node source, node target)
override;
174 void removeNode(
const node)
override;
175 void removeEdge(
const edge)
override;
177 void removeSubGraph(Graph *)
override;
178 void clearSubGraphs()
override;
179 void restoreSubGraph(Graph *)
override;
180 void setSubGraphToKeep(Graph *)
override;
182 bool renameLocalProperty(PropertyInterface *prop,
const std::string &newName)
override;
186 template <
typename PropertyType>
187 PropertyType *GraphDecorator::getProperty(
const std::string &name) {
188 if (graph_component->existProperty(name)) {
190 assert(
dynamic_cast<PropertyType *
>(prop) !=
nullptr);
191 return dynamic_cast<PropertyType *
>(prop);
193 return graph_component->getLocalProperty<PropertyType>(name);
PropertyInterface describes the interface of a graph property.
The edge struct represents an edge in a Graph object.
The node struct represents a node in a Graph object.