lifo-dijkstraserv/src/dijkstragraph.h

85 lines
1.9 KiB
C
Raw Permalink Normal View History

2020-05-02 17:02:26 +02:00
#ifndef DIJKSTRAGRAPH_H
#define DIJKSTRAGRAPH_H
2020-05-01 20:48:36 +02:00
#include <glib.h>
#define DIJKSTRA_WEIGHT_AUTO (-1)
typedef int dijkstra_cost;
#define DIJKSTRA_COST_MAX INT_MAX
#define DIJKSTRA_COST_MIN 1.0
2020-05-01 20:48:36 +02:00
2020-05-02 16:51:12 +02:00
struct dijkstra_solver {
GList *nodes;
GList *paths;
2021-02-26 19:15:48 +01:00
GList *net_metas;
2020-05-02 16:51:12 +02:00
};
2020-05-01 20:48:36 +02:00
struct position {
float x;
float y;
int z;
2020-05-01 20:48:36 +02:00
};
2021-02-26 19:15:48 +01:00
enum dijkstra_net_type {STREET, TRAINLINE, ACCESS};
struct dijkstra_net_meta {
char *name;
enum dijkstra_net_type type;
char *access;
};
2020-05-01 20:48:36 +02:00
struct dijkstra_path {
struct dijkstra_node *source;
struct dijkstra_node *destination;
char *name;
dijkstra_cost weight;
2021-02-26 19:15:48 +01:00
struct dijkstra_net_meta *net_meta;
2020-05-01 20:48:36 +02:00
};
struct dijkstra_node {
struct position position;
struct dijkstra_net_meta *net_meta;
2020-05-01 20:48:36 +02:00
GList *paths;
2020-05-02 16:51:12 +02:00
int uid;
2020-05-01 20:48:36 +02:00
};
/* User Functions */
2020-05-02 16:51:12 +02:00
struct dijkstra_path *dijkstra_path_new_to_list(struct dijkstra_solver *solver,
2020-05-01 20:48:36 +02:00
float x1,
float y1,
float x2,
float y2,
int z1,
int z2,
2020-05-01 20:48:36 +02:00
char *name,
2021-02-26 19:15:48 +01:00
struct dijkstra_net_meta *net_meta,
2020-05-01 20:48:36 +02:00
dijkstra_cost weight);
2020-05-02 16:51:12 +02:00
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);
2020-05-03 19:59:05 +02:00
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);
2021-02-26 19:15:48 +01:00
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);
2020-05-02 17:02:26 +02:00
#endif // DIJKSTRAGRAPH_H