diff --git a/common/gossmap.c b/common/gossmap.c index 7262f2259..027fcbe21 100644 --- a/common/gossmap.c +++ b/common/gossmap.c @@ -176,6 +176,23 @@ u32 gossmap_chan_idx(const struct gossmap *map, const struct gossmap_chan *chan) return chan - map->chan_arr; } +struct gossmap_node *gossmap_node_byidx(const struct gossmap *map, u32 idx) +{ + assert(idx < gossmap_max_node_idx(map)); + if (map->node_arr[idx].chan_idxs == NULL) + return NULL; + return &map->node_arr[idx]; +} + +struct gossmap_chan *gossmap_chan_byidx(const struct gossmap *map, u32 idx) +{ + assert(idx < gossmap_max_chan_idx(map)); + + if (map->chan_arr[idx].plus_scid_off == 0) + return NULL; + return &map->chan_arr[idx]; +} + /* htable can't handle NULL or 1 values, so we add 2 */ static struct gossmap_chan *ptrint2chan(const ptrint_t *pidx) { diff --git a/common/gossmap.h b/common/gossmap.h index 1f06dcb51..38cee0425 100644 --- a/common/gossmap.h +++ b/common/gossmap.h @@ -90,6 +90,9 @@ void gossmap_remove_localmods(struct gossmap *map, u32 gossmap_node_idx(const struct gossmap *map, const struct gossmap_node *node); u32 gossmap_chan_idx(const struct gossmap *map, const struct gossmap_chan *chan); +struct gossmap_node *gossmap_node_byidx(const struct gossmap *map, u32 idx); +struct gossmap_chan *gossmap_chan_byidx(const struct gossmap *map, u32 idx); + /* Every node_idx/chan_idx will be < these. * These values can change across calls to gossmap_check. */ u32 gossmap_max_node_idx(const struct gossmap *map);