diff options
author | Simon Glass <sjg@chromium.org> | 2024-10-19 09:21:44 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2024-11-02 11:13:59 -0600 |
commit | 2ce146a3de7beeaa89ef4f8677fe71a38546156b (patch) | |
tree | 88ca8fa5cfeb5a4509fc7154526af3bc1e0ea93f /lib | |
parent | 6668d860f78035969db301f2c43266094d455191 (diff) |
alist: Add a way to get the next element
Add a new function which returns the next element after the one
provided, if it exists in the list.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/alist.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/alist.c b/lib/alist.c index b7928cad520..7730fe0d473 100644 --- a/lib/alist.c +++ b/lib/alist.c @@ -106,6 +106,27 @@ const void *alist_get_ptr(const struct alist *lst, uint index) return lst->data + index * lst->obj_size; } +int alist_calc_index(const struct alist *lst, const void *ptr) +{ + uint index; + + if (!lst->count || ptr < lst->data) + return -1; + + index = (ptr - lst->data) / lst->obj_size; + + return index; +} + +const void *alist_next_ptrd(const struct alist *lst, const void *ptr) +{ + int index = alist_calc_index(lst, ptr); + + assert(index != -1); + + return alist_get_ptr(lst, index + 1); +} + void *alist_ensure_ptr(struct alist *lst, uint index) { uint minsize = index + 1; |