2 * This file is part of libFirm.
3 * Copyright (C) 2012 University of Karlsruhe.
8 * @author Sebastian Hack
12 * depth first search internal stuff.
14 #ifndef FIRM_ANA_DFS_T_H
15 #define FIRM_ANA_DFS_T_H
33 const void *src, *tgt;
40 const absgraph_t *graph_impl;
45 dfs_node_t **pre_order;
46 dfs_node_t **post_order;
51 unsigned edges_classified : 1;
54 static dfs_node_t *_dfs_get_node(const dfs_t *self, const void *node)
57 memset(&templ, 0, sizeof(templ));
59 return set_insert(dfs_node_t, self->nodes, &templ, sizeof(templ), hash_ptr(node));
62 #define _dfs_int_is_ancestor(n, m) ((m)->pre_num >= (n)->pre_num && (m)->pre_num <= (n)->max_pre_num)
64 static inline int _dfs_is_ancestor(const dfs_t *dfs, const void *a, const void *b)
66 dfs_node_t *n = _dfs_get_node(dfs, a);
67 dfs_node_t *m = _dfs_get_node(dfs, b);
68 return _dfs_int_is_ancestor(n, m);
71 #define dfs_get_n_nodes(dfs) ((dfs)->pre_num)
72 #define dfs_get_pre_num(dfs, node) (_dfs_get_node((dfs), (node))->pre_num)
73 #define dfs_get_post_num(dfs, node) (_dfs_get_node((dfs), (node))->post_num)
74 #define dfs_get_pre_num_node(dfs, num) ((dfs)->pre_order[num]->node)
75 #define dfs_get_post_num_node(dfs, num) ((dfs)->post_order[num]->node)
76 #define dfs_is_ancestor(dfs, n, m) _dfs_is_ancestor((n), (m))
78 #endif /* FIRM_ANA_DFS_T_H */