#ifndef DIJKSTRAGRAPH_H #define DIJKSTRAGRAPH_H #include #define DIJKSTRA_WEIGHT_AUTO (-1) typedef int dijkstra_cost; #define DIJKSTRA_COST_MAX INT_MAX #define DIJKSTRA_COST_MIN 1.0 struct dijkstra_solver { GList *nodes; GList *paths; GList *net_metas; }; struct position { float x; float y; int z; }; enum dijkstra_net_type {STREET, TRAINLINE, ACCESS}; struct dijkstra_net_meta { char *name; enum dijkstra_net_type type; char *access; }; struct dijkstra_path { struct dijkstra_node *source; struct dijkstra_node *destination; char *name; dijkstra_cost weight; struct dijkstra_net_meta *net_meta; }; struct dijkstra_node { struct position position; struct dijkstra_net_meta *net_meta; GList *paths; int uid; }; /* User Functions */ struct dijkstra_path *dijkstra_path_new_to_list(struct dijkstra_solver *solver, float x1, float y1, float x2, float y2, int z1, int z2, char *name, struct dijkstra_net_meta *net_meta, dijkstra_cost weight); struct dijkstra_solver *dijkstra_solver_new(); void dijkstra_solver_free(struct dijkstra_solver *solver); /* Library functions */ struct dijkstra_node *dijkstra_node_get_connection(struct dijkstra_node *node, struct dijkstra_path *path); struct dijkstra_node *dijkstra_node_find_closest_node(struct dijkstra_solver *solver, struct position *position); void dijkstra_path_intersect_all(struct dijkstra_solver *solver, struct dijkstra_path *path, struct dijkstra_path *path_last); struct dijkstra_net_meta *dijkstra_net_meta_new_to_list(struct dijkstra_solver *solver, enum dijkstra_net_type net_type, char *name, char *access); /* For debugging only */ struct dijkstra_node *dijkstra_node_new_to_list(GList **list, float x, float y, int z, struct dijkstra_net_meta *net_meta); #endif // DIJKSTRAGRAPH_H