#ifndef LIGHTNING_COMMON_DIJKSTRA_H #define LIGHTNING_COMMON_DIJKSTRA_H #include "config.h" #include struct gossmap; struct gossmap_chan; struct gossmap_node; /* Do Dijkstra: start in this case is the dst node. */ const struct dijkstra * dijkstra_(const tal_t *ctx, const struct gossmap *gossmap, const struct gossmap_node *start, struct amount_msat amount, double riskfactor, bool (*channel_ok)(const struct gossmap *map, const struct gossmap_chan *c, int dir, struct amount_msat amount, void *arg), u64 (*channel_score)(struct amount_msat fee, struct amount_msat risk, /* We want to know this to compare with channel capacity */ struct amount_msat total, int dir, const struct gossmap_chan *c), void *arg); #define dijkstra(ctx, map, start, amount, riskfactor, channel_ok, \ channel_score, arg) \ dijkstra_((ctx), (map), (start), (amount), (riskfactor), \ typesafe_cb_preargs(bool, void *, (channel_ok), (arg), \ const struct gossmap *, \ const struct gossmap_chan *, \ int, struct amount_msat), \ (channel_score), \ (arg)) /* Returns UINT_MAX if unreachable. */ u32 dijkstra_distance(const struct dijkstra *dij, u32 node_idx); /* Best path we found to here */ struct gossmap_chan *dijkstra_best_chan(const struct dijkstra *dij, u32 node_idx); #endif /* LIGHTNING_COMMON_DIJKSTRA_H */