From f3e5582af0211eedbe0696e087c428fc1c281e60 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 2 May 2020 16:59:13 +0200 Subject: [PATCH] Implement (automatic) node IDs --- src/dijkstrasearch.c | 22 +++++++++++----------- src/main.c | 8 ++++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/dijkstrasearch.c b/src/dijkstrasearch.c index cf92984..62723ed 100644 --- a/src/dijkstrasearch.c +++ b/src/dijkstrasearch.c @@ -24,7 +24,8 @@ int dijkstra_node_same (struct dijkstra_node *node_a, * \return a new dijkstra node or NULL. Needs to be freed manually. */ struct dijkstra_node *dijkstra_node_new(float x, - float y) + float y, + int uid) { struct dijkstra_node *node; @@ -32,6 +33,7 @@ struct dijkstra_node *dijkstra_node_new(float x, if (node) { node->position.x = x; node->position.y = y; + node->uid = uid; node->paths = NULL; } @@ -64,25 +66,23 @@ struct dijkstra_node *dijkstra_node_exists(GList *list, */ struct dijkstra_node *dijkstra_node_new_to_list(GList **list, float x, - float y, - int *is_new) + float y) { struct dijkstra_node *node; struct dijkstra_node *found; + int uid; - node = dijkstra_node_new(x, y); + uid = g_list_length(*list); + + node = dijkstra_node_new(x, y, uid); if (!node) return NULL; if ((found = dijkstra_node_exists(*list, node))) { free(node); node = found; - if (is_new) - *is_new = 0; } else { *list = g_list_append(*list, node); - if (is_new) - *is_new = 1; } return node; @@ -234,7 +234,7 @@ int dijkstra_path_intersect(struct dijkstra_solver *solver, i_x = p0_x + (t * s1_x); i_y = p0_y + (t * s1_y); - node_new = dijkstra_node_new_to_list(&solver->nodes, i_x, i_y, &is_new); + node_new = dijkstra_node_new_to_list(&solver->nodes, i_x, i_y); if (node_new != path_a->source && node_new != path_a->destination) { path_new = dijkstra_path_dup_shallow(path_a); @@ -272,8 +272,8 @@ struct dijkstra_path *dijkstra_path_new_to_list(struct dijkstra_solver *solver, struct dijkstra_path *existing_path; GList *l, *l_last; - n1 = dijkstra_node_new_to_list(&solver->nodes, x1, y1, NULL); - n2 = dijkstra_node_new_to_list(&solver->nodes, x2, y2, NULL); + n1 = dijkstra_node_new_to_list(&solver->nodes, x1, y1); + n2 = dijkstra_node_new_to_list(&solver->nodes, x2, y2); path = dijkstra_path_new(name, n1, n2, weight); l_last = g_list_last(solver->paths); diff --git a/src/main.c b/src/main.c index 17ddfd0..ade6c03 100644 --- a/src/main.c +++ b/src/main.c @@ -86,15 +86,15 @@ int main(int argc, char *argv[]) if (should_report(LL_NOISY)) { for (l = solver->nodes; l != NULL; l = l->next) { node = (struct dijkstra_node*) l->data; - printf("Node %p: %f,\t%f [%d paths]\n", node, node->position.x, node->position.y, g_list_length(node->paths)); + printf("Node %5d @%p: %f,\t%f [%d paths]\n", node->uid, node, node->position.x, node->position.y, g_list_length(node->paths)); } printf("\n"); for (l = solver->paths; l != NULL; l = l->next) { path = (struct dijkstra_path*) l->data; - printf("Path %p: %p (%f,%f) -> %p (%f,%f) \t\"%s\"\n", path, - path->source, path->source->position.x, path->source->position.y, - path->destination, path->destination->position.x, path->destination->position.y, + printf("Path %p: %5d (%f,%f) -> %5d (%f,%f) \t\"%s\"\n", path, + path->source->uid, path->source->position.x, path->source->position.y, + path->destination->uid, path->destination->position.x, path->destination->position.y, path->name); } printf("\n");