X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Faga%2Fdfs.c;fp=ccan%2Faga%2Fdfs.c;h=5f836ec3c1182ed8f755ed47532f04f2dfb68cae;hp=638481c539cb84448856982066d5dfd703be1d19;hb=e47d78e9ca621d7b5f70ef2638c177f20ea7d88e;hpb=0ddea4131eca28437638cdaf9394324fafab33da diff --git a/ccan/aga/dfs.c b/ccan/aga/dfs.c index 638481c5..5f836ec3 100644 --- a/ccan/aga/dfs.c +++ b/ccan/aga/dfs.c @@ -12,25 +12,27 @@ * Depth first search */ -static bool dfs_push(struct aga_graph *g, struct lstack *stack, +typedef LSTACK(struct aga_node, u.dfs.parent) dfs_stack; + +static bool dfs_push(struct aga_graph *g, dfs_stack *stack, struct aga_node *n) { if (!aga_update_node(g, n)) return false; - lstack_push(stack, n, u.dfs.parent); + lstack_push(stack, n); n->u.dfs.edge = aga_first_edge(g, n); return true; } -static void dfs_pop(struct lstack *stack) +static void dfs_pop(dfs_stack *stack) { - lstack_pop(stack, struct aga_node, u.dfs.parent); + lstack_pop(stack); } -static struct aga_node *dfs_top(struct lstack *stack) +static struct aga_node *dfs_top(dfs_stack *stack) { - return lstack_top(stack, struct aga_node, u.dfs.parent); + return lstack_top(stack); } int aga_dfs_start(struct aga_graph *g) @@ -46,7 +48,7 @@ int aga_dfs_start(struct aga_graph *g) struct aga_node *aga_dfs_explore(struct aga_graph *g, struct aga_node *n) { - LSTACK(stack); + dfs_stack stack = LSTACK_INIT; if (!aga_check_state(g)) return NULL; @@ -57,7 +59,7 @@ struct aga_node *aga_dfs_explore(struct aga_graph *g, struct aga_node *n) if (dfs_push(g, &stack, n)) return n; - lstack_init_from_top(&stack, n, u.dfs.parent); + lstack_init_from_top(&stack, n); while ((n = dfs_top(&stack))) { const void *e = n->u.dfs.edge;