27 # ifndef TPL_GRAPH_INDEXES_H 28 # define TPL_GRAPH_INDEXES_H 30 # include <tpl_dynSetTree.H> 31 # include <tpl_graph.H> 33 using namespace Aleph;
41 bool operator () (
typename GT::Node * p1,
typename GT::Node * p2)
const 43 return p1->get_info() < p2->get_info();
50 bool operator () (
typename GT::Arc * a1,
typename GT::Arc * a2)
const 52 if (a1->src_node < a2->src_node)
55 return not (a2->src_node < a1->src_node) and a1->tgt_node < a2->tgt_node;
94 class Compare = Dft_Node_Cmp<GT>,
95 template <typename , class > class Tree =
Treap,
100 typedef typename GT::Node GT_Node;
101 typedef typename GT::Node_Type GT_Node_Info;
110 this->insert(it.get_curr_ne());
116 : Tree_Type(cmp), g(_g), sn(_sn)
121 Nodes_Index(GT & _g, Compare && cmp = Compare(), SN && _sn = SN())
122 : Tree_Type(cmp), g(_g), sn(_sn)
137 if (insert(p) ==
nullptr)
155 GT_Node ** ptr_node = search_or_insert(p);
156 GT_Node * q = *ptr_node;
173 GT_Node * p = g.insert_node(info);
175 if (this->insert(p) ==
nullptr)
194 GT_Node * p = g.insert_node(info);
195 GT_Node ** ptr_node = search_or_insert(p);
196 GT_Node * q = *ptr_node;
207 return insert_in_graph(info);
221 GT_Node ** ret_val = Tree_Type::search(p);
223 if (ret_val ==
nullptr)
229 GT_Node * search(
const GT_Node_Info & info)
231 GT_Node dummy_node(info);
232 GT_Node * dummy_node_ptr = &dummy_node;
234 return search(dummy_node_ptr);
246 Tree_Type::remove(p);
277 class Compare = Dft_Arc_Cmp<GT>,
278 template <
typename ,
class >
class Tree = Treap,
283 typedef typename GT::Node GT_Node;
284 typedef typename GT::Node_Type GT_Node_Info;
285 typedef typename GT::Arc GT_Arc;
286 typedef typename GT::Arc_Type GT_Arc_Info;
295 this->insert(it.get_curr_ne());
300 : Tree_Type(cmp), g(_g), sa(_sa)
305 Arcs_Index(GT & _g, Compare && cmp = Compare(), SA && _sa = SA())
306 : Tree_Type(cmp), g(_g), sa(_sa)
323 const GT_Arc_Info & info)
325 GT_Arc * a = g.insert_arc(src, tgt, info);
327 if (this->insert(a) ==
nullptr)
338 const GT_Arc_Info && info = GT_Arc_Info())
340 return insert_in_graph(src, tgt, info);
350 GT_Arc *
search(GT_Node * src, GT_Node * tgt,
const GT_Arc_Info & info)
353 arc.src_node = src; arc.tgt_node = tgt;
354 GT_Arc * ptr_arc = &arc;
356 GT_Arc ** ret_val = Tree_Type::search(ptr_arc);
358 if (ret_val !=
nullptr)
364 std::swap(arc.src_node, arc.tgt_node);
365 ret_val = Tree_Type::search(ptr_arc);
366 if (ret_val ==
nullptr)
369 assert(((src == (*ret_val)->src_node) and (tgt == (*ret_val)->tgt_node)) or
370 ((tgt == (*ret_val)->src_node) and (src == (*ret_val)->tgt_node)));
376 GT_Arc *
search(GT_Node * src, GT_Node * tgt,
377 const GT_Arc_Info && info = GT_Arc_Info())
379 return search(src, tgt, info);
391 Tree_Type::remove(a);
399 # endif // GRAPH_INDEXES_H GT_Arc * insert_in_graph(GT_Node *src, GT_Node *tgt, const GT_Arc_Info &info)
Definition: tpl_graph_indexes.H:322
Definition: tpl_graph_indexes.H:281
Definition: tpl_graph.H:1225
typename Tree< GT::Node *, Compare >::Node Node
Definition: tpl_dynSetTree.H:72
GT_Node * insert_in_graph(const GT_Node_Info &info)
Definition: tpl_graph_indexes.H:171
GT_Node * search_or_insert_in_graph(const GT_Node_Info &info)
Definition: tpl_graph_indexes.H:192
Definition: tpl_graph_indexes.H:98
Definition: tpl_graph.H:1257
GT_Node * insert_in_graph(const GT_Node_Info &&info=GT_Node_Info())
Definition: tpl_graph_indexes.H:205
GT_Node * search(GT_Node *p)
Definition: tpl_graph_indexes.H:219
GT_Node * insert_in_graph(GT_Node *p)
Definition: tpl_graph_indexes.H:133
void remove_from_graph(GT_Node *p)
Definition: tpl_graph_indexes.H:243
Definition: tpl_graph.H:1063
Definition: tpl_treap.H:535
Definition: tpl_dynSetTree.H:61
GT_Arc * search(GT_Node *src, GT_Node *tgt, const GT_Arc_Info &&info=GT_Arc_Info())
Definition: tpl_graph_indexes.H:376
GT_Arc * search(GT_Node *src, GT_Node *tgt, const GT_Arc_Info &info)
Definition: tpl_graph_indexes.H:350
void remove_from_graph(GT_Arc *a)
Definition: tpl_graph_indexes.H:388
Definition: tpl_graph.H:1270
GT_Node * search_or_insert_in_graph(GT_Node *p)
Definition: tpl_graph_indexes.H:152
GT_Arc * insert_in_graph(GT_Node *src, GT_Node *tgt, const GT_Arc_Info &&info=GT_Arc_Info())
Definition: tpl_graph_indexes.H:337