27 # ifndef TPL_DYN_GRAPH_H 28 # define TPL_DYN_GRAPH_H 30 # include <tpl_agraph.H> 32 using namespace Aleph;
47 typedef typename GT::Node Node;
49 typedef typename GT::Arc Arc;
51 typedef typename Node::Node_Info Node_Info;
53 typedef typename Arc::Arc_Info Arc_Info;
57 static Node * info_to_node(Node_Info & info)
60 long off_set = (long) &node_zero->get_info();
61 long ptr_info = (long) &info;
62 return (Node *) (ptr_info - off_set);
65 static Arc * info_to_arc(Arc_Info & info)
68 long off_set = (long) &arc_zero->get_info();
69 long ptr_info = (long) &info;
70 return (Arc *) (ptr_info - off_set);
91 : graph(std::move(g.graph))
104 Node * node = graph.insert_node(
new Node(info));
105 return node->get_info();
115 Node * node = graph.insert_node(
new Node(std::move(info)));
116 return node->get_info();
129 Arc_Info &
insert_arc(Node_Info & src_info, Node_Info & tgt_info,
130 const Arc_Info & info)
132 Node * src = info_to_node(src_info);
133 Node * tgt = info_to_node(tgt_info);
134 Arc * arc = graph.insert_arc(src, tgt);
135 arc->get_info() = info;
136 return arc->get_info();
150 Arc_Info &
insert_arc(Node_Info & src_info, Node_Info & tgt_info,
151 Arc_Info && info = Arc_Info())
153 Node * src = info_to_node(src_info);
154 Node * tgt = info_to_node(tgt_info);
155 Arc * arc = graph.insert_arc(src, tgt);
156 arc->get_info() = std::move(info);
157 return arc->get_info();
167 Arc * arc = info_to_arc(info);
168 Node * src = graph.get_src_node(arc);
169 return src->get_info();
179 Arc * arc = info_to_arc(info);
180 Node * tgt = graph.get_tgt_node(arc);
181 return tgt->get_info();
184 Node_Info & get_connected_node(Node_Info & node_info, Arc_Info & arc_info)
186 Node * node = info_to_node(node_info);
187 Arc * arc = info_to_arc(arc_info);
188 Node * connected_node(node, arc);
189 return connected_node->get_info();
198 Arc * arc = info_to_arc(info);
199 graph.remove_arc(arc);
208 Node * node = info_to_node(info);
209 graph.remove_node(node);
218 return graph.get_num_nodes();
227 return graph.get_num_arcs();
237 Node * node = info_to_node(info);
238 return graph.get_num_arcs(node);
242 # define GRAPH_SPECIALIZATION(G, N, A) \ 243 template <typename Node_Info, typename Arc_Info> \ 244 class Dyn_##G : public Dyn_Graph<G<N<Node_Info>, A<Arc_Info>>> \ 246 typedef G<N<Node_Info>, A<Arc_Info>> Graph_Type; \ 250 : Dyn_Graph <Graph_Type>() { } \ 252 Dyn_##G(const Dyn_##G & g) \ 253 : Dyn_Graph <Graph_Type>(g) { } \ 255 Dyn_##G(Dyn_##G && g) \ 256 : Dyn_Graph <Graph_Type>(std::move(g)) { } \ 265 # endif // TPL_DYN_GRAPH_H Node_Info & insert_node(const Node_Info &info)
Definition: tpl_dyn_graph.H:102
Definition: tpl_graph.H:56
Dyn_Graph()
Constructor por omisión.
Definition: tpl_dyn_graph.H:78
Arc_Info & insert_arc(Node_Info &src_info, Node_Info &tgt_info, const Arc_Info &info)
Definition: tpl_dyn_graph.H:129
Node_Info & insert_node(Node_Info &&info=Node_Info())
Definition: tpl_dyn_graph.H:113
Node_Info & get_tgt_node(Arc_Info &info)
Definition: tpl_dyn_graph.H:177
const size_t & get_num_nodes() const
Definition: tpl_dyn_graph.H:216
Arc_Info & insert_arc(Node_Info &src_info, Node_Info &tgt_info, Arc_Info &&info=Arc_Info())
Definition: tpl_dyn_graph.H:150
void remove_arc(Arc_Info &info)
Definition: tpl_dyn_graph.H:196
const size_t & get_num_arcs() const
Definition: tpl_dyn_graph.H:225
Node_Info & get_src_node(Arc_Info &info)
Definition: tpl_dyn_graph.H:165
void remove_node(Node_Info &info)
Definition: tpl_dyn_graph.H:206
const size_t & get_num_arcs(Node_Info &info) const
Definition: tpl_dyn_graph.H:235
Definition: tpl_graph.H:59
Definition: tpl_graph.H:46
Definition: tpl_graph.H:48
Definition: tpl_dyn_graph.H:43