27 # ifndef GRAPH_TO_TREE_H 28 # define GRAPH_TO_TREE_H 30 # include <tpl_tree_node.H> 31 # include <tpl_graph.H> 32 # include <tpl_graph_utils.H> 36 template <
class GT,
typename Key,
class Convert>
static 38 template <
class GT,
typename Key,
class Convert>
static void 39 __graph_to_tree_node(GT & g,
typename GT::Node * groot,
42 template <
class GT,
typename Key,
typename Convert,
class SA>
static inline 43 void __graph_to_tree_node(GT & g,
typename GT::Node * groot,
115 template <
class GT,
typename Key,
119 if (not is_graph_acyclique<GT>(g))
120 throw std::domain_error(
"Graph is not a tree (not acyclique)");
124 Convert () (groot, troot);
126 __graph_to_tree_node <GT, Key, Convert, SA> (g, groot, troot);
193 template <
class GT,
typename Key,
199 Convert * convert =
nullptr;
201 void graph_to_tree(
typename GT::Node * groot,
Tree_Node<Key> * troot)
203 typedef typename GT::Node Node;
204 typedef typename GT::Arc Arc;
209 Arc * arc = it.get_current_arc_ne();
213 ARC_BITS(arc).set_bit(Convert_Tree,
true);
214 Node * gtgt = it.get_tgt_node();
217 (*convert) (gtgt, ttgt);
221 graph_to_tree(gtgt, ttgt);
226 typename GT::Node * groot,
229 if (not is_graph_acyclique<GT>(g))
230 throw std::domain_error(
"Graph is not a tree (not acyclique)");
236 (*convert) (groot, troot);
238 graph_to_tree(groot, troot);
259 operator () (GT & g,
typename GT::Node * groot, Convert && conv = Convert())
261 return graph_to_tree(g, groot, conv);
265 operator () (GT & g,
typename GT::Node * groot, Convert & conv)
267 return graph_to_tree(g, groot, conv);
272 template <
class GT,
typename Key,
typename Convert,
class SA>
static inline 273 void __graph_to_tree_node(GT & g,
typename GT::Node * groot,
276 typedef typename GT::Node Node;
277 typedef typename GT::Arc Arc;
282 Arc * arc = it.get_current_arc_ne();
286 ARC_BITS(arc).set_bit(Convert_Tree,
true);
287 Node * gtgt = it.get_tgt_node();
290 Convert () (gtgt, ttgt);
294 __graph_to_tree_node <GT, Key, Convert, SA> (g, gtgt, ttgt);
300 # endif // GRAPH_TO_TREE_H Tree_Node< Key > * graph_to_tree_node(GT &g, typename GT::Node *groot)
Definition: graph_to_tree.H:117
void insert_rightmost_child(Tree_Node *p) noexcept
Definition: tpl_tree_node.H:373
Tree_Node< Key > * operator()(GT &g, typename GT::Node *groot, Convert &&conv=Convert())
Definition: graph_to_tree.H:259
Definition: tpl_tree_node.H:67
Definition: graph_to_tree.H:196
#define IS_ARC_VISITED(p, bit)
Definition: aleph-graph.H:360
Definition: tpl_graph.H:1063
#define ARC_BITS(p)
Definition: aleph-graph.H:351
Definition: tpl_graph.H:1177