4 * @author Sebastian Hack
6 * depth first search internal stuff.
8 * Copyright (C) 2007 Universitaet Karlsruhe
9 * Released under the GPL
15 #include "firm_config.h"
38 const absgraph_t *graph_impl;
43 dfs_node_t **pre_order;
44 dfs_node_t **post_order;
49 unsigned edges_classified : 1;
52 static struct _dfs_node_t *_dfs_get_node(const struct _dfs_t *self, void *node)
54 struct _dfs_node_t templ;
55 memset(&templ, 0, sizeof(templ));
57 return set_insert(self->nodes, &templ, sizeof(templ), HASH_PTR(node));
60 #define _dfs_int_is_ancestor(n, m) ((m)->pre_num >= (n)->pre_num && (m)->pre_num <= (n)->max_pre_num)
62 static INLINE int _dfs_is_ancestor(const struct _dfs_t *dfs, void *a, void *b)
64 struct _dfs_node_t *n = _dfs_get_node(dfs, a);
65 struct _dfs_node_t *m = _dfs_get_node(dfs, b);
66 return _dfs_int_is_ancestor(n, m);
69 #define dfs_get_n_nodes(dfs) ((dfs)->pre_num)
70 #define dfs_get_pre_num(dfs, node) (_dfs_get_node((dfs), (node))->pre_num)
71 #define dfs_get_post_num(dfs, node) (_dfs_get_node((dfs), (node))->post_num)
72 #define dfs_get_pre_num_node(dfs, num) ((dfs)->pre_order[num]->node)
73 #define dfs_get_post_num_node(dfs, num) ((dfs)->post_order[num]->node)
74 #define dfs_is_ancestor(dfs, n, m) _dfs_is_ancestor((n), (m))